ICMP隐蔽隧道从入门到精通

概述

众所周知传统socket隧道已极少,tcp、upd大量被防御系统拦截,dns、icmp、http/https等难于禁止的协议(当然还有各种xx over dns/icmp/http,后续再讲)已成为黑客控制隧道的主流。
本文从技术原理、实现方式、检测防御等多个维度解释隐蔽性最强的icmp隧道的相关知识,但不深入探讨编程实现,仅作为一篇科普文章,所以用了“从入门到精通”这个标题,本来就是科普(〃’▽’〃),请大神绕过!谢谢!!

起源

说起icmp其实要从最早的免费上网说起。
当年互联网刚刚兴起的时候,上网费是很贵的,难说一不小心上个网就能我们穷学生倾家荡产!后来聪明的同学开始研究技术,虽然我们的网络断了(不是拨号那种 无法获得ip的,需要有ip),但是ping ip还是可以的,于是就利用icmp隧道将访问转发到自己的一台放置在公网代理,利用代理中转访问公网,实现免费上网,虽然速率不高,但是免费嘛。

了解了起源,知道他的由来了,我们就好奇了,这技术是怎么回事?最后为啥又成了黑客用的隐蔽隧道呢,其实正所谓技术本无罪,只是看被什么人用罢了。我们主要关注技术原理即可。

技术原理

