Az - Cloud Kerberos Trust

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

本文是 https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/ 的总结,可以查看以获取有关攻击的更多信息。此技术在 https://www.youtube.com/watch?v=AFay_58QubY中也有评论。

Kerberos Trust Relationship Overview

Cloud Kerberos Trust (Entra ID -> AD) – 此功能(Windows Hello for Business的一部分)建立了一种单向信任,其中本地 AD 信任 Entra ID 为 AD 发放 Kerberos 票证。启用后,会在 AD 中创建一个 AzureADKerberos$ 计算机对象(显示为只读域控制器)和一个链接的 krbtgt_AzureAD 账户(一个次级 KRBTGT)。Entra ID 持有这些账户的密钥,并可以为 AD 用户发放“部分” Kerberos TGT。AD 域控制器将尊重这些票证,但具有类似 RODC 的限制:默认情况下,高权限组(域管理员、企业管理员等)被 拒绝,普通用户被允许。这防止了 Entra ID 在正常情况下通过信任对域管理员进行身份验证。然而,正如我们将看到的,具有足够 Entra ID 权限的攻击者可以滥用这种信任设计。

Pivoting from Entra ID to On-Prem AD

场景: 目标组织已为无密码身份验证启用了 Cloud Kerberos Trust。攻击者在 Entra ID(Azure AD)中获得了 全局管理员 权限,但尚未控制本地 AD。攻击者还在网络上获得了对域控制器的访问(通过 VPN 或混合网络中的 Azure VM)。利用云信任,攻击者可以利用 Azure AD 控制在 AD 中获得 域管理员 级别的立足点。

前提条件:

  • Cloud Kerberos Trust 在混合环境中配置(指示符:AD 中存在一个 AzureADKerberos$ RODC 账户)。

  • 攻击者在 Entra ID 租户中拥有 全局管理员(或混合身份管理员) 权限(这些角色可以使用 AD Connect 同步 API 修改 Azure AD 用户)。

  • 至少有一个 混合用户账户(在 AD 和 AAD 中都存在),攻击者可以以该账户进行身份验证。这可以通过知道或重置其凭据,或为其分配无密码方法(例如,临时访问通行证)来生成主刷新令牌(PRT)。

  • 一个 本地 AD 目标账户,具有高权限且不在默认 RODC “拒绝” 策略中。实际上,一个很好的目标是 AD Connect 同步账户(通常命名为 MSOL_*),该账户在 AD 中具有 DCSync(复制)权限,但通常不是内置管理员组的成员。该账户通常不会同步到 Entra ID,使其 SID 可用于无冲突地冒充。

攻击步骤:

  1. 获取 Azure AD 同步 API 访问权限: 使用全局管理员账户,获取 Azure AD Provisioning (sync) API 的访问令牌。这可以通过 ROADtoolsAADInternals 等工具完成。例如,使用 ROADtools(roadtx):
# Using roadtx to get an Azure AD Graph token (no MFA)
roadtx gettokens -u <GlobalAdminUPN> -p <Password> --resource aadgraph

(或者,可以使用 AADInternals 的 Connect-AADInt 作为全局管理员进行身份验证。)

  1. 修改混合用户的本地属性: 利用 Azure AD 同步 API 将选定混合用户的 onPremises 安全标识符 (SID)onPremises SAMAccountName 设置为与目标 AD 账户匹配。这有效地告诉 Azure AD 云用户对应于我们想要冒充的本地账户。使用开源的 ROADtools Hybrid 工具包:
# Example: modify a hybrid user to impersonate the MSOL account
python3 modifyuser.py -u <GlobalAdminUPN> -p <Password>\
--sourceanchor <ImmutableID_of_User>\
--sid <TargetAD_SID> --sam <TargetAD_SAMName>

用户的 sourceAnchor(不可变 ID)用于识别要修改的 Azure AD 对象。该工具将混合用户的本地 SID 和 SAM 账户名称设置为目标的值(例如,MSOL_xxxx 账户的 SID 和 SAM)。Azure AD 通常不允许通过 Graph 修改这些属性(它们是只读的),但同步服务 API 允许这样做,全球管理员可以调用此同步功能。

  1. 从 Azure AD 获取部分 TGT: 修改后,以混合用户身份对 Azure AD 进行身份验证(例如,通过在设备上获取 PRT 或使用他们的凭据)。当用户登录时(特别是在域加入或 Entra 加入的 Windows 设备上),Azure AD 将为该账户发放 部分 Kerberos TGT (TGTAD),因为启用了 Cloud Kerberos Trust。此部分 TGT 使用 AzureADKerberos$ RODC 密钥加密,并包含我们设置的 目标 SID。我们可以通过 ROADtools 为用户请求 PRT 来模拟这一点:
roadtx getprt -u <HybridUserUPN> -p <Password> -d <DeviceID_or_Cert>

这会输出一个 .prt 文件,其中包含部分 TGT 和会话密钥。如果账户是云专用密码,Azure AD 仍然在 PRT 响应中包含 TGT_AD。

  1. 用部分 TGT 交换完整 TGT(在 AD 上): 现在可以将部分 TGT 提交给本地域控制器,以获取目标账户的 完整 TGT。我们通过对 krbtgt 服务(域的主要 TGT 服务)执行 TGS 请求来实现这一点——本质上是将票证升级为具有完整 PAC 的正常 TGT。可以使用工具来自动化此交换。例如,使用 ROADtools Hybrid 的脚本:
# Use the partial TGT from the PRT file to get a full TGT and NTLM hash
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash

这个脚本(或 Impacket 等效项)将联系域控制器并为目标 AD 账户检索有效的 TGT,包括如果使用了特殊的 Kerberos 扩展,则该账户的 NTLM 哈希。KERB-KEY-LIST-REQ 扩展会自动包含,以请求 DC 在加密回复中返回目标账户的 NTLM 哈希。结果是一个凭证缓存(full_tgt.ccache),用于目标账户 恢复的 NTLM 密码哈希。

  1. 模拟目标并提升为域管理员: 现在攻击者有效地 控制了目标 AD 账户。例如,如果目标是 AD Connect MSOL 账户,它在目录上具有复制权限。攻击者可以使用该账户的凭证或 Kerberos TGT 执行 DCSync 攻击,从 AD 中转储密码哈希(包括域 KRBTGT 账户)。例如:
# Using impacket's secretsdump to DCSync as the MSOL account (using NTLM hash)
secretsdump.py 'AD_DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash> LOCAL

这会转储所有 AD 用户密码哈希,给攻击者 KRBTGT 哈希(让他们可以随意伪造域 Kerberos 票证)并有效地获得对 AD 的 域管理员 权限。如果目标账户是另一个特权用户,攻击者可以使用完整的 TGT 以该用户的身份访问任何域资源。

  1. 清理: 可选地,攻击者可以通过相同的 API 恢复被修改的 Azure AD 用户的原始 onPremisesSAMAccountName 和 SID,或简单地删除任何创建的临时用户。在许多情况下,下一个 Azure AD Connect 同步周期将自动还原同步属性上的未经授权的更改。(然而,到那时损害已经造成——攻击者已获得 DA 权限。)

Warning

通过滥用云信任和同步机制,Azure AD 的全局管理员可以冒充几乎 任何 没有被 RODC 策略明确保护的 AD 账户,即使该账户从未进行过云同步。在默认配置下,这 建立了从 Azure AD 破坏到本地 AD 破坏的完全信任

参考文献

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks