sims718718/UnifiedThreatHunting

GitHub: sims718718/UnifiedThreatHunting

提供一套统一的威胁狩猎流程框架,解决如何系统化、可衡量地开展主动威胁探测与假设验证。

Stars: 0 | Forks: 0

# 统一威胁狩猎流程 作为威胁狩猎负责人,我被赋予从零开始构建威胁狩猎计划的任务。这涉及大量关于威胁狩猎本质的思考,以及如何将其转化为有意义的结果。无数小时用于阅读各种方法论,包括威胁狩猎、检测工程、威胁情报(CTI)、取证,甚至我在美国空军期间的经验。然而,通过构建一个计划,我意识到我需要一个统一的过程,一个**统一的威胁狩猎流程**,以提供结构化的方式来进行狩猎并最终为组织交付有意义的结果。 ``` graph LR Z[Step 0: Environment Context] --> A[Triggering Event] A --> B[Hypothesis Development] B --> C[Initial Assessment] C --> D[Feasibility Assessment] D --> E[Define Scope & Objectives] E --> F[Formalize Hunt Plan] F --> G[Execute Hunt] G --> H[Document Outcomes] H --> I[Report & Iterate] I --> A ``` ## 什么是威胁狩猎? 简单来说,威胁狩猎是主动搜索并识别绕过安全控制的威胁的行为。这个定义有一定的灵活性,但核心理念是它是**主动的**,旨在发现未知项。 现在,真正的问题是:**你如何实现有意义的威胁狩猎?** 市面上有许多框架,包括 PEAK、TaHiTI、OTHF、AIMOD2 等,很可能还有更多我遗漏的。然而,这引出了关键问题:在构建计划和定义流程时: * 一种框架比其他更正确吗? * 我只需选择一个吗? * 哪一种更适合我们组织的需求? * 我们的利益相关者真正想要什么? 这些问题以及更多问题引导我构建了一个适合我们组织的流程,在我看来,它忠于威胁狩猎的本质。 这个**统一的威胁狩猎流程**是多种框架的融合。实质上,每种框架都遵循相似的思维方式,但采取了略有不同的方法。通过比较每种框架的关键概念,我能够定义一个帮助成熟化计划的方法论。 ## 威胁狩猎类型 有多种方法被描述用于执行狩猎操作:结构化、非结构化、TTP 聚焦、情报聚焦、数据驱动等。虽然这个统一的威胁狩猎流程可能看似结构化,但这并不意味着你的假设不能以非结构化的方式由数据驱动。这个流程旨在融合各种类型的威胁狩猎,采用模块化方法。我们会使用所有这些技术来确保我们彻底测试假设。 目标是采用模块化的威胁狩猎方法,没有一刀切的方案。使用你所能利用的所有技术。 实际上,你选择的狩猎类型取决于你在 **DAIKI 链**(数据 → 信息 → 知识 → 洞察)中的起点: | 狩猎类型 | 起点 | 特点 | | --- | --- | --- | | **探索性(EDA)** | 原始数据 | 基线化、理解数据形态、无先验假设 | | **基于假设(HBO)** | 情境感知 | 基于团队知识测试可信的攻击场景 | | **威胁指导(TIO)** | 可操作的情报 | 以情报驱动,聚焦已知行为者或 TTP | | **紫色行动(DPO)** | 红队洞察 | 进攻/防御联合验证 | 遵循数据科学原则,无论狩猎类型如何,你都应探索并理解与狩猎相关的数据源。本仓库的 [/Data_Analysis](https://github.com/sims718718/UnifiedThreatHunting/tree/main/Data_Analysis) 文件夹包含用于该探索阶段的辅助技术和笔记本。 ## 第 0 步:环境上下文 在任何狩猎开始之前,捕获环境上下文,以便每个下游工件(查询、字段名称、范围决策)都针对你实际工作的环境进行定制,而不是通用编写。我将此作为一个显式步骤,因为我不断看到引用不存在的数据源或完全错误方言的狩猎计划。花几分钟时间可以节省后续数小时。 至少,记录以下信息: | 上下文 | 重要性 | | --- | --- | | **SIEM / 数据平台** | Splunk SPL、KQL、Elastic DSL、Chronicle 等都会塑造你编写的每个查询 | | **EDR 平台** | CrowdStrike、SentinelOne、Defender for Endpoint 等使用不同的遥测字段名称 | | **环境类型** | 本地部署、云原生(AWS/Azure/GCP)或混合会改变哪些日志存在 | | **行业垂直领域** | 决定哪些威胁行为者在现实中相关 | | **日志保留窗口** | 决定哪些时间范围实际上可以查询 | | **狩猎成熟度** | 初学者需要脚手架;经验丰富的团队需要骨架 | 在 Epic 顶部将其记录为 `Environment Profile`。如果你行动迅速,最低要求是 **SIEM 平台** 和 **环境类型**,少于这些你的查询将过于通用。 ## 触发器 借鉴 TaHiTI 框架,威胁狩猎始于一个触发事件。这些事件证明启动狩猎的合理性。根据 TaHiTI,触发器可以包括: * CTI(网络威胁情报) * 不完整的用例 * 过去的事件 * 红队演练 * MITRE TTPs * 等等 对于我们组织,我们结合这些以及一些额外触发器,例如利益相关者的直接需求和影响环境的安全漏洞披露。 一些框架从初始 **假设**(这里的第 2 步)开始狩猎,但我问:你怎么首先得出那个假设? 很可能有一个触发事件导致了初始假设。正如牛顿观察苹果落地后才思考什么力将其拉下一样,*那个苹果是导致关于重力的假设的触发事件*。同样,我们应该有一个触发器,然后再进入假设阶段。 image ## 假设开发 接下来,也许是**最重要**的一步,是构建狩猎假设。这一步虽然关键,但也可能是最模糊的。你的假设可能带你找到宝藏,也可能让你陷入无休止的兔子洞。 根据数据科学原则,你的假设是关于创建可测试的陈述来指导分析。不仅如此,你还应该使你的假设 **SMART**: * **具体(Specific)**:清晰明确,没有歧义。不要试图一次性狩猎所有 TTP。 * **可衡量(Measurable)**:必须有可量化的标准来跟踪进度。(我们之后会使用 Jira。) * **可实现(Achievable)**:现实且在你的团队能力范围内。不要瞄准你没有的遥测数据。 * **相关性(Relevant)**:应与组织目标对齐。使之对任务有意义。 * **有时限(Time-bound)**:设定截止日期。没有永无止境的狩猎。 ### SMART 假设示例 一个有用的模板: **示例 1(CTI 驱动,TIO):** **示例 2(行为驱动,HBO):** 在构建假设时,你可能会开发多个相互竞争的假设。关于这一点值得一读的书是 Richards J. Heuer 的《心理情报分析》,由 CIA 情报研究中心出版。他描述了**竞争假设**,这对你的狩猎工作非常有益。 该过程包括定义多个假设并确定其中最有效的,提供严谨性以帮助定义狩猎基础。7 步过程描述如下: 1. 列举所有假设 2. 为每个假设寻找支持证据 3. 通过矩阵比较证据与假设,Heuer 构建了一个矩阵来做到这一点 4. 通过矩阵移除诊断价值低的证据 5. 按可能性对假设进行优先级排序 6. 确定哪些结论依赖证据不足,并考虑该证据是否可能错误 7. 记录假设之间的比较 接下来的两个阶段深入到基于假设来决定是否执行狩猎的过程中。 此外,来自 AIMOD2 框架的一个关键概念是**假设的默认违规**,我们专注于在假设违规下识别未知,即假设对手已经绕过了我们的控制。 ### 初步评估 在**初步评估**阶段,我们收集和研究数据以支持假设。这包括内部和外部来源: * **内部来源**:之前的狩猎、经验教训、内部应用程序文档、网络和应用程序架构图、代码仓库、内部威胁情报。 * **外部来源**:OSINT、供应商博客、信息请求(RFI)给可信的外部组织。 此步骤的一个子部分是识别和(必要时)采访业务或技术负责人。根据你的狩猎,你可能需要与 SME 互动以获得更深入的理解。这并非总是必需;你可能已经凭经验或过往狩猎了解系统、日志记录和应用程序。 目标不是成为某个系统的专家,而是对环境有充分的理解。 ### 可行性评估 在规划狩猎活动之前,我们需要评估可行性。这包括: * 约束和限制 * 数据可用性 * 数据质量 * 团队技能 * 时间线 * 工具可用性 本质上,我们问:**“果汁值得挤压吗?”** 如果遥测数据不可用,问:可以使其可用吗?需要多少努力? 每次可行性评估应产生明确决策: | 决策 | 含义 | | --- | --- | | ✅ **GO** | 所有标准满足,继续规划 | | ❌ **NO-GO** | 存在关键阻塞项,列入待办并制定修复计划 | | ⚠️ **有条件(CONDITIONAL)** | 存在小缺口,记录假设并继续 | #### 实际可行性示例 使用上述 AS-REP Roasting 假设: | 标准 | 状态 | 备注 | | --- | --- | --- | | 数据可用性 | ✅ GO | Windows Security 4768 事件已采集到所有 DC 的 Splunk | | 数据质量 | ⚠️ 有条件 | 4768 中的预认证类型字段在 5 个 DC 中解析了 4 个,1 个 DC 的 sourcetype 损坏 | 技能 | ✅ GO | 团队具备 SPL 和 Active Directory 经验 | | 时间线 | ✅ GO | 预计 3 天,符合当前迭代 | | 工具 | ✅ GO | Splunk Enterprise Security 加上内部 AD 清单 | | **总体** | ⚠️ **有条件** | 继续执行,并记录一个 DC 解析存在缺口。打开一个并行工单,在重新运行狩猎前修复 sourcetype 以实现全覆盖。 | 如果限制因素阻碍进展,将想法列入待办事项,并制定计划以在处理新假设或狩猎的同时获取所需遥测数据。 ## 定义范围和目标 在这里,我们定义狩猎的**目标**。这些代表我们的狩猎目标以及实现目标所需完成的任务。由于我们的狩猎是 SMART 的,我们必须明确定义如何**衡量和管理**它们。这包括指定目标环境段、分析时间窗口、范围内的系统和资产,以及任何明确的排除项。 ## 正式化行动计划(狩猎计划) 现在到了有趣的阶段,构建狩猎计划。 任何狩猎的一个关键原则是记录你的行动和发现。这使报告更容易,允许我们保留工件,并确保结果可重复。 我们的团队使用 **Jira**,但任何文档工具都适用。关键是:**只需记录**。 我们使用 **Epics(史诗)**、**Stories(故事)** 和 **Tasks(任务)** 来组织计划: ### Epics(启动) 代表狩猎的总体假设或主题。我们包括: * 环境配置文件(来自第 0 步) * 支持文档 * 初始研究(例如 CTI、内部文档) * 狩猎的相关性和理由 * MITRE ATT&CK 技术映射 * 所需数据源及字段级细节 ### Stories(狩猎) 这些是与 Epic 假设对齐的离散调查或测试。你可以针对一个假设开发一个或多个故事,最终**证明或推翻**它。每个故事应反映单一思维过程并作为一个测试。开发多个测试的想法不仅是为了彻底调查假设,也是为了挑战初始假设。我们应该**挑战已知的一切**。记住,威胁狩猎是关于追逐未知的,虽然你应该覆盖简单的测试(例如针对编码命令的字符串搜索),但我们应该努力更深入地思考,如果我们真的想发现未知。我相信狩猎过程中应有一定程度的挣扎;否则你可能没有学习到东西,并且可能正在实现已经存在的东西。如果是这种情况,问问自己:意义何在? **示例:** 如果我的假设是关于管理账户的异常登录事件,我可能会有两个故事: 1. 一个使用事件代码 4624/4672 并应用已知环境上下文建立基线的方法。 2. 另一个使用机器学习建模异常的方法。 不同的方法,相同的假设。可能需要不同的测试来完全完成狩猎。 ### 狩猎执行步骤 * **收集和分析数据** + 从指定源检索数据 + 理解数据形态和覆盖范围 + 数据清理、转换和建模 * **调查和验证威胁** + 在数据上测试假设并根据需要调整 + 过滤和查询 + 时间趋势和数据分析 + 高级分析(聚类、统计方法、机器学习) + 已知 TTP 作为参考锚点 * **记录观察和洞察** + 出现的异常和洞察 + 狩猎期间假设的变更 + 使用的技术 + 访问的数据源 + 验证的 TTP 覆盖范围 通过使用 Jira 等工具,文档成为轻量级手册。我们的团队自然开始开发类似于 的结构化手册,便于参考,并使报告更高效。这些故事和手册也充当了狩猎仓库,我们可以引用之前的狩猎。 ### 任务(结果) 任务记录狩猎的**结果**,并与父 Epic 关联以便跟踪。它们包含结果,例如(主要来自 PEAK 和 AIMOD2 框架): * **新的狩猎想法**,未来的假设或用例 * **分析/检测**,创建的规则、仪表板或签名 * **安全事件**,升级到事件响应和/或打开事件 * **书面报告**,最终狩猎报告 * **可见性缺口**,识别的缺失遥测 * **安全控制问题**,发现的现有防御中的缺口 指标对狩猎计划至关重要,因为管理层通常以数字思考。可衡量的指标对于衡量努力的有效性和展示计划成熟度至关重要。我们还必须考虑什么指标真正重要,什么可能是无效指标。我们应该避免仅跟踪活动指标(花费时间、执行的狩猎数量),而应关注更有影响力的内容。指标应帮助回答“所以呢?”这个问题。 ``` graph TD A[Hunt Epic - Hypothesis] A --> B1[Story - Hunt 1: Logon Baseline] A --> B2[Story - Hunt 2: ML Model] B1 --> C1[Task - Analytics / Detection] B1 --> C2[Task - Written Report] B2 --> C3[Task - Visibility Gap Identified] B2 --> C4[Task - New Hunt Idea] ``` ## 实际示例:端到端狩猎 为了使流程具体化,以下是一个从触发到结果的完整走查。字段名称和工具基于上述环境配置文件。 ### 环境配置文件 * **SIEM**:Splunk Enterprise Security * **EDR**:CrowdStrike Falcon * **环境**:混合(本地 AD 加上 Azure AD) * **垂直领域**:金融服务 * **保留策略**:热数据 90 天,冷数据 1 年 * **成熟度**:中级 ### 第 1 步:触发器 CISA 公告关于一个利用 AS-REP Roasting 针对服务账户的财务动机攻击者。来自 CTI 订阅源接收,鉴于匹配的垂直领域,相关性高。 ### 第 2 步:假设(SMART) ### 第 3 步:初步评估 * **内部**:提取具有 `DONT_REQ_PREAUTH` 设置的账户列表。审查最近的 AD 审计以了解服务账户健康状况。 * **外部**:MITRE ATT&CK T1558.004、CISA 公告、Sigma 规则 `win_susp_rasp_roasting`。 * **SME**:身份团队确认三个遗留服务账户故意禁用了预认证,应被排除为已知良好账户。 ### 第 4 步:可行性 **有条件通过**:一个 DC 的 sourcetype 损坏(条件性依赖解析修复,见实际可行性示例)。继续执行并标记。 ### 第 5 步:范围 * **范围内**:所有本地 Windows 域控制器,所有零级和一级服务账户。 * **时间窗口**:最近 30 天。 * **排除项**:由身份团队确定的三个文档化遗留账户。 * **主要目标**:确定是否发生 AS-REP Roasting 活动。 * **次要目标**:识别应启用预认证的待修复服务账户。 ### 第 6 步:Jira 计划 **Epic**:`HUNT-042 AS-REP Roasting Detection Hunt` * 链接:CISA 公告、MITRE T1558.004、Sigma 规则引用 * 数据源:`wineventlog:security` (4768)、AD 清单查找 * MITRE:T1558.004(凭据访问) **故事 `HUNT-042-S1`**:基准 4768 预认证类型 0 事件 * 方法:SPL 查询针对 30 天数据,按 `src_host`、`account_name` 分组,排除已知良好列表,按频率排序。 * 预期结果(恶意):来自非域控主机发起的请求,目标为多个可烘烤账户。 * 预期结果(良性):仅出现已知良好遗留账户,且均来自预期服务主机。 **故事 `HUNT-042-S2`**:将可烘烤账户与当前 AD 状态交叉引用 * 方法:将狩猎结果与当前 `DONT_REQ_PREAUTH` 标志进行比较,识别无论是否发现活动都应修复的账户。 **任务(结果占位符):** * `HUNT-042-T1` 分析/检测:将验证后的查询转换为计划 Splunk ES 相关规则。 * `HUNT-042-T2` 可见性缺口:`DC05` 上 sourcetype 解析损坏,已向平台团队提交工单。 * `HUNT-042-T3` 安全控制问题:发现两个预认证被禁用的服务账户应修复,已移交身份团队。 * `HUNT-042-T4` 书面报告:最终狩猎报告附加到 Epic。 * `HUNT-042-T5` 新的狩猎想法:对同一服务账户集合进行 Kerberoasting(T1558.003)后续狩猎。 这展示了从触发到结果的完整狩猎过程。相同结构可通过添加更多故事扩展到更大的活动。 ## 自动化/AI:使狩猎可重复 现在我们可以讨论自动化。这不是要自动化狩猎本身,狩猎始终需要人类驱动的假设测试和分析。相反,我们专注于自动化**输出**和可重复组件。 狩猎最有价值的结果之一是检测或分析。检测是直接的,可以传递给检测工程流程 SOC 中落地。但并非每个分析都会成为检测。有些需要人工审查、上下文或更深入分析。借鉴 Google SecOps 的理念(分析师应花更少时间收集数据,更多时间分析),我们可以自动化狩猎中重复或数据密集的部分。 自动化和 AI 应聚焦于: * 自动化重复查询和计划狩猎 * 自动用威胁情报丰富数据 * 在新时间范围内重新运行验证过的假设 * 生成结构化报告或 Jira 工单 * 告警基线偏差或可见性缺口 * **开发和质疑**初始假设 我通过开发一个**威胁狩猎规划器技能**帮助自动化狩猎规划过程。这不会自动执行狩猎本身,但能基于这个统一的狩猎流程提供初始计划。目标是让分析师更快投入狩猎,同时使流程更可重复。该技能应被视为草稿,挑战它以确保其符合你设定的目标。→ [威胁狩猎规划器用户指南](https://github.com/sims718718/UnifiedThreatHunting/blob/main/Theat_Hunt_Planner_Skill/threat_hunt_planner_user_guide.md) 对于数据探索技术,用于支持执行阶段,请参阅 [/Data_Analysis](https://github.com/sims718718/UnifiedThreatHunting/tree/main/Data_Analysis)。 最终,狩猎不应是一次性事件。它们应该是**可重复、可衡量、可改进**的(参见[基于信号的威胁狩猎](https://github.com/sims718718/UnifiedThreatHunting/blob/main/Detection_Engineering_Meets_ThreatHunting/Signal-Based_Threat_Hunting.md))。随着狩猎成熟,我们应该将其编成自动化包,以在扩展工作量的同时不丢失深度。这确保了威胁狩猎产生的价值随时间累积,使我们专注于思考而非获取。 使用自动化来节省狩猎过程中多个步骤的时间。使用 AI 来帮助构建狩猎计划甚至初始假设。然而,永远不要全盘接受。挑战它,研究它,理解它。 最后,感谢阅读,并向所有为此过程提供参考的作者致敬。狩猎愉快! #### 参考资料 * * * * *
标签:AIMOD2, Cyber Threat Hunting, Detection Engineering, Forensics, OTHF, PEAK, Python 实现, Stakeholder Requirements, TaHiTI, Threat Intelligence, 入侵防御系统, 威胁情报, 威胁猎捕, 安全流程, 安全运营, 开发者工具, 扫描框架, 组织流程, 统一威胁狩猎流程, 网络安全, 隐私保护