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 映射端口穿透内置防火墙
475 0
|
4月前
|
监控 安全 网络安全
状态检测防火墙
【8月更文挑战第17天】
304 3
|
4月前
|
监控 安全 Serverless
SAE 防火墙的震撼之举:默认拦截公网一切流量,开启网络安全的无敌模式!
【8月更文挑战第7天】在数字化时代,网络安全至关重要。SAE(Serverless Application Engine,无服务器应用引擎)的防火墙功能默认阻止所有公网流量,为应用与数据提供坚实保护。这像坚固城门,将潜在威胁拒之门外,减少恶意攻击风险。如同在混沌中建立秩序,划定网络安全边界。但依赖默认设置不足,需根据业务需求配置规则,如开放特定端口或IP范围。还需持续监控防火墙效果,通过分析访问日志等手段及时调整优化,确保最佳防护效果。
80 0
|
7月前
|
弹性计算 监控 安全
通过NAT网关和云防火墙防护私网出站流量安全的最佳实践
针对云上企业出站流量安全攻击,企业可以通过采用“NAT网关+NAT边界防火墙”方案实现出向流量有效监控保护,有效降低恶意软件攻陷风险、内部人员风险、数据泄露风险、供应链风险、出站流量合规风险等
146 3
|
7月前
|
监控 网络协议 安全
【亮剑】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题
【4月更文挑战第30天】当设备IP能ping通但无法上网时,可能是DNS解析、网关/路由设置、防火墙限制、网络配置错误或ISP问题。解决步骤包括检查网络配置、DNS设置、网关路由、防火墙规则,以及联系ISP。预防措施包括定期备份配置、更新固件、监控网络性能和实施网络安全策略。通过排查和维护,可确保网络稳定和安全。
1396 1
|
7月前
|
安全 Serverless 网络安全
SAE防火墙功能默认阻止所有来自公网的流量
SAE防火墙功能默认阻止所有来自公网的流量
157 1
|
关系型数据库 MySQL 网络安全
新建的windows服务器不能ping通?因为没有关闭防火墙
新建的windows服务器不能ping通?因为没有关闭防火墙
|
运维 网络协议 算法
基于Ryu 防火墙的检测和解决异常入侵的流量--实验
基于Ryu 防火墙的检测和解决异常入侵的流量--实验
|
网络协议 Python Windows
Python 实现Ping命令状态检测
ping 是一种因特网包探索器,用于测试网络连接量的程序,Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令,主要是向特定的目的主机发送 ICMP 请求报文,测试目的站是否可达及了解其有关状态,实现Ping方法的这段代码原始版本来源于网络,后经排版封装后实现了一些功能,放在这里收藏之用。
592 0
Python 实现Ping命令状态检测
Tool之ping:如何使用ping命令检测电脑网络故障图文教程
Tool之ping:如何使用ping命令检测电脑网络故障图文教程
Tool之ping:如何使用ping命令检测电脑网络故障图文教程