冰蝎-特征检测及报文解密

原创 小让 重生信息安全

前言

19年驻场于某金融单位。参加19年9月、11月两次攻防演练,负责攻防演练组织、技术支持和复盘。期间,多个攻击队伍使用冰蝎 webshell ,防守方监测时确实各 IDS 确实报出 webshell 连接,但无法看到请求和返回详情。现市场已存在可解密冰蝎密文的IDS,由于我所在部门,三家厂商的安全设备均不可判断为冰蝎 webshell 和解密冰蝎,于是客户要求想办法做密文解密。下载pcap包截图如下:
16963-xrpot0poc9c.png
注:本文以冰蝎v2.0.1版本PHP语言为阐述。

一、冰蝎-动态加密算法

(一) 冰蝎简介

冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端。老牌 Webshell 管理神器——中国菜刀的攻击流量特征明显,容易被各类安全设备检测,实际场景中越来越少使用,加密 Webshell 正变得日趋流行。
由于通信流量被加密,传统的 WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密秘钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。
冰蝎目前最新版本为v2.0.1,兼容性已经日益完善,包括虚拟终端、Socks代理、文件管理、反弹shell、数据库管理等强大的功能,方便部署使用。
73377-s3h4ubo6xu.png

(二) 冰蝎工具通信原理

冰蝎的通信过程可以分为两个阶段:
密钥协商
加密传输

1. 第一阶段-密钥协商

1)攻击者通过 GET 或者 POST 方法,形如 http://127.0.0.1/shell.aspx?pass=645 的请求服务器密钥;
2)服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。

2. 第二阶段-加密传输

1)客户端把待执行命令作为输入,利用 AES 算法或 XOR 运算进行加密,并发送至服务端;
2)服务端接受密文后进行 AES 或 XOR 运算解密,执行相应的命令;
3)执行结果通过AES加密后返回给攻击者。
93198-4wlchny4jp5.png

Wireshark下抓取冰蝎(v2.0.1)数据包详情如下图1-3、1-4:
86020-4g1qfi6y6nt.png
70069-xu8j7gblmv.png

二、冰蝎特征检测

总结冰蝎在流量交互中的特征,这些特征可分为两类。一类是可绕过特征,这类特征攻击者可通过构造报文进行绕过,致使设备检测不到冰蝎 webshell 特征。另一类是非可绕过特征,攻击者在某些情景无法更改 HTTP 某些字段,致使有固定报文字段可供设备检测。使用单个特征误报较高,但多个特征配合使用可降低误报,推荐多个特征搭配使用,进一步提升特征检测的准确性。
(一) 可绕过特征

  1. Accept字段

Accept是HTTP协议常用的字段,但冰蝎默认 Accept 字段的值却很特殊,这个特征存在于冰蝎的任何一个通讯阶段。如下:
Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2

30218-j617se5ztp.png

  1. UserAgent字段

冰蝎内置了十余种 UserAgent ,每次连接 shell 会随机选择一个进行使用。如果发现历史流量中同一个源IP访问某个URL时,命中了以下列表中多个 UserAgent ,可基本确认为冰蝎特征。以下 UserAgent 列表是从冰蝎的jar包中提取。
59426-at3rnmxl1er.png

  1. 长连接

冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection。
Connection: Keep-Alive
96723-j6vvau3a6qh.png

(二) 非可绕过特征

  1. 密钥传递时URL参数

密钥传递时,URI只有一个参数,key-value型参数,只有一个参数。Key是黑客给shell设置的密码,一般为10位以下字母和数字,很少有人设置特殊字符做一句话密码的(少数情况我们不考虑)。而Value一般是2至3位随机纯数字。另外webshell的扩展名一般为可执行脚本,如下:
\.(php|jsp|asp|aspx)\?(\w){1,10}=\d{2,3} HTTP/1.1
35306-iwsa2zg62ws.png

  1. 加密时的URL参数

在加密通讯过程中,无URL参数。如下:
\.(php|jsp|asp|jspx|asa) HTTP/1.1

  1. 传递的密钥

加密所用密钥是长度为16的随机字符串,小写字母+数字组成。密钥传递阶段,密钥存在于Response Body中。正则如下:
^[a-fA-F0-9]{16}$
50680-g7b856am5m.png
返回随机密钥如图
4.加密数据上行

在加密通讯时,php/jsp shell 会提交base64编码后的请求数据。用如下正则便可以很好的匹配。数字20是指定的字符出现至少20个才会匹配。正则如下:
\r\n\r\n[a-zA-Z\d\+\/]{20,}

  1. 密数据下行

该特征同样存在于加密通讯时,在返回包中的数据是加密后的二进制数据。这里使用正则的“非”匹配二进制非常见字符。正则如下:
” [^\w\s><=\-‘”\:\;\,\!\(\)\{\}][\w]{2}[^\w\s><=\-‘”\.\:\;\,\!\(\)\{\}][a-zA-Z\d]{2}”

三、冰蝎报文解密

(一) 解密思路

在服务器开启 PHP OpenSSL 扩展脚本的情况下,冰蝎密文采用对称加密算法AES加密,加密后还会进行 base64 编码。在客户端发起密钥协商后,会返回16位明文随机密钥。在安全监控设备采集流量较全的情况下,可截获密文流量和密钥,通过解密解码平台即可获取冰蝎密文详情。
(二) 准备工具

AES在线解码 (http://tools.bugscaner.com/cryptoaes/
BASE64在线解码(https://tool.oschina.net/encrypt?type=3
(三)实现方式

  1. 获取密钥

从请求密钥的数据包中获取密钥:29ab481053a0ebeb
71508-qr6j7hmcrb.png

  1. 获取请求密文、返回密文
    63703-b0ypmah5l1o.png

56693-uw4njkqmhyd.png

  1. 借助在线解密解码平台

(1)输入密钥和请求密文,解密后为 base64 编码;base64解码
12117-amexzyq1ftc.png

05828-yvdjrp5apeb.png
(2)输入密钥和返回密文,解密后为base64编码;base64解码
17199-3xdwjd30d5q.png
46415-11kva6wswnm9.png
本文以 php 语言来研究,在服务器开启 PHP OpenSSL 扩展脚本的情况下,冰蝎密文采用对称加密算法AES加密,加密后还会进行base64编码。在客户端发起密钥协商后,会返回16位明文随机密钥。在安全监控设备采集流量较全的情况下,可截获密文流量和密钥,通过解密解码平台即可获取冰蝎密文详情。
本文是个人网上查阅相关资料研究和搭环境抓包所写,如有问题还望指正

原创文章,作者:运营小姐姐,如若转载,请注明出处:http://www.csxxaq.com/yc/747.html
win10系统VMware虚拟机无法运行(报错)的解决办法
« 上一篇 05-20
没想到吧?特朗普“成吨肮脏材料”被买走了!
下一篇 » 05-21

相关推荐

一篇文章带你入门移动安全

作者:ice - 重生信息安全 这篇文章集合了一些入门移动安全的基础渗透知识,希望可以能给想入门移动安全小伙伴们一些收获。1、一些东西你必须要知道的apk...