2. BGP安全威胁深度分析:前缀劫持、路由泄漏、路径篡改、会话攻击、反射攻击

聊BGP安全,咱们得先认清一个现实——BGP这协议,打从娘胎里就没考虑过安全。它基于信任模型,说白了就是“你说你拥有这个前缀,我就信你”。这在互联网早期没问题,大家都是学术机构,谁没事骗人?但现在?嗯,情况完全不一样了。

我这些年做网络架构,见过太多因为BGP安全出的大事故。有些是恶意攻击,有些是配置失误。但不管哪种,后果都极其严重。今天我就把这五种核心威胁掰开揉碎了讲清楚。

核心观点:BGP的五种安全威胁,本质上都是对“信任模型”的滥用。攻击者利用协议本身缺乏验证机制的特点,实施各种欺骗行为。

2.1 前缀劫持(Prefix Hijacking)

前缀劫持,这是BGP安全里最臭名昭著的威胁。攻击者伪造一个路由通告,声称自己拥有某个IP前缀,然后流量就全跑他那儿去了。

我2018年处理过一个案例,某云厂商的/22前缀被劫持了将近4小时。攻击者从一个小型ISP发起了更具体的/24前缀通告,结果全球一半的流量都绕道去了攻击者的网络。那场面,真是惨不忍睹。

前缀劫持的常见手法:

  • 更具体前缀劫持:攻击者通告一个比真实前缀更具体的子网。BGP选路规则里,最长前缀匹配优先,所以流量自然就过去了。
  • 相同前缀劫持:攻击者通告完全一样的前缀,但通过路径属性(如AS_PATH)让路由看起来更优。
  • 类型0劫持:攻击者通告一个从未被分配过的前缀,用于钓鱼或恶意软件分发。

避坑指南:我曾经见过一个团队,以为部署了RPKI就能100%防劫持。结果呢?攻击者用了一个未签名的ROA,而他们的路由器配置了“松动”的RPKI策略(即“允许-未知”模式),劫持照样成功。记住,RPKI需要配合严格的策略才能生效。

2.2 路由泄漏(Route Leak)

路由泄漏,说白了就是不该说的路由被说出去了。这通常不是恶意攻击,而是配置失误。但后果?跟恶意攻击一样严重。

典型的场景是这样的:一个多宿主的网络,本应只向一个上游通告自己的前缀,结果不小心把从另一个上游学到的全表路由也泄漏出去了。这下好了,它变成了“中间人”,所有流量都从它这儿过境。

我印象最深的是2019年那次大规模路由泄漏。某大型ISP的一个客户,错误地将从上游收到的约3万条路由通告给了另一个上游。结果导致全球大量网络出现延迟飙升和丢包,持续了将近2小时。

路由泄漏的三种类型:

类型 描述 典型场景
类型1 将学习到的路由泄漏给错误的邻居 多宿主的客户将上游A的路由通告给上游B
类型2 将私有路由泄漏到公共互联网 内部使用的RFC1918地址被通告到公网
类型3 将默认路由泄漏给对等体 本应只接收默认路由的客户,收到了全表

我的建议:部署BGP社区属性来标记路由来源。比如,从客户学到的路由打上特定社区,从上游学到的打上另一个。然后在出口策略中严格过滤。这招我在多个项目中用过,效果很好。

2.3 路径篡改(Path Manipulation)

路径篡改,攻击者通过修改AS_PATH属性来影响路由选择。你想想看,BGP选路时,AS_PATH长度是个重要指标。攻击者可以故意缩短自己的AS_PATH,让路由看起来更“近”。

还有一种更隐蔽的手法——AS_PATH prepending。正常网络会用这个来让路由变“远”,从而控制入站流量。但攻击者可以反其道而行之,移除prepending,让路由变“近”。

我遇到过最离谱的一次,攻击者伪造了一个AS_PATH,声称自己与目标网络只有一跳之隔。实际上,中间隔了5个AS。结果呢?大量流量被吸引过去,然后被丢弃或篡改。

路径篡改的检测难点在于:

  • AS_PATH本身没有加密或签名机制
  • 攻击者可以随意伪造AS_PATH中的任何AS号
  • 即使部署了AS_PATH验证,也只能验证相邻AS,无法验证整条路径

2.4 会话攻击(Session Attack)

会话攻击,目标是BGP的传输层——TCP连接。BGP使用TCP 179端口建立会话,如果TCP连接被破坏,BGP会话就会中断。

