2、BGP安全威胁分析:路由劫持、路由泄露、BGP会话攻击、前缀劫持案例

BGP 这玩意儿,说白了就是互联网的「交通指挥员」。它告诉数据包:「去百度走左边,去谷歌走右边」。但问题来了——这个指挥员天生就不设防。我入行那会儿,带我的老工程师就说:「BGP 协议设计于 1989 年,那时候互联网上全是互相认识的好朋友,谁也没想到后来会有人使坏。」

嗯,现在不一样了。BGP 的安全威胁,几乎每天都在真实上演。我挑几个最要命的,跟你好好聊聊。

2.1 路由劫持:你的流量被我「截胡」了

路由劫持,是 BGP 世界里最臭名昭著的攻击。攻击者伪造一个路由通告,告诉邻居:「我是某个 IP 段的主人,流量发给我!」

为什么会这样?因为 BGP 默认信任所有邻居发来的路由信息。它不验证你是否有权宣告这个前缀。

典型案例:YouTube 被劫持事件(2008年)

巴基斯坦电信本想屏蔽国内对 YouTube 的访问,结果错误地将 YouTube 的 /22 前缀通告给了上游。这个路由一路传播到了全球,导致大量用户无法访问 YouTube 长达两小时。我当年正好在维护一个跨国 CDN 节点,眼睁睁看着监控面板上 YouTube 的流量曲线断崖式下跌——那叫一个刺激。

路由劫持的后果很直接:

  • 流量被窃听:攻击者可以截获你的数据包,提取敏感信息
  • 服务不可用:合法路径被污染,用户无法访问目标服务
  • 中间人攻击:攻击者可以篡改流量内容,植入恶意代码

避坑指南:我曾经帮一家金融客户排查过类似问题。他们的 BGP 会话没有配置前缀列表过滤,结果上游误通告了一个更具体的 /24 路由,导致他们自己的 /20 被「黑洞」了。排查了整整一个通宵,最后发现是上游的配置失误。从那以后,我要求所有项目必须做 前缀过滤AS_PATH 验证

2.2 路由泄露:不该说的秘密,你说出去了

路由泄露和劫持不太一样。泄露者通常没有恶意,但后果同样严重。说白了,就是你的路由器把不该通告的路由,通告给了不该通告的人。

我见过最典型的场景:一个多宿主的企业,同时连接了 ISP-A 和 ISP-B。正常情况下,它只应该把 ISP-A 的路由通告给 ISP-B 的客户。但配置失误后,它把 ISP-A 的完整路由表泄露给了 ISP-B。结果 ISP-B 的流量全部绕道这个企业——带宽瞬间被打满,整个网络瘫痪。

泄露类型 典型场景 影响范围
Type 0 客户将 ISP 的完整路由表泄露给另一个 ISP 局部
Type 1 ISP 将客户的路由泄露给其他不相关客户 中等
Type 2 ISP 将其他 ISP 的路由泄露给错误的邻居 全局

注意:路由泄露的根源往往是 缺少 RPKI 验证BGP 社区属性控制。我建议你在所有 EBGP 会话上启用 maximum-prefix 限制,并配合 prefix-list 做双向过滤。别嫌麻烦,真出了事你连哭都来不及。

2.3 BGP 会话攻击:直接干掉你的邻居关系

路由劫持和泄露是「骗」,BGP 会话攻击则是「打」。攻击者直接针对 BGP 会话本身下手,让邻居关系断开。

常见的攻击手段包括:

  • TCP RST 攻击:伪造 TCP 重置包,中断 BGP 会话
  • BGP 消息洪泛:发送大量无效的 UPDATE 或 KEEPALIVE 消息,耗尽路由器 CPU
  • MD5 认证破解:如果使用了弱密码,攻击者可以伪造合法的 BGP 消息

我记得有一次,一个客户的 BGP 会话每隔 15 分钟就断一次。排查了三天,最后发现是中间链路上的一台老旧交换机在丢包。TCP 的 Keepalive 超时后,BGP 会话就自动重置了。嗯,这里要注意:BGP 依赖 TCP,TCP 的稳定性直接决定了 BGP 的稳定性。

我的建议

  • 启用 BGP TTL Security(GTSM),只接受来自特定跳数的 BGP 报文
  • 使用 TCP MD5 签名TCP-AO 保护会话
  • 配置 BGP 会话的 Hold Timer 不要过短(我一般设 90 秒)

2.4 前缀劫持案例:从理论到实战

光说不练假把式。我拿一个真实案例给你拆解一下。

场景:某云服务商(AS 65001)拥有前缀 203.0.113.0/24。攻击者(AS 65002)伪造路由,宣告了更具体的 203.0.113.0/25。

攻击流程如下:

  1. 攻击者向自己的上游 ISP 发送 BGP UPDATE,声称 203.0.113.0/25 是自己的
  2. 上游 ISP 没有做前缀过滤,直接接受了这条路由
  3. 这条路由通过 IBGP 和 EBGP 传播到整个互联网
  4. 由于 /25 比 /24 更具体,所有发往 203.0.113.0/25 的流量都被吸引到了攻击者那里

你想想看,如果这个 /25 里跑的是你的支付接口或者数据库,后果会怎样?

防御方案

  • RPKI(资源公钥基础设施):让前缀所有者对路由进行数字签名,路由器可以验证签名的合法性
  • BGP Flowspec:在检测到异常路由时,动态下发过滤规则
  • BGP 社区属性:用社区标签标记路由的「可信度」,配合策略做精细化控制

下面这张图,是我自己画的一个 BGP 安全威胁分类图。你可以把它当成一个「威胁地图」,每次排查问题时对照着看,思路会清晰很多。

BGP 安全威胁分类图 BGP 安全威胁 路由劫持 路由泄露 BGP 会话攻击 前缀劫持 伪造 AS_PATH 伪造前缀 Type 0/1/2 社区属性错误 TCP RST 消息洪泛 更具体前缀 AS 路径欺骗

这张图把 BGP 的四大威胁分成了四个象限。你仔细看,路由劫持和前缀劫持其实是一对「孪生兄弟」——前者是伪造整个前缀,后者是伪造更具体的子前缀。而路由泄露和会话攻击,则更多是配置失误或协议层面的漏洞。

我个人习惯在排查 BGP 安全问题时,先对照这张图确定「威胁类型」,然后再针对性地看路由表、检查会话状态、分析 AS_PATH。这样效率高很多,不会像无头苍蝇一样乱撞。

最后提醒一句:BGP 安全没有银弹。RPKI 能解决前缀验证问题,但防不了路由泄露;MD5 能保护会话,但防不了配置失误。你需要的是一个 分层防御体系——过滤、验证、监控、响应,缺一不可。


公众号:蓝海资料掘金营,微信deep3321