行业新闻

基于统计分析的ICMP隧道检测方法与实现

基于统计分析的ICMP隧道检测方法与实现

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

一、概述

在企业内网环境中,ICMP协议是必不可少的网络通信协议之一,被用于检测网络连通状态,通常情况下,防火墙会默认放此协议。由于防火墙对ICMP协议开放,恶意攻击者常会利用ICMP协议进行非法通信。例如,在黑客攻击中经常出现一种情况是,黑客通过某一种方式取得了一台主机的权限,得到了一些文件,比如域hash,密码文件之类的东西,需要回传至本地进行破解,但是防火墙阻断了由内网发起的请求,只有icmp协议没有被阻断,而黑客又需要回传文件,这个时候如果黑客可以ping通远程计算机,就可以尝试建立ICMP隧道,ICMP隧道是将流量封装进 ping 数据包中,旨在利用 ping数据穿透防火墙的检测。现在市面上已经有了很多类似的工具了,比如 icmptunnel、ptunnel、icmpsh等。

本文将为大家介绍一种简单而有效的icmp隧道检测技术。我们将利用Spark Streaming,来帮助我们检测ICMP隧道。

二、ICMP隧道

2.1 工作机理

ICMP(Internet ControlMessages Protocol,网间控制报文协议)是TCP/IP协议族的子协议,是一种面向无连接的协议。ICMP协议的结构,如图1所示:

图片名称

图1

经常使用的ping命令就是基于ICMP协议,windows系统下ping默认传输的是: abcdefghijklmnopqrstuvwabcdefghi,共32bytes,如图2所示:

图片名称

图2

linux系统下,ping默认传输的是48bytes,前8bytes随时间变化,后面的固定不变,内容为!”#$%

请求响应数据包不一致;

15秒内的数据包个数、非正常长度数据包个数、异常内容数据包个数、去重后的payload的个数 大于自定义的阈值检出(经内网测试,个别路由器隔几个小时会发送有异常内容的但是内容只有几个字符不一样的payload心跳包,通过增加去重(使用汉明距离去重,差别不超过3个字符的认为一样)后的payload的个数大于阈值来过滤)。

鉴于Icmp隧道特点的多样性,只要满足3者之一,就会检出,对于一些极端异常的ICMP隧道产生的包,比如隧道只有请求包没有响应包即一直往外发数据,则id_seq去重后为10(10次全是请求包,且seq递增),payload去重后为10,无法单独通过2检出,但是可以满足3,一样会检出,不会漏报。

五、模型效果

5.1 负样本检测效果

目前测试过程中使用的已知负样本有以下几种:

icmpTunnel样本,使用icmpTunnel隧道工具造的样本;

icmptransmitter样本,使用icmptransmitter隧道工具造的样本;

icmpsh样本,使用icmpsh隧道工具造的样本;

badping样本,使用python脚本手动造的icmp的异常数据包。

异常样本检测准确率如下:

图片名称

5.2 正样本检测效果

目前测试过程中使用的已知正样本有以下几种:

正常Ping数据包,Ping命令产生的数据包,平台包括linux/win/mac/solaris/android/ios,payload内容如下:abcdefg12345等。

网络设备心跳包,路由器等网络设备会定时发送的一些心跳包,payload内容如下:DataBuffer 0000001、DataBuffer 0000002等。

正常样本误报率如下,其中Ios平台偶尔有误报:

图片名称

六、总结

本文介绍了基于统计的检测ICMP隧道方法和落地实施中的一些技术细节。首先,基于统计的ICMP检测重点是需要了解ICMP隧道的工作原理和一些特征指标,只有较好的指标才能保证在真实环境中的检出效果。其次,为了达到在线实时检测,我们在文中介绍了结合Spark Streaming进行实时统计各种指标,检出超出阈值的数据。最后,通过分别对正样本和负样本进行测试,调整检出阈值,提高了检测准确度。

作者:斗象能力中心TCC-Chris


TCC团队长期招聘,包含各细分领域安全研究、机器学习、数据分析、大数据研发、安全研发等职位。感兴趣不妨联系我们。

Email: alex.xu@tophant.com。

关闭