ICMP Tunnel监测
作为一个攻击者,在攻击过程中面临着两个挑战。
-
突破网络中障碍。
2. 在秘密模式下执行不同的操作,不那么容易被检测到。
Tunnel就是能够很好的解决这两个挑战。
Tunnel 通常是将在一个协议中封装另一个网络协议的有效载荷,具体可参考:
常见的Tunnel 有:ICMP Tunnel
,SSH Tunnel
,DNS Tunnel
,HTTP Tunnel
本文主要讲解ICMP tunnel相关内容。
-
ICMP协议
ICMP(Internet控制消息协议)
是Internet协议套件中的支持协议。网络设备使用它来发送错误消息和操作信息。最知名且可能是最常用的ICMP消息是Ping消息。ICMP报文格式如图1
常用的ICMP ping
命令,Ping从网络中的一个节点发送到另一个节点。它由第2层和第3层报头(OSI模块定义的MAC和IP报头
)和特殊ICMP数据包构建而成。
通常ICMP 默认的有效载荷数据为ASCII字符“abcdefghijklmnopqrstuvwabcdefghi”,也有其他的载荷字符串。
2. ICMP Tunnel示例
常用的ICMP Tunnel
工具有:
icmpsh: https://github.com/inquisb/icmpsh
icmptunnel: https://github.com/jamesbarlow/icmptunnel
示例:利用icmptunnel
建立icmp Tunnel
服务端:
客户端:
即可建立2端之间的ICMP 隧道。可以用来连接SSH,可以用来用来建立socks连接等等。
如HTTP协议,
建立SSH连接:
在ICMP协议中夹带了SSH会话的内容:
利用ICMP Tunnel建立的SSH连接,在两个会话中是看不到ssh协议的,也没有相关的TCP会话。这样能够做到比较隐蔽。
-
ICMP Tunnel检测
-
数据包大小
常规的ICMP 包大小差不多一致,在为ASCII字符串“abc…”的情况下为74左右,在为ASCII字符串为“123456…”的情况下为98左右。而在使用ICMP Tunnel的情况下,如利用ICMP tunnel
进行SSH连接,在初始连接的状态下数据包大小能到达1500+以上。所以可以通过数据包大小来进行判断。
在TSA端,可以建立简单的规则如图2:
该规则很简单的利用数据包长度,协议为ICMP,比较粗略,会存在漏报,但一旦报警就是准确的。
在没有规则的情况下,则可以利用TSA端的ICMP日志列表,查看ICMP日志。如图3:
然后利用ICMP日志中的负载长度从大到小进行排序,如图4:
然后定位负载长度排名前面的会话,如图5:
定位之后,选择ICMP会话,进行下载,然后研判确认。
-
ICMP 包类型
在部分ICMP Tunnel
不会有很长的负载长度的情况下,如图6:
包大小符合正常的ICMP数据包大小。如果通过数据包大小来进行判断就存在了漏报,常规的ICMP内容常规为:回显请求类型为8-请求应答类型为0,如图7:
如果如果2个IP之间的ICMP会话的类型都是0(请求应答),这种情况就可能存在问题。如图8
3. 数据包大小差,会话次数
利用powershell建立的ICMP Tunnel从数据包大小,请求应答等都很正常。如图9:
在正常的ICMP ping
包中,相同的IP在ICMP会话中,请求和相应大小是一致的,如图10:
而在非正常的ICMP请求中,由于需要执行命令,命令长度不一致导致了包大小不一致。命令响应内容不一致也导致了包大小的不一致。如图11:
如图11可以数据包大小最大和数据包大小最小之间包大小相差很大。可以利用代码进行处理(代码还没写。)
也可以将导出的ICMP日志文件,利用代码统计单位时间内的ICMP会话次数。
抛砖引玉,如果有其他思路欢迎交流。
未完待续。