2. 攻击面分析:路由协议面临的安全威胁分类

聊到路由协议的攻击,很多人第一反应就是「有人发假路由」。其实远不止这么简单。我这些年做攻防演练,见过太多团队只盯着一种攻击方式打,结果被对手换个手法就突破了。今天咱们就把路由协议面临的威胁,掰开揉碎了讲清楚。

我个人习惯把路由协议的攻击分为四大类:欺骗、泛洪、篡改、重放。这四类基本覆盖了所有已知的攻击手法。你想想看,攻击者无非就是想让你相信假信息、让你处理不过来、改你的数据、或者把旧数据再放一遍。万变不离其宗。

核心观点: 路由协议的安全威胁,本质上是对「信任模型」和「状态机」的攻击。攻击者利用协议设计时的假设漏洞,达到操纵路由表、耗尽资源、窃取数据的目的。
路由协议安全威胁 欺骗攻击 泛洪攻击 篡改攻击 重放攻击 伪造路由源 虚假邻居关系 LSA风暴 路由表溢出 度量值篡改 路径属性篡改 旧路由重放 认证序列号重放

2.1 欺骗攻击:让你相信假的东西

欺骗攻击,说白了就是攻击者伪装成合法设备,跟你建立信任关系。这是最基础也最危险的一类攻击。为什么?因为路由协议在设计时,很多都假设「邻居是可信的」。

我在一次金融客户的攻防演练中遇到过这种情况。攻击者通过ARP欺骗先拿到了一台接入层交换机的控制权,然后在这台交换机上跑了一个OSPF进程,向核心路由器发送伪造的LSA。结果呢?核心路由器以为有一条更优路径可以到达某个网段,就把流量全引过去了。攻击者轻松做了个中间人。

实战技巧: 对付欺骗攻击,最有效的手段就是「认证」。OSPF的MD5认证、BGP的TCP MD5签名、IS-IS的HMAC-SHA认证,这些不是摆设。我建议所有生产环境至少启用明文认证,能上加密认证就别省那点配置功夫。

常见的欺骗攻击手法包括:

  • 伪造路由源:攻击者冒充合法路由器发送路由更新。比如伪造BGP OPEN消息,建立非法BGP会话。
  • 虚假邻居关系:在OSPF中伪造Hello报文,让合法路由器以为攻击者是邻居,从而交换路由信息。
  • RIP中的路由注入:RIP协议没有认证机制(早期版本),攻击者随便发个UDP包就能注入路由。

2.2 泛洪攻击:让你忙不过来

泛洪攻击的目标不是让你相信假信息,而是让你「处理不过来」。路由协议需要维护邻居状态、处理更新报文、计算路由表。这些操作都需要CPU和内存资源。攻击者只要发送大量合法格式的报文,就能让路由器陷入瘫痪。

我记得有一次帮一个运营商排查故障。核心路由器CPU飙升到99%,OSPF邻居不断震荡。查了半天,发现是某个接入层设备被植入了恶意脚本,每秒向核心发送数千个Hello报文。核心路由器忙着处理这些报文,没空做正经事。这就是典型的泛洪攻击。

注意: 泛洪攻击最难防御的地方在于——报文本身是合法的。你不能简单地把所有Hello报文都丢掉。我见过一些团队试图用ACL来限制,结果把自己正常的邻居关系也搞断了。嗯,这里要小心。

泛洪攻击的常见形式:

  • LSA风暴:在OSPF网络中,攻击者不断生成新的LSA,迫使所有路由器重新计算SPF树。
  • BGP路由表溢出:攻击者宣告大量虚假前缀,填满路由器的FIB表,导致正常路由无法安装。
  • 邻居状态震荡:通过频繁发送/撤销Hello报文,让邻居关系在Up/Down之间反复切换。

2.3 篡改攻击:改你的数据

篡改攻击比欺骗更隐蔽。攻击者不伪造身份,而是截获合法报文后修改其中的内容。你想想看,如果攻击者能改掉路由更新中的度量值,会发生什么?

