ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...
利用 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
转载于:https://www.cnblogs.com/bonelee/p/7462218.html
ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...相关推荐
- 基于多种流量检测引擎识别pcap数据包中的威胁
在很多的场景下,会需要根据数据包判断数据包中存在的威胁.针对已有的数据包,如何判断数据包是何种攻击呢? 方法一可以根据经验,对于常见的WEB类型的攻击,比如SQL注入,命令执行等攻击,是比较容易判断的 ...
- 流量Ⅰ--一文了解pcap网络数据包的结构?
一文了解pcap网络数据包如何分析 0x00 基础知识 1.OSI七层模型每层的作用 2.TCP/IP 结构及具有五层协议的结构体系 0x01 数据是如何在各层次间传输的 1.数据帧的封装 2.数据格 ...
- 【流量分析】如何从大量数据会话中识别出视频流
讲完DPI的强大,再来讲讲DPI的劣势 容易被欺骗.因为DPI是通过规则库识别协议或者服务,因此很容易被开发者利用,通过伪装和混淆等手段来欺骗DPI设备. 无法应对加密流量.加密的引入是为了保护用户的 ...
- 【Pingtunnel工具教程】利用ICMP隧道技术进行ICMP封装穿透防火墙
文章目录 前言 一.ICMP隧道概念 二.复现前的准备工作&相关环境介绍 三.复现步骤 三.总结 前言 web搞太多了,发现csdn上面很少内网的内容,所以今天来整点内网的隧道技术,ICMP隧 ...
- 红蓝对抗之隧道技术第二篇(reGeorg内网穿透、SSH隧道本地Socks代理、SSH远程转发、Earthworm Socks5代理、Tunna正向代理、ICMP隧道、DNS隧道、Frp穿透)
文章目录 隧道应用 reGeorg内网穿透 SSH本地转发(正向) 场景一 场景二 SSH远程转发(反向) Earthworm Socks5代理 正向代理 反向代理 Tunna正向代理 ICMP隧道 ...
- recvfrom 无法接收 icmp 差错数据包_利用ICMP隧道技术实现C2通信
本文为翻译文章,原文链接见文末.(翻译为脉搏首发) 一般来说,攻击者在行动过程中经常需要面对诸多的挑战,例如: 克服网络障碍(网络策略.分段等).在"隐形模式"下完成各项操作,这样 ...
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )
文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...
- 2012禁用ip隧道 win_IMCP协议的魅力——IMCP隧道
重生信息安全 作者:Ice 1.ICMP隧道的建立同样是建立在ICMP未被防火墙禁用的情况下使用的,就是PING命令,其原理就是在ICMP报文传输的时候,替换其中的Data部分的数据,并且对端通过一样 ...
- ICMP隧道通信原理与通信特征
一 ICMP 隧道技术解析 ICMP协议 ICMP(InternetControl MessageProtocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路 ...
最新文章
- 深度学习 Optimizer 梯度下降优化算法总结
- 集成学习——Adaboost分类
- Windows下Python环境搭建
- 【组合数学】生成函数 ( 移位性质 )
- Java_Web使用简单的批处理操作
- linux git文件图标,分享|三款 Linux 下的 Git 图形客户端
- 干货 | 这次我们看看阿里的人是如何蹂躏CPU的
- vmstat使用简介各种linux命令使用
- jvm(6)-java类文件结构(字节码文件)
- matlab2010a连接mysql_MATLAB2010a+OpenCV2.3.1+VS2010运行TLD
- Java-static关键字
- springboot 自定义注解开发
- mysql文件导出NULL值处理_Mysql select into outfile NULL值导出的处理方法
- nodeName,nodeValue,nodeType,typeof,instanceof 的区别
- 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度
- 计算机的网络技术说课稿模板,精选信息技术说课稿模板汇编五篇
- Python抓取必应搜索背景图片
- matlab求系统根轨迹代码_第九讲? 根轨迹法
- 语言-汉语-官话:官话
- 范仲淹写苏州名胜的诗篇
热门文章
- Git credential helper 让你的 https不再需要输入用户名密码
- 2014江苏省职称计算机,2014年江苏省职称计算机office多选题.doc
- mysql的min函数的使用方法_MySQL中MIN()函数的使用教程
- 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
- 计算机辅助制造与cnc,ComputerAided Manufacturing CNC (计算机辅助制造数控).pdf
- php定义变量f= e怎么写,php变量怎么定义-PHP问题
- arcgiss如何在空白点图层加入坐标_连载 | 21 QGIS工程文件属性设置(2)——坐标参照系、变换、默认样式、数据源、关系和变量...
- java 数组map_java中 数组 list map之间的互转
- 【Linux入门到精通系列讲解】Linux如何创建和删除swap分区
- 没有java home_【Java安装】必须有JAVA_HOME变量吗