2. BGP安全威胁分析

聊BGP安全,咱们得先搞清楚——这玩意儿到底能出什么事?

我做了十几年网络,见过太多人把BGP当成「配好就不管」的协议。其实不然。BGP的设计初衷是信任,不是安全。说白了,它假设所有邻居都是好人。这在今天的网络环境下,简直太天真了。

下面我把最常见的四类威胁掰开揉碎了讲。每个我都踩过坑,希望你别重蹈覆辙。

2.1 BGP劫持

什么是BGP劫持?

攻击者故意宣告一个不属于自己的IP前缀。路由器信了,流量就拐到攻击者那里去了。

举个例子:

假设你的公司拥有前缀 203.0.113.0/24。攻击者在他的AS里宣告了同样的前缀。如果他的路径更短,或者他的AS_PATH更优,全球的路由器就会把发往你公司的流量,送到攻击者手里。

我在2018年遇到过一起真实事件。某云服务商的一个客户,前缀被印尼的一个小ISP劫持了整整4个小时。原因?那个ISP的BGP配置里漏了前缀过滤。就这么简单。

劫持的后果:
  • 流量被截获,数据泄露
  • 服务不可用(DDoS的一种变体)
  • 品牌声誉受损
⚠️ 注意: 劫持不一定是恶意的。有时候是配置错误导致的「善意劫持」。但结果一样糟糕。

2.2 BGP路由泄露

这个比劫持更隐蔽。泄露的意思是:一个AS把从邻居A学到的路由,又传给了邻居B。但按照策略,它不应该这么做。

为什么会发生?

  • 配置错误:忘了设置 allowas-inprefix-list
  • 策略过于宽松:允许了不该允许的邻居
  • 人为失误:手抖敲错了route-map

我记得有一次,一个客户把从上游ISP学到的全量路由,泄露给了他的另一个上游。结果那个上游的流量瞬间暴涨,把链路撑爆了。排查了3个小时才发现,是route-map里少写了一个 deny 语句。

💡 我的建议: 所有BGP邻居,都必须明确指定允许接收的前缀列表。不要相信「默认拒绝」——默认拒绝的前提是你记得配置。

2.3 BGP中间人攻击

这个就有点黑客的味道了。

攻击者通过劫持或泄露,把自己插入到两个合法AS之间的路径中。然后,他可以对流量进行监听、篡改,甚至重放。

你想想看:如果攻击者成功插入了你的BGP路径,他就能看到所有发往你服务器的流量。HTTPS能保护内容,但元数据(谁在访问、访问频率、流量模式)是暴露的。

我曾经在渗透测试中模拟过这种攻击。方法很简单:

  1. 找一个目标AS的邻居
  2. 宣告一个更具体的子网(比如 /25 代替 /24
  3. 等流量过来

嗯,成功率比你想象的高得多。很多运营商根本不检查更具体的子网宣告。

防御要点:
  • 使用RPKI验证路由起源
  • 部署BGP Flowspec限制异常流量
  • 对等体之间使用MD5认证

2.4 BGP会话攻击

这类攻击的目标不是路由数据,而是BGP会话本身。

常见手法:

  • TCP RST攻击: 伪造TCP重置包,断开BGP会话
  • BGP UPDATE洪泛: 发送大量虚假UPDATE,耗尽路由器CPU
  • 会话重置: 反复建立和拆除会话,导致路由震荡

我记得有一次,一个客户的BGP会话每隔15分钟就断一次。查了三天,最后发现是运营商侧的一个老旧路由器,在处理BGP OPEN消息时有个bug。升级固件后就好了。

但更常见的是人为攻击。攻击者只要知道你的BGP对等体IP和端口(默认179),就能发起TCP RST攻击。为什么?因为BGP的TCP连接没有加密,也没有完整性校验。

⚠️ 重要: 一定要启用BGP的MD5认证(password 命令)。虽然MD5本身有弱点,但总比裸奔强。更推荐使用TCP-AO(TCP Authentication Option),这是目前最安全的方案。

知识体系总览

下面这张图,是我自己画的。它把四种威胁的关系和防御思路串起来了。

BGP安全威胁与防御体系 BGP劫持 路由泄露 中间人攻击 会话攻击 防御措施:RPKI + 前缀过滤 + MD5/TCP-AO + 策略审计 RPKI起源验证 前缀列表过滤 BGP Flowspec 会话认证 四种威胁并非孤立存在,劫持和泄露往往是中间人攻击的前置步骤

小结

这四种威胁,说白了就是BGP信任模型的漏洞。劫持是「冒充你」,泄露是「出卖你」,中间人是「监视你」,会话攻击是「搞垮你」。

防御没有银弹。你得一层一层地加防护:

  • RPKI解决起源验证
  • 前缀过滤解决意外泄露
  • MD5/TCP-AO解决会话安全
  • 策略审计解决人为失误

我个人的习惯是:每半年做一次BGP策略审计。把所有的prefix-list、route-map、as-path access-list全部过一遍。别嫌麻烦——你省下的那点时间,可能换来一次全网事故。

专注资料整理