ICMP隐蔽隧道检测(1)-流量分析篇ICMP(Internet Control Message Protocol)协议主要用于在IP主机、路由器之间传递控制消息,如目的不可达、时间超过、参数问题等。然而,ICMP协议也被用于建立隐蔽隧道,以绕过防火墙或其他网络限制,传输非ICMP协议的数据。本文将通过流量分析的方法,探讨如何检测ICMP隐蔽隧道。一、了解ICMP协议报文1. ICMP数据帧格式ICMP报文由类型(Type)、代码(Code)、校验和(Checksum)以及数据(Data)等字段组成。Type(类型):标识ICMP报文的类型,占用1字节。目前定义的类型包括Echo响应(0)、目的不可达(3)、重定向(5)、Echo请求(8)等。Code(代码):标识对应ICMP报文的代码,与类型字段一起共同标识了ICMP报文的详细类型,占用1字节。Checksum(校验和):对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错,占用2字节。2. ICMP请求/应答帧格式ICMP请求/应答报文是ICMP协议中最常用的报文类型之一。Echo请求(Type=8)和Echo响应(Type=0)是其中最常见的两种。Echo请求:用于测试目的主机是否可达,通常用于ping命令。Echo响应:对Echo请求的回应,确认目的主机可达。在ICMP请求/应答报文中,Identifier和Sequence Number字段用于关联请求报文和应答报文。Identifier字段表示ICMP进程,Sequence Number字段用于区分不同的请求报文。二、ICMP正常流量分析1. Windows平台在Windows系统下,ping命令默认传输的数据是"abcdefghijklmnopqrstuvwabcdefghi",共32字节。这些数据在传输过程中会被转换为16进制表示。2. Linux平台在Linux系统下,ping命令默认传输的数据是" !”#$%&'()+,-./01234567",共48字节。同样,这些数据在传输过程中也会被转换为16进制表示。三、ICMP隐蔽隧道流量分析ICMP隧道技术利用ICMP协议来传输非ICMP协议的数据。这种技术通常用于绕过防火墙或其他网络限制。1. icmpsh建立隧道及数据包分析icmpsh是一种基于ICMP协议的shell工具,可以用于建立隐蔽隧道。在靶机执行icmpsh命令建立隧道连接后,可以抓包查看数据包负载部分是否包含特定的命令字符串。2. icmptunnel建立隧道及数据包分析icmptunnel是另一种基于ICMP协议的隧道工具。在攻击机执行ssh登陆靶机时,可以抓包物理网卡查看通讯连接是否全部变成ICMP协议。如果所有通讯流量都被封装在ICMP协议中传输,则可以判断存在ICMP隧道。四、总结1. ICMP Ping正常通讯特征总结一个正常的ping每秒最多只会发送两个数据包。正常的icmp数据包里,请求数据包与对应的响应数据包内容一样。数据包中payload的大小固定,Windows下为32bytes,Linux下为48bytes。数据包中payload的内容固定,Windows下为"abcdefghijklmnopqrstuvwabcdefghi",Linux下为" !”#$%&'()+,-./01234567"。Type类型只有2种,8和0,8为请求数据,0为响应数据。2. ICMP隧道攻击通讯特征总结一个正常的ping每秒最多只会发送两个数据包,而使用ICMP隧道的服务器在同一时间会产生大量ICMP数据包。请求数据包与对应的响应数据包内容不一样。数据包中payload的大小可以是任意大小,通常大于64bytes。个别ICMP隧道工具产生的数据包内容前面会增加'TUNL'标记以用于识别隧道。3. ICMP隧道攻击检测思路检测同一来源数据包的数量:正常ping每秒只会发送2个数据包,而ICMP隧道可以每秒发送多个。检测数据包中Payload的大小:正常ping产生的数据包Payload的大小是固定的,而ICMP隧道数据包大小可以任意。检测响应数据包中Payload跟请求数据包是否不一致:正常Ping产生的数据包请求响应内容一致,而ICMP隧道请求响应数据包基本不一致。检测数据包中Payload的内容:正常ping产生的Payload为固定字符串,ICMP隧道的payload可以为任意。检测数据包的协议标签可能存在特殊字段:如icmptunnel会在所有的ICMP Data前面增加'TUNL'标记以用于识别隧道。检测数据包ICMP Data里面可能存在一些系统命令:如'whoami'、'ls'、'ipconfig'等。通过以上流量分析的方法,可以有效地检测ICMP隐蔽隧道攻击。



































