冰蝎shell_红蓝对抗——加密Webshell“冰蝎”攻防

演练中,第一代webshell管理工具“菜刀”的攻击流量特征明显,容易被安全设备检测到,攻击方越来越少使用,加密webshell正变得越来越流行,由于流量加密,传统的WAF、WebIDS设备难以检测,给威胁监控带来较大挑战。这其中最出名就是“冰蝎”,“冰蝎”是一款动态二进制加密网站管理客户端,演练中给防守方造成很大困扰,本文将对“冰蝎”的加密原理、流量特征、检测方案进行探讨。

0x01 “冰蝎”介绍&加密原理

“冰蝎”项目地址:https://github.com/rebeyond/Behinder

“冰蝎”目前最新版本为v2.1,兼容性已经日益完善,加密不再依赖PHP openssl扩展功能,同时支持了简单的ASP。主体功能方面包括虚拟终端、socks代理、文件管理、反弹shell、数据库管理等等,功能强大。

加密原理方面,以PHP环境为例,

《利用动态二进制加密实现新型一句话木马之PHP篇》这篇文章对冰蝎的原理已经做了详细的分析,简要介绍一下加密流程:

首先客户端以Get形式发起带密码的握手请求,服务端产生随机密钥并写入Session。

客户端将源代码,如assert|eval("phpinfo();”)利用AES加密,发送至服务端,服务端收到之后先进行AES解密,得到中间结果字符串assert|eval("phpinfo();")。

服务端利用explode函数将拆分为一个字符串数据,索引为0的元素为字符串assert,索引为1的元素为字符串eval("phpinfo();")。

以可变函数方式调用索引为0的数组元素,参数为索引为1的数组元素,即为assert("eval(\"phpinfo;\")") 。

0x02 加密Webshell流量分析

通过wireshark进行抓包分析,流量如下:

按照流程,客户端首先get请求生产随机密钥,server返回生成的16位密钥:0x7037af5d95561f3d,对应的session ID为 466geshjq6hr15kbmd72ju24g5。

得到密钥后,客户端对需要执行的命令进行AES加密,加密后的通讯流量如下,没有任何攻击特征,安全设备难以根据特征进行检测:

我们用密钥对该信息进行解密:

发现解密后执行的命令被base64编码了,进一步进行base64解码后,得到执行的命令如下:

@error_reporting(0);

function getSafeStr($str){

$s1 = iconv('utf-8','gbk//IGNORE',$str);

$s0 = iconv('gbk','utf-8//IGNORE',$s1);

if($s0 == $str){

return $s0;

}else{

return iconv('gbk','utf-8//IGNORE',$str);

你可能感兴趣的:(冰蝎shell)