举个例子。在OSPF中,每条LSA都包含一个度量值(Cost)。攻击者如果截获了某条LSA,把Cost改成1(最小),那么所有路由器都会认为这条路径是最优的。流量全往这走,攻击者就能轻松做流量分析或拒绝服务。

我在一次红蓝对抗中干过类似的事。当时蓝方启用了OSPF认证,我以为没戏了。结果发现他们用的是MD5认证,但密钥是明文写在配置文件里的。我拿到配置文件后,直接伪造了带正确MD5摘要的LSA,把度量值全改成了最大值。结果蓝方的OSPF路由全部选择了次优路径,业务延迟飙升。他们查了两天没找到原因,最后发现是「认证被绕过」了。

关键点: 篡改攻击的成功前提是「认证被绕过」或「认证强度不足」。MD5认证虽然比没有强,但已经被证明可以被碰撞攻击。我建议使用HMAC-SHA256或更强的算法。

篡改攻击的主要手法:

攻击类型 目标协议 篡改内容 后果
度量值篡改 OSPF、RIP、EIGRP Cost、Hop Count、Metric 路由选路异常,流量被引导到攻击者控制的路径
路径属性篡改 BGP AS_PATH、MED、Local Preference BGP选路策略被破坏,可能导致路由黑洞或流量劫持
序列号篡改 OSPF、IS-IS LSA序列号 使合法LSA被当作旧信息丢弃,导致路由表不一致

2.4 重放攻击:把旧数据当新的用

重放攻击很有意思。攻击者不需要伪造任何东西,只需要「录下来,再放一遍」。很多路由协议在设计时没有考虑报文的时效性,这就给了重放攻击可乘之机。

为什么会这样?因为路由协议通常假设网络环境是「实时」的。但攻击者可以抓包,把合法的路由更新报文保存下来,等一段时间后再重新发送。如果接收方没有检查时间戳或序列号,就会认为这是一条新的路由更新。

我曾经在实验室里做过一个测试。在OSPF网络中,我抓取了一条LSA更新报文。等这条LSA被撤销后(比如某条链路down了),我重新发送了之前抓到的旧LSA。结果呢?所有路由器都以为那条链路又恢复了,纷纷把流量往那条已经不存在的链路上发。业务中断了大概30秒,直到OSPF的LSA老化机制生效。

避坑指南: 我曾经以为只要启用了认证,重放攻击就没戏了。后来发现我错了。认证只能保证报文是合法设备发出的,但不能保证报文是「新鲜的」。要防重放,必须用「序列号」或「时间戳」。OSPF的LSA序列号机制就是干这个的,但前提是攻击者不能篡改序列号。

重放攻击的典型场景:

  • 旧路由重放:攻击者保存合法的路由更新,在路由被撤销后重新发送,导致路由表出现「幽灵路由」。
  • 认证序列号重放:某些协议使用递增序列号做防重放,但攻击者可以截获序列号后,在合法设备发送新报文之前抢先发送。
  • BGP会话重置:攻击者重放旧的BGP OPEN消息,可能导致BGP会话重置,引发路由震荡。

2.5 四种攻击的关联与防御思路

这四种攻击不是孤立的。在实际攻防中,攻击者往往会组合使用。比如先做泛洪让你忙不过来,趁你处理能力下降时做欺骗攻击。或者先做重放拿到合法报文,再篡改后重新注入。

我个人习惯把防御思路总结为三个层次:

  1. 认证层:所有路由协议必须启用认证。能用加密认证就别用明文。密钥要定期更换。
  2. 完整性层:使用HMAC等机制确保报文在传输过程中没有被篡改。
  3. 时效性层:利用序列号、时间戳等机制防止重放攻击。
一句话总结: 欺骗靠认证,泛洪靠限速,篡改靠完整性校验,重放靠序列号。把这四件事做好了,路由协议的安全防线就基本立住了。

好了,这一章的内容就到这里。下一章我们会深入具体的攻击手法,从OSPF开始,一步步拆解攻击的细节和防御措施。


专注资料整理