tilde-d/detection-as-code

GitHub: tilde-d/detection-as-code

将 Sigma 检测规则的编写、真实引擎测试和部署流程工程化,在 CI 中对 KQL 查询进行自动化验证并部署到 Microsoft Sentinel 的检测即代码 pipeline。

Stars: 0 | Forks: 0

# 检测即代码 (Detection-as-Code) 一个将检测逻辑视为软件的检测工程 pipeline:版本 控制、schema 验证、**针对真实查询引擎进行自动化测试**、 在 CI 中进行拦截,并在无需存储凭证的情况下部署到 Microsoft Sentinel。 ## 存在原因 大多数“检测即代码”仓库仅仅停留在“检测以 YAML 格式存放在 Git 中”的层面。这仅仅是 版本控制,而非工程化。真正困难的部分在于:证明检测能够在其针对的行为上触发; 证明它在与之相似的良性活动中保持静默;并在每次变更时强制执行这两点。 这些部分通常会被跳过,而跳过它们的项目会转而断言生成的查询 包含某些子字符串。此类测试即使对于逻辑颠倒的规则、引用了不存在列的规则, 或是根本无法匹配任何内容的规则,也依然能够通过。 本仓库旨在证明这些困难的部分是可解决的。 ## 方法 - **Sigma 作为编写格式**,并针对 Sigma 无法表达其逻辑的检测,提供了声明式且受限的 权宜之计。参见 [ADR 0001](docs/adr/0001-detection-source-of-truth.md)。 - **测试针对 Kusto 引擎执行真实的 KQL**,在本地作为容器运行, 在 CI 中作为 service container 运行。没有 mock,没有云,没有凭证。参见 [ADR 0002](docs/adr/0002-test-harness.md)。 - **每个调整过的假阳性都会成为永久的回归测试。** 调优知识 不再仅仅存在于工单评论中,而是成为了 CI 强制执行的契约。 - **决策以 ADR 的形式记录**,包括被否决的选项。 ## 目标布局 目录由需要它们的阶段创建,而不是预先提交 空脚手架。 ``` detections/ source of truth: one YAML per rule, tests embedded alongside logic schema/ JSON Schema for the detection metadata envelope tests/tables/ full-fidelity Defender and Sentinel table schemas for the emulator tests/fixtures/ shared synthetic events tools/ the pipeline: validate, transpile, test, deploy, coverage docs/adr/ architecture decision records .github/workflows/ CI out/ generated KQL. Build output, gitignored, never hand-edited. ``` ## 仓库配置 `main` 的分支保护以 ruleset 定义的形式存储在 [`.github/rulesets/main.json`](.github/rulesets/main.json) 中,而不是在 GitHub 设置 UI 中通过点击配置。仓库配置是 pipeline 的一部分, 而仅仅作为 UI 状态存在的配置是无法被 review、diff 或重新创建的。 ## 许可证 MIT。参见 [LICENSE](LICENSE)。
标签:DevSecOps, Kusto, Microsoft Sentinel, Sigma规则, 上游代理, 安全运营, 开源框架, 扫描框架, 持续集成, 检测即代码, 目标导入, 请求拦截