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) 的后续。
[](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-008/actions/workflows/ci.yml)
[](#methodology)
[](https://attack.mitre.org/)
[](#detection-engineering)
[](https://attack.mitre.org/techniques/T1558/003/)
[](LICENSE)
[](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报告查看器, 库, 应急响应, 数字取证, 自动化脚本