SWolfSec/Threat-Hunting-As-Code

GitHub: SWolfSec/Threat-Hunting-As-Code

将威胁狩猎活动以工程化方式纳入版本控制与自动化流程,使假设、查询和结果可审查、可复用、可度量的框架项目。

Stars: 1 | Forks: 0

# Threat-Hunting-As-Code 本仓库将威胁狩猎视为可维护的工程资产:进行版本控制、可审查、可衡量且持续改进。 ## 为什么将威胁狩猎作为代码 传统的狩猎跟踪通常存在于电子表格、一次性的笔记或互不关联的工单中。这会导致偏差、复用性差以及可见性薄弱。 Threat-Hunting-As-Code 标准化了狩猎流程,使团队能够: - 复用经过验证的假设和查询逻辑 - 在适当的责任机制下执行彻底的审查 - 随着时间的推移衡量覆盖率、执行节奏和结果 - 跨团队和跨时区扩展分析师的知识 ## PEAK 威胁狩猎原则 使用 PEAK 模型来指导每一个狩猎工件: - **P - Prioritized (优先级排序)**:专注于具有最高风险的对手行为和资产。 - **E - Evidence-driven (证据驱动)**:在具体的遥测假设而非仅仅依靠直觉的基础上构建狩猎。 - **A - Actionable (可操作)**:确保发现能够触发遏制、检测或加固行动。 - **K - Knowledge-sharing (知识共享)**:捕获上下文和经验教训,以便改进未来的狩猎。 ## 狩猎类型 本项目支持多种狩猎类别,以便团队可以平衡主动和被动工作: - **假设驱动的狩猎**:从特定的对手技术或可疑行为开始并进行测试。 - **情报驱动的狩猎**:将外部威胁情报转化为内部遥测检查。 - **基线/异常狩猎**:建立正常模式并调查偏差。 - **检测盲区狩猎**:验证已知的攻击路径是否绕过了当前的检测。 - **验证/重新测试狩猎**:在控制或环境更改后重新运行以前的狩猎。 ## 仓库结构 - `.github/ISSUE_TEMPLATE/new-hunt.yml` - 通过 GitHub Issues 提交的标准狩猎表单。 - `.github/workflows/hunt-metrics.yml` - 生成狩猎指标/仪表板输入的工作流。 - `.github/workflows/suggest-hunt-ideas.yml` - 用于生成或提议狩猎想法的工作流。 - `templates/hunt-template.md` - 规范的狩猎内容模板。 - `templates/campaign-template.md` - 规范的高级活动总体模板。 - `campaigns/` - 活动 Markdown 工件(仅限总体)。 - `scripts/metrics/` - 解析和仪表板生成脚本。 - `docs/dashboard.md` - 仪表板文档和指标定义。 ## 快速开始(活动 + 狩猎) 1. 使用 GitHub 问题表单 **New Campaign** **创建一个活动**,然后使用 `templates/campaign-template.md` 将批准的总体方案添加到 `campaigns/.md` 下(将 `campaign_slug` 设置为唯一的 kebab-case 值)。 2. 在 `hunts/` 下**创建单独的狩猎**,并通过设置 **`campaign_slugs`**(首选)和/或在 **`campaigns`** 中设置一个与活动的 `campaign_slug` 完全匹配的 kebab-case 条目来将它们链接到总体方案。独立狩猎可以保留 `campaigns: ["none"]` 并省略 `campaign_slugs`。 之后,(手动)开启一个 PR:CI 会验证狩猎 + 活动的元数据;合并后,指标会刷新 `docs/dashboard.md` 并自动更新每个活动文件的 **Linked hunts** 和 **Aggregated outcomes** 部分。 ### 问题提交自动引导 当猎人提交 **New Threat Hunt** 或 **New Campaign** 收集问题时,`.github/workflows/bootstrap-from-issue.yml` 会自动: 1. 解析问题表单的回答 2. 从匹配的模板(`hunts/` 或 `campaigns/`)生成草稿文件 3. 创建一个带有包含已生成工件的提交的唯一分支,以便猎人可以在提交 PR 之前进行审查/完善 ## 问题指南 为了保持收集过程的安全性和可预测性,自动模板生成仅对具有 **write**(写入)权限(或更高级别)的仓库协作者运行。 - 如果问题作者具有 `write` 或 `admin` 权限,引导工作流将正常运行。 - 如果问题作者具有 `read`、`triage` 权限或没有协作者权限,工作流将成功退出并跳过生成。 如果您在开启收集问题之前有一般性问题、想法或需要帮助,请使用 GitHub Discussions 或联系维护者。 ### 第一次狩猎清单(在总体方案存在之后) 1. 打开 GitHub Issues 并选择 **New Threat Hunt**。 2. 填写所需的元数据(狩猎类型、MITRE ID、数据源/位置、查询语言、结果)。 3. 设置 **`campaign_slugs: ["your-campaign-slug"]`**(或使用匹配的 kebab-case `campaigns` 条目),以便将狩猎归入该活动下。 4. 将 `templates/hunt-template.md` 复制到 `hunts/.md` 中,并完成 PEAK 和至少一个 `threat-hunt-query` 块。 5. 审查后,从您生成/工作的分支开启一个到 `main` 的 PR;如果缺少必填字段或未知的 `campaign_slug` 引用,验证将失败。 6. 合并后,指标作业将重新生成仪表板并更新链接的活动部分。 ## 提交新狩猎(通过 Issues) 1. 在 GitHub Issues 中打开 **New Hunt** 问题表单。 2. 完成所有必填字段(假设、数据源、ATT&CK 映射、影响和所有者)。 3. 提交问题以进行分类和分配。 4. 使用 `templates/hunt-template.md` 将批准的问题转换为狩猎工件。 5. 审查生成或工作的分支,然后开启一个包含狩猎内容和支持逻辑/查询的拉取请求。 ### 狩猎提交期望 - 保持假设的可测试性和范围明确。 - 包含确切的遥测依赖项和数据盲区。 - 在适用时映射到 ATT&CK 技术。 - 记录如果狩猎触发时分析师应采取的预期行动。 - 捕获结果质量(真阳性、良性、无定论等)。 ## 自动仪表板如何工作 仪表板流水线旨在根据仓库活动不断总结狩猎项目的健康状况。 在宏观层面上: 1. 从 `hunts/` 和 `campaigns/` Markdown frontmatter 中读取狩猎和活动元数据。 2. `scripts/metrics/parse_hunts.py` 验证工件,通过 `campaign_slug` 将狩猎链接到活动,并刷新活动文件内的自动生成部分。 3. `.github/workflows/hunt-metrics.yml` 中的工作流在拉取请求(验证)和合并到 `main` 之后(重新生成 + 提交)运行。 4. `scripts/metrics/generate_dashboard.py` 发布 `docs/dashboard.md`(狩猎指标以及 **Active Campaigns** 汇总)。 常见指标包括: - 已提交、已批准和已完成的狩猎 - 按类型、ATT&CK 战术/技术和严重程度划分的狩猎 - 从提交到完成的平均时间 - 随时间推移的覆盖率和检测盲区趋势 ## 仪表板预览 `docs/dashboard.md` 中生成的仪表板是 Markdown 优先、对私有仓库友好且由 Mermaid 驱动的。 ### 示例视觉风格(Mermaid 预览) ``` pie showData title Hunt Types Distribution "Hypothesis-driven" : 7 "Baseline/EDA" : 3 "Model-Assisted/M-ATH" : 2 ``` ``` xychart-beta title "MITRE Known Tactic Coverage (%)" x-axis ["covered_known_tactics_%", "uncovered_%"] y-axis "Count" 0 --> 100 bar [64, 36] ``` ### 截图占位符 在您的第一次仪表板运行生成后,在此处添加截图: ![仪表板概览](https://raw.githubusercontent.com/SWolfSec/Threat-Hunting-As-Code/main/docs/assets/dashboard-overview.png) ![MITRE 覆盖视图](https://raw.githubusercontent.com/SWolfSec/Threat-Hunting-As-Code/main/docs/assets/dashboard-mitre-coverage.png) ## 离线/私有化设计 + 可扩展性 - **无需外部 API**:指标和仪表板生成仅使用本地 Markdown + YAML 解析。 - **对私有仓库友好**:工作流在仓库内容上操作,无需调用第三方 SaaS。 - **确定性输出**:受控词汇字段减少了报告差异并提高了可重复性。 - **可扩展架构**:解析器和仪表板脚本是模块化的,因此可以在可选工作流之后添加未来的 AI 辅助丰富功能。 - **未来 AI 就绪**:`suggest-hunt-ideas.yml` 目前仅包含提示(无 API 调用),以后可升级为可选的提供商支持的运行。 ## 致谢与归属 本项目建立在成熟的社区和行业框架之上。在此致谢: - **PEAK 威胁狩猎框架**(`Prepare`、`Execute`、`Act with Knowledge`)和 **ABLE**(`Actor`、`Behavior`、`Location`、`Evidence`)归功于 **Splunk SURGe** 及相关的 Splunk Security 研究/出版物。 - **MITRE ATT&CK** 战术/技术分类法由 **MITRE** 创建和维护;本仓库使用 ATT&CK ID 进行标准化报告和分析。 - Markdown 仪表板渲染模式使用 **Mermaid** 语法和 GitHub 原生的 Markdown 功能。 主要参考资料: - [介绍 PEAK 威胁狩猎框架](https://www.splunk.com/en_us/blog/security/peak-threat-hunting-framework.html) - [使用 PEAK 框架进行假设驱动的狩猎](https://www.splunk.com/en_us/blog/security/peak-hypothesis-driven-threat-hunting.html) - [MITRE ATT&CK](https://attack.mitre.org/) - [Mermaid](https://mermaid.js.org/) ## 贡献模型 - 使用 issues 进行狩猎收集和讨论。 - 使用拉取请求进行所有狩猎内容的更改。 - 请求代码所有者进行审查,以确保质量和一致性。 - 保持狩猎工件简洁、可测试和可重用。 随着项目的成熟,请参阅 `CONTRIBUTING.md` 了解贡献约定。 ## 路线图 - 敲定问题模板字段和验证规则 - 实现指标脚本和输出 schema - 发布初始仪表板和趋势视图 - 添加用于狩猎工件质量和元数据完整性的 CI 检查
标签:GitHub Actions, PEAK模型, SecOps, Threat-Hunting-As-Code, 云安全架构, 假设驱动, 元数据管理, 响应行动, 基线检测, 威胁狩猎即代码, 安全可观测性, 安全团队协作, 安全工程, 安全度量, 安全运营, 工作流自动化, 异常检测, 情报驱动, 扫描框架, 指标分析, 检测差距, 版本控制, 知识共享, 网络安全, 自动化狩猎, 自动笔记, 逆向工具, 防御加固, 防御验证, 隐私保护