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。
攻击流程如下:
- 攻击者向自己的上游 ISP 发送 BGP UPDATE,声称 203.0.113.0/25 是自己的
- 上游 ISP 没有做前缀过滤,直接接受了这条路由
- 这条路由通过 IBGP 和 EBGP 传播到整个互联网
- 由于 /25 比 /24 更具体,所有发往 203.0.113.0/25 的流量都被吸引到了攻击者那里
你想想看,如果这个 /25 里跑的是你的支付接口或者数据库,后果会怎样?
防御方案:
- RPKI(资源公钥基础设施):让前缀所有者对路由进行数字签名,路由器可以验证签名的合法性
- BGP Flowspec:在检测到异常路由时,动态下发过滤规则
- BGP 社区属性:用社区标签标记路由的「可信度」,配合策略做精细化控制
下面这张图,是我自己画的一个 BGP 安全威胁分类图。你可以把它当成一个「威胁地图」,每次排查问题时对照着看,思路会清晰很多。
这张图把 BGP 的四大威胁分成了四个象限。你仔细看,路由劫持和前缀劫持其实是一对「孪生兄弟」——前者是伪造整个前缀,后者是伪造更具体的子前缀。而路由泄露和会话攻击,则更多是配置失误或协议层面的漏洞。
我个人习惯在排查 BGP 安全问题时,先对照这张图确定「威胁类型」,然后再针对性地看路由表、检查会话状态、分析 AS_PATH。这样效率高很多,不会像无头苍蝇一样乱撞。
最后提醒一句:BGP 安全没有银弹。RPKI 能解决前缀验证问题,但防不了路由泄露;MD5 能保护会话,但防不了配置失误。你需要的是一个 分层防御体系——过滤、验证、监控、响应,缺一不可。
公众号:蓝海资料掘金营,微信deep3321