Toshi-hub834/active-directory-purple-team-lab
GitHub: Toshi-hub834/active-directory-purple-team-lab
在隔离环境中模拟真实 Active Directory 攻击并编写自定义 Wazuh SIEM 检测规则,实现从攻击到告警再到加固的完整紫队闭环。
Stars: 0 | Forks: 0
# Active Directory 紫队实验室攻击与检测
这是一个我自建的、隔离的 Active Directory 实验室。我在其中故意引入了常见的错误配置,从 Kali Linux 对它们发起了真实攻击,并设计了**自定义 SIEM 检测规则**来捕获每一次攻击。
该项目展示了完整的紫队闭环:

## 目标
构建一个真实的 AD 环境以:
1. 实践核心的 Active Directory 攻击技术。
2. 了解每次攻击在域控上生成的**遥测数据**。
3. 编写**自定义检测规则**,将原始、嘈杂的日志转化为高保真告警,这正是 SOC / 检测工程师的实际工作。
## 实验室环境
| 主机 | 角色 | 操作系统 | IP |
|------|------|----|----|
| `DC01` | 域控制器 (`corp.lab`) | Windows Server 2022 | `10.0.0.10` |
| `SIEM` | Wazuh 4.14 (indexer + server + dashboard) | Ubuntu Server 22.04 LTS | `10.0.0.20` |
| `kali` | 攻击者 | Kali Linux | `10.0.0.50` |
**网络:** 隔离的 host-only 网段 `10.0.0.0/24`,在攻击期间没有互联网暴露。基于 VMware Workstation Pro 构建。遥测数据通过 Wazuh agent 从 DC 发送到 Wazuh,并使用 **Sysmon** 进行丰富。
## 预置的错误配置
每个弱点都映射到一条真实的攻击路径。
| 错误配置 | 启用的攻击 | MITRE ATT&CK |
|------------------|-------------------|--------------|
| 服务账户 `svc-sql` 具有 SPN + 弱密码 | Kerberoasting | [T1558.003](https://attack.mitre.org/techniques/T1558/003/) |
| 用户 `jsmith` 禁用了 Kerberos 预身份验证 | AS-REP Roasting | [T1558.004](https://attack.mitre.org/techniques/T1558/004/) |
| `jsmith` 被授予对 `backupadmin` 的 `GenericAll` 权限 | ACL 滥用 / 权限提升 | [T1098](https://attack.mitre.org/techniques/T1098/) |
## 攻击
### AS-REP Roasting
因为 `jsmith` 不需要 Kerberos 预身份验证,所以可以**在没有任何凭据的情况下**请求 TGT,并且该响应可以被离线破解。
```
impacket-GetNPUsers corp.lab/ -usersfile users.txt -no-pass -dc-ip 10.0.0.10 -format hashcat
```

*提取出 `jsmith` 的 `$krb5asrep$` 哈希。其余账户正确报告需要预身份验证。*
### Kerberoasting
任何经过身份验证的域用户都可以请求具有 SPN 的账户的服务票据(Service Ticket)。该票据使用服务账户的密码哈希加密,并可以被离线破解。
```
impacket-GetUserSPNs corp.lab/jsmith:'Summer2024!' -dc-ip 10.0.0.10 -request
```

*通过 `MSSQLSvc` SPN 检索到 `svc-sql` 服务账户的 `$krb5tgs$` 哈希。*
### 3. 破解票据
捕获到的 Kerberoast 哈希使用 Hashcat 进行离线破解,恢复了明文的服务账户密码。
```
hashcat -m 13100 kerb.hash /usr/share/wordlists/rockyou.txt
```

*`svc-sql` 的密码在几秒钟内被恢复——从攻击到获取明文,服务账户遭到了全面沦陷。*
## 检测工程
默认情况下,Wazuh 会记录 **level 0** 的 Kerberos 事件 (4768 / 4769) —— 它们太常见了,无法用于告警。关键技术在于从噪音中分离出*攻击签名*:
- **AS-REP Roasting** 请求具有 **pre-auth type `0`** 的 TGT (4768)。
- **Kerberoasting** 请求具有 **RC4 加密 (`0x17`)** 的服务票据 (4769),以便可以离线破解该票据。
我在 `/var/ossec/etc/rules/local_rules.xml` 中编写了两条自定义规则,以将完全匹配这些模式的事件提升为高危告警:
```
windows
^4769$
^0x17$
Kerberoasting detected: RC4 service ticket (4769) requested for $(win.eventdata.serviceName)
T1558.003
windows
^4768$
^0$
AS-REP Roasting detected: TGT (4768) for $(win.eventdata.targetUserName) with pre-auth disabled
T1558.004
```
在重新加载管理器并重新运行攻击后,两者均作为 **level-12 告警** 触发,并填充了相关的账户 / 服务信息:

*过滤到这两条自定义规则——噪音消失了,只剩下具名的检测。*
## 防御建议
| 发现 | 补救措施 |
|---------|-------------|
| 可被 Kerberoasting 的服务账户 | 使用具有长且自动轮换密码的 **Group Managed Service Accounts (gMSA)**;强制使用 AES;移除不必要的 SPN |
| 可被 AS-REP Roasting 的用户 | 从所有账户中移除“Do not require Kerberos pre-authentication”;强制使用强密码 |
| 危险的 ACL (`GenericAll`) | 审计并修复过分的对象权限;保护 Tier-0 资产 |
| 检测盲区 | 对使用 RC4 加密的 4769 和使用 pre-auth type 0 的 4768 发出告警;建立正常 Kerberos 行为的基线 |
## 展示的技能
- Active Directory 架构与攻击路径 (Kerberos, ACLs)
- 进攻工具:**Impacket**、**Hashcat**
- SIEM 部署与 agent 管理 (**Wazuh** + **Sysmon**)
- 映射到 **MITRE ATT&CK** 的**自定义检测规则编写**
- 紫队方法论:攻击、观察、检测、补救
## 仓库结构
```
.
├── README.md
├── docs/
│ └── architecture.svg
├── detection-rules/
│ └── local_rules.xml
└── screenshots/
├── 01-asrep-attack.png
├── 02-kerberoast-attack.png
├── 03-hashcat-crack.png
└── 04-wazuh-alerts.png
```
## 免责声明
此实验室运行在一个**隔离的、仅主机的网络**上,没有互联网暴露。所有目标均为我个人拥有并为教育目的而构建的系统。这些技术的演示严格仅用于防御性学习和授权测试。
标签:AS-REP Roasting, Kerberoasting, Wazuh, Windows Server, 主动目录, 紫队