shulankpatel/detection-forge

GitHub: shulankpatel/detection-forge

Detection-as-Code 流水线工具,将 Sigma 规则一次性编写后自动转换、测试并映射 ATT&CK,统一输出至 Splunk、Sentinel、Elastic 和 Wazuh 平台。

Stars: 0 | Forks: 0

# detection-forge **用 Sigma 编写一次检测规则,即可自动获得经过测试、映射了 ATT&CK 且随时可部署的 Splunk、Sentinel、Elastic 和 Wazuh 规则。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/b1/b103bc885b0669402eaddb68ff7d7f4582e5a23b75f10782221bb74198fcd443.svg)](https://github.com/shulankpatel/detection-forge/actions/workflows/ci.yml) ![Detections](https://img.shields.io/badge/Detections-8-blue) ![ATT&CK techniques](https://img.shields.io/badge/ATT%26CK_techniques-9-red) ![Python](https://img.shields.io/badge/Python-3.9%2B-blue) ![License](https://img.shields.io/badge/License-MIT-green) **🔗 在线网站:** https://shulankpatel.github.io/detection-forge/ ## 功能简介 detection-forge 是一个 **Detection-as-Code** pipeline。你只需将每个检测规则编写一次,作为 [Sigma](https://github.com/SigmaHQ/sigma) 规则——并标记其 MITRE ATT&CK 技术,附带示例事件——引擎就会将其转换为适用于 Splunk、Microsoft Sentinel(通过 pySigma Kusto backend 的 KQL;可在 Microsoft Sentinel / Defender XDR / Azure Data Explorer 中使用)、Elastic 和 Wazuh 的各平台查询,\* 根据示例事件对其逻辑进行单元测试,并将所有规则聚合到一个 MITRE ATT&CK Navigator 覆盖层中。每一条规则都会经过验证并在每次推送时 **在 CI 中进行测试**,因此那些不再正确触发(或停止转换)的检测规则会导致构建失败,而不会在生产环境中悄无声息地失效。 \* *适用于 Wazuh indexer 的 Elastic/OpenSearch 兼容查询;原生的 Wazuh XML backend 已在路线图中。* ## 快速开始 ``` git clone https://github.com/shulankpatel/detection-forge.git cd detection-forge # 运行检测测试 —— 除了 pytest + pyyaml 外无需其他安装(两者均接近 stdlib)。 python3 -m pytest # or: python3 -m forge.cli test # 将各平台的 queries 构建到 dist/,并(重新)生成 ATT&CK 覆盖层。 python3 -m forge.cli build python3 -m forge.cli coverage ``` - `pip install -e .` 会注册简短的 `forge` 命令,因此你可以运行 `forge build` / `forge test` / `forge coverage`,而不是 `python3 -m forge.cli ...`。 - 将规则转换为实际的 SIEM 查询需要 pySigma backends:`pip install -r requirements-backends.txt`。这在 CI 中会自动完成;如果没有安装 backends,`forge build` 只会报告没有可用的 backends 并跳过转换(测试仍然会通过)。 ### 从威胁报告中草拟检测规则 ``` python3 -m forge.cli ingest https://some-vendor.com/threat-report # 或者从已保存的文件:python3 -m forge.cli ingest --file report.html ``` 这会从报告中提取指标和 ATT&CK 技术 ID,并将一份 **可供审查的** Sigma 草稿写入 `rules/ingested/`(包含完整性测试事件)。它是 `status: experimental` —— 请审查字段映射,然后它将转换为所有四个 SIEM 平台的规则,并 像任何其他规则一样加入目录。基于规则的提取(不使用 AI):它捕获明确说明的指标/技术,而不是自由格式的行为描述。 ## 检测是如何测试的 测试主干是 **纯 Python** 的,不需要 SIEM 也不需要网络。`forge/validator.py` 是一个专注的 Sigma 逻辑评估器:对于每一条规则,它会读取 `detection:` 的 selections 和 `condition:`,并根据示例 JSON 事件对它们进行评估: - `tests/fixtures//positive.json` —— 规则 **必须** 匹配的事件(真阳性)。 - `tests/fixtures//negative.json` —— 规则 **绝不能** 匹配的事件(无假阳性)。 `pytest` 会对每个规则的 fixtures 进行参数化,因此添加检测规则会自动添加其真阳性/假阳性断言。评估器支持内置规则使用的 Sigma 特性 —— 字段相等、`contains`、`startswith`/`endswith`、通配符、嵌套(点号)字段查找,以及 `and`/`or`/`not` 加上 `1 of` / `all of`。 转换为 SIEM 查询的操作会在安装了 pySigma backends 的 **CI** 中进行验证。请注意,转换器的测试(`tests/test_converter.py`)在 **未安装 pySigma 时会在本地跳过** —— 在这种情况下,你会看到 `1 skipped`。这是预期的;转换路径会在 CI 中执行。 ## 仓库布局 检测规则只需在 `rules/` 下编写 **一次**(即唯一事实来源),引擎会将生成的、随时可部署的查询输出到 `dist/` 下,**按 SIEM 分离**,以便每个团队只需获取他们需要的内容: ``` rules/ author once (Sigma YAML, ATT&CK-tagged) windows/ Sysmon / Windows Event Log cloud/aws/ CloudTrail cloud/azure/ Entra ID / Azure AD │ forge build ▼ dist/ splunk/ *.spl Splunk SPL sentinel/ *.kql Microsoft Sentinel KQL (Kusto backend) elastic/ *.ndjson Elastic detection rules wazuh/ *.txt Elastic/OpenSearch-compatible query for the Wazuh indexer* attack-navigator-layer.json aggregated ATT&CK coverage ``` \* *适用于 Wazuh indexer 的 Elastic/OpenSearch 兼容查询;原生的 Wazuh XML backend 已在路线图中。* 仅使用 Splunk 的团队可以获取 `dist/splunk/`;KQL 用户可以获取 `dist/sentinel/`;依此类推。请参阅 [`docs/architecture.md`](docs/architecture.md) 以获取数据流图和每个引擎模块的演练说明。 ## ATT&CK 覆盖范围 8 个内置检测覆盖了 9 种 ATT&CK 技术: | ATT&CK ID | 技术 | 检测 | 平台 | |-----------|-----------|-----------|----------| | T1059.001 | PowerShell | 编码的 PowerShell 命令执行 | Splunk, Sentinel, Elastic, Wazuh | | T1003.001 | OS Credential Dumping: LSASS Memory | LSASS 内存凭证访问 | Splunk, Sentinel, Elastic, Wazuh | | T1053.005 | Scheduled Task/Job: Scheduled Task | 通过 `schtasks` 创建计划任务 | Splunk, Sentinel, Elastic, Wazuh | | T1059 | Command and Scripting Interpreter | Office 应用程序生成命令行 shell | Splunk, Sentinel, Elastic, Wazuh | | T1566 | Phishing | Office 应用程序生成命令行 shell | Splunk, Sentinel, Elastic, Wazuh | | T1078.004 | Valid Accounts: Cloud Accounts | AWS root 账户使用 | Splunk, Sentinel, Elastic, Wazuh | | T1562.008 | Impair Defenses: Disable Cloud Logs | AWS CloudTrail 日志记录被禁用或篡改 | Splunk, Sentinel, Elastic, Wazuh | | T1098 | Account Manipulation | AWS IAM 权限提升(附加策略 / 访问密钥) | Splunk, Sentinel, Elastic, Wazuh | | T1078 | Valid Accounts | Azure AD 多因素身份验证被禁用 | Splunk, Sentinel, Elastic, Wazuh | \* *Wazuh = 适用于 Wazuh indexer 的 Elastic/OpenSearch 兼容查询;原生的 Wazuh XML backend 已在路线图中。* 转换器会为每条规则上的每个已注册 backend 生成一条查询。云日志检测通常部署在 Splunk/Sentinel/Elastic 中,而为 indexer 中持有这些日志的团队提供了 Wazuh/OpenSearch 查询。 聚合的覆盖层生成至 [`dist/attack-navigator-layer.json`](dist/attack-navigator-layer.json)。要查看交互式热力图,请打开 [MITRE ATT&CK Navigator](https://mitre-attack.github.io/attack-navigator/) 并选择 **Open Existing Layer → Upload from local**,然后选择该 JSON 文件。(可选:将渲染后的热力图截图保存到 `docs/img/attack-coverage.png` 以备撰写报告时使用。) ## 路线图 - Linux (auditd) 检测。 - 一个合规性覆盖层,通过 MITRE CTID 映射将检测映射到 NIST 800-53 / SOC 2 控制项。 - 通过 API 将规则自动部署到实时 SIEM。 ## 许可证 [MIT](LICENSE) © 2026 shulankpatel
标签:Detection-as-Code, Python, Sigma规则, 安全规则引擎, 安全运营, 扫描框架, 无后门, 目标导入, 逆向工具