cr-galromano/SIGMA_VALIDATION_PIPELINE_V2
GitHub: cr-galromano/SIGMA_VALIDATION_PIPELINE_V2
一个 SIGMA 检测规则验证管道,通过良性池与恶意池双测试确保规则上线前兼具静默性和触发覆盖率。
Stars: 0 | Forks: 0
# SIGMA Validation Pipeline (SVP)
一个用于 SIGMA 检测规则的靶场。在规则从 SigmaHQ hub 发布之前,它必须通过两项测试:**对良性日志保持静默**(正常池/good pool)以及**对恶意日志进行触发**(恶意池/bad pool)。判定结果为 `PASS`、`FAIL` 或 `VOID` — 检测数为零绝不会自动通过。
**评估引擎:** [Zircolite v3.7.6](https://github.com/wagga40/Zircolite) — 直接运行原生 SIGMA YAML,无需规则转换。
## 架构
```
SVP/
├── scanner/zircolite/ # Pinned Zircolite v3.7.6 (git submodule)
├── corpora/ # Versioned, immutable test datasets
│ └── v2026.06.1/
│ ├── bad-pool/ # Malicious samples, organized by ATT&CK technique
│ ├── good-pool/ # Benign baselines
│ └── manifest.json # technique → samples → provenance index
├── rules/
│ ├── reference/ # Acceptance-gate rules (broad, never evaluated)
│ └── samples/ # Evaluation rules (what gets validated)
├── controls/ # Positive-control anchor fixtures
├── reports/ # Validation run reports
└── scripts/ # Validation service (Phase 2, not yet implemented)
```
### 判定逻辑
| 测试 | 条件 | 结果 |
|------|-----------|---------|
| 正常池 | 任何检测命中 | **FAIL** — 规则在良性日志上触发 |
| 正常池 | 无命中 | 确认静默 |
| 恶意池 | ≥ 3 个不同样本命中 | **PASS** |
| 恶意池 | < 3 次命中(当语料库 ≥ 3 时) | **FAIL** — 覆盖率不足 |
| 正向控制 | 加载规则数 = 0,已处理事件数 = 0,或锚点未触发 | **VOID** — 运行损坏,结果作废 |
### 覆盖的日志来源
| 平台 | 格式 |
|----------|--------|
| Windows | EVTX, Sysmon JSON |
| Linux | auditd text |
| Linux | Sysmon-for-Linux |
云/网络来源(AWS CloudTrail、Azure、Zeek 等)推迟至阶段 4。
## 设置
**要求:** Python 3.14, git
```
git clone --recurse-submodules https://github.com/cr-galromano/SIGMA_VALIDATION_PIPELINE.git
cd SIGMA_VALIDATION_PIPELINE
python -m venv venv
source venv/bin/activate
pip install -r scanner/zircolite/requirements.txt
```
## 运行测试
```
source venv/bin/activate
# Windows — Sysmon JSON
python scanner/zircolite/zircolite.py \
--events corpora/v2026.06.1/bad-pool/windows/T1003.005/cmdkey_list.json \
--ruleset rules/samples/windows/proc_creation_win_cmdkey_recon.yml \
--config scanner/zircolite/config/config.yaml \
--pipeline sysmon --pipeline windows-logsources \
--nolog
# Linux — auditd
python scanner/zircolite/zircolite.py \
--events corpora/v2026.06.1/bad-pool/linux/T1071.004/auditd_c2_curl_wget_nc.log \
--ruleset rules/samples/linux/lnx_auditd_susp_c2_commands.yml \
--config scanner/zircolite/config/config.yaml \
--auditd --nolog
```
## 语料库
语料库是**版本化且在确认签发后不可变的**。每个样本必须:
1. 对该技术的**参考规则**触发(验收门槛 — 宽泛、稳定、永不评估)
2. 具有一个 `provenance.json` 且包含 `signed_off: true`,然后才能产生非 VOID 的判定结果
完整的接入 SOP 请参见 [corpora/CONTRIBUTING.md](corpora/CONTRIBUTING.md)。
### 参考规则 vs. 评估规则
- **参考规则** (`rules/reference/`) — 刻意宽泛;仅用于验证恶意池样本是否真实。从不提交验证。这可防止循环逻辑(规则通过是因为它在一个样本上触发了,而该样本被接受又是由于同一规则在其上触发)。
- **评估规则** (`rules/samples/`) — 要针对各个池进行验证的规则。
## 路线图
| 阶段 | 目标 | 状态 |
|-------|------|--------|
| 0 | 验证端到端闭环(SIGMA 引入 + 判定模型 + 正向控制) | ✅ 完成 |
| 1 | 语料库基础 — 带有来源信息的版本化池 | ⏳ 等待真实的确认签发样本 |
| 2 | 验证服务 — CLI:规则输入 → PASS/FAIL/VOID 输出 | 🔲 尚未开始 |
| 3 | 未标记规则处理 + AI 建议模块 | 🔲 尚未开始 |
| 4 | Hub API 集成 | 🔲 尚未开始 |
| 5 | 强化与扩展(Atomic Red Team、覆盖率仪表板) | 🔲 尚未开始 |
**当前阻碍(阶段 1):** 所有语料库样本均为合成的 (`signed_off: false`)。在存在具有已签发来源的真实引爆捕获样本之前,该服务将返回 VOID。
## 关键设计决策
- **无 Zircolite fork** — 作为 submodule 固定在 v3.7.6 版本以确保可复现性
- **仅限原生 SIGMA YAML** — 不转换为 Splunk/Elastic/QRadar 格式;SIGMA 是通用语言
- **零检测 ≠ PASS** — 每次运行在信任静默状态之前都需要进行正向控制检查
- **本地部署** — 日志绝不离开网络;使用并行 worker 以提高吞吐量
- **不可变语料库** — 任何样本更改都需要新的版本标签;先前的运行结果保持可复现
标签:AMSI绕过, SIGMA规则, 威胁检测, 安全, 安全运营, 扫描框架, 超时处理, 逆向工具