ASN 劫持:为何 IP 地理定位数据会滞后
ASN 劫持,更准确地说是 BGP 路由劫持,是指某个网络宣告了自己无权发起的 IP 前缀,或者以某种方式宣告前缀,使其他网络把流量发往它。由于 IP 地理定位和 ASN 数据集基于定期快照构建,它们通常不会在劫持发生期间反映出来。
BGP 劫持的原理
互联网上的每个网络都由自治系统编号(ASN)标识,并使用边界网关协议(BGP)向邻居通告自己可达的前缀。BGP 的设计建立在信任之上:默认情况下,收到通告的邻居没有内置手段来核实宣告方是否真正拥有该前缀。路由器随后依据最短 AS 路径等规则选择最佳路径,而其中最重要的是最长前缀匹配。
攻击者和错误配置所利用的正是最后这条规则。如果合法网络宣告了一个 /22,而别人宣告了其内部更具体的 /24,接受该 /24 的路由器会优先选择它,因为更具体的路由胜出。这 256 个地址的流量就会流向错误的网络。变种包括直接以他人的前缀作为起源、伪造部分 AS 路径,以及泄露本应留在内部的路由。许多真实事件其实是意外,例如客户把完整路由表泄露给上游,但对流量的影响是一样的。
流量会发生什么
吸引到流量的攻击者可以丢弃它(黑洞)、检查它,或者将其转发到真正的目的地,使用户除了轻微延迟外毫无察觉。加密可以限制受 TLS 保护内容的损失,不过劫持也曾被用来通过拦截域名验证流量来获取证书,以及拦截 DNS。持续时间从几分钟到几小时不等,这正是检测速度如此重要的原因。
为什么地理定位和 ASN 数据集会滞后
地理定位和 ASN 到前缀的数据集由注册机构数据、路由快照及其他来源汇编而成,然后以版本形式发布。它们回答的是"谁通常持有这个网段",而不是"此刻谁在宣告它"。在 ipto 上,IP 和 ASN 数据集每天刷新,威胁情报源每 6 小时刷新一次,因此持续一小时的劫持通常会在两次刷新之间开始并结束。事件期间,对受影响地址的查询很可能仍然显示合法的所有者,而这正是该数据集所要回答的问题的正确答案。
还有两个因素加剧了滞后。注册记录变化缓慢,地址块不会因为一次路由事件而更换所属组织。而且,地理定位数据库根据前缀推断城市,并不会在每次路由变化时重新推断。如果说有什么价值,那就是这些稳定的数据可以作为基线:它告诉你谁本应发起某个前缀,而这正是你与实时路由数据进行比较的对象。
如何检查可疑路由
- 了解预期的起源。ASN 查询会显示某个 AS 编号的注册所有者、组织、国家和网段数量,而 IP 网段目录则可以浏览某个 /8 或 /16 地址块由哪些网络持有。
- 检查注册信息。IP whois 查询通过 RDAP 返回注册记录,其中包括你需要通知的滥用联系人。
- 验证路由起源。RPKI 查询通过 RIPEstat 实时检查某个 IP 当前所宣告的路由是否被有效的路由起源授权(ROA)覆盖,并报告 valid、invalid 或 not covered 的结果。
解读 RPKI 结果时要谨慎。"invalid"(无效)结果意味着起源 AS 或前缀长度与所有者的授权不符,值得调查。"Not covered"(未覆盖)仅表示不存在 ROA,这种情况很常见,并不能证明发生了劫持。RPKI 也不能防范所有攻击,例如保持正确起源的伪造 AS 路径。发布 ROA 并据此过滤的运营者可以降低风险,而针对你的前缀出现意外起源时发出告警的监控服务,能比任何数据集刷新更快地通知你。
这对应用意味着什么
如果你的应用使用 ASN 或地理定位数据来做出欺诈评分或区域规则等决策,请将其视为变化缓慢的上下文,而不是连接在物理上终结于何处的证据。ipto 的 IP 查询会返回 asn 和 org 字段,响应格式可在 API 文档中查阅。已知客户所连接的网络突然发生变化是一个有用的信号,但劫持只是众多可能的解释之一,大多数此类变化都很平常:换了新的 ISP、移动网络切换或使用了 VPN。