ICMP隐蔽通信之隧道
一、简介
ICMP是Internet Control Message Protocol缩写 中文译为:互联网控制消息协议 它是TCP/IP协议簇的一个子协议
用于在IP主机 路由器之间传递控制消息。ICMP依靠IP来完成任务 无需端口这点与传输协议UDP TCP显著不同 因此
它一般不用于在两点间传输数据 故通常不由网络程序直接使用 除ping和traceroute 两个特别例子 。
ICMP通常用于网际协议中发送控制消息 提供可能发生在通信环境中的各种问题反馈 比如返回错误信息或是分析路由通
过这些信息 使管理者可以对所发生的问题作出诊断 然后采取适当的措施解决。常见的ICMP错误信息是TTL值过期每个
路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0TTL在传输中过期的消息将会回报给源地址。
以上为ICMP正常用途 本篇分析重点为ICMP渗透用途 渗透用途有隧道用途和隐藏后门用途本篇讲隧道用途。
二、过墙原理
当攻击者使用各类隧道
技术 HTTP DNS 常规正反端口转发等 均被拦截 常会通过ICMP隧道访问目标
主机以此躲过安全人员或流量设备进行tcpdump的流量审计。
ICMP隧道是一个比较特殊的应用通信用法。在一般的通信协议里 如两台设备要进行通信 需要IP+Port 而在ICMP协议
下不需要端口 最常见的ICMP消息为Ping命令与回复 在网络环境良好情况时每个Ping命令都可收到一个ICMP回复攻
击者可利用该特性 构建特别的ping命令 将TCP/UDP数据封装到ICMP的ping数据包中 从而穿过防火墙 通常防火墙
不屏蔽ping数据包实现不受限制的网络访问。
当然部分网络设备配置有单向过滤 阻止ICMP请求数据包进入站点 仅允许ICMP通信出站即防火墙仅单
向允许内部设备ping互联网设备。 类型为8的ICMP包代表request 类型为0的ICMP包代表reply。对此
攻击者把带有命令执行的ICMP包伪装成类型为0的ICMP包 防火墙将误判为ICMP-0-reply包 ICMP数据
包成功进入站点而带有执行结果的ICMP包,攻击者把它伪装成类型为8的ICMP包防火墙将误判为ICMP
-8-request包,ICMP数据包成功进入互联网。
部分网络设备配置有过滤无应答ICMP 导致隧道掉线 因此攻击者会定期发送空的ICMP请求
数据包以此使得客户端与服务器端的 通信窗口 保持开启。
三、工具介绍
1.PingTunnel
PingTunnel是一款常用的ICMP隧道工具 可以跨平台使用。使用 ICMP 回显请求和回复数据包 通常称为 ping 请求和回复
可靠地将 TCP 连接通过隧道连接到远程主机。当网络通信中不允许您将TCP或 UDP 数据包发送到互联网使用PingTunnel
在允许Ping 互联网其余部分的任何计算机,可实现突破TCP封锁,为避免隧道被滥用 可为隧道设置密码。
2.ICMPTunnel
ICMPTunnel 作者为 jamesbarlow 于2016年开发完成。是一款在 ICMP 回显请求和响应 ping) 数据包中隧道传输IP流量
的工具。 它旨在以半隐蔽的方式绕过防火墙。虽然有几个现有的工具可以实现这种技术 但 ICMPtunnel 提供了更可靠的协
议和机制 用于通过有状态防火墙和 NAT 进行隧道传输。但是ICMPtunnel具有流量特征, ICMPtunnel会在所有的 ICMP
Payload前面添加TUNL标记来标识隧道。
四、具体操作
如上图所示:攻击者通过渗透拿到了网络边界Web服务器 172.16.33.157 发现目标内网有一台PC 192.168.195.129并开
放3389远程桌面 192段密码本已获取 但跳板机无法TCP/UDP出网 172.16.33.138 如果选择正向出网 容易造成业务卡顿
并且通信质量不佳。此时攻击者选择通过ICMP隧道进行远程桌面登陆。
在Web Server上执行命令 启动PingTunnel
启动PingTunnel效果如下图所示:
在Hacker 机器上执行命令 将本地1080端口映射到 192.168.195.129:3389
执行映射配置 效果如下所示:
在Hacker 机器上执行RDP命令 连接本机1080端口
连接远程桌面 效果如下图所示:
五、流量特征
使用ICMP隧道将产生大量ICMP数据包 可通过 Wireshark进行ICMP数据包分析以
检测恶意ICMP流量 具体方法如下:
1.观察数量
检测同一来源的ICMP数据包的数量 一个正常的ping命令每秒最多发送两数据包而
用ICMP隧道会在很短的时间内产生上千个ICMP数据包。
2.观察大小
注意 Payload大于64bytes的ICMP数据包 ICMP报文由首部和数据段组成。首部为定长的8个字节前
4个字节是通用部分 后4个字节随报文类型的不同有所差异。数据段部分默认为32字节或48字节。
一个正常的Ping 报文,如下图所示:
上图为Linux系统进行Ping请求应答抓包 封装后帧长度为98 IP数据报文长度为84 含
20bytes IP头 ICMP报文为64bytes 这64bytes中含48bytes数据。
Windows进行ping data部分为 abcdefghijklmnopqrstuvwabcdefghi 共32bytes
Linux进行ping data部分为 时间数据 + !”#$%&’()+,-./01234567 共48bytes
3.前后不一致
寻找响应数据包中的 Payload与请求数据包中的 Payload不一致的ICMP数据包 协议规定 ICMP消息总
是包括了源数据并返回给发送者 如响应数据包中的 Payload与请求数据包中的 Payload不一致 则不遵
从通信协议规范 视为畸形数据包。
4.检查标识
检测ICMP数据包的协议标签 ICMPtunnel会在所有的 ICMP Payload前面添加TUNL标记来标识隧道。
六、小结
对于防御ICMP隐蔽通信攻击 彻底消除风险的方法为:在网络边界设备 如防火墙中配置
禁用ICMP。当然这需要结合业务考虑。
如业务需使用ICMP协议 安全设备不能单纯禁用ICMP协议 可考虑监测畸形
数据包判定异常并及时丢弃数。
ICMP是一个网络层协议 ICMP较TCP/IP协议更底层。但ICMP依然是TCP/IP协议簇的一个子协议
报文不能直接传送给数据链路层 依然需要IP协议承载 但也足够特殊。因此ICMP隐蔽通信技术对
于红队方向的安全人员而言 去深入了解将非常值得。