SorinTolbaru/wazuh-ad-detection-lab

GitHub: SorinTolbaru/wazuh-ad-detection-lab

一个用于端到端验证 Wazuh SIEM 自定义检测规则的隔离 Active Directory 紫队实验室,通过模拟真实攻击链来驱动检测工程。

Stars: 0 | Forks: 0

# 迷你 SOC 家庭实验室 - 使用 Wazuh 进行 AD 攻击链检测 ![Wazuh](https://img.shields.io/badge/SIEM-Wazuh%204.14-blue) ![检测](https://img.shields.io/badge/Detection-4%20custom%20rules-brightgreen) ![MITRE](https://img.shields.io/badge/Mapped-MITRE%20ATT%26CK-red) ![防火墙](https://img.shields.io/badge/Network-pfSense%202.7.2-orange) 一个完全隔离的 Active Directory 实验室,旨在端到端地**检测真实的攻击链**,从恶意的 Office 宏到 Kerberoasting 和 SMB 数据窃取。其攻击方的存在仅仅是为了验证防御方:每一个攻击者行为都被映射到一条**自定义的 Wazuh 检测规则**,并根据真实的遥测数据进行调优,且经过了实时确认。 本项目作为我硕士论文《*用于安全事件收集与关联的 SIEM 平台*》(网络安全专业,ULBS 锡比乌分校)的实践核心部分而构建。 ## 目录 - [演示内容](#what-this-demonstrates) - [架构](#architecture) - [威胁场景 - 攻击链](#threat-scenario---the-attack-chain) - [检测工程](#detection-engineering) - [响应剧本](#response-playbooks) - [加固与审计策略 (GPO)](#hardening--audit-policy-gpo) - [网络安全 - pfSense 最小权限](#network-security---pfsense-least-privilege) - [告警](#alerting) - [验证与可复现性](#validation--reproducibility) - [未来工作](#future-work) - [文档](#documentation) ## 演示内容 - **检测工程** - 根据真实的事件遥测数据编写、调优和验证 SIEM 规则,而不是照搬博客上的特征码。 - **MITRE ATT&CK 映射** - 每条规则都与特定的技术和具体的 Windows/Sysmon Event ID 相关联。 - **Windows / AD 安全** - 高级审核策略、PowerShell Script Block Logging、Sysmon、Kerberos 内部原理。 - **网络分段** - 具有显式默认拒绝的最小权限防火墙设计。 - **紫队验证** - 每个检测都可以按需复现,便于实时演示。 **技术栈:** Wazuh 4.14、Sysmon、pfSense 2.7.2、Windows Server 2022 (AD/DNS)、Windows 11、Ubuntu Server、Slack 告警、VirtualBox ## 架构 pfSense 后端的三个隔离网段,其中 SOC 网络与企业网络分离,因此代理以单向方式推送遥测数据,并且分析师永远不会与他们监控的资产处于同一个广播域中。 ![架构图](https://static.pigsec.cn/wp-content/uploads/repos/cas/69/6936feee35943bb17e1d8f8b17557acdd0ce7c331646a062f33d9951e136a466.png) | 主机 | IP | 网段 | 角色 | 遥测数据 | |------|----|---------|------|-----------| | DC-01 | 10.10.10.10 | CORP | 域控制器、DNS (`aztek.com`) | Wazuh 代理,`domain-controllers` 组 | | HR-CLIENT01 | 10.10.10.11 | CORP | 工作站 - 初始立足点 | Wazuh 代理,`windows-workstations` 组,通过 `agent.conf` 配置 Sysmon + PowerShell | | SOC-CLIENT01 | 10.10.20.x | SOC | 分析师工作站 - 通过 Web 访问 Wazuh + pfSense | 无(无需监控;按设计不在范围内) | | SIEM | 10.10.20.11 | SOC | Wazuh 4.14 管理器 | - | **Active Directory:** 域 `aztek.com`;OUs `HR / PAYROLL / SOC`;可被 Kerberoasting 的服务账号 `svc-payroll`(SPN `HTTP/payroll.aztek.com`);通过 AGDLP 组(`Payroll-Access`)授予对 `\\DC-01\Payroll\salaries.xlsx` 的访问权限。 ![Wazuh - 两个代理均已激活 (DC-01 和 HR-CLIENT01)](https://static.pigsec.cn/wp-content/uploads/repos/cas/3e/3e1b763366fc132370e340a38afa3f3837804248f7133e7eea094c9a31476012.jpg) ## 威胁场景 - 攻击链 一个模拟工资单数据窃取的六阶段入侵,纯粹用于生成触发检测的遥测数据。完整的分步演练位于 [`docs/guide/Mini-SOC-Home-Lab_Guide`](docs/guide/Mini-SOC-Home-Lab_Guide.pdf) 中;下方的截图展示了关键时刻。 | # | 阶段 | 技术 (MITRE ATT&CK) | |---|-------|--------------------------| | 1 | 恶意的 Word 宏 -> 通过 443 端口的 Meterpreter C2 | T1566.001, T1204.002, T1059.001 | | 2 | PowerView 域侦察 (`Get-DomainUser`, `Get-NetShare`, `Get-NetUser -SPN`) | T1087.002, T1069.002, T1135 | | 3 | 使用 Rubeus 对 `svc-payroll` 进行 Kerberoasting(RC4 票据) | T1558.003 | | 4 | 使用 Hashcat 进行离线哈希破解 | T1110.002 | | 5 | 使用破解的凭据进行 SMB 横向移动 (`net use`) | T1078.002, T1021.002 | | 6 | 从网络共享中窃取 `salaries.xlsx` | T1039 | **阶段 1 - 建立 Meterpreter 会话,随后迁移到稳定的宿主进程:** ![阶段 1 - Meterpreter 会话与进程迁移](https://static.pigsec.cn/wp-content/uploads/repos/cas/51/511da7698cfac9e9602afc8c10ebd676700e859ec74cc87356fc3667bbba9613.png) **阶段 2 - PowerView 侦察发现 SPN (`svc-payroll`) 和 Payroll 共享:** ![阶段 2 - PowerView 侦察 1](https://static.pigsec.cn/wp-content/uploads/repos/cas/26/266c56fc93f52000ea2c00814b68e7f540f4096d0b68d4c54777e7a0571001d4.png) ![阶段 2 - PowerView 侦察 2](https://static.pigsec.cn/wp-content/uploads/repos/cas/e8/e86d33846aa405a5a879ba69b9278912b8362f21e704e93dce78f5a5c43e1631.png) ![阶段 2 - PowerView 侦察 3](https://static.pigsec.cn/wp-content/uploads/repos/cas/2f/2f3cff0d65560514f621b5e17a9bf933fe7854f3d76095b34b54b4b8732a8a44.png) **阶段 3 - Rubeus 请求 RC4 服务票据并写入哈希:** ![阶段 3 - Rubeus Kerberoasting](https://static.pigsec.cn/wp-content/uploads/repos/cas/26/26bca757a2d5a79c31e2c43571da9b09ed45cf32a903489ea2824db6898bcf33.png) **阶段 4 - Hashcat 离线破解服务账号密码:** ![阶段 4 - Hashcat 破解了哈希](https://static.pigsec.cn/wp-content/uploads/repos/cas/79/793114ad39e4c89b54993e6f5068726ecdfd7bbf451bbeb4f7fee00c713c88f5.png) **阶段 5-6 - 通过认证的 SMB 访问共享并窃取 `salaries.xlsx`:** ![阶段 5-6 - SMB 访问与数据窃取](https://static.pigsec.cn/wp-content/uploads/repos/cas/25/251d31682ce47d6f32b857ef8d31dabc8a2cdda6f5156f7a5a8c8c88ccbbc0fb.png) ## 检测工程 在 `/var/ossec/etc/rules/local_rules.xml` 中的四条自定义 Wazuh 规则,均为 **level 12**。每一条都是根据 Wazuh Discover 中捕获的真实事件构建的:`full_log` -> `wazuh-logtest` -> 规则 -> 实时测试。这四条规则均已验证可实时触发,并可根据需要复现。 ### 检测覆盖率 每个攻击阶段都映射到其对应的遥测数据、规则和告警。检测缺口已被特意标记出来。 ![检测覆盖率](https://static.pigsec.cn/wp-content/uploads/repos/cas/09/093e6f80c2aecb3072a34d40ae48a569ec8672801d008ca737c0add69f17a6f9.png) | 规则 | ID | 触发条件 | 检测阶段 | MITRE | |------|----|----------|---------------|-------| | **R1** | 100100 | Sysmon **EID 1** - `parentImage` = WINWORD/EXCEL/POWERPNT 派生 `cmd`/`powershell`/`wscript` | 1 - 宏执行 | T1566.001, T1059.001 | | **R2** | 100200 | PowerShell **EID 4104** - `scriptBlockText` 匹配到 PowerView cmdlet (PCRE2) | 2 - 侦察 | T1059.001, T1087.002 | | **R3** | 100300 | Kerberos **EID 4769** - `serviceName=svc-payroll`, `ticketEncryptionType=0x17`, `status=0x0` | 3 - Kerberoasting | T1558.003 | | **R4** | 100400 | 登录 **EID 4624** - `targetUserName=svc-payroll`, `logonType=3` | 5 - SMB 横向移动 | T1021.002, T1078.002 | ![R1 - Office 派生命令解释器 (rule.id 100100)](https://static.pigsec.cn/wp-content/uploads/repos/cas/cc/ccd6e90ea6223280ea4fa096b6322cd65711948824a49e3f72a2d9964be89c4c.jpg) ![R2 - 通过 Script Block Logging 发现 PowerView 侦察 (rule.id 100200)](https://static.pigsec.cn/wp-content/uploads/repos/cas/97/9740e1b17bc260b8284f03376565a7374967d9bd6842c77959b70aaf8cb40376.jpg) ![R3 - 针对 svc-payroll 的 Kerberoasting RC4 票据 (rule.id 100300)](https://static.pigsec.cn/wp-content/uploads/repos/cas/a5/a579c0b334dd5a081aef5d615817e1d95139066e4c83779b0da010c5899f8d9e.jpg) ![R4 - svc-payroll 网络登录 / SMB 横向移动 (rule.id 100400)](https://static.pigsec.cn/wp-content/uploads/repos/cas/68/68d50638b633e8bca468e79fa273e04853db56dff72dbd980fc2694e957a55ae.jpg) **覆盖率与缺口(按设计):** - **阶段 4(离线破解)** 不产生主机遥测数据 - 这是一个故意的检测缺口。防御对策是*预防*,在此通过密码策略(最少 14 个字符)来强制执行,这增加了破解截获的 RC4 哈希的成本。 - **阶段 6(数据窃取)** 目前是通过 R4(SMB 会话)推断出来的。文件级的 FIM / 出口监控已列为未来的工作。 ### 规则说明 - **R1** 依赖于父子进程关系,而不是 payload 特征码,因此它能捕获任何由 Office 派生的解释器,而不受特定宏的影响。 - **R2** 依赖于通过 GPO 启用的 Script Block Logging (EID 4104),并通过 PCRE2 匹配 cmdlet 名称 - 能够抵御普通字符串匹配会漏掉的变量/空格混淆。 - **R3** 是价值最高的检测:对服务账号发起的 RC4 (`0x17`) 服务票据请求是极强的 Kerberoasting 信号 - 这是整条链中保真度最高的环节。 - **R4** 检测的是*新登录会话的建立*,而不是单次文件访问 - 在现有的交互式会话中重新进行身份验证会重用该 SMB 会话,并且理应**不会**再次触发规则。需要全新的登录会话才能再次触发。 ## 响应剧本 每个检测都有完整的 SOC 响应剧本 - 分流、调查、遏制、补救和 IOCs: | 剧本 | 涵盖范围 | |----------|--------| | [R1 - Office 宏](docs/playbooks/R1-office-macro.md) | Office 派生命令解释器(初始访问) | | [R2 - PowerView 侦察](docs/playbooks/R2-powerview-recon.md) | 通过 PowerShell 进行域枚举 | | [R3 - Kerberoasting](docs/playbooks/R3-kerberoasting.md) | 针对 `svc-payroll` 的 RC4 服务票据请求 | | [R4 - 横向移动](docs/playbooks/R4-lateral-movement.md) | 服务账号网络登录 / SMB 访问 | ## 加固与审计策略 (GPO) 三个自定义的 GPO 使得上述遥测数据得以生成: - **SOC - DC 审计策略** (Domain Controllers OU) - Kerberos 服务票据操作 -> 成功;审核登录 -> 成功。加上用于 Kerberos 身份验证服务 + 凭据验证的 `auditpol` -> 成功/失败。 - **SOC - PowerShell 日志记录** (HR OU) - Script Block Logging + 模块日志记录 -> 已启用 (EID 4104)。 - **SOC - 账号策略** (域根) - 密码历史记录 24,最长使用期限 90 天,最短长度 14,开启复杂度要求;5 次尝试后锁定,持续/重置时间为 15 分钟。 ## 网络安全 - pfSense 最小权限 每个网段的显式允许规则,并以默认拒绝结尾。禁止全部放通。 **防火墙别名** 主机:`DC_01 = 10.10.10.10`,`WAZUH = 10.10.20.11` 端口:`AD_PORTS = 53, 88, 389, 445, 636` | `WAZUH_PORTS = 1514, 1515` | `WEB_PORTS = 80, 443` **CORP (em1)** | # | 动作 | 协议 | 源地址 | 目标地址 | 端口 | 描述 | |---|--------|----------|--------|-------------|------|-------------| | 1 | Pass | UDP | CORP 子网 | any | 53 | DNS | | 2 | Pass | TCP/UDP | CORP 子网 | DC_01 | AD_PORTS | AD: DNS, Kerberos, LDAP, SMB, LDAPS | | 3 | Pass | TCP | CORP 子网 | WAZUH | WAZUH_PORTS | 代理 -> Wazuh | | 4 | Pass | UDP | CORP 子 | 10.10.10.1 | 123 | NTP | | 5 | Pass | TCP | CORP 子网 | any | WEB_PORTS | 互联网 | | 6 | Block | TCP | CORP 子网 | WAZUH | 443 | 阻断 Wazuh Dashboard | | 7 | Block | * | CORP 子网 | * | * | 默认拒绝 | **SOC (em2)** | # | 动作 | 协议 | 源地址 | 目标地址 | 端口 | 描述 | |---|--------|----------|--------|-------------|------|-------------| | 1 | Pass | UDP | SOC 子网 | any | 53 | DNS | | 2 | Pass | TCP | SOC 子网 | any | WEB_PORTS | Slack,更新 | | 3 | Pass | UDP | SOC 子网 | 10.10.20.1 | 123 | NTP | | 4 | Block | * | SOC 子网 | * | * | 默认拒绝 | NTP 集中在 pfSense 上,以确保事件时间戳在各主机之间保持关联。 ## 告警 在 `ossec.conf` 中集成了 Slack webhook(`level >= 12`)。所有四个检测均已确认能发送告警至 SOC 频道。 ![Slack - R1 告警](https://static.pigsec.cn/wp-content/uploads/repos/cas/7c/7cf5eb61e15d070fd27ea1f0421a3c257976841ec1225f07176e03d77960ec19.png) ![Slack - R2 告警](https://static.pigsec.cn/wp-content/uploads/repos/cas/52/520c0ad715ba8b795b3bf000c07919bcff928237c89c64c92d910ad891fd9a8a.png) ![Slack - R3 告警](https://static.pigsec.cn/wp-content/uploads/repos/cas/7f/7fb8428a5c6ff6541a020216163debdc7adcfeaa68622c3f95ec929a093dcc45.png) ![Slack - R4 告警](https://static.pigsec.cn/wp-content/uploads/repos/cas/58/5896bbafc656651179c8c26d3d4f6f565758f8c0f5b925e442ca5255cc65f671.png) ## 验证与可复现性 每条规则都经过实时验证,并可根据需要重新触发 - 非常适合用于演练或面试演示: | 规则 | 重新触发方式 | |------|-----------| | R1 | 打开宏文档 + Meterpreter `migrate` | | R2 | 加载 PowerView + `Get-DomainUser` | | R3 | `klist purge`,然后请求服务票据(purge 会强制生成新的 4769) | | R4 | 新的 HR 登录会话(注销/登录或 `runas`),然后执行 `net use` | ## 未来工作 这是一个功能完备的 v1 版本。按优先级排序的后续计划迭代: - 在 Payroll 共享上进行 **文件完整性监控 (FIM)**,以直接填补阶段 6 的数据窃取缺口,而不是从 R4 中推断。 - **工单系统集成** (TheHive / Jira),使得 level-12 告警能够自动创建案例 - 模拟真实的 SOC 分流流程。 - **出口 / 网络检测**(在 pfSense 上运行 Suricata),在网络层捕获 C2 beaconing,作为主机遥测的补充。 - **检测即代码** - 使用 CI 检查(在 pipeline 中运行 `wazuh-logtest`)对规则进行版本控制,以便在部署前验证每一次规则更改。 ## 文档 完整的分步构建文档位于 `/docs/guide` 中。README 是概述;这些是具体步骤。 [完整的分步指南](docs/guide/Mini-SOC-Home-Lab_Guide.pdf) ## 作者 **Tolbaru Constantin Sorin** - 网络安全硕士,ULBS 锡比乌分校,CompTIA Security+ 求职目标为初级 SOC / 安全分析师岗位。
标签:Active Directory, AI合规, PE 加载器, Plaso, Wazuh, 搜索语句(dork), 模拟器, 紫队