利用 ICMP 隧道穿透防火墙

转自:http://xiaix.me/li-yong-icmp-sui-dao-chuan-tou-fang-huo-qiang/

以前穿透防火墙总是使用 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 穿透防火墙的检测...相关推荐

  1. 基于多种流量检测引擎识别pcap数据包中的威胁

    在很多的场景下,会需要根据数据包判断数据包中存在的威胁.针对已有的数据包,如何判断数据包是何种攻击呢? 方法一可以根据经验,对于常见的WEB类型的攻击,比如SQL注入,命令执行等攻击,是比较容易判断的 ...

  2. 流量Ⅰ--一文了解pcap网络数据包的结构?

    一文了解pcap网络数据包如何分析 0x00 基础知识 1.OSI七层模型每层的作用 2.TCP/IP 结构及具有五层协议的结构体系 0x01 数据是如何在各层次间传输的 1.数据帧的封装 2.数据格 ...

  3. 【流量分析】如何从大量数据会话中识别出视频流

    讲完DPI的强大,再来讲讲DPI的劣势 容易被欺骗.因为DPI是通过规则库识别协议或者服务,因此很容易被开发者利用,通过伪装和混淆等手段来欺骗DPI设备. 无法应对加密流量.加密的引入是为了保护用户的 ...

  4. 【Pingtunnel工具教程】利用ICMP隧道技术进行ICMP封装穿透防火墙

    文章目录 前言 一.ICMP隧道概念 二.复现前的准备工作&相关环境介绍 三.复现步骤 三.总结 前言 web搞太多了,发现csdn上面很少内网的内容,所以今天来整点内网的隧道技术,ICMP隧 ...

  5. 红蓝对抗之隧道技术第二篇(reGeorg内网穿透、SSH隧道本地Socks代理、SSH远程转发、Earthworm Socks5代理、Tunna正向代理、ICMP隧道、DNS隧道、Frp穿透)

    文章目录 隧道应用 reGeorg内网穿透 SSH本地转发(正向) 场景一 场景二 SSH远程转发(反向) Earthworm Socks5代理 正向代理 反向代理 Tunna正向代理 ICMP隧道 ...

  6. recvfrom 无法接收 icmp 差错数据包_利用ICMP隧道技术实现C2通信

    本文为翻译文章,原文链接见文末.(翻译为脉搏首发) 一般来说,攻击者在行动过程中经常需要面对诸多的挑战,例如: 克服网络障碍(网络策略.分段等).在"隐形模式"下完成各项操作,这样 ...

  7. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )

    文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...

  8. 2012禁用ip隧道 win_IMCP协议的魅力——IMCP隧道

    重生信息安全 作者:Ice 1.ICMP隧道的建立同样是建立在ICMP未被防火墙禁用的情况下使用的,就是PING命令,其原理就是在ICMP报文传输的时候,替换其中的Data部分的数据,并且对端通过一样 ...

  9. ICMP隧道通信原理与通信特征

    一 ICMP 隧道技术解析 ICMP协议 ICMP(InternetControl MessageProtocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路 ...

最新文章

  1. 深度学习 Optimizer 梯度下降优化算法总结
  2. 集成学习——Adaboost分类
  3. Windows下Python环境搭建
  4. 【组合数学】生成函数 ( 移位性质 )
  5. Java_Web使用简单的批处理操作
  6. linux git文件图标,分享|三款 Linux 下的 Git 图形客户端
  7. 干货 | 这次我们看看阿里的人是如何蹂躏CPU的
  8. vmstat使用简介各种linux命令使用
  9. jvm(6)-java类文件结构(字节码文件)
  10. matlab2010a连接mysql_MATLAB2010a+OpenCV2.3.1+VS2010运行TLD
  11. Java-static关键字
  12. springboot 自定义注解开发
  13. mysql文件导出NULL值处理_Mysql select into outfile NULL值导出的处理方法
  14. nodeName,nodeValue,nodeType,typeof,instanceof 的区别
  15. 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度
  16. 计算机的网络技术说课稿模板,精选信息技术说课稿模板汇编五篇
  17. Python抓取必应搜索背景图片
  18. matlab求系统根轨迹代码_第九讲? 根轨迹法
  19. 语言-汉语-官话:官话
  20. 范仲淹写苏州名胜的诗篇

热门文章

  1. Git credential helper 让你的 https不再需要输入用户名密码
  2. 2014江苏省职称计算机,2014年江苏省职称计算机office多选题.doc
  3. mysql的min函数的使用方法_MySQL中MIN()函数的使用教程
  4. 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
  5. 计算机辅助制造与cnc,ComputerAided Manufacturing CNC (计算机辅助制造数控).pdf
  6. php定义变量f= e怎么写,php变量怎么定义-PHP问题
  7. arcgiss如何在空白点图层加入坐标_连载 | 21 QGIS工程文件属性设置(2)——坐标参照系、变换、默认样式、数据源、关系和变量...
  8. java 数组map_java中 数组 list map之间的互转
  9. 【Linux入门到精通系列讲解】Linux如何创建和删除swap分区
  10. 没有java home_【Java安装】必须有JAVA_HOME变量吗