最近常听人提起ICMP隧道,不明白其实现原理,在此记录下这个知识点。
ICMP协议:
一般用于检测网络连通性和探测主机存活状态。
ICMP协议特点:
ping命令响应包和请求包的data数据是一样的。
原理:
ICMP报文自身是可以携带数据的,且默认填充的data部分是可修改的,ICMP隧道正是把消息隐藏在数据中,利用ping或者tracert命令建立隐蔽通道。
ICMP隧道特点:
1.防火墙对ICMP包是放行,且内部主机不会检查ICMP数据包所携带的数据内容,隐蔽性较高。
2.ICMP协议是无连接,传输不稳定。
工具:
Pingtunnel:YAPT Yet Another Ping Tunnel download | SourceForge.net
GitHub - jamesbarlow/icmptunnel: Tunnel IP over ICMP.
防御方式:
1、检测同一源的ICMP数据包的流量。一个ping命令每秒发送2个数据包,有些是一个数据包,而使用ICMP隧道会发送上千个ICMP数据包。
2、注意那些payload大于64bit的ICMP数据包
3、寻找响应数据包的payload与请求包的payload不一致的ICMP数据包。
4、检查ICMP数据包协议与标签,例如:icmptunnel会在所有的icmp payload前添加“TUNL”标记来识别隧道。