冰蝎简介
冰蝎是一个使用Java语言编写的新型Webshell客户端,区别于中国菜刀它通过动态加密其通信流量,使得传统的网络安全设备,如Web应用防火墙(WAF)和入侵检测系统(IDS),难以对其进行有效检测。这种加密方式大大增加了网络威胁狩猎的难度。冰蝎的一个显著特性是,它对用户交互过程中的数据流量进行对称加密,加密过程使用的密钥是随机生成的,这使得其通信流量很难被检测到。
通讯原理
分为两个阶段:密钥协商,加密传输
第一阶段:密钥协商
1、攻击者首先通过GET或者POST传参的方法对服务器请求密钥,譬如:http://127.0.0.1/webshell.aspx?password=6
2、服务器使用生成的随机数的MD5值的前十六位当作密钥K并且存储在全局变量$_SESSION中,并且发给攻击者
第二阶段:加密传输
1、攻击者得到了密钥K,将K作为密钥进行AES128或者异或加密加密手法将执行命令发送到服务段
2、服务端得到密文之后使用K进行解密
3、将得到的执行结果使用K进行AES加密之后传回攻击者
详细流程如图:
特征分析
Accept字段
流量特征
Behinder在通信过程中通常会携带accept以下字段;Accept: application/json, text/javascript, /; q=0.01
监测思路
在这里面他可以接收任何文件,但是倾向于application/json, text/javascript,上图就是冰蝎4.0的一段流量,在这里请求包的第二行的Accept字段会体现这一特征
Content-type字段
流量特征
很固定,Content-type: application/x-www-form-urlencoded
监测思路
因为Contend-Type字段很固定,但是这个通常不能决定性的说明什么,这个可以作为一个很好的辅助特征验证手段
User-Agent字段
流量特征
Bihinder设置了10种UA头,每次连接会使用其中一个。
1 2 3 4 5 6 7 8 9 10 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36" ,
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0" ,
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" ,
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55" ,
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" ,
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0" ,
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36" ,
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36" ,
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0" ,
"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"
|
下面流量中就使用了Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0这个UA头
监测思路
nort编写可以用content:“User-Agent”;content:“浏览器版本”。来匹配相应的十个浏览器。发现异常流量的时候去寻找UA头是不是匹配这十个中的一个
Content-Length字段
流量特征
长度一般很大,如:Content-Length: 4248
监测思路
看请求包如果发现Content-Length字段很大,可以作为弱特征去辅证为冰蝎流量
长连接
在请求包里面会有一个Connection:Keep-Alive字段代表长连接,这个在前文提到过
监测思路
可以作为辅助认证为冰蝎流量的流量特征,可以与前面Content-Length字段作结合。
固定的请求头与响应头
在这里面介绍一下Default_aes协议加密流量特征
Default_aes协议加密流量特征
请求字节头:m7nCS8n4OZG9akdDlxm6O
响应头:mAUYLzmqn5QPDkyI5lvSp6DmrC24FW39Y4YsJhUqS7
加密解密函数如下:
连接密码
流量特征
默认时所有的冰蝎4.0的webshell都有密钥:“e45e329feb5d925b”,该密钥就是rebeyond的32位MD5的前16位
端口
流量特征
看了一下大佬的文章发现,冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右,每连接一次,每建立一次新的连接,端口就依次增加,我本地看了一下发现51000左右也有,特征会依次增加。
参考文章
https://www.freebuf.com/articles/network/345803.html