ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测

本文涉及的产品
云防火墙,500元 1000GB
简介:

利用 ICMP 隧道穿透防火墙

以前穿透防火墙总是使用 SSH 隧道、DNS 隧道或 HTTP 隧道等等,今天来说一个利用 SNMP 隧道进行穿透工具--icmptunnel。

简介

icmptunnel 可以将 IP 流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测,因为通常防火墙是不会屏蔽 ping 数据包的。但是现在市面上已经有了很多类似的工具了,那么 icmptunnel 又有哪些优势呢?icmptunnel 提供在状态机防火墙和 NAT 网络之间,更加可靠的连接。

编译

首先从 Github 上面 clone 下代码:

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

随后使用 make 命令进行编译即可。

示例

注:这款工具只能在 Linux 下面使用。

首先我们需要在两端设备上面禁止 ICMP 响应。下面这条命令会阻止内核响应 ping 数据包:

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

随后,在服务端以服务器模式启动 icmptunnel,并给隧道接口分配一个 IP 地址:

# ./icmptunnel –s
opened tunnel device: tun0  
(ctrl-z)
# bg
# /sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0

在客户端,使用 icmptunnel 连接上服务器,并给隧道接口分配一个 IP 地址:

# ./icmptunnel <server>
opened tunnel device: tun0  
connection established.  
(ctrl-z)
# bg
# /sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0

现在,我们就拥有一个端到端基于 ICMP 数据包的隧道了。其中服务器地址为 10.10.0.1,客户端地址为 10.10.0.2。在客户端可以尝试通过 SSH 连接服务器:

# ssh root@10.0.0.1
Password:  

当然也可以把远程服务器当作一个加密的 SOCKS 代理:

# ssh -D 8080 -N root@10.0.0.1
Password:  

至此,我们就可以在浏览器上使用本地 SOCKS 代理了。

工作机理

请求端的 Ping 工具通常会在 ICMP 数据包后面附加上一段随机的数据作为 Payload,而响应端则会拷贝这段 Payload 到 ICMP 响应数据包中返还给请求端,用于识别和匹配 Ping 请求。

Windows 和 Linux 系统下的 Ping 工具默认的 Payload 长度为 64 比特,但实际上协议允许附加最大 64K 大小的 Payload。

对于隧道数据,icmptunnel 首先会指定客户端和服务器端。随后,客户端会将 IP 帧封装在 ICMP 请求数据包中发送给服务器,而服务器端则会使用相匹配的 ICMP 响应数据包进行回复。这样在旁人看来,网络中传播的仅仅只是正常的 ICMP 数据包。

状态防火墙和 NAT

那么就出现了一个问题,隧道如何穿过状态防火墙或 NAT?一些设备会过滤没有匹配响应数据包的 Ping 包。而在非对称连接中,来自服务器端的流量会大于客户端,反之亦然,这样客户端可能会丢弃一些相应数据包,因为响应数据包多余请求数据包。

icmptunnel 有一个机制来专门解决这个问题。客户端会定期发送一个空的 ICMP 请求数据包给状态防火墙或 NAT,而这些请求数据包都会被记录在防火墙状态表中。同时通过保持发送带有载体的数据包,这样客户端会维持一个可以用于服务器端发送数据的“数据包窗口”。

检测隧道

下面是一些检测恶意 ICMP 流量的方法:

  • 检测同一来源 ICMP 数据包的数量。一个正常的 ping 每秒最多只会发送两个数据包。而使用 ICMP 隧道的浏览器在同一时间会产生上千个 ICMP 数据包。
  • 注意那些 ICMP 数据包中 payload 大于 64 比特的数据包。当然 icmptunnel 可以配置限制所有数据包的 payload 为 64 比特,这样会使得更难以被检测到。
  • 寻找那些响应数据包中 payload 跟请求数据包不一致的 ICMP 数据包。
  • 检查 ICMP 数据包的协议标签。例如,icmptunnel 会在所有的 ICMP payload 前面增加 'TUNL' 标记以用于识别隧道,这就是特征。

工具地址:https://github.com/jamesbarlow/icmptunnel












本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7462218.html,如需转载请自行联系原作者



相关文章
|
应用服务中间件 网络安全 nginx
docker 映射端口穿透内置防火墙
docker 映射端口穿透内置防火墙
438 0
|
云安全 域名解析 安全
警惕主动外联!云防火墙检测拦截勒索、Muhstik僵尸网络等 Log4j2漏洞利用
近期,阿里云安全观测到,在 Apache Log4j2 漏洞攻击全程中,无论是在漏洞利用阶段,还是后续要进行验证和进一步的控制利用,大多涉及多次受害服务器的主动外联,云防火墙已陆续发现并拦截60余万次涉及勒索、挖矿家族的漏洞利用行为。
978 0
警惕主动外联!云防火墙检测拦截勒索、Muhstik僵尸网络等 Log4j2漏洞利用
|
3月前
|
监控 安全 网络安全
状态检测防火墙
【8月更文挑战第17天】
222 3
|
5月前
|
安全 网络协议 Linux
【内网安全】 隧道技术&SMB&ICMP&正反向连接&防火墙出入规则上线
【内网安全】 隧道技术&SMB&ICMP&正反向连接&防火墙出入规则上线
|
6月前
|
监控 网络协议 安全
【亮剑】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题
【4月更文挑战第30天】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题。解决步骤包括检查网络配置、DNS设置、网关路由、防火墙规则,以及联系ISP。预防措施包括定期备份配置、更新固件、监控网络性能和实施网络安全策略。通过排查和维护,可确保网络稳定和安全。
1184 1
|
机器学习/深度学习 网络协议 网络架构
【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
677 0
【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
|
关系型数据库 MySQL 网络安全
新建的windows服务器不能ping通?因为没有关闭防火墙
新建的windows服务器不能ping通?因为没有关闭防火墙
|
监控 网络安全 API
驱动开发:内核封装WFP防火墙入门
WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案,其默认被设计为分层结构,该框架分别提供了用户态与内核态相同的AIP函数,在两种模式下均可以开发防火墙产品,以下代码我实现了一个简单的驱动过滤防火墙。 WFP 框架分为两大层次模块,用户态基础过滤引擎`BFE (BaseFilteringEngine)` ,以及内核态过滤引擎 `KMFE (KMFilteringEngine)`,基础过滤引擎对上提供C语言调用方式的API以及RPC接口,这些接口都被封装在`FWPUCLNT.dll`模块中,开发时可以调用该模块中的导出函数.
476 0
|
运维 网络协议 算法
基于Ryu 防火墙的检测和解决异常入侵的流量--实验
基于Ryu 防火墙的检测和解决异常入侵的流量--实验
|
网络协议 网络架构
什么是 ICMP ?ping和ICMP之间有啥关系?
Internet 控制消息协议 (ICMP) 是 TCP/IP 的实用协议,负责提供有关 TCP/IP 网络上的设备、服务或路由的可用性的信息,大多数网络故障排除技术和工具都以常见的 ICMP 消息类型为中心,最著名的就是ping,主要用于测试设备之间的通信。
838 0
什么是 ICMP ?ping和ICMP之间有啥关系?