mytts/cs-analysis-toolkit
GitHub: mytts/cs-analysis-toolkit
针对 Cobalt Strike 4.x 的综合逆向分析工具包,涵盖配置提取、流量解密、模板对比及检测规则生成,服务于安全研究与事件响应。
Stars: 0 | Forks: 0
# Cobalt Strike 分析工具包
一个基于对 Cobalt Strike Java 源码、Beacon DLL 和 Sleeve 加密模板进行深度逆向工程构建的综合工具包。包括配置解析器、解密工具、基于 Web 的分析器以及 52 条检测规则。
## 快速入门
```
# 克隆
git clone https://github.com/mytts/cs-analysis-toolkit.git
cd cs-analysis-toolkit
# 安装依赖
pip3 install pycryptodome flask
# 解析 Beacon 配置 (CLI)
python3 parsers/cs_config_parser.py beacon.dll
# 启动 Web analyzer
python3 web/app.py
# 打开 http://127.0.0.1:5000
# 对比 Sleeve 版本
python3 parsers/cs_sleeve_compare.py --dir1 sleeve_461/ --dir2 sleeve_491/
```
## 工具
### 1. Beacon 配置解析器 (`parsers/cs_config_parser.py`)
从 Beacon DLL、shellcode 或内存转储中提取 C2 配置。
**5 种搜索策略:**
| # | 策略 | 描述 |
|---|----------|-------------|
| 1 | 明文标记 | 搜索 `AAAABBBBCCCCDDDDEEEEFFFF`(24 字节) |
| 2 | XOR 0x2E 标记 | 标准 `beacon_obfuscate()` 编码 |
| 3 | XOR 0x69 标记 | 已知的备用 XOR 密钥 |
| 4 | XOR 暴力破解 | 尝试所有单字节密钥 (0x01-0xFF) |
| 5 | TLV 模式匹配 | 直接 TLV 序列检测(用于内存转储) |
**解码 60 多个 Setting ID**:协议、端口、C2 域、User-Agent、POST URI、水印、RSA 公钥、派生进程、命名管道、终止日期、注入选项等。
```
# 基本解析
python3 parsers/cs_config_parser.py beacon.dll
# JSON 输出
python3 parsers/cs_config_parser.py beacon.dll --format json -o report.json
# 扫描所有已知 CS 标记
python3 parsers/cs_config_parser.py beacon.dll --scan-markers
# 暴力 XOR 扫描
python3 parsers/cs_config_parser.py beacon.bin --xor-scan
```
### 2. Sleeve 解密器 (`parsers/cs_sleeve_decryptor.py`)
解密 Cobalt Strike 的 Sleeve 加密二进制模板。
**加密链:**
```
cobaltstrike.auth → RSA decrypt → SleeveKey (16B)
↓
SHA-256(SleeveKey)
↓
AES key [0:16] + HMAC key [16:32]
↓
AES-128-CBC decrypt (IV = "abcdefghijklmnop")
HMAC-SHA256 verify (Encrypt-then-MAC)
```
```
# 解密所有 Sleeve 文件
python3 parsers/cs_sleeve_decryptor.py \
--auth cobaltstrike.auth \
--pubkey authkey.pub \
--sleeve-dir sleeve/ \
--output decrypted/
# 解析已解密的 Beacon DLL
python3 parsers/cs_sleeve_decryptor.py --parse-beacon decrypted/beacon.dll
```
### 3. Sleeve 版本比较器 (`parsers/cs_sleeve_compare.py`)
比较 CS 版本之间的 Sleeve 模板并自动生成 YARA 规则。
- PE/COFF 深度分析(架构、节区、导出、标记)
- 自动分类为 22 个模块类别
- 差异报告:新增、删除、大小变化
- 根据模板特征**自动生成 14 条 YARA 规则**
```
# 对比 4.6.1 与 4.9.1
python3 parsers/cs_sleeve_compare.py \
--dir1 sleeve_461_decrypted/ \
--dir2 sleeve_491_decrypted/ \
--yara-output rules/yara/generated.yar
```
### 4. Web 分析器 (`web/app.py`)
基于浏览器的 Beacon 配置分析平台。
**功能特性:**
- 拖放文件上传(DLL/EXE/shellcode/内存转储,最大 50MB)
- 自动 PE 检测(x86/x64,DLL/EXE)
- 4 种已知 CS 标记扫描
- 带有严重性分类(严重/高/中/信息)的 IOC 提取
- 带分组过滤的设置表
- JSON 导出 + IOC 剪贴板复制
```
python3 web/app.py
# 打开 http://127.0.0.1:5000
```
包含一个测试样本生成器:
```
python3 web/gen_test_sample.py
# 生成包含 21 个配置设置的 test_beacon_sim.bin
```
### 5. Sleep Mask 分析器 (`parsers/cs_sleepmask_analyzer.py`)
对 Sleeve 模板中的 Sleep Mask BOF 文件(COFF 格式)进行逆向工程。
- COFF 头/节/符号/重定位解析
- 带有 XOR 循环模式检测的 `.text` 十六进制转储
- 跨文件比较(x86 vs x64,HTTP vs SMB vs TCP)
- 掩码逻辑的 C 伪代码重构
- 构建路径和编译器识别
```
# 分析目录中的所有 sleep mask BOF
python3 parsers/cs_sleepmask_analyzer.py /path/to/sleeve_decrypted/
# 单文件分析
python3 parsers/cs_sleepmask_analyzer.py sleepmask.x64.o --format json
```
### 6. C2 流量解密器 (`parsers/cs_traffic_decryptor.py`)
用于事件响应的 Cobalt Strike Beacon C2 流量解密工具。
**三种模式:**
| 模式 | 输入 | 输出 |
|------|-------|--------|
| 会话解密 | 会话密钥 + 加密数据 | 解码的命令/回调 |
| RSA 元数据 | 私钥 + Base64 cookie | 会话密钥 + beacon 信息 |
| PCAP 管道 | PCAP + 私钥 | 完整操作时间线 |
```
# 使用已知 session key 解密 task data
python3 parsers/cs_traffic_decryptor.py \
--session-key 0123456789abcdef0123456789abcdef \
--data --direction task
# 解密 beacon metadata (来自 Cookie 头)
python3 parsers/cs_traffic_decryptor.py \
--private-key beacon_keys.pem --metadata "Base64..."
# 完整 PCAP 解密
python3 parsers/cs_traffic_decryptor.py \
--pcap traffic.pcap --private-key beacon_keys.pem
# 自检 (9 个自动化测试)
python3 parsers/cs_traffic_decryptor.py --self-test
```
解码 30 多个命令 ID(SHELL、SLEEP、INJECT、SPAWN、BOF 等)和 15 种以上的回调类型。
### 7. 二进制差异可视化工具 (`parsers/cs_bindiff_visual.py`)
生成 Sleeve 模板版本之间的可视化字节级差异。
- 带有颜色编码字节(相同/已修改/已添加/已删除)的 HTML 热力图
- PE 节覆盖(.text、.rdata、.data、.reloc 边界)
- 每 256 字节块的 Shannon 熵
- 各节更改统计
- 导出表差异
- 批量目录比较仪表板
```
# 单文件差异对比 → HTML 热图
python3 parsers/cs_bindiff_visual.py \
--file1 v461/beacon.dll --file2 v491/beacon.dll -o diff.html
# 批量目录对比
python3 parsers/cs_bindiff_visual.py \
--dir1 sleeve_461/ --dir2 sleeve_491/ -o diff_report/
# 仅统计信息 (无 HTML)
python3 parsers/cs_bindiff_visual.py \
--dir1 sleeve_461/ --dir2 sleeve_491/ --stats-only
```
## 检测规则
### YARA 规则(共 32 条)
| 文件 | 数量 | 描述 |
|------|-------|-------------|
| `rules/yara/cobalt_strike_491.yar` | 18 | 手工制作的规则,涵盖 Beacon DLL 内存、Sleeve 模板、TeamServerImage、C2 流量、认证文件、stager、综合检测 |
| `rules/yara/cobalt_strike_sleeve_generated.yar` | 14 | 从 Sleeve 模板分析自动生成(按模块类型,基于大小范围和导出组合) |
**主要检测指标:**
| 指标 | 检出率 | 误报率 | 抗配置更改 |
|-----------|---------------|--------------------|--------------------|
| 字符串表标记 (30B) | ~95% | ~0% | 是 |
| 设置 TLV 格式 (14B) | ~95% | ~0% | 是 |
| ReflectiveLoader 导出 | ~80% | ~1% | 部分 |
| 默认 TLS 证书 | ~70% | ~0% | 否 |
### Sigma 规则 (5)
`rules/sigma/cs_c2_traffic.yml` — 日志/EDR 检测规则:
1. HTTP C2 流量(URI + Cookie Base64 模式)
2. DNS Beacon 子域(前缀 + 十六进制编码)
3. 进程注入模式(Sysmon 事件)
4. 命名管道指示符(MSSE-/postex_ 前缀)
5. REST API 访问(端口 50443)
### Suricata/Snort 规则 (15)
`rules/suricata/cs_suricata.rules` — 网络 IDS 规则(SID 4091001-4091080):
- HTTP GET/POST URI 模式
- DNS 子域前缀
- SMB 命名管道名称
- REST API 端口检测
- TLS 证书指纹
- EICAR 反盗版检测
## 技术背景
### Cobalt Strike 架构
```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Client │────│ TeamServer │────│ Beacon │
│ (Java GUI) │RPC │ (Java/ │ C2 │ (C DLL, │
│ + CNA │ │ GraalVM) │ │ x86/x64) │
│ Scripts │ │ │ │ │
└─────────────┘ └──────────────┘ └─────────────┘
```
### 关键常量
| 常量 | 值 | 来源 |
|----------|-------|--------|
| Sleeve IV | `abcdefghijklmnop` | SleeveSecurity.java |
| 设置 XOR 密钥 | `0x2E` | BeaconPayload.java |
| 配置标记 | `AAAABBBBCCCCDDDDEEEEFFFF` (24B) | BeaconPayload.java |
| 字符串表标记 | `TTTTSSSSUUUUVVVVWWWWXXXXYYYYZZZZ` (32B) | MalleablePE.java |
| 认证魔术字 | `0xCAFEC0D3` | Authorization.java |
| PATCH_SIZE (4.6.x) | 4096 | Settings.java |
| PATCH_SIZE (4.9.1+) | 6144 | Settings.java |
### 加密堆栈
| 层级 | 算法 | 密钥来源 |
|-------|-----------|------------|
| 认证文件 | RSA-2048 / ECB / PKCS1 | authkey.pub |
| Sleeve 资源 | AES-128-CBC + HMAC-SHA256 | SHA-256(SleeveKey) |
| Beacon 会话 | AES-128-CBC + HMAC-SHA256 | SHA-256(SessionKey) |
| C2 传输 | TLS 1.2(可选) | ssl.store |
### 版本差异 (4.6.1 → 4.9.1)
| 方面 | 4.6.1 | 4.9.1 |
|--------|-------|-------|
| 服务端 | Java JAR | GraalVM Native Image |
| 认证文件 | 256B(1 个 RSA 块) | 512B(2 个 RSA 块) |
| Sleeve 文件 | 86 | 100 (+18/-4) |
| PATCH_SIZE | 4096 | 6144 |
| 混淆 | 2 层 (Base, RL100K) | 3 层 (+RL0K) |
| 新功能 | — | Guardrails, WinHTTP, Direct Syscall, Kerberos BOF |
### MITRE ATT&CK 覆盖范围
| 技术 | CS 功能 |
|-----------|------------|
| T1059.001 PowerShell | powershell, powershell-import |
| T1055.001 DLL 注入 | dllinject, inject |
| T1021.002 SMB/管理共享 | psexec 横向移动 |
| T1071.001 Web 协议 | HTTP/HTTPS Beacon |
| T1071.004 DNS | DNS Beacon (A/AAAA/TXT) |
| T1573.001 对称加密 | AES-128-CBC 会话 |
| T1573.002 非对称加密 | RSA-2048 握手 |
| T1620 反射式代码加载 | Reflective Loader (VA/HA/MVF) |
| T1027 混淆文件 | Sleeve AES, Sleep Mask |
## 项目结构
```
cs-analysis-toolkit/
├── README.md # This file
├── LICENSE # MIT License
├── requirements.txt # Python dependencies
├── parsers/
│ ├── cs_config_parser.py # Beacon config extractor (CLI)
│ ├── cs_sleeve_decryptor.py # Sleeve AES decryptor
│ ├── cs_sleeve_compare.py # Version comparator + YARA gen
│ ├── cs_sleepmask_analyzer.py # Sleep Mask BOF reverse engineer
│ ├── cs_traffic_decryptor.py # C2 traffic decryptor (RSA+AES)
│ └── cs_bindiff_visual.py # Binary diff heatmap visualizer
├── web/
│ ├── app.py # Flask web analyzer
│ └── gen_test_sample.py # Test sample generator
├── rules/
│ ├── yara/
│ │ ├── cobalt_strike_491.yar # 18 hand-crafted YARA rules
│ │ └── cobalt_strike_sleeve_generated.yar # 14 auto-generated rules
│ ├── sigma/
│ │ └── cs_c2_traffic.yml # 5 Sigma rules
│ └── suricata/
│ └── cs_suricata.rules # 15 Suricata/Snort rules
└── docs/
└── TECHNICAL.md # Detailed technical notes
```
## 环境要求
- Python 3.8+
- `pycryptodome` — AES/RSA 解密
- `flask` — Web 分析器(可选)
```
pip3 install -r requirements.txt
```
## 免责声明
本工具包仅旨在用于**安全研究、事件响应和威胁情报**目的。这些工具分析来自 Cobalt Strike(一种商业对手模拟框架)的产物。本代码仓库中不包含任何 Cobalt Strike 的源代码或专有二进制文件。
请负责任地使用,并遵守适用的法律法规。
## 许可证
MIT 许可证 — 详情请参见 [LICENSE](LICENSE)。
## 参考文献
- Cobalt Strike 官方文档
- [MITRE ATT&CK 框架](https://attack.mitre.org/)
- [Sentinel-One 的 CobaltStrikeParser](https://github.com/Sentinel-One/CobaltStrikeParser)
- [Fox-IT 的 dissect.cobaltstrike](https://github.com/fox-it/dissect.cobaltstrike)
标签:Beacon, Cobalt Strike, DAST, DNS 反向解析, Flask, Metaprompt, Python, RSA, Suricata, Web分析器, XOR解密, YARA, 云资产可视化, 云资产清单, 威胁情报, 开发者工具, 恶意软件分析, 攻击诱捕, 无后门, 检测规则, 现代安全运营, 网络信息收集, 网络安全, 网络资产发现, 解密工具, 逆向工具, 逆向工程, 配置提取, 隐私保护