prapachaiuea/detection-as-code
GitHub: prapachaiuea/detection-as-code
将 Sigma 威胁检测规则纳入 CI 流水线,通过 lint、测试和多目标 SIEM 查询编译来保证规则的正确性与可移植性。
Stars: 0 | Forks: 0
# 🔍 检测即代码 CI Pipeline
Sigma 检测规则被视为版本化、经过测试的、可移植的代码 — 而不是从其他地方复制粘贴来的静态 YAML 文件文件夹。

## 为什么会有这个项目
大多数公开的“Sigma 规则”仓库只是一堆 `.yml` 文件,没有任何证据表明它们确实有效:没有验证,没有测试表明该规则会在其声称要检测的行为上触发,也没有证据表明它可以干净地转换为真实的 SIEM 查询语言。本仓库将常规的软件工程实践应用于检测内容:
- **Lint** — 每条规则都会根据 Sigma schema 和 MITRE ATT&CK 标签规范进行验证。
- **Test** — 每条规则都会针对它应该捕获的示例日志事件,以及它*不*应该捕获的示例事件进行触发测试,这样错误的修改会在 CI 中被发现,而不是在生产环境中。
- **Build** — 每条规则都会被编译为不止一种 SIEM 查询语言,证明检测逻辑是可移植的,而不是为单一工具手动调整的。
## 规则与 MITRE ATT&CK 覆盖范围
| 技术 | 战术 | 规则 | 捕获内容 |
|---|---|---|---|
| [T1566](https://attack.mitre.org/techniques/T1566/) | Initial Access | [`initial_access/T1566_suspicious_office_child_process.yml`](rules/initial_access/T1566_suspicious_office_child_process.yml) | Office 应用生成 cmd/powershell/wscript — 典型的钓鱼后宏执行 |
| [T1059.001](https://attack.mitre.org/techniques/T1059/001/) | Execution | [`execution/T1059_suspicious_powershell_encoded_command.yml`](rules/execution/T1059_suspicious_powershell_encoded_command.yml) | PowerShell 使用 `-EncodedCommand`/`-enc` 运行 |
| [T1053.005](https://attack.mitre.org/techniques/T1053/005/) | Persistence | [`persistence/T1053_suspicious_scheduled_task_creation.yml`](rules/persistence/T1053_suspicious_scheduled_task_creation.yml) | 创建指向可疑可写路径的 Scheduled Task |
| [T1070](https://attack.mitre.org/techniques/T1070/) | Stealth (Defense Evasion) | [`defense_evasion/T1070_windows_event_log_cleared.yml`](rules/defense_evasion/T1070_windows_event_log_cleared.yml) | Windows Security 事件日志被清除 (Event ID 1102) |
| [T1003.001](https://attack.mitre.org/techniques/T1003/001/) | Credential Access | [`credential_access/T1003_lsass_memory_access.yml`](rules/credential_access/T1003_lsass_memory_access.yml) | 进程访问 LSASS 内存 (Mimikatz 式凭据转储) |
| [T1087.001](https://attack.mitre.org/techniques/T1087/001/) | Discovery | [`discovery/T1087_local_account_discovery.yml`](rules/discovery/T1087_local_account_discovery.yml) | `net user`/`net localgroup` 账户枚举 |
所有规则均针对 Windows/Sysmon 进程创建、进程访问和安全事件日志源 — 这是最常见且被广泛认可的 Sigma 日志源。
## Pipeline
```
push/PR to master
│
▼
lint → sigma check rules/ (schema + ATT&CK tag validation)
│
▼
test → pytest (rule syntax + rule match tests)
│
▼
convert → scripts/convert_rules.py (Splunk SPL + Elastic Lucene, uploaded as a build artifact)
```
参见 [`.github/workflows/detection-ci.yml`](.github/workflows/detection-ci.yml)。
## 添加新规则
1. 在适当的 `rules//` 文件夹中编写规则,并遵循现有规则的结构 (title, id, logsource, detection, tags, falsepositives, level)。
2. 在 `tests/fixtures/.json` 中添加 fixture,包含 `matching` 和 `non_matching` 示例事件。
3. 在提交 PR 之前在本地运行 `pytest -v` 和 `sigma check rules/` — CI 会同时运行这两者。
## 测试评估器 — 范围与限制
`tests/evaluator.py` 是为本仓库编写的一个小巧的、刻意限制功能的 Sigma 检测评估器,**它不是一个通用的 Sigma 引擎**。
pySigma 本身仅将规则转换为 SIEM 查询语言;它没有内置的方法针对示例事件运行规则,因此这个脚本刚好填补了这一空白,以便对实际存在于本仓库中的规则进行触发测试:
- Selections:`field: value` 或 `field: [values]` (OR)
- 修饰符 (Modifiers):`contains`, `startswith`, `endswith`, `re`
- 条件 (Conditions):通过 `and` / `or` / `not` 和括号组合的命名选择
不支持:聚合 (aggregations)、`1 of them` / `all of *` 通配符、`near`、字段间比较或计数/时间范围 (count/timeframe) 关联。这里的每条规则在编写时都被限制在这个子集内。
## 本地运行
```
python -m venv .venv
.venv\Scripts\activate # or source .venv/bin/activate on macOS/Linux
pip install -r requirements.txt
sigma check rules/ # lint
pytest -v # test
python scripts/convert_rules.py # build Splunk + Elastic queries into build/
```
## License
MIT
标签:DevSecOps, Sigma规则, YAML, 上游代理, 安全库, 安全规则引擎, 安全运营, 开源框架, 扫描框架, 持续集成, 检测即代码, 目标导入, 逆向工具