2、BGP安全威胁分析:路由劫持、路由泄露、BGP会话攻击、前缀劫持案例
聊BGP安全,咱们得先认清一个现实:BGP这玩意儿,从设计之初就没怎么考虑安全。它基于信任模型——邻居说啥,我就信啥。这在早期互联网那种小圈子、互相信任的环境下没问题。但现在?说白了,互联网就是个丛林,BGP这种“天真”的协议,到处都是漏洞。
我个人习惯把BGP的安全威胁分成四大类。你把这四类搞明白了,后面做防护方案才有方向。咱们一个一个来看。
2.1 路由劫持
路由劫持,这是最臭名昭著的一类攻击。攻击者通过伪造BGP更新消息,声称自己拥有某个IP前缀的所有权。然后,整个互联网的流量就被“拐”到攻击者那里去了。
核心原理是什么? 就是BGP的路径属性(AS_PATH)和前缀可达性完全基于邻居的“自觉”。攻击者只要发一个前缀长度更精确、或者AS_PATH更短的路由,其他路由器就会优先选择它。
典型案例:YouTube被劫持事件(2008年)
我记得很清楚,巴基斯坦电信(AS17557)本来是想屏蔽国内对YouTube的访问。他们内部把YouTube的/22前缀宣告到了自己的网络里。结果呢?这个路由通过他们的上游运营商(PCCW)泄露到了全球互联网。因为巴基斯坦电信宣告的前缀更精确(/22 vs /24),全球大部分流量都涌向了巴基斯坦。YouTube宕机了将近两小时。
这就是典型的“前缀劫持”——用更精确的前缀“抢走”流量。
避坑指南: 我曾经在排查一个客户流量异常时,发现他们的/24前缀被一个远在非洲的AS宣告了。查了半天,是他们的一个下游客户配置了“network”命令,把不该宣告的前缀发出去了。所以,一定要在边界路由器上做前缀列表过滤,只允许宣告你自己拥有的前缀。
2.2 路由泄露
路由泄露和劫持有点像,但性质不同。泄露通常不是恶意的,而是配置错误导致的。但后果同样严重——轻则流量绕路,重则全网瘫痪。
路由泄露的典型场景: 一个多宿主的企业,同时连接了ISP-A和ISP-B。正常情况下,它只应该把ISP-A的路由发给ISP-B,反之亦然。但如果配置失误,它把从ISP-A学到的全量路由,一股脑儿全发给了ISP-B。ISP-B一看,哎?去往某处的路径更短了(因为经过了这个企业),于是把流量都转给了这个企业。这个企业的链路瞬间被打满,然后崩溃。
| 泄露类型 | 典型原因 | 影响范围 |
|---|---|---|
| Type 1:误将上游路由泄露给另一个上游 | 多宿主场景下,BGP策略配置错误 | 两个上游ISP之间的流量被“短路” |
| Type 2:误将客户路由泄露给其他客户 | IXP(互联网交换中心)场景下,未做过滤 | 客户之间的流量被错误转发 |
| Type 3:误将内部路由泄露到互联网 | 内部IGP路由被重分发到BGP | 内部网络暴露,可能被攻击 |
注意: 路由泄露的杀伤力往往比劫持更大。因为它是“合法”的路由——AS_PATH是真实的,只是不该出现在这里。你想想看,传统的RPKI(资源公钥基础设施)只能验证前缀的归属,但验证不了路由的“合理性”。所以,防泄露比防劫持更难。
2.3 BGP会话攻击
这类攻击针对的是BGP会话本身,而不是路由数据。攻击者通过破坏TCP连接,或者伪造BGP消息,来中断或操纵BGP会话。
常见的攻击手法:
- TCP RST攻击: 攻击者伪造TCP重置包,中断BGP会话。BGP会话一断,路由器会撤销所有通过该会话学到的路由,导致网络黑洞。
- BGP消息伪造: 攻击者伪造BGP OPEN、UPDATE或NOTIFICATION消息。比如,伪造一个携带错误AS号的OPEN消息,导致会话建立失败。
- BGP会话重置: 通过发送大量的BGP路由更新,耗尽路由器的CPU或内存资源,导致BGP进程崩溃或会话重置。
嗯,这里要注意。BGP会话攻击虽然听起来很“底层”,但实际中并不少见。我记得有一次,一个客户的BGP会话每隔15分钟就断一次。查了半天,发现是他们的上游运营商在做维护时,误触发了BGP的“软重置”机制。所以,BGP的TTL安全机制(GTSM)一定要开启,它能过滤掉非直连的BGP报文。
个人经验: 我建议在所有EBGP会话上启用MD5认证。虽然MD5本身不算强加密,但至少能挡住90%的“脚本小子”攻击。另外,BGP的Hold Time不要设得太短(默认90秒),太短了容易因为网络抖动而频繁断连。
2.4 前缀劫持案例深度分析
咱们来看一个更近的案例,加深理解。
案例:MyEtherWallet DNS劫持事件(2018年)
攻击者没有直接劫持BGP路由,而是通过BGP劫持来“接管”DNS服务器。他们劫持了AWS的DNS服务器前缀(/24),然后伪造了MyEtherWallet的DNS记录。用户访问MyEtherWallet时,被引导到了攻击者的钓鱼网站。最终,攻击者盗走了价值约17万美元的以太坊。
这个案例告诉我们什么?BGP劫持的“下游”影响,远不止流量绕路那么简单。它可以被用来做DNS劫持、证书透明性绕过、甚至中间人攻击。
攻击链分析:
- 攻击者选择一个目标前缀(比如DNS服务器的IP段)。
- 攻击者通过自己的AS,宣告一个更精确的前缀(比如/24 vs /23)。
- 全球互联网的路由器,因为最长前缀匹配原则,将流量导向攻击者。
- 攻击者收到流量后,可以转发到真实服务器(实现“中间人”),也可以直接丢弃(实现“黑洞”)。
- 攻击者利用劫持的流量,进行DNS响应伪造、SSL证书劫持等操作。
为什么会这样?因为BGP本身没有“你是谁”的验证机制。攻击者只要有一个AS号,一个IP地址,就能参与全球路由。你想想看,这多可怕。
如何防御? 目前最有效的手段是RPKI(资源公钥基础设施)。它通过密码学方式,验证一个AS是否有权宣告某个前缀。但RPKI也有局限性——它只能验证“谁拥有这个前缀”,但验证不了“这个路由是否合理”。所以,RPKI + BGP Flowspec + 运维策略,三者缺一不可。
最后提醒一句: 别以为你的网络小,就不会被劫持。攻击者往往选择“软柿子”捏——那些没有做任何防护的小型AS,最容易成为跳板。我曾经见过一个只有/24前缀的小公司,被攻击者利用来劫持一个/16的大段。所以,无论网络大小,BGP安全都是必修课。