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-in或prefix-list - 策略过于宽松:允许了不该允许的邻居
- 人为失误:手抖敲错了route-map
我记得有一次,一个客户把从上游ISP学到的全量路由,泄露给了他的另一个上游。结果那个上游的流量瞬间暴涨,把链路撑爆了。排查了3个小时才发现,是route-map里少写了一个 deny 语句。
2.3 BGP中间人攻击
这个就有点黑客的味道了。
攻击者通过劫持或泄露,把自己插入到两个合法AS之间的路径中。然后,他可以对流量进行监听、篡改,甚至重放。
你想想看:如果攻击者成功插入了你的BGP路径,他就能看到所有发往你服务器的流量。HTTPS能保护内容,但元数据(谁在访问、访问频率、流量模式)是暴露的。
我曾经在渗透测试中模拟过这种攻击。方法很简单:
- 找一个目标AS的邻居
- 宣告一个更具体的子网(比如
/25代替/24) - 等流量过来
嗯,成功率比你想象的高得多。很多运营商根本不检查更具体的子网宣告。
- 使用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连接没有加密,也没有完整性校验。
password 命令)。虽然MD5本身有弱点,但总比裸奔强。更推荐使用TCP-AO(TCP Authentication Option),这是目前最安全的方案。
知识体系总览
下面这张图,是我自己画的。它把四种威胁的关系和防御思路串起来了。
小结
这四种威胁,说白了就是BGP信任模型的漏洞。劫持是「冒充你」,泄露是「出卖你」,中间人是「监视你」,会话攻击是「搞垮你」。
防御没有银弹。你得一层一层地加防护:
- RPKI解决起源验证
- 前缀过滤解决意外泄露
- MD5/TCP-AO解决会话安全
- 策略审计解决人为失误
我个人的习惯是:每半年做一次BGP策略审计。把所有的prefix-list、route-map、as-path access-list全部过一遍。别嫌麻烦——你省下的那点时间,可能换来一次全网事故。