从一个流量样本学习webshell及CS流量的解密与分析
字数 2437 2025-10-01 14:05:52

Cobalt Strike 与哥斯拉Webshell流量解密与分析技术详解

一、样本背景

本教学文档基于2025年"泰山杯"山东省网络安全大赛C组数据安全赛道流量样本,包含Webshell(哥斯拉)和Cobalt Strike流量的解密与分析技术。

二、哥斯拉Webshell流量分析

2.1 流量识别特征

  1. 初始握手包

    • 请求形式:pass名=加密数据(示例:suger=加密数据
    • 请求数据量较大
    • 请求头不携带Cookie
    • 响应包无数据但设置PHPSESSID
  2. 后续通信包

    • 请求包:pass名=加密数据形式,数据量较小
    • 响应包:固定格式"前后16位MD5值,中间32位加密字符串"
  3. Header弱特征

    • User-Agent、Accept、Accept-Language头包含固定值

2.2 加密方式分析

  • 类型:XOR_BASE64
  • 加密算法:Base64 + 异或加密
  • 密钥参数:
    • pass='suger'
    • key='a5717a649d346ed0'(16字节固定XOR循环密钥)

2.3 解密算法实现

# 哥斯拉解密脚本核心逻辑
def decrypt_godzilla(data, key):
    # 1. 去除pass=前缀(请求报文)
    # 2. URL解码
    # 3. Base64解码
    # 4. 使用16字节XOR密钥循环异或解密
    # 5. 响应报文需先去除前后16位MD5校验值
    return decrypted_data

2.4 实战解密步骤

  1. 通过Wireshark大小排序定位最大流量包
  2. 使用解密脚本提取加密数据:
    python3 哥斯拉解密.py req-dec ./request/request.txt --raw > ./response/1.bin
    
  3. 修复文件头,提取压缩包

三、Cobalt Strike流量分析

3.1 CS架构与工作流程

  1. 三大组件

    • TeamServer(服务端)
    • Client(客户端)
    • Beacon(被控端代理)
  2. 通信流程

    • 初始投递 → Stager下载 → Beacon上线 → 心跳通信 → 指令执行

3.2 流量特征详解

3.2.1 初始投递阶段

  • HTTP GET请求
    • 路径符合checksum8算法(32位结果92,64位结果93)
    • 4-5位随机字母数字组合(如/Yle2, /FJwV)
  • User-Agent异常
    • 拼写错误("WIndows NI")
    • 非常见写法("W0W64")
    • 异常参数("0 B01IE8_v1")
  • 响应特征
    • Content-Type: application/octet-stream
    • 包含PE文件头(MZ)

3.2.2 Beacon心跳阶段

  • 周期性请求:固定间隔(默认60秒)GET请求
  • Cookie元数据
    • 长Base64字符串(x86约172字符,x64约344字符)
    • 包含RSA加密的主机信息(用户名、主机名、进程名等)
  • SSL/TLS特征
    • JA3/JA3s指纹固定(如Windows 10 HTTPS Beacon的JA3:28a2c9bd18a11de089ef85a160da29e4)
    • 证书Issuer CN和Subject CN均为"Major Cobalt Strike"

3.2.3 指令执行阶段

  • POST请求回传:路径类似/submit.php?id=xxx
  • 心跳包长度突变:响应数据长度突增(可达300%)
  • 横向移动:异常SMB、RDP或WinRM协议流量
  • 数据渗出:大流量HTTP POST外传数据

3.3 Beacon逆向分析

  1. 定位下载路径

    • Wireshark过滤器:http.request.uri matches "/....$"
    • 验证checksum8值
  2. Beacon配置提取

    • HTTP类型Beacon
    • C2服务器:192.168.33.143:8080
    • GET路径:/ptj
    • POST路径:/submit.php

3.4 CS流量解密技术

3.4.1 获取解密密钥的两种方法

方法一:获取RSA私钥(从TeamServer)

  1. 私钥文件:.cobaltstrike.beacon_keys(Java序列化对象)
  2. 提取工具:使用javaobj等Python库解析
  3. 解密流程:
    • 解密Beacon元数据(HTTP Cookie/POST中的Base64数据)
    • 获取16字节Raw Key
    • SHA-256哈希:前16字节为AES密钥,后16字节为HMAC密钥

方法二:内存转储提取(从受害主机)

  1. 获取内存转储:
    procdump -mp <pid>
    
  2. 密钥搜索:
    • CS 3.x:搜索0x0000BEEF开头数据
    • CS 4.x:暴力碰撞16字节候选密钥

3.4.2 实战解密过程

步骤1:获取元数据

  • 过滤器:
    http and ((ip.src == 192.168.33.143 and ip.dst == 192.168.33.142) or (ip.src == 192.168.33.142 and ip.dst == 192.168.33.143))
    
  • 定位Cookie中的Base64元数据

步骤2:解密元数据

cs-decrypt-metadata.py -f .cobaltstrike.beacon_keys <metadata_base64>

输出:

  • Raw key: b0dbd2e724e2a68105ba599a1ad8f30d
  • AES key: e2d919d0bff758aeb1167e38ff293edf
  • HMAC key: 25a496ed7274cb32d46d600205781afb

步骤3:解密流量

cs-parse-http-traffic.py -r b0dbd2e724e2a68105ba599a1ad8f30d -Y "http过滤表达式" traffic.pcap

步骤4:分析解密结果

  • 服务端指令:ipconfig、whoami等系统命令
  • 执行结果回传
  • 提取压缩包密码等关键信息

四、防御检测建议

4.1 哥斯拉检测

  • 检测HTTP请求中固定pass参数名
  • 监控Base64+异或加密模式
  • 识别Header中的固定特征

4.2 Cobalt Strike检测

  1. 初始访问检测

    • 实时计算URI的checksum8值(92/93告警)
    • 检测异常User-Agent
    • 监控包含PE头的下载响应
  2. 心跳通信检测

    • 识别固定间隔的外连请求
    • 检测Cookie中长Base64字符串
    • SSL/TLS指纹比对
  3. 行为检测

    • 监控心跳包长度异常波动
    • 检测内网异常协议流量
    • 监控非业务时间大流量外传

五、工具汇总

  1. 哥斯拉解密:自定义Python解密脚本
  2. CS元数据解密:cs-decrypt-metadata.py
  3. CS流量解析:cs-parse-http-traffic.py
  4. Beacon分析:1768.py(Didier Stevens工具)

通过本教学文档详细的分析流程和技术要点,安全分析人员可有效识别和解密Webshell与Cobalt Strike的加密流量,提取关键攻击证据并建立相应的防御检测策略。

Cobalt Strike 与哥斯拉Webshell流量解密与分析技术详解 一、样本背景 本教学文档基于2025年"泰山杯"山东省网络安全大赛C组数据安全赛道流量样本,包含Webshell(哥斯拉)和Cobalt Strike流量的解密与分析技术。 二、哥斯拉Webshell流量分析 2.1 流量识别特征 初始握手包 : 请求形式: pass名=加密数据 (示例: suger=加密数据 ) 请求数据量较大 请求头不携带Cookie 响应包无数据但设置PHPSESSID 后续通信包 : 请求包: pass名=加密数据 形式,数据量较小 响应包:固定格式"前后16位MD5值,中间32位加密字符串" Header弱特征 : User-Agent、Accept、Accept-Language头包含固定值 2.2 加密方式分析 类型:XOR_ BASE64 加密算法:Base64 + 异或加密 密钥参数: pass='suger' key='a5717a649d346ed0'(16字节固定XOR循环密钥) 2.3 解密算法实现 2.4 实战解密步骤 通过Wireshark大小排序定位最大流量包 使用解密脚本提取加密数据: 修复文件头,提取压缩包 三、Cobalt Strike流量分析 3.1 CS架构与工作流程 三大组件 : TeamServer(服务端) Client(客户端) Beacon(被控端代理) 通信流程 : 初始投递 → Stager下载 → Beacon上线 → 心跳通信 → 指令执行 3.2 流量特征详解 3.2.1 初始投递阶段 HTTP GET请求 : 路径符合checksum8算法(32位结果92,64位结果93) 4-5位随机字母数字组合(如/Yle2, /FJwV) User-Agent异常 : 拼写错误("WIndows NI") 非常见写法("W0W64") 异常参数("0 B01IE8_ v1") 响应特征 : Content-Type: application/octet-stream 包含PE文件头(MZ) 3.2.2 Beacon心跳阶段 周期性请求 :固定间隔(默认60秒)GET请求 Cookie元数据 : 长Base64字符串(x86约172字符,x64约344字符) 包含RSA加密的主机信息(用户名、主机名、进程名等) SSL/TLS特征 : JA3/JA3s指纹固定(如Windows 10 HTTPS Beacon的JA3:28a2c9bd18a11de089ef85a160da29e4) 证书Issuer CN和Subject CN均为"Major Cobalt Strike" 3.2.3 指令执行阶段 POST请求回传 :路径类似 /submit.php?id=xxx 心跳包长度突变 :响应数据长度突增(可达300%) 横向移动 :异常SMB、RDP或WinRM协议流量 数据渗出 :大流量HTTP POST外传数据 3.3 Beacon逆向分析 定位下载路径 : Wireshark过滤器: http.request.uri matches "/....$" 验证checksum8值 Beacon配置提取 : HTTP类型Beacon C2服务器:192.168.33.143:8080 GET路径:/ptj POST路径:/submit.php 3.4 CS流量解密技术 3.4.1 获取解密密钥的两种方法 方法一:获取RSA私钥(从TeamServer) 私钥文件: .cobaltstrike.beacon_keys (Java序列化对象) 提取工具:使用 javaobj 等Python库解析 解密流程: 解密Beacon元数据(HTTP Cookie/POST中的Base64数据) 获取16字节Raw Key SHA-256哈希:前16字节为AES密钥,后16字节为HMAC密钥 方法二:内存转储提取(从受害主机) 获取内存转储: 密钥搜索: CS 3.x:搜索 0x0000BEEF 开头数据 CS 4.x:暴力碰撞16字节候选密钥 3.4.2 实战解密过程 步骤1:获取元数据 过滤器: 定位Cookie中的Base64元数据 步骤2:解密元数据 输出: Raw key: b0dbd2e724e2a68105ba599a1ad8f30d AES key: e2d919d0bff758aeb1167e38ff293edf HMAC key: 25a496ed7274cb32d46d600205781afb 步骤3:解密流量 步骤4:分析解密结果 服务端指令:ipconfig、whoami等系统命令 执行结果回传 提取压缩包密码等关键信息 四、防御检测建议 4.1 哥斯拉检测 检测HTTP请求中固定pass参数名 监控Base64+异或加密模式 识别Header中的固定特征 4.2 Cobalt Strike检测 初始访问检测 : 实时计算URI的checksum8值(92/93告警) 检测异常User-Agent 监控包含PE头的下载响应 心跳通信检测 : 识别固定间隔的外连请求 检测Cookie中长Base64字符串 SSL/TLS指纹比对 行为检测 : 监控心跳包长度异常波动 检测内网异常协议流量 监控非业务时间大流量外传 五、工具汇总 哥斯拉解密 :自定义Python解密脚本 CS元数据解密 :cs-decrypt-metadata.py CS流量解析 :cs-parse-http-traffic.py Beacon分析 :1768.py(Didier Stevens工具) 通过本教学文档详细的分析流程和技术要点,安全分析人员可有效识别和解密Webshell与Cobalt Strike的加密流量,提取关键攻击证据并建立相应的防御检测策略。