红蓝对抗——加密Webshell“冰蝎” 流量 100%识别
字数 1654 2025-08-25 22:58:41
冰蝎Webshell流量分析与100%识别技术详解
1. 冰蝎Webshell工作原理概述
冰蝎是一款流行的加密Webshell管理工具,其核心特点是通过加密通信来隐藏恶意流量,逃避安全设备的检测。了解其工作原理对于防御和检测至关重要。
2. 冰蝎的两次初始化请求机制
2.1 两次请求的目的
冰蝎在连接webshell时会对目标进行两次请求访问,这是其独特的设计:
- 功能目的:为了实现可以在webshell内添加任意内容(如gif89a文件头或其他标识字符)
- 实现方式:通过比较两次页面返回的差异,记录相同字符的位置
2.2 密钥初始化过程
- 冰蝎发送两次请求到webshell
- 比较两次响应内容的差异
- 记录两次响应中都相同的字符位置:
beginIndex:相同内容的起始位置endIndex:相同内容的结束位置(含换行)
- 后续加密会使用这两个位置参数从数据流中截取被加密的数据
示例:根据数据包,beginIndex:8,endIndex:4,冰蝎会从下标8开始截取到(数据包总长度-4)的数据
2.3 WAF对抗策略
- 干扰方法:对返回类型为"text/html"的数据包添加空格或换行
- 选择原因:
- JSP默认返回类型就是"text/html"
- HTML中添加空格/换行不会影响网页正常显示
- 效果:扰乱冰蝎的数据包解析,导致其无法正常运行
3. 冰蝎Cookie处理漏洞分析
3.1 Cookie处理异常
冰蝎在合并处理Cookie时存在明显缺陷:
- 直接获取响应头中的
Set-Cookie字段 - 未经处理就添加到下一个请求的
Cookie字段中 - 关键问题:未考虑Cookie的属性(如Path、HttpOnly等)
3.2 识别特征
- 异常表现:请求中携带了本应只由服务器设置的Cookie属性
- 检测价值:这是识别冰蝎流量最直接的标志之一
- 正常请求不会携带Cookie属性
- 冰蝎流量会暴露这些属性
4. 冰蝎动态加载机制分析
4.1 动态加载原理
- 每次发送一个class字节码(其他语言类似)
- 通过ASM动态修改class字节码变量内容
- 实现携带参数动态执行
4.2 BasicInfo请求特征
- 在获取密钥后(前两个请求)
- 第三个请求获取BasicInfo(服务器信息)
- 固定特征:
- BasicInfo功能没有动态修改参数
- 导致每次获取BasicInfo的数据包大小固定
5. 100%识别冰蝎流量的方法
5.1 基于两次请求的检测
- 监控同一IP连续两次访问相同URL
- 截取两次响应内容
- 比对相同字符部分
- 截取两次不同的数据
- 判定条件:如果剩余部分是16位的key,则可判定为冰蝎流量
5.2 结合其他特征
- Cookie异常检测(0x02部分描述的问题)
- BasicInfo固定大小检测(0x03部分的特征)
- 组合判定:同时满足上述特征可100%确认冰蝎流量
6. 防御与对抗建议
6.1 主动防御措施
-
对text/html响应添加随机干扰:
- 插入无害的空格/换行
- 改变不影响显示的格式
-
监控异常Cookie行为:
- 检测请求中携带的Cookie属性
- 标记异常行为
6.2 检测规则建议
-
基于时间的检测:
- 短时间内同一URL的两次相同请求
-
基于内容的检测:
- 两次响应相似度高但非完全相同
- 提取中间差异部分判断是否为密钥
-
基于行为的检测:
- 后续请求携带异常Cookie属性
- BasicInfo请求的固定大小特征
7. 技术总结
- 冰蝎通过两次请求初始化密钥是核心特征
- Cookie处理不当暴露明显特征
- 动态加载机制中的固定模式可被检测
- 组合多种特征可实现100%准确识别
- 防御方可通过干扰响应和监控异常行为有效对抗
8. 实际应用建议
- 在WAF中实施上述检测规则
- 对疑似冰蝎流量进行深度分析
- 记录并阻断符合特征的IP
- 定期更新检测规则以适应变种
通过全面理解冰蝎的工作原理和特征,安全团队可以构建有效的检测和防御体系,显著提升对这类加密Webshell的防护能力。