ICMP隐蔽隧道从入门到精通

栏目: 服务器 · 发布时间: 6年前

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

ICMP隐蔽隧道从入门到精通

概述

众所周知传统socket隧道已极少,tcp、upd大量被防御系统拦截,dns、icmp、http/https等难于禁止的协议(当然还有各种xx over dns/icmp/http,后续再讲)已成为黑客控制隧道的主流。

本文从技术原理、实现方式、检测防御等多个维度解释隐蔽性最强的icmp隧道的相关知识,但不深入探讨编程实现,仅作为一篇科普文章,所以用了“从入门到精通”这个标题,本来就是科普(〃’▽’〃),请大神绕过!谢谢!!

起源

说起icmp其实要从最早的免费上网说起。

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

ICMP隐蔽隧道从入门到精通

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

技术原理

怎么可以实现这种神奇的通信呢,这就要从协议这个东西的基本原理说起,打开rfc( https://www.rfc-editor.org/search/rfc_search_detail.php)查询ping使用的icmp协议

ICMP隐蔽隧道从入门到精通

查看详情RFC792

https://www.rfc-editor.org/info/rfc792

https://www.rfc-editor.org/rfc/rfc792.txt

你会发现icmp协议的结构如下:

ICMP隐蔽隧道从入门到精通

其中0~31是各种协议头部,那剩下的呢?当然就是data了!原本默认ping传输的是:

windows系统,默认传输32bytes,内容是abcdefghijklmnopqrstuvwabcdefghi,共32bytes

ICMP隐蔽隧道从入门到精通

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

ICMP隐蔽隧道从入门到精通 经过简单的分析确认,windows固定传输的是abcdefghijklmnopqrstuvwabcdefghi,linux固定传输的是!”#$%&’()+,-./01234567,那我们能否改变这些data填充我们自己的数据呢? 答案是当然是可以!

这就是icmp隐蔽隧道的原理:替换Data部分。windows简单,替换后解决checksum即可,linux稍复杂,替换后要还要满足原有的其他规律(笔者主要领域是windows,有兴趣的读者可以研究下),防止链路上的设备对错误包进行抛弃处理。

此外,还有一点需要补充,ping的包大小,也就是data大小是可以修改的,如修改为1024bytes,以windows为例:

ICMP隐蔽隧道从入门到精通

则,从包体看效果如下,可见规律还是一样,重复罢了。

ICMP隐蔽隧道从入门到精通

最后,还有一个关键问题!

你发送了修改了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隐蔽隧道从入门到精通

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

ICMP隐蔽隧道从入门到精通

第一个ip为vps的ip,是独立的公网ip,建议用搬瓦工即可

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

ICMP隐蔽隧道从入门到精通

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

agent端

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

ICMP隐蔽隧道从入门到精通

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

ICMP隐蔽隧道从入门到精通

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

ICMP隐蔽隧道从入门到精通

powershell icmp

server端

同上

agent端

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

ICMP隐蔽隧道从入门到精通
ICMP隐蔽隧道从入门到精通

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

ICMP隐蔽隧道从入门到精通

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?继续研究!

审核人:yiwang   编辑:边边


以上所述就是小编给大家介绍的《ICMP隐蔽隧道从入门到精通》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析

数据结构与算法分析

韦斯 (Mark Allen Weiss) / 陈越 / 机械工业出版社 / 2016-3-1 / 69.00元

本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。本书把算法分析与有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。一起来看看 《数据结构与算法分析》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具