流量加密又怎样? 多种姿势检测“冰蝎”
字数 1145 2025-08-18 11:39:04

冰蝎(Behinder) WebShell 检测技术详解

一、冰蝎WebShell概述

冰蝎(Behinder)是当前最流行的WebShell客户端工具,其特点是在HTTP明文协议中建立加密隧道,以躲避传统安全设备的检测。本文主要针对冰蝎v2.0.1版本的通讯特征进行分析,并提供详细的检测方法。

二、冰蝎通讯原理

冰蝎使用对称加密算法,通讯过程分为三个阶段:

1. 密钥传递阶段

  • 客户端向服务器请求密钥
  • 密钥传递是完全明文的
  • 密钥为16位随机字符串(小写字母+数字组成)

2. 算法协商阶段

  • 客户端用不同算法加密payload发送给服务器
  • 服务器成功解密则确定使用该算法
  • 常用算法:AES128和XOR(异或)
  • 失败则响应为空,客户端继续尝试其他算法

3. 正式通讯阶段

  • 客户端使用协商的密钥加密payload
  • 通过POST方式发送给服务端
  • 服务端解密执行后将结果加密返回

三、静态检测特征

强特征(误报率低,可单独使用)

1. Accept字段特征

Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2

注:可通过自定义HTTP Header绕过

2. UserAgent字段特征

冰蝎内置的UserAgent列表(部分已过时):

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1(KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0)Gecko/20100101 Firefox/6.0
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50(KHTML, like Gecko) Version/5.1 Safari/534.50
Opera/9.80 (Windows NT6.1; U; zh-cn) Presto/2.9.168 Version/11.5
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64;x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
[...更多详见原文...]

检测策略:同一源IP访问同一URL时命中多个上述UA

3. 密钥特征

密钥传递阶段的响应体:

\r\n\r\n[a-z0-9]{16}$

或通过Content-Length检测:

Content-Length: 16

弱特征(需组合使用降低误报)

1. 密钥传递URL参数

\.(php|jsp|asp|jspx|asa)\?(\w){1,10}=\d{2,3}HTTP/1.1

特征:

  • 单一参数(key-value形式)
  • key为1-10位字母数字(webshell密码)
  • value为2-3位随机数字

2. 加密通讯URL参数

\.(php|jsp|asp|jspx|asa) HTTP/1.1

特征:无URL参数

3. 加密数据上行(Base64编码)

\r\n\r\n[a-zA-Z\d\+\/]{20,}

说明:至少20个Base64字符(因TCP分片需保守设置)

4. 加密数据下行(二进制数据)

\r\n\r\n[\w]{0,6}[^\w\s>]

需配合:

Content-Type: text/html

说明:检测text/html类型中的二进制数据

5. 长连接特征

Connection: Keep-Alive

注:可被绕过

四、动态检测方法

在静态特征告警基础上进行行为关联分析:

  1. 同一URL或源IP在数秒内同时命中:

    • 密钥传递规则
    • 加密通讯规则
  2. 取证解密流程:

    • 从密钥传递告警中提取密钥
    • 从加密通讯告警中提取加密内容
    • 进行解密还原攻击行为

五、解密示例(Python)

import base64
from Crypto.Cipher import AES
import sys

# 设置密钥(从流量中提取)
key = '4d21a8526f30c7e2'

# AES解密函数
def add_to_16(value):
    while len(value) % 16 != 0:
        value += '\0'
    return value

def aes_decode(k, data):
    aes = AES.new(add_to_16(k), AES.MODE_ECB)
    data_encode = data.encode()
    data_64 = base64.b64decode(data_encode)
    data_pass = aes.decrypt(data_64).decode(encoding='UTF-8', errors='ignore')
    return data_pass

# 从HTTP请求提取POST Body
def get_http_info(raw):
    temp_arr = raw.split("\n")
    length = 0
    for one in temp_arr:
        if "Content-Length: " in one:
            length = int(one[16:])
    body = temp_arr[-1]
    return length, body

# 示例HTTP请求
http_request = """POST http://xxx:8080/fff2.php HTTP/1.1
Content-Type:application/x-www-form-urlencoded
[...其他头部...]
60Yp….xYA=="""

