3、BGP路径篡改原理:AS_PATH属性篡改、PREPEND攻击、中间人攻击
聊到BGP安全,我第一个想跟你说的就是路径篡改。这玩意儿,说白了就是攻击者在BGP的路由信息里动手脚,让流量走一条「不该走的路」。我在运营商干过几年,亲眼见过一次因为路径篡改导致整个省的网络瘫痪了半小时——嗯,那场面,真叫一个惨烈。
今天咱们就把三种最常见的路径篡改手法掰开揉碎讲清楚:AS_PATH属性篡改、PREPEND攻击、中间人攻击。这三种手法,你搞懂了,BGP安全就算入门了。
3.1 AS_PATH属性篡改:最直接的欺骗
AS_PATH是BGP路由更新里最核心的属性之一。它记录了这条路由经过的所有AS号,就像快递包裹上的转运记录。路由器收到路由后,会检查AS_PATH,确保没有环路,同时根据路径长度选路。
攻击者会怎么做?很简单——伪造AS_PATH。
举个例子。假设AS 100想宣告一条路由给AS 200,正常流程是:
AS 100 → AS 200
AS_PATH: [100]
但如果AS 100是个恶意节点,它可以在AS_PATH里插入一个不存在的AS号,或者直接删除某些AS号。比如:
AS 100 → AS 200
AS_PATH: [100, 99999] // 99999是个不存在的AS号
这样做有什么后果?
- 路径变长:路由器看到AS_PATH里有99999,以为这条路径更长,但实际上攻击者可能通过其他方式让这条路径被选中。
- 环路检测失效:如果攻击者删除了某些AS号,路由器可能误以为没有环路,从而接受一条本不该接受的路由。
- 流量劫持:最坏的情况,攻击者让所有流量都经过自己的网络,然后偷看、篡改数据。
重点提醒:AS_PATH篡改的核心在于「信任缺失」。BGP协议本身不验证AS_PATH的真实性,路由器默认相信邻居发来的信息。这就是为什么BGP被称为「基于信任的协议」——说白了,它太天真了。
我在项目中遇到过一件事。有一次,一个客户说他们的国际出口流量突然暴涨,查了半天发现是上游运营商发来了一条AS_PATH里包含重复AS号的路由。嗯,那家运营商后来承认是配置失误,但你能保证每次都是「失误」吗?
3.2 PREPEND攻击:用「长路径」骗过选路
PREPEND攻击,名字听着挺唬人,其实原理很简单——在AS_PATH里重复添加自己的AS号,让路径看起来更长。
你可能会问:「路径变长了,路由器不是应该更不选它吗?」
对,正常情况下是这样。但攻击者玩的是「反向操作」。
想象一下这个场景:
- 正常路径:AS 100 → AS 200 → AS 300,AS_PATH = [100, 200, 300]
- 攻击者路径:AS 100 → AS 200(攻击者),AS_PATH = [100, 200, 200, 200, 200]
攻击者把自己的AS号重复了4次,路径长度变成了5。按理说路由器应该选更短的路径,对吧?
但问题在于,攻击者可能同时做了其他手脚——比如通过更优的MED属性、更低的Local Preference,或者直接跟邻居建立多条BGP会话。这样一来,虽然AS_PATH变长了,但其他属性让这条路径反而被优先选中。
我的经验:PREPEND攻击最常出现在多宿主场景。攻击者同时连接多个上游运营商,然后通过PREPEND让其中一条路径看起来「更差」,但实际上通过其他手段让流量走这条路径。我曾经见过一个案例,攻击者用PREPEND配合AS_PATH篡改,成功让一个数据中心的出站流量全部经过他的网络——持续了整整两周才被发现。
PREPEND攻击的典型特征:
- AS_PATH里出现连续重复的AS号
- 路径长度异常长,但路由仍然被广泛接受
- 流量路径与预期严重不符
嗯,这里要注意一点:PREPEND本身是合法的BGP操作,很多运营商用它来做流量工程。但攻击者把它用在了恶意场景里。所以,判断是不是攻击,不能只看有没有PREPEND,还要结合其他行为。
3.3 中间人攻击:最隐蔽的劫持
中间人攻击,英文叫Man-in-the-Middle,简称MITM。在BGP场景下,攻击者把自己伪装成两个AS之间的「合法中转站」,让所有经过的流量都落入自己手中。
具体怎么操作?
- 劫持BGP会话:攻击者先跟目标AS建立BGP邻居关系,然后发送伪造的路由更新。
- 伪造AS_PATH:攻击者在AS_PATH里插入自己的AS号,同时保留原始路径信息,让路由器以为这是一条「正常」的路径。
- 转发流量:流量到达攻击者后,攻击者可以查看、修改、甚至丢弃数据包,然后再转发给真正的目的地。
举个例子:
正常路径:AS 100 → AS 200 → AS 300
攻击路径:AS 100 → AS 200(攻击者)→ AS 200(真实)→ AS 300
攻击者把自己伪装成AS 200的一部分,但实际上它是一个独立的恶意节点。AS 100以为自己在跟AS 200通信,实际上数据先经过了攻击者。
警告:中间人攻击最难防范,因为它不改变路由的最终目的地,只改变中间路径。受害者很难察觉流量被劫持了。我见过一个案例,攻击者通过MITM劫持了某家银行的跨境交易流量,持续了三个月才被发现——因为银行的监控系统只看「数据有没有到达目的地」,不看「数据经过了哪些中间节点」。
中间人攻击的常见手法:
- TCP会话劫持:攻击者伪造BGP OPEN消息,建立虚假的BGP会话。
- 路由反射器攻击:攻击者伪装成路由反射器,向多个AS发送伪造的路由。
- AS号盗用:攻击者使用合法的AS号,但实际控制的是不同的网络。
3.4 三种攻击的对比
我把这三种攻击放在一起对比一下,方便你理解它们的区别:
| 攻击类型 | 核心手法 | 攻击目标 | 检测难度 | 典型后果 |
|---|---|---|---|---|
| AS_PATH篡改 | 伪造、删除、插入AS号 | 路由选择、环路检测 | 中等 | 流量劫持、路由黑洞 |
| PREPEND攻击 | 重复添加AS号 | 路径长度计算 | 较低 | 流量路径异常 |
| 中间人攻击 | 伪装成合法中转节点 | 数据机密性、完整性 | 高 | 数据窃取、篡改 |
你想想看,这三种攻击其实有一个共同点——它们都利用了BGP协议对AS_PATH的「无条件信任」。BGP不会去验证邻居发来的AS_PATH是不是真的,也不会检查路径上的AS号是不是合法。这就是问题的根源。
3.5 知识体系总览
下面这张图帮你梳理本章的核心逻辑:
这张图把三种攻击的核心手法、攻击目标和共同根源都串起来了。你仔细看看,会发现一个规律——所有攻击都绕不开AS_PATH这个核心属性。所以,保护AS_PATH就是保护BGP安全的第一步。
核心总结:AS_PATH篡改、PREPEND攻击、中间人攻击,本质上都是利用了BGP协议的信任模型缺陷。攻击者不需要破解密码,不需要入侵设备,只需要发送几个伪造的BGP报文,就能让整个互联网的流量走错路。这就是为什么BGP安全被称为「互联网的阿喀琉斯之踵」。
我曾经跟一个刚入行的朋友说:「BGP安全,说白了就是跟人性作斗争。协议本身没问题,有问题的是用协议的人。」嗯,这句话虽然有点绝对,但道理没错。下一章我们会聊怎么防御这些攻击,到时候你就知道,其实有很多手段可以堵住这些漏洞。