实验环境
以下为gpt写的框架
本实验在 Ubuntu 环境下,通过 Docker 复现 ICMP Redirect 攻击过程,并在此基础上完成中间人攻击,实现对 TCP 负载的拦截与篡改。
核心思路并不复杂:利用 ICMP 重定向修改受害者的路由缓存,将流量引导至攻击者控制的节点,再在该节点上对通信数据进行处理。
实验环境
实验基于本地 Ubuntu 搭建,使用 Docker 进行网络拓扑隔离。相比课程默认环境,这种方式更容易控制变量,出现异常可以直接销毁重建。
启动实验前,对容器环境进行清理,避免历史网络配置干扰:
|
|
进入实验目录并启动拓扑:
|
|
容器全部启动后,网络结构包括受害者、攻击者、真实网关、恶意路由器以及目标主机。
ICMP 重定向机制
ICMP Redirect 用于在局域网内优化路径选择。当主机将数据包发送给网关时,如果网关发现存在更优路径,会返回一个重定向报文,引导主机更新路由缓存。
该机制依赖信任模型,缺乏认证过程,只要报文结构合法且来源看似可信,就有可能被内核接受。这为伪造重定向提供了空间。
ICMP 重定向攻击
攻击目标是修改受害者的路由缓存,使其将发往目标主机的流量转发至恶意路由器。
在受害者节点持续产生流量:
|
|
保持通信状态是触发内核接受重定向的前提。
攻击者节点发送伪造的 ICMP Redirect 报文:
|
|
该脚本伪造来自网关的 Type 5 报文,并指定新的下一跳地址为恶意路由器。
攻击成功后,在受害者节点查看路由缓存:
|
|
若出现如下条目:
|
|
说明路由已被修改,目标流量开始经过攻击者控制的节点。
中间人攻击(MITM)
在路由被重定向后,攻击者已经处于通信路径中间,但默认情况下数据仍然是透明转发的,需要进一步介入数据处理流程。
实验中直接在恶意路由器上对数据进行拦截和修改。
在目标主机上开启监听:
|
|
受害者发起连接:
|
|
通信建立后,在恶意路由器上关闭内核转发:
|
|
关闭转发的目的是避免数据包直接由内核转发,从而使用户态脚本能够接管数据路径。
随后运行中间人脚本:
|
|
脚本通过嗅探并重构 TCP 数据,实现对通信内容的修改。
在受害者端发送特定字符串,例如:
|
|
目标主机接收到的内容被替换为:
|
|
说明数据已在传输过程中被修改,中间人攻击成立。
实验中的关键点
ICMP 重定向并不是无条件生效,需要存在对应的通信流量,否则内核可能直接忽略报文。
路由缓存存在时间限制,实验操作需要在有效期内完成,否则需要重新触发攻击。
中间人阶段如果不关闭内核转发,数据包会绕过用户态脚本,导致无法修改内容。
MAC 地址配置错误容易导致网络异常甚至形成循环转发,需要保证脚本中的目标地址准确。
知识小结
ICMP 重定向本质是对主机路由缓存的动态修改机制,在缺乏认证的情况下可以被伪造利用。
攻击的核心不在于重定向本身,而在于借此进入通信路径,实现对流量的控制。
中间人攻击依赖对数据路径的完全接管,单纯的流量转发无法达到篡改效果,需要在内核转发与用户态处理之间做切换。
从实现上看,攻击链条可以拆分为路径劫持与数据处理两个阶段,两者缺一不可。