冰蝎作为新款的webshell连接工具,使用效果非常好。本文主要从冰蝎使用过程产生的流量里提取检测特征。部分提取思路从基于流量侧检测冰蝎webshell交互通讯获得了启发。后经过测试发现了关于冰蝎工具的通用检测特征(针对目前已公开的版本)。下面详细介绍本文内容。
目前冰蝎共分为六个版本分别是:V1.0、V1.1、V1.2、V1.2.1、V2.0、V2.0.1。其中从V1.1开始(包含V1.1)新增随机UserAgent支持,每次会话会从17种常见UserAgent中随机选取。其中各版本详细区别看参考冰蝎各版本更新日志。
以下部分主要描述基于流量侧检测冰蝎webshell交互通讯?️没有介绍到的或者笔者经过测试后与其的不同点。以及提取关于冰蝎工具的通用特征
测试环境:
win7 x64运行服务端分别包含phpStudy、java version "10.0.2、apache-tomcat-9.0.10、IIS。
win7 x32运行客户端java version “1.8.0_171”、各版本冰蝎工具。
针对PHP类型,都需要开启扩展openssl冰蝎工具才能正常连接上。
针对V1.0版本的冰蝎工具,笔者经过模拟测试php-webshell如下所示:
如下图所示是首包的关键信息:
首包请求方法 | GET |
---|---|
User-Agent: | Java/1.8.0_171 |
完整URL | 172.16.103.169/shell.php?pass=1 |
首包响应状态码 | 200 |
Content-Length: | 16 |
响应内容 | b748de2f2e199344 |
以下是首个POST包的关键信息:
请求方法 | POST |
---|---|
User-Agent: | Java/1.8.0_171 |
响应状态码 | 200 |
Transfer-Encoding: | chunked |
从首包请求中可以了解到,首包完整的请求URL?️包含了webshell的密码(pass),此处需要考虑的是当密码”pass“变化的时候,请求URL是否也会变化呢?以及响应体长度为16Byte,并且User-Agent为Java/1.8.0_171,经过对比可发现此处的User-Agent的值与测试机JAVA环境有关,故不能作为检测特征。
在首个POST包?️请求测User-Agent为Java/1.8.0_171,响应头?️出现Transfer-Encoding: chunked,通过检索可发现在动态网页?️都有可能出现此值,因此POST方法+“Transfer-Encoding: chunked“的检测误报率也会挺大的。
到这里可以针对V1.0可以想到的检测特征就是针对请求首包的检测。关键点分别如下:
1、请求方法
2、请求URL
3、响应状态码
4、响应体长度
5、响应体内容
冰蝎工具从V1.1开始(包含V1.1)新增随机UserAgent支持,每次会话会从17种常见UserAgent中随机选取。
如下图所示是针对V1.1冰蝎版本的php类webshell的测试:
以下所示是V1.1首包的关键信息:
首包请求方法 | GET |
---|---|
完整URL | 172.16.103.169/shell.php?pass=1224142732 |
首包响应状态码 | 200 |
Content-Length: | 16 |
响应内容 | 821d6147c3f2d9bc |
以下所示是V1.1首个POST包的关键信息:
请求方法 | POST |
---|---|
响应状态码 | 200 |
Transfer-Encoding: | chunked |
在V1.1版本?️除了user-agent:其他信息和V1.0都很类似。
以下是V2.0.1的php测试记录,如下图所示:
以下所示是V2.0.1(php)首包的关键信息:
首包请求方法 | GET |
---|---|
完整URL | 172.16.103.169/shell.php?pass=230 |
首包响应状态码 | 200 |
Content-Length: | 16 |
响应内容 | 86aa2b3ba044f7af |
以下是V2.0.1的asp测试记录,如下图所示:
以下所示是V2.0.1(asp)首包的关键信息:
首包请求方法 | GET |
---|---|
完整URL | 172.16.103.169/shell.php?pass=621 |
首包响应状态码 | 200 |
Content-Length: | 16 |
响应内容 | 7F4FFE3A66F63D50 |
通过对V2.0.1的asp、php类型的测试发现首个请求包和V1.0也是及其类似。
以下所示为更换了密码“pass”后在V2.0.1?️php类型的测试结果,密码更换为了“chopper”。
以下所示是V2.0.1(php)更换密码后首包的关键信息:
首包请求方法 | GET |
---|---|
完整URL | 172.16.103.169/shell.php?chopper=146 |
首包响应状态码 | 200 |
Content-Length: | 16 |
响应内容 | c4854b8ab7e8fc39 |
通过以上旧版本与新版本冰蝎工具做对比发现从请求首包提取检测特征是较为准确的。其中关键元素如下:
1、请求方法
2、请求URL
3、响应状态码
4、响应体长度
5、响应体内容
此处默认为GET
在请求URL?️webshell密码会嵌套其中,如“pass”、“chopper”。因此请求URL?️需要用正则表达式进行匹配。如下所示:
此处默认为200
此处默认为16
此处直接利用yara规则匹配数据包进行规则验证即可。如下所示为规则内容:
yara检测结果如下:
冰蝎作为一款新的webshell连接工具与中国菜刀等不同的是其使用的是特定webshell且通信?(加密),用户反应效果好。与此同时各大厂商也给出了自己的检测规则,笔者此处用的yara检测由于没?️进行区别请求/响应测误报率应该不小。
所有信息如有侵权,请及时与我联系!!!
1、yara3.4.0
2、冰蝎下载地址
3、参考文章(@12306小哥)
4、关于blog?️什么不对的地方或者疑问烦请评论区留言或者私信哈。
5、关于blog用到的数据包等,如有需要请在评论区留下Email。