senakzgu/cobaltstrike-yara
GitHub: senakzgu/cobaltstrike-yara
基于数据驱动方法编写的Cobalt Strike Beacon YARA检测规则集,在保持零误报的前提下实现了显著高于公开规则集的召回率,并附带完整的样本采集、静态分析与规则验证工具链。
Stars: 0 | Forks: 0
# Cobalt Strike YARA 检测
[](https://yara.readthedocs.io/)
[](https://www.python.org/)
[](https://www.docker.com/)
[](LICENSE)
## 概述 (TL;DR)
本项目:
- 在 **20 + 8 = 28** 个真实的 Cobalt Strike Beacon 样本上进行了测试
- 基于数据驱动的方法从零编写了 **5 条 YARA 规则**
- **45% 的检测率**(现有数据集) + **50% 的检测率**(未见过的盲测样本)
- **0 误报**(在 Microsoft DLL 文件上进行了验证)
- 与 **JPCERT 公开的 CS YARA 规则集** 相比,**召回率高出 2-3 倍**(精确率相同)
- **3 个生产级别的 Python 工具**(样本收集、批量分析、规则测试)
- **4 份详细的日志报告** + 最终的 README
## 关键指标
| 测试 | 本项目规则 | JPCERT (公开规则) |
|---|---|---|
| 现有数据集 (20 个样本) | **9 / 20 (45%)** | 3 / 20 (15%) |
| 盲测 (8 个新样本) | **4 / 8 (50%)** | 2 / 8 (25%) |
| 误报 (4 个 MS DLL) | **0** ✓ | 0 ✓ |
| 多规则联合命中 | 4 个样本 | 3 个样本 |
## 快速开始
### 前置条件
- Docker
- 约 5 GB 磁盘空间
- MalwareBazaar API 密钥 ([abuse.ch](https://auth.abuse.ch))
### 安装
```
# 克隆 Repo
git clone https://github.com/senakzgu/cobaltstrike-yara.git
cd cobaltstrike-yara
# 将 API key 设置为 environment variable
echo 'export MB_AUTH_KEY="senin-api-anahtarın"' >> ~/.zshrc
source ~/.zshrc
# 构建 Lab 容器
docker build -t cs-yara-lab .
# 启动容器(假设设置了 alias)
echo 'alias cslab="docker run -it --rm -v $PWD:/lab/work -e MB_AUTH_KEY=\$MB_AUTH_KEY --name cs-yara cs-yara-lab"' >> ~/.zshrc
source ~/.zshrc
cslab
```
### 使用
```
# 1. 收集样本(20 Cobalt Strike Beacon)
python3 tools/download_samples.py
# 2. 自动分析所有样本
python3 tools/analyze_samples.py
# 3. 在 dataset 上测试 YARA 规则
python3 tools/test_rules.py
# 4. False positive 测试
python3 tools/test_rules.py --fp-test /path/to/clean/binaries
```
## 项目结构
```
cobaltstrike-yara/
├── Dockerfile # İzole lab ortamı
├── README.md
├── LICENSE
├── .gitignore
│
├── rules/ # YARA kuralları
│ ├── cobaltstrike_publickey.yar
│ ├── cobaltstrike_winhttp_loader.yar
│ ├── cobaltstrike_reflective_loader.yar
│ ├── cobaltstrike_memory_injection.yar
│ └── sophisticated_amsi_etw_bypass.yar
│
├── tools/ # Production-grade Python araçları
│ ├── download_samples.py # MalwareBazaar API + akıllı dataset seçimi
│ ├── analyze_samples.py # Otomatik statik analiz pipeline
│ └── test_rules.py # YARA test suite (TP/FP, JSON çıktı)
│
├── docs/ # Gün gün dokümantasyon
│ ├── day1-lab-setup.md # Teori + Docker lab kurulumu
│ ├── day2-sample-collection.md # Örnek toplama + batch analiz
│ ├── day3-rule-development.md # YARA kural yazımı + rafinasyon
│ └── day4-validation-and-comparison.md # Validation + JPCERT karşılaştırması
│
├── analysis/ # Otomatik analiz raporları (her örnek için)
│ └── .md
│
└── samples/
└── _metadata.json # Örnek metadata (hash-keyed)
```
## YARA 规则
| 规则 | 目标 | TP (现有数据) | TP (盲测) |
|---|---|---|---|
| `CobaltStrike_PublicKey_DER_XOR` | RSA-1024 DER 前缀,XOR 0x2e/0x69 | 3 | 1 |
| `CobaltStrike_WinHTTP_Loader` | WinHTTP API + 内存注入集群 | 2 | 0 |
| `CobaltStrike_ReflectiveLoader_Signature` | Stephen Fewer RDI 签名 | 3 | 1 |
| `Generic_Memory_Injection_Loader` | 内存 + 动态解析 + 反分析 | 8 | 3 |
| `Offensive_AMSI_ETW_Bypass_Strings` | AMSI/ETW 规避特征 | 1 | 1 |
每条规则都包含**丰富的元数据**(作者、日期、版本、哈希值、参考链接、严重程度、TLP)和**详细的注释块**。
## 设计原则
在整个项目中应用并验证的原则:
1. **先度量模式,再编写规则。** 仅靠假设是不够的;数据是必需的。
2. **强信号与弱信号结合。** 单一模式在大多数情况下是不够的。
3. **反信号(否定匹配)。** “不包含 X”也是有价值的信号。
4. **`pe.number_of_exports < 10`** — 用于区分 Beacon 与合法库的黄金法则。
5. **文件大小阈值应切合实际。** 基于 Beacon 的轮廓(通常 < 1.5MB)。
6. **在规则家族命名上保持诚实。** 不仅仅是 CS,也包含通用的 ReflectiveLoader 家族。
7. **不要使用失效的模式。** `MZARUH` 在现代 CS 中已不存在。
8. **负面发现同样有价值。** 被放弃的规则也是一种信息。
9. **即使 TP 较低,保持 FP=0 也很重要。** 45% + 0 FP > 55% + 4 FP。
10. **多规则联合命中是最可靠的信号。** 触发 ≥2 条规则具有归因价值。
详情:[`docs/day3-rule-development.md`](docs/day3-rule-development.md)。
## 已知限制
此规则集**有意不**捕获以下类别的样本:
- **“三胞胎” 集群** — 现代 CS 变种,未使用单字节 XOR 编码公钥。需要逆向工程,超出了本项目范围。
- **木马化的二进制文件(> 1.5 MB)** — 嵌入在宿主软件中的 Beacon。正确的做法是使用字节级的 shellcode 模式,而不是通用的 API 集群。
- **使用 WinINet 的样本** — 目前仅检测 WinHTTP 集群。
- **DNS Beacon、SMB Beacon** — 网络协议不同,超出了本项目的范围。
所有限制均是**有意为之**的决策 — 为了将误报风险保持在零,牺牲了召回率。
## 验证
规则通过了三项独立的测试:
1. **现有数据集(20 个样本)** — 验证模式确实能够捕获目标。
2. **盲测(8 个新样本)** — 验证泛化能力(未发生过拟合)。
3. **误报测试(4 个 Microsoft DLL)** — 验证在合法软件上不会触发。
详情:[`docs/day4-validation-and-comparison.md`](docs/day4-validation-and-comparison.md)。
## 未来工作
超出本项目范围的未来改进方向:
- [ ] **对“三胞胎”进行逆向工程** — 破解多字节 XOR 算法
- [ ] **字节级 shellcode 模式规则** — 用于捕获木马化的二进制文件
- [ ] **WinINet 集群规则** — WinHTTP 的替代方案
- [ ] **Sigma 规则** — 基于进程行为(CS Beacon 的 `dllhost.exe` 启动目标,命名管道 IPC)
- [ ] **Suricata 规则** — Malleable C2 HTTP 流量签名
- [ ] **提交至 YARAify** — 在 abuse.ch 的 YARAify 服务上全球语料库中进行验证
- [ ] **Beacon 配置解析器** — 类似于 `1768.py`,并集成到我们的 YARA 签名中
## 参考
- [YARA 文档](https://yara.readthedocs.io/)
- [MalwareBazaar (abuse.ch)](https://bazaar.abuse.ch/)
- [Didier Stevens — 1768.py CS 配置解析器](https://blog.didierstevens.com/programs/cobalt-strike-tools/)
- [JPCERT — CobaltStrike YARA 规则](https://github.com/JPCERTCC/aa-tools/)
- [Florian Roth — signature-base](https://github.com/Neo23x0/signature-base)
- [Stephen Fewer — 反射式 DLL 注入](https://github.com/stephenfewer/ReflectiveDLLInjection)
- [MITRE ATT&CK — T1071.001 (HTTP)](https://attack.mitre.org/techniques/T1071/001/)
- [MITRE ATT&CK — T1620 (反射式代码加载)](https://attack.mitre.org/techniques/T1620/)
- [MITRE ATT&CK — T1562.001 (AMSI/ETW 绕过)](https://attack.mitre.org/techniques/T1562/001/)
## 免责声明
本存储库**仅用于防御性的 CTI(网络威胁情报)研究**。其中的 YARA 规则是为了**检测 Cobalt Strike Beacon 样本**而编写的。
- 本仓库未共享任何真实的恶意软件样本(`samples/` 已在 `.gitignore` 中排除)。
- 文档中不包含 API 密钥、C2 IP 地址和其他敏感信息。
- 未尝试连接在 Beacon 配置中发现的 C2 服务器(仅进行被动观察)。
本项目中的所有工作均在**合法且符合道德的 CTI 研究**框架内进行。
## 许可证
[MIT 许可证](LICENSE) — 允许使用、修改和分发。
**作者:** [senakzgu](https://github.com/senakzgu)
标签:Beacon, Cobalt Strike, Docker, IP 地址批量处理, JPCERT对比, OpenCanary, Python, YARA, 云安全监控, 云资产可视化, 安全防御评估, 攻击诱捕, 数据驱动, 无后门, 样本分析, 红队工具检测, 网络安全, 请求拦截, 逆向工具, 隐私保护, 零误报, 静态分析