ICMP隐蔽通信之隧道
一、简介
ICMP是Internet Control Message Protocol缩写,中文译为:互联网控制消息协议,它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP依靠IP来完成任务,无需端口这点与传输协议UDP、TCP显著不同,因此它一般不用于在两点间传输数据,故通常不由网络程序直接使用(除ping和traceroute 两个特别例子)。
ICMP通常用于网际协议中发送控制消息,提供可能发生在通信环境中的各种问题反馈,比如返回错误信息或是分析路由。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。常见的ICMP错误信息是TTL值过期,每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,TTL在传输中过期”的消息将会回报给源地址。
以上为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部分为 abcdefghi
jklmnopqrstuvwabcdefghi,共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隐蔽通信技术对于红队方向的安全人员而言,去深入了解将非常值得。
本文始发于微信公众号(疯猫网络):ICMP隐蔽通信之隧道
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论