冰蝎各个版本流量特征

冰蝎2.0

  • 使用AES加密 + base64编码,AES使用动态密钥对通信进行加密
  • 进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
  • 因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎

冰蝎3.0

  • 使用AES加密 + base64编码,
  • 取消了2.0的动态获取密钥,使用固定的连接密钥,AES加密的密钥为webshell连接密码的MD5的前16位,默认连接密码是”rebeyond”(即密钥是md5(‘rebeyond’)[0:16]=e45e329feb5d925b)。
  • 进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
  • 3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。

冰蝎4.0流量特征

HTTP 请求头

  • 它的几个 Accept 头通常是固定的,所以这里可以作为一个主判断点(弱特征)
Accept: application/json, text/javascript,*/*; q=0.01    //意思是浏览器可接受任何文件,但最倾向application/json 和 text/javascript。
Accept-Encoding: identity
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
  • 冰蝎4.0当中的 UA 是十选一的,与冰蝎的前述版本相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
  • Content-Length 较大
Content-Length:8244

可以作为辅助特征进行检测。

  • Content-Type字段(弱特征)
Content-type: Application/x-www-form-urlencoded
  • 冰蝎通讯默认使用长连接(避免了频繁的握手造成的资源开销)

造成的影响是包中存在如下 HTTP 头,可以作为辅助特征进行检测。(默认情况)

Connection: Keep-Alive
  • 端口检测

冰蝎与 webshell 建立连接的同时,java 也与目的主机建立 tcp 连接,每次连接使用本地端口在49700(比较大的端口数)左右,每连接一次,每建立一次新的连接,端口就依次增加。此处可以对符合该范围内的端口告警。

  • 针对恶意脚本内容的检测

冰蝎 shell 当中的恶意 php 脚本,头都是一样的,以 @error_reporting开头

@error_reporting(0);  
function main
  • 默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同。
  • 有固定的请求头和响应头

请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M ,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd

  • 提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。

v4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。

冰蝎3.0与4.0有什么区别

冰蝎4.0加密流量特征与3.0版相差比较大。

首先是加密方式,4.0客户端自带xor、xor_base64、aes、json和image等五种加密方式,每种加密方式都支持自定义加解密代码

加密方式的选择取决于服务端是否存在openssl拓展。如果服务端能够加载openssl拓展,就使用AES128解密,否则就用base64解码,然后使用key进行异或加密。

其次是传输方式,冰蝎4.0引入了okhttp3客户端,因此HTTP协议交互、TLS协议交互与3.0的客户端也有显著不同。

冰蝎4.0相比3.0增加了许多特性,如取消硬编码通信协议,传输协议完全自定义等

哥斯拉流量特征

特征检测

1、发送一段固定代码(payload),http响应为空

2、发送一段固定代码(test),执行结果为固定内容

3、发送一段固定代码(getBacisInfo)

哥斯拉会响应3次

第1个请求会发送大量数据,该请求不含有任何Cookie信息,服务器响应报文不含任何数据,但是会设置PHPSESSID,后续请求都会自动带上该Cookie。

第2个请求中已经自动带上了第1个请求中服务器响应返回的Cookie值,并且第2个请求中只有少量的数据。

第3个请求与第2个请求完全一致

哥斯拉支持多种加密方式,采用了和冰蝎2.0类似的密钥交换方式。它的webshell需要动态生成,可以根据需求选择不同的加密方式。

哥斯拉静态特征

在默认脚本编码的情况下,jsp会出现xc、pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解码等特征。

哥斯拉动态特征

  • User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。
  • Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。
  • Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。
  • 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。

哥斯拉的解码

对响应包进行处理的话,首先去掉响应包数据的前16位和后16位,然后对剩下部分进行base64解码+aes解密,最后gzip解压缩即可