常见的会话攻击手法:

  1. TCP RST攻击:攻击者伪造TCP RST包,强制关闭BGP会话
  2. TCP SYN洪泛:消耗BGP会话的资源,导致会话超时
  3. BGP NOTIFICATION攻击:发送伪造的NOTIFICATION消息,导致会话重置

我记得有一次,某运营商的BGP会话在30分钟内被重置了12次。每次重置后,路由收敛需要几十秒,这期间流量要么黑洞,要么绕远路。后来排查发现,是攻击者利用了TCP序列号预测的漏洞。

重要提醒:BGP会话攻击的可怕之处在于,它不需要攻击者拥有合法的AS号或IP地址。只要攻击者能发送伪造的TCP包到BGP会话的源目IP和端口,就能造成破坏。所以,MD5认证(RFC 2385)或TCP-AO(RFC 5925)是必须的。

2.5 反射攻击(Reflection Attack)

反射攻击,这个比较有意思。攻击者利用BGP的开放特性,将大量路由信息反射到目标网络,造成路由表爆炸或CPU过载。

具体怎么做?攻击者伪造源IP,向多个BGP路由器发送OPEN消息。这些路由器会回复OPEN消息,但回复的目标是伪造的源IP——也就是受害者。如果攻击者同时向成百上千个路由器发送请求,受害者就会收到海量的BGP OPEN消息。

更狠的一种是路由反射放大攻击。攻击者发送一个精心构造的UPDATE消息,包含大量前缀。BGP路由器在处理后会反射给所有邻居。如果攻击者控制了多个路由器,就能形成放大效应。

我见过一个案例,攻击者利用500多个开放的BGP路由器,对目标网络发起了反射攻击。目标网络的路由器CPU瞬间飙到100%,BGP会话全部超时,整个网络瘫痪了将近1小时。

防御反射攻击的关键点:

  • 不要在公网上开放BGP会话,只与已知的对等体建立连接
  • 部署BGP TTL安全检查(TTL Security Check,RFC 5082)
  • 限制BGP UPDATE消息中的前缀数量
  • 使用ACL限制BGP TCP 179端口的访问

个人经验:我习惯在所有BGP路由器上启用“neighbor ttl-security hops 1”。这玩意儿虽然简单,但能有效防止远程攻击者伪造BGP包。因为攻击者无法控制TTL值经过多跳后还能保持255。

2.6 五种威胁的关系与对比

这五种威胁不是孤立的。它们经常组合使用。比如,攻击者先通过会话攻击断开BGP连接,然后在前缀收敛期间发起前缀劫持。或者,先通过反射攻击消耗路由器资源,再实施路径篡改。

下面这张图展示了五种威胁的核心关系:

BGP五种安全威胁关系图 BGP协议 前缀劫持 Prefix Hijacking 路由泄漏 Route Leak 路径篡改 Path Manipulation 会话攻击 Session Attack 反射攻击 Reflection Attack 伪造前缀 配置失误 修改路径 TCP攻击 流量放大 影响范围:前缀劫持 > 路由泄漏 > 路径篡改 > 反射攻击 > 会话攻击

从这张图可以看出,所有威胁都围绕BGP协议本身展开。前缀劫持和路由泄漏直接影响路由数据的正确性,路径篡改影响路由选择的公平性,而会话攻击和反射攻击则针对BGP协议的可用性。

在实际防御中,我们需要分层应对:

  • 数据层面:部署RPKI、BGPsec来验证路由通告的合法性
  • 控制层面:使用BGP社区属性、前缀列表、AS_PATH过滤来控制路由传播
  • 传输层面:启用MD5/TCP-AO认证、TTL安全检查来保护BGP会话
  • 管理层面:建立BGP安全策略、定期审计、部署路由监控系统

总结一下:BGP的五种安全威胁,说白了就是“信任被滥用”的五个不同角度。前缀劫持是“冒名顶替”,路由泄漏是“大嘴巴”,路径篡改是“撒谎”,会话攻击是“断桥”,反射攻击是“借刀杀人”。理解了这些本质,防御思路就清晰了。

好了,这一章的内容就到这里。下一章我们会深入探讨RPKI的部署实践,包括ROA的创建、验证器的配置,以及如何与现有网络集成。到时候我会分享一些具体的配置案例和踩坑经验。