Jhatchi/NexaCorp-DFIR-INC-2026-008

GitHub: Jhatchi/NexaCorp-DFIR-INC-2026-008

针对 Active Directory Kerberoasting 攻击的取证调查项目,包含完整事件分析报告和 Wazuh 检测规则,用于识别和防御 RC4 服务票据窃取行为。

Stars: 0 | Forks: 0

# NexaCorp DFIR: INC-2026-008 - Active Directory 侦察与 Kerberoasting 针对 NexaCorp Windows 域 (`nexacorp.lab`) 的一起 Active Directory 凭据访问事件的调查。2026 年 7 月 3 日星期五晚上,攻击者从单台内部工作站 (`bru-ws-01`) 以一个真实但低权限的帮助台账号 (`t.remy`) 向域进行了身份验证,运行了自动化的目录枚举 (SharpHound),然后为服务账号 `svc_report` 请求了 Kerberos 服务票据,并故意强制使用弱遗留 RC4 密码套件,以便该票据可以进行离线破解 (Kerberoasting)。没有使用任何漏洞利用和恶意软件:攻击者只是登录并滥用了 Kerberos 的设计功能。本项目作为 BeCode 布鲁塞尔蓝队与红队训练营 (Mission 08) 期间的独立实践完成,是 [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001)、[INC-2026-002](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002)、[INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003)、[INC-2026-004](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-004)、[INC-2026-005](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-005)、[INC-2026-006](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-006) 和 [INC-2026-007](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-007) 的后续。 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-008/actions/workflows/ci.yml) [![Methodology](https://img.shields.io/badge/methodology-NIST%20SP%20800--61r2-blue.svg)](#methodology) [![Framework](https://img.shields.io/badge/framework-MITRE%20ATT%26CK-red.svg)](https://attack.mitre.org/) [![Detection](https://img.shields.io/badge/detection-Wazuh%20rule-blue.svg)](#detection-engineering) [![Technique](https://img.shields.io/badge/technique-T1558.003%20Kerberoasting-orange.svg)](https://attack.mitre.org/techniques/T1558/003/) [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Johan--Emmanuel%20Hatchi-0A66C2?logo=linkedin&logoColor=white)](https://www.linkedin.com/in/johan-emmanuel-hatchi/) 本代码库记录了作为 BeCode 网络安全训练营 (2025-2026 期) 一部分的 SOC 分析师实践。它包含两项交付成果:第 1 阶段的取证调查与报告,以及第 2 阶段的检测规则(用于 Kerberoasting 的 Wazuh 规则)。这是 NexaCorp DFIR 系列的第 8 起事件,也是第 3 个月(Windows / Active Directory)的第 1 起事件。 ## 目录 - [运行须知](#operational-notice) - [概览](#at-a-glance) - [实践背景](#engagement-context) - [执行摘要](#executive-summary) - [攻击链摘要](#kill-chain-summary) - [如何阅读本代码库](#how-to-read-this-repository) - [方法论](#methodology) - [使用的工具](#tools-used) - [检测工程](#detection-engineering) - [代码库布局](#repository-layout) - [可复现性](#reproducibility) - [已知局限](#known-limits) - [NexaCorp DFIR 系列](#nexacorp-dfir-series) - [致谢](#acknowledgments) - [关于](#about) - [许可证](#license) ## 运行须知 这是针对虚构基础设施的培训实践。NexaCorp Industries 是用作 BeCode 布鲁塞尔训练营场景的虚构客户。域 `nexacorp.lab` 及其主机是隔离的实验室环境。未涉及任何生产系统、客户数据或第三方。 此处引用的所有 IP 地址、主机名和账号(`192.168.10.30`、`192.168.10.31`、`t.remy`、`svc_report`、`p.renard`、`bru-ws-01` 等)都是实验室本地产物,并非真实的威胁情报。请勿将它们作为 IOC 输入到生产 SIEM 中。 ## 概览 | 字段 | 值 | | -------------------- | --------------------------------------------------------------------------------------------------- | | 编号 | INC-2026-008 | | 受影响主机 | bru-dc-01.nexacorp.lab (域控制器, 192.168.10.30) | | 涉及的工作站 | bru-ws-01 (192.168.10.31) | | 根本原因 | Kerberoasting (T1558.003):为域服务账号请求 RC4 服务票据,可离线破解 | | 结果 | 服务账号 `svc_report` 凭据泄露(离线破解),一个更高价值的跳板 | | 事件发生日期 | 2026 年 7 月 3 日 星期五 | | 证据 | security_events.json, sysmon.json, kerberos_roast.pcap, wazuh-alerts.json, domain_spn_accounts.csv, ad_service_accounts.txt | | 阶段 | 第 1 阶段调查 + 第 2 阶段检测规则 (Wazuh, 部署为 rule.id 100011) | | 相关事件 | INC-2026-007 (第 2 个月的目录导出,可能是凭据重用的来源) | | 调查输出 | 值 | | ----------------------- | --------------------------------------------------------------------------------------------- | | 初始据点账号 | t.remy (真实的帮助台账号,在非工作时间使用) | | 源工作站 | bru-ws-01 (192.168.10.31) | | 技术事件 | Windows Event 4769 (请求 Kerberos 服务票据) | | 区分特征 | ticketEncryptionType 0x17 (RC4);2697 起 4769 事件中的 2 起,其余为 AES 0x12 | | 被窃取账号 | svc_report | | 目标 SPN | HTTP/bru-app-01.nexacorp.lab | | 窃取时间 | 2026 年 7 月 3 日 21:58:03 UTC (23:58:03 CEST) | | 驻留时间 | 10 分 50 秒 (从登录到窃取) | | SIEM 检测盲区 | 当晚 25 条 Wazuh 告警,全部针对失败的登录诱饵 (规则 60122 / 60204),针对窃取的为 0 | ## 实践背景 **场景(虚构)。** NexaCorp Industries 报告了针对其 Active Directory 的可疑活动。该实践由 Marc Wauters(IT 基础设施经理)报告;事件发生在 2026 年 7 月 3 日星期五。第 2 个月的修复措施(服务器端授权和移除 `m.renard` 后门)是真实且有效的,因此攻击者改变了攻击面:从 Web 应用层转移到了 Windows 域。 **范围。** 对证据包(域控制器安全日志、Sysmon 主机遥测数据、Kerberos 网络捕获、Wazuh 告警报导出和 IT 服务账号注册表)进行取证分析,以及填补 SIEM 盲区的第 2 阶段检测交付物。 **承接第 2 个月。** 修复漏洞并不能撤销已经泄露的数据。在 INC-2026-007 期间导出的员工目录正是让攻击者能够重用像 `t.remy` 这样的低权限帮助台凭据的情报来源(谁在那里工作、用户名长什么样)。 **教育背景。** 在 BeCode 布鲁塞尔蓝队与红队训练营(2025 年 11 月至 2026 年 9 月)期间作为 Mission 08 交付,是第 3 个月(Windows / Active Directory)的第 1 起事件。 ## 执行摘要 2026 年 7 月 3 日星期五 21:47 UTC,一名攻击者从工作站 `bru-ws-01` 以 `t.remy`(一个真实的帮助台账号)的身份向 NexaCorp 域进行了身份验证,当时处于该操作员的工作时间之外。在两分钟内,该会话进行了大量的目录枚举(40 次目录访问事件;主机上的 SharpHound),然后在 21:58 UTC 为服务账号 `svc_report` 请求了两个 Kerberos 服务票据,两者都被强制使用脆弱的 RC4 密码套件。整个过程耗时不到十二分钟。 攻击者没有利用漏洞入侵;他们只是登录并滥用了 Kerberos 的一项正常功能。任何通过身份验证的域用户都可以请求服务票据;唯一使其成为恶意行为的原因是强制使用了 RC4(`ticketEncryptionType 0x17`)而不是现代 AES,因为 RC4 票据可以被离线破解以恢复服务账号密码。这一单一属性就是攻击的完整指纹,这也是为什么 SIEM 在关键部分保持静默的原因:当晚的 25 条 Wazuh 告警中,全部涉及来自不同主机的嘈杂的登录失败突增,而没有一条涉及票据窃取。 其后果是一个新暴露的凭据:一旦被破解,`svc_report` 的密码就成了比攻击者最初获取的帮助台登录凭据价值更高的资产,这为域入侵的下一阶段做好了准备。事件级别被评为 **高**。本次实践的第 2 阶段交付了 Wazuh 规则(部署为 rule.id 100011),用于在未来检测此类攻击。 ## 攻击链摘要 攻击者在不到十二分钟的时间内,从低价值登录凭据升级到了可离线破解的服务凭据: 1. **初始据点**:`t.remy` 于 21:47:13 UTC 从 `bru-ws-01` (192.168.10.31) 登录(事件 4624,类型 3),位于非工作时间。在此之前是一个正常的 TGT 请求(事件 4768,AES);账号是真实的。 2. **枚举**:从 21:49:32 UTC 开始,40 次目录访问事件(事件 4662)映射了用户、组和服务账号。主机遥测显示为 `SharpHound.exe -c All`。 3. **Kerberoast**:在 21:58:03 和 21:58:07 UTC,为 `svc_report` 颁发了两个使用 RC4 加密的服务票据(事件 4769,`ticketEncryptionType 0x17`)。主机遥测显示为 `Rubeus.exe kerberoast /rc4opsec`;网络捕获确认了针对 `HTTP/bru-app-01.nexacorp.lab` 且 etype 为 23 的 TGS-REQ。 4. **后果**:RC4 服务票据可被离线破解(hashcat 模式 13100),从而暴露 `svc_report` 密码。 来自不同主机 (192.168.10.66) 的登录失败突增是一个独立的诱饵,并非本次攻击;真正的入侵是来自 `bru-ws-01` 的单次干净利落的票据窃取。 ## 如何阅读本代码库 | 如果你是... | 从这里开始 | 时间 | | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | | **招聘人员或招聘经理** | 本 README + [报告](reports/INC-2026-008_Findings_Report.md) 执行摘要 | 5 分钟 | | **管理层 / 董事会** | [报告](reports/INC-2026-008_Findings_Report.md) 执行摘要和修复措施部分(非技术性) | 10 分钟 | | **检测工程师** | [`detection/README.md`](detection/README.md) + [`detection/kerberoast_detection.xml`](detection/kerberoast_detection.xml) | 15 分钟 | | **评估匹配度的 SOC 分析师** | [报告](reports/INC-2026-008_Findings_Report.md) 技术分析 + [`detection/`](detection/) (Wazuh 规则) | 20 分钟 | | **DFIR 从业者** | 完整[报告](reports/INC-2026-008_Findings_Report.md) + [`methodology/attack-timeline.md`](methodology/attack-timeline.md) + [`notes/journal.md`](notes/journal.md) | 30 分钟 | ## 方法论 本次实践遵循标准的事件响应框架: - **NIST SP 800-61r2**(事件处理)和 **NIST SP 800-86**(取证技术):构建检测与分析工作的结构。 - **SANS PICERL**:识别阶段是调查的核心(事件日志、主机遥测和捕获数据的关联)。 - **MITRE ATT&CK Enterprise v15**:每项发现都映射到一个或多个技术(参见 [`methodology/attck-mapping.md`](methodology/attck-mapping.md))。此事件是一起主要技术(Kerberoasting, T1558.003),之前发生了账号发现 (T1087.002)。 - **检测工程**:第 2 阶段的交付物是一条 Wazuh 规则,包含误报分析(参见 [`detection/README.md`](detection/README.md)。 **调查方法。** 按源主机和账号对域控制器安全事件进行分组;隔离出那台除了登录之外还执行了其他操作(它还枚举了目录并随后请求了票据)的主机;使用票据加密类型作为区分标准,将攻击与正常的 Kerberos 噪音区分开来;将 SPN 注册表与恶意票据进行关联,以证明实际 targeted 账号是哪一个;通过主机遥测和网络捕获进行印证。参见 [`notes/journal.md`](notes/journal.md)。 **证据和时间戳。** 日志时间戳为 UTC;本地时间为 CEST (UTC+2)。在有助于梳理时间线的地方,会同时提供两种时间戳。 ## 使用的工具 - **jq**:查询和聚合 Wazuh 格式的安全事件导出(事件 ID 分布、加密类型细分、主机间关联)。 - **tshark**:Kerberos 网络捕获分析(确认针对目标 SPN 的 TGS-REQ 以及 RC4 etype)。 - **base64 / python3**:解码主机遥测中观察到的混淆 PowerShell 命令。 - **grep / sort / uniq**:日志筛选,将攻击与登录失败诱饵区分开来。 ## 检测工程 本次实践包含第 2 阶段的检测交付物。调查不仅证明了攻击的存在,还证明了 NexaCorp 的 SIEM 在关键部分毫无反应:当晚的 25 条 Wazuh 告警中,全部涉及嘈杂的登录失败突增(规则 60122 和 60204),而没有一条涉及 Kerberoast,因为服务票据请求(事件 4769)本身是完全正常的。 这个盲区由一条 Wazuh 规则填补,该规则以加密类型而非账号名为键,因此它可以捕获未来任何票据窃取行为,而不仅仅是针对 `svc_report` 的窃取: ``` windows ^4769$ ^0x17$ Possible Kerberoasting: service ticket (4769) requested with weak RC4 encryption T1558.003 ``` 已提交给实验室 Wazuh 管理器并部署为 **rule.id 100011**。它在 RC4 4769 事件上触发,并在正常的 AES (0x12) 服务票据上保持静默,并经过了实时验证(在对所有五个 SPN 账号进行的受控票据窃取中产生了五条 rule.id 100011 告警,在 AES 上则为零)。完整的设计,包括针对大规模票据窃取的关联规则、误报分析以及仪表板截图,位于 [`detection/README.md`](detection/README.md) 和 [`detection/screenshots/`](detection/screenshots/) 中。检测(此规则)和预防(在域范围内禁用 RC4,将服务账号迁移至 gMSA)是互补的控制措施。 ## 代码库布局 ``` NexaCorp-DFIR-INC-2026-008/ ├── README.md This file ├── LICENSE ├── .gitignore ├── .markdownlint.json ├── .github/ │ └── workflows/ │ └── ci.yml markdownlint + typography validation ├── reports/ │ └── INC-2026-008_Findings_Report.md Markdown source of the findings report ├── detection/ │ ├── kerberoast_detection.xml Wazuh rule (Phase 2), deployed as rule.id 100011 │ └── README.md Detection design, offline proof, false-positive analysis ├── evidence-summary/ │ └── ioc-summary.md Indicators of compromise ├── methodology/ │ ├── attack-timeline.md Event-level timeline (UTC and CEST) │ └── attck-mapping.md MITRE ATT&CK mapping table └── notes/ └── journal.md Investigation journal (post-analysis reconstruction) ``` 证据包(事件日志、Sysmon、网络捕获、Wazuh 告警)归 BeCode 实验室所有,未提交至代码库(参见 `.gitignore`)。 ## 可复现性 证据包归 BeCode 实验室所有,不进行再分发。如果你有自己的副本,可以通过域控制器安全日志复现核心调查结果: ``` # 判别器:所有 service-ticket 请求 (4769) 的 encryption 类型 jq -r '.[] | select(.data.win.system.eventID=="4769") | .data.win.eventdata.ticketEncryptionType' \ logs/security_events.json | sort | uniq -c # 攻击:唯一的 RC4 (0x17) service ticket,包含目标和来源 jq -r '.[] | select(.data.win.system.eventID=="4769" and .data.win.eventdata.ticketEncryptionType=="0x17") | {ts:.timestamp, user:.data.win.eventdata.targetUserName, src:.data.win.eventdata.ipAddress}' \ logs/security_events.json # 据点:提供源工作站名称的 4624 logon jq -r '.[] | select(.data.win.system.eventID=="4624" and .data.win.eventdata.targetUserName=="t.remy") | [.timestamp, .data.win.eventdata.ipAddress, .data.win.eventdata.workstationName] | @tsv' \ logs/security_events.json ``` 目标 SPN (`HTTP/bru-app-01.nexacorp.lab`) 将 `domain_spn_accounts.csv` 与 RC4 票据对应起来,网络捕获确认 TGS-REQ 的 etype 为 23 (RC4)。 ## 已知局限 - **凭据来源是推断的。** `t.remy` 的重用最合理的解释是第 2 个月的目录导出 (INC-2026-007),但此处的证据证明了域内活动,而非获取凭据的确切时刻。 - **离线破解在带外进行。** 恢复 `svc_report` 密码是在网络外发生的,在此证据集中不可见;报告陈述的是暴露风险,而非已确认的破解。 - **范围仅限捕获窗口。** 调查涵盖导出的日志(6 月下旬至 2026 年 7 月 3 日);该窗口之外的活动不在范围之内。 ## NexaCorp DFIR 系列 - [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001):Linux 基础设施入侵(vsftpd 后门,Caldera C2) - [INC-2026-002](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002):权限提升与持久化(Tor SSH,SUID,后门账号) - [INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003):第 1 个月跨事件评估 - [INC-2026-004](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-004):SQL 注入(Web 门户) - [INC-2026-005](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-005):OS 命令注入与 Web Shell(Web 门户) - [INC-2026-006](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-006):存储型 XSS 与会话劫持(NexaPortal) - [INC-2026-007](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-007):IDOR 与失效的访问控制(第 2 个月毕业项目) - **INC-2026-008**:本代码库(AD 侦察与 Kerberoasting;第 3 个月的首起事件) ## 关于 在 [BeCode 布鲁塞尔](https://becode.org) 蓝队与红队训练营(2025 年 11 月至 2026 年 9 月)Mission 08 期间交付的独立 DFIR 实践。 作者:**[Johan-Emmanuel Hatchi](https://github.com/Jhatchi)** ([LinkedIn](https://www.linkedin.com/in/johan-emmanuel-hatchi/))。 对 2026 年 9 月起在比利时的网络安全实习机会持开放态度。正在寻找 SOC / DFIR / 检测工程职位,希望此类端到端工作(Windows 事件日志与 Kerberos 取证、Active Directory 攻击分析、检测规则编写、正式的客户报告)在职责范围内。 ## 许可证 [MIT](LICENSE),2026 Johan-Emmanuel Hatchi。 报告文本、方法论笔记和检测规则基于 MIT 许可证发布:可免费复制、改编和重用,但需注明出处。证据包、实验室基础设施和原始实践简报归 BeCode 布鲁塞尔所有,不进行再分发。
标签:Active Directory, HTTP, Plaso, Terraform 安全, Wazuh, Web报告查看器, 库, 应急响应, 数字取证, 自动化脚本