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, 云资产可视化, 云资产清单, 威胁情报, 开发者工具, 恶意软件分析, 攻击诱捕, 无后门, 检测规则, 现代安全运营, 网络信息收集, 网络安全, 网络资产发现, 解密工具, 逆向工具, 逆向工程, 配置提取, 隐私保护