什么是 ICMP 重定向攻击?原理与防御

一、ICMP 重定向的定义
ICMP(Internet Control Message Protocol)重定向 是一种正常的网络控制机制,用于路由器通知主机存在更优的路由路径,减少不必要的转发。
例如:

  • 主机 A 将数据发给路由器 R1
  • R1 发现到目标 IP,另一网关 R2 更优
  • R1 会发送 ICMP Redirect 消息给主机 A
  • 之后,主机 A 会直接将数据发送给 R2
  • 这种机制可以优化网络路径,但也带来了安全隐患。

二、ICMP 重定向报文结构
类型(Type):5
代码(Code):
0:网络重定向
1:主机重定向
2:服务类型和网络重定向
3:服务类型和主机重定向

  • 网关地址:告诉主机应将数据包发送到的新网关

三、ICMP 重定向攻击原理
攻击思路
攻击者伪造 ICMP Redirect 报文,向目标主机发送虚假的网关地址,让目标主机的路由表被“欺骗”,从而实现以下攻击目的:

  • 中间人攻击(MITM)
  • 攻击者将自己伪装为网关
  • 目标主机将流量转发到攻击者,攻击者再转发给真正的网关
  • 攻击者可读取、篡改、注入数据
  • 流量重定向 / 拒绝服务
  • 攻击者将网关指向不存在的 IP
  • 目标主机流量丢弃,造成 DOS 攻击

攻击条件

  • 攻击者在同一网段,能发送 ICMP 报文给目标主机
  • 目标主机或网络设备未禁止接受 ICMP Redirect

四、攻击流程示例

  • 攻击者监听目标主机与网关的通信
  • 发送伪造的 ICMP Redirect 报文
类型: 5 (Redirect)
代码: 1 (Host Redirect)
网关地址: 攻击者 IP


3.目标主机修改路由表,将目标 IP 的流量改为发送给攻击者
4.攻击者实现中间人攻击或拒绝服务
五、实战演示工具

  • hping3
  • ettercap
  • scapy

示例:

# 使用 scapy 构造 ICMP Redirect
from scapy.all import *
ip = IP(src="网关IP", dst="目标主机IP")
icmp = ICMP(type=5, code=1, gw="攻击者IP")
pkt = ip/icmp
send(pkt)


六、危害分析

风险 描述
中间人攻击 窃听敏感信息,如账号密码、Cookie、API Token
数据篡改 注入恶意指令,修改请求
拒绝服务 将路由指向无效地址,导致业务中断

七、防御措施
✅ 1. 禁用 ICMP Redirect 接收
Linux
查看当前状态:

cat /proc/sys/net/ipv4/conf/all/accept_redirects

关闭(临时):

echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

永久修改 /etc/sysctl.conf:

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

修改后 sysctl -p 生效。
✅ 2. 路由器安全配置

  • 禁止发送 ICMP Redirect 报文,除非业务需要

✅ 3. 网络分段与访问控制

  • 防止攻击者与目标主机处于同一网段

✅ 4. 使用静态路由

  • 对于服务器,配置固定路由,避免依赖 ICMP Redirect 动态更新

✅ 5. 启用加密协议

  • 即使遭受中间人攻击,TLS 加密可保护通信内容不被解析

八、检测与排查
1. 检查路由表异常

route -n

是否存在网关指向未知 IP。
2. 使用 IDS/IPS

  • Snort / Suricata 可检测 ICMP Redirect 攻击行为。

示例 Snort 规则:

alert icmp any any -> any any (msg:"ICMP Redirect Attack"; icmp_type 5; sid:1000001;)

九、总结

维度 内容
攻击名 ICMP Redirect Attack
原理 伪造 ICMP 重定向报文,修改主机路由表
影响 中间人攻击、拒绝服务
防御 禁用 accept_redirects、路由器配置安全、使用加密

ICMP Redirect 在现代网络中极少需要启用,关闭是最安全的防御措施。

 如果您还没有服务器,推荐使用雪花云(xuehuacloud.com)

你可能感兴趣的:(网络,智能路由器)