body_length, body = get_http_info(http_request)

if body_length > 0:
    # 先尝试XOR解密
    text_64 = base64.b64decode(body)
    text_str = text_64
    text_list = []
    for i in range(len(text_str)):
        text_list.append(chr(ord(text_str[i]) ^ ord(key[i + 1 & 15])))
    clear_text = ''.join(text_list)
    
    if "assert|" in clear_text:  # PHP payload中的关键字
        print(clear_text)
    else:
        # XOR失败尝试AES解密
        clear_text = aes_decode(key, body)
        if "assert|" in clear_text:
            print(clear_text)
        else:
            print("无法解密")
else:
    print("无法提取Post Body")

六、检测建议

  1. 对于工作于七层的IDS:

    • 可检测完整HTTP双向内容
    • 可提高Base64检测长度阈值(减少误报)
  2. 对于工作于四层的IDS:

    • 只能检测TCP单"帧"
    • 需保守设置特征阈值(如Base64最少20字符)
  3. 组合策略:

    • 强特征+弱特征组合使用
    • 静态特征+动态行为分析
  4. 注意事项:

    • 确保提取完整HTTP请求/响应(不解密需完整密文)
    • 确认正则引擎支持断言等高级特性

通过以上方法可有效检测冰蝎WebShell的加密通讯行为,实际部署时可根据网络环境调整检测策略和阈值。

冰蝎(Behinder) WebShell 检测技术详解 一、冰蝎WebShell概述 冰蝎(Behinder)是当前最流行的WebShell客户端工具,其特点是在HTTP明文协议中建立加密隧道,以躲避传统安全设备的检测。本文主要针对冰蝎v2.0.1版本的通讯特征进行分析,并提供详细的检测方法。 二、冰蝎通讯原理 冰蝎使用对称加密算法,通讯过程分为三个阶段: 1. 密钥传递阶段 客户端向服务器请求密钥 密钥传递是完全明文的 密钥为16位随机字符串(小写字母+数字组成) 2. 算法协商阶段 客户端用不同算法加密payload发送给服务器 服务器成功解密则确定使用该算法 常用算法:AES128和XOR(异或) 失败则响应为空,客户端继续尝试其他算法 3. 正式通讯阶段 客户端使用协商的密钥加密payload 通过POST方式发送给服务端 服务端解密执行后将结果加密返回 三、静态检测特征 强特征(误报率低,可单独使用) 1. Accept字段特征 注:可通过自定义HTTP Header绕过 2. UserAgent字段特征 冰蝎内置的UserAgent列表(部分已过时): 检测策略:同一源IP访问同一URL时命中多个上述UA 3. 密钥特征 密钥传递阶段的响应体: 或通过Content-Length检测: 弱特征(需组合使用降低误报) 1. 密钥传递URL参数 特征: 单一参数(key-value形式) key为1-10位字母数字(webshell密码) value为2-3位随机数字 2. 加密通讯URL参数 特征:无URL参数 3. 加密数据上行(Base64编码) 说明:至少20个Base64字符(因TCP分片需保守设置) 4. 加密数据下行(二进制数据) 需配合: 说明:检测text/html类型中的二进制数据 5. 长连接特征 注:可被绕过 四、动态检测方法 在静态特征告警基础上进行行为关联分析: 同一URL或源IP在数秒内同时命中: 密钥传递规则 加密通讯规则 取证解密流程: 从密钥传递告警中提取密钥 从加密通讯告警中提取加密内容 进行解密还原攻击行为 五、解密示例(Python) 六、检测建议 对于工作于七层的IDS: 可检测完整HTTP双向内容 可提高Base64检测长度阈值(减少误报) 对于工作于四层的IDS: 只能检测TCP单"帧" 需保守设置特征阈值(如Base64最少20字符) 组合策略: 强特征+弱特征组合使用 静态特征+动态行为分析 注意事项: 确保提取完整HTTP请求/响应(不解密需完整密文) 确认正则引擎支持断言等高级特性 通过以上方法可有效检测冰蝎WebShell的加密通讯行为,实际部署时可根据网络环境调整检测策略和阈值。