prapachaiuea/detection-as-code

GitHub: prapachaiuea/detection-as-code

将 Sigma 威胁检测规则纳入 CI 流水线,通过 lint、测试和多目标 SIEM 查询编译来保证规则的正确性与可移植性。

Stars: 0 | Forks: 0

# 🔍 检测即代码 CI Pipeline Sigma 检测规则被视为版本化、经过测试的、可移植的代码 — 而不是从其他地方复制粘贴来的静态 YAML 文件文件夹。 ![检测 CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/37/3771ac19d5e3bf2b49279a60860770da0929eeeb94395a465de74452d586aa29.svg) ## 为什么会有这个项目 大多数公开的“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, 上游代理, 安全库, 安全规则引擎, 安全运营, 开源框架, 扫描框架, 持续集成, 检测即代码, 目标导入, 逆向工具