怎么可以实现这种神奇的通信呢,这就要从协议这个东西的基本原理说起,打开rfc(https://www.rfc-editor.org/search/rfc_search_detail.php)查询ping使用的icmp协议
查看详情RFC792
https://www.rfc-editor.org/info/rfc792
https://www.rfc-editor.org/rfc/rfc792.txt
你会发现icmp协议的结构如下:

其中0~31是各种协议头部,那剩下的呢?当然就是data了!原本默认ping传输的是:
windows系统,默认传输32bytes,内容是abcdefghijklmnopqrstuvwabcdefghi,共32bytes
linux 系统,稍显复杂,默认Data传输的是48bytes,在Date之前多了一个Timestamp from icmp data头,占用8bytes,如e5 0d 44 5b 00 00 00 00(Jul 10, 2018 09:37:41.000000000 CST),详情如下:
1、%%%%,4个%在0~f间变化,发送和返回相同,不同发送返回不同(笔者未深入研究规律和代表内容),占用2个bytes
2、090000000000,前两位%%在变动,同一次ping操作,无论发送接收多少包,此数值不变,下一次ping则此值会变动(笔者未深入研究规律和代表内容),占用6bytes
3、101112131415161718191a1b1c1d1e1f20(规律是从10开始的16进制递增,一直到20),占用17bytes
4、!”#$%&’()+,-./01234567,占用23bytes
经过简单的分析确认,windows固定传输的是abcdefghijklmnopqrstuvwabcdefghi,linux固定传输的是!”#$%&’()+,-./01234567,那我们能否改变这些data填充我们自己的数据呢? 答案是当然是可以!
这就是icmp隐蔽隧道的原理:替换Data部分。windows简单,替换后解决checksum即可,linux稍复杂,替换后要还要满足原有的其他规律(笔者主要领域是windows,有兴趣的读者可以研究下),防止链路上的设备对错误包进行抛弃处理。
此外,还有一点需要补充,ping的包大小,也就是data大小是可以修改的,如修改为1024bytes,以windows为例:
则,从包体看效果如下,可见规律还是一样,重复罢了。
最后,还有一个关键问题!
你发送了修改了data的数据,对方的系统能否正常处理你的畸形ping数据呢?还有对方回包的畸形ping应答数据,你自身能否处理呢?很明显,标准的 windows系统和linux系统是无法处理畸形data的数据的,所以我们还需自己的ping发送和应答程序替代系统的本身的ping。那么接下来, 我们就来看看各种畸形ping处理工具,也即是icmp隧道工具。

工具实现

这里我们不用虚拟机演示,避免只是演示不能实践的窘境!
笔者一开始接触icmp shell时,参考各种用虚拟机演示的文章,发现用虚拟机ok但是真实环境不行,所以踩坑后为了让大家不踩,我们采用真实的公网vps+内网终端演示,环境:
1、vps为linux,内网终端为windows;
2、vps无法ping通内网终端的内网ip;
3、内网终端可以ping通公网独立ip的vps.
好,说明完,我们看看怎么实现:

icmp.sh

先说这个,是因为这个包括一个通用的icmp server端(前面说过,这个是必须的),可以被其他方式的被控端复用,下载在github找即可,操作如下

server端

正如前面说的,我们的server端要替代系统本身的ping的应答程序,要不shell不稳定(现象是一直提刷屏,无法交互输入),先关闭系统的ping应答,方法如下(恢复系统应答则=0):

然后就可以启动我们自己的icmp应答程序了

第一个ip为vps的ip,是独立的公网ip,建议用***即可
第二个ip是agent的公网ip,但这个所谓的公网ip有玄机,严格说这个ip应该是server端看到的ip,为了得到这个ip可以从内网终端ping这个vps,在vps用tcpdump icmp获取这个ip,然后填写。如下:

如果您要用这个server作为您自己的木马组件则要自动判定,建议anget木马程序弹shell之前,先ping一下server(调整独特ping大小,次数等,防止server误判),server根据ping自动启动server配置。

agent端

按照github上这个工具作者的文章,如下:

这个ip就是公网的vps的ip了。这样在server端就可以获取到shell了

数据包分析,课件windows替换了data,大小增大到113

powershell icmp

server端

同上

agent端

这个就不多说了,都是玩这个的,如下


ip还是sever的ip,咱们的vps的ip,获取shell,没有乱码,所以笔者还是喜欢powershell这个神器!

meterpreter

虽然写了这个,是因为笔者认为它应该有icmp的反弹shell,但是竟然没找到,也许是寻找方法不对,有知道的同学麻烦留言,感谢!

icmptunnel、ptunnel等

主要用作xx over icmp使用,相对复杂,但是可以让传统的tcp、udp木马再次有用武之地,后续探讨。
当然除了以上还有很多其他工具,如linux下的PRISM(也支持mac、安卓)等等,还有很多人自己的写的python实现,可以说是现有工具已经遍地开花,那就更别说专业黑客在自己的代码中直接实现的了,所以对抗icmp隧道迫在眉睫!

检测和防御

明白了原理,也模拟了工具的使用,那么防御和检测就简单,只需要禁止ping就可以完全屏蔽此类隐蔽隧道风险,但如果要考虑用户体验,那就只有解析 包体了,然后做否定判定,也就是说只要ping的data不是标准的windows、linux的data包体(标准大包为合法)内容,则判定非法,报警 拦截即可。
不过笔者没研究除了windows、linux以外系统ping的实现,如macos、安卓各个版本、各个网络设备等,建议安全防御者先解析包体,然后分析合法data,形成白data清单,最终再做“否”判定。

最后的思考

我们这里只探讨最常见的ping(ICMP类型为0和8),那icmp的其他类型是否可以外传、交互shell?继续研究!

转自:https://blog.csdn.net/qq_27446553/article/details/81166980

隐匿攻击-ICMP的更多相关文章

  1. Firewalld防火墙与ICMP攻击

    原文地址:http://www.excelib.com/article/293/show 提到ICMP大家应该都很熟悉,可能有人会说:不就是ping吗?但是说到ICMP攻击以及相关防御措施可能就有的人 ...

  2. ICMP和重定向攻击

    目录 ICMP数据报格式 smurf攻击 ICMP重定向攻击 基于libpcap的sniffer raw socket 定义包头 解析数据包 重定向 ICMP数据报格式 https://zhuanla ...

  3. Linux网络编程--洪水攻击详解

    洪水攻击详解 ①注解:洪水攻击(FLOOD ATTACK)是指利用计算机网络技术向目标主机发送大量无用的数据报文,使得目标主机忙于处理无用的数据报文而无法提供正常服务的网络行为. 主要原理:利用了网络 ...

  4. 20169202 2016-2017-2《TCP/IP协议攻击》实验总结--十一周

    APR缓存中毒(ARP cache poisoning) 实验原理 ARP缓存是ARP协议的重要组成部分.ARP协议运行的目标就是建立MAC地址和IP地址的映射,然后把这一映射关系保存在ARP缓存中, ...

  5. TCP/IP网络协议攻击

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 这部分涉及: ARP缓存欺骗攻击 ICMP重定向攻击 SYN FLOOD ...

  6. DDOS常见攻击类型和防御措施

    DDOS 攻击类型: SYN Flood 攻击 ACK Flood 攻击 UDP Flood 攻击 ICMP Flood 攻击 Connection Flood 攻击 HTTP Get 攻击 UDP ...

  7. DDOS攻击攻击种类和原理

    DoS攻击.DDoS攻击和DRDoS攻击相信大家已经早有耳闻了吧!DoS是Denial of Service的简写,就是拒绝服务,而DDoS就是Distributed Denial of Servic ...

  8. Red Team远程控制软件

    开源远程管理控制 https://github.com/malwaredllc/byob 僵尸网络生成框架 https://github.com/panda-re/lava 大规模向程序中植入恶意程序 ...

  9. 实验 Attacks on TCP/IP Protocols

    ------- 转载请注明出处,博客园-lasgalen-http://www.cnblogs.com/lasgalen/p/4555648.html ------- 1 实验目的 进行这个实验的目的 ...

随机推荐

  1. HTML5 参数传递

    页面显示效果,如下图: 主页面代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  2. meterpreter > sysinfo

    meterpreter > sysinfoComputer : test-VCS86VROS : Windows XP (Build 2600).Architecture : x86System ...

  3. Bezier贝塞尔曲线的原理、二次贝塞尔曲线的实现

    Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成,通过改变控制点坐标可以改变曲线的形状. 一次Bezier曲线公式: 一次Bezier曲线是由P0至P1的连续点, ...

  4. xtrabackup 安装

    xtrabackup 安装   yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL  perl-Dige ...

  5. 基于纹理内存的CUDA热传导模拟

    原文链接 项目中有三个,第一个是全局内存,其余两个分别是基于1d和2d纹理内存.项目打包下载. 纹理内存是只读内存,与常量内存相同的是,纹理内存也缓存在芯片中,因此某些情况下,它能减少对内存的请求并提 ...

  6. 后台调用前台js

    WEB后台代码调用前台JS(两种方式). 1   这种方式只能调用简单的JS代码.不能调用自定义的函数. string jss = "<script language='javascr ...

  7. Bootstrap历练实例:响应式导航

    <!DOCTYPE html><html lang="zh-cn"><head><meta http-equiv="Conten ...

  8. Apache RocketMQ 正式开源分布式事务消息

    近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...

  9. 牛客小白月赛5 D 阶乘(factorial) 【前缀】

    链接:https://www.nowcoder.com/acm/contest/135/D 题目描述 输入描述: 输入数据共一行,一个正整数n,意义如“问题描述”. 输出描述: 输出一行描述答案: 一 ...

  10. Duizi and Shunzi HDU - 6188 (贪心)2017 广西ACM/ICPC

    Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...