Az - Cloud Kerberos Trust

支持 HackTricks

这篇文章是 https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/ 的总结,更多关于攻击的信息可以查看该链接。此技术也在 https://www.youtube.com/watch?v=AFay_58QubY中进行了评论。

基本信息

信任

当与 Azure AD 建立信任时,会在 AD 中创建一个 只读域控制器 (RODC)。该 RODC 计算机账户 名为 AzureADKerberos$。此外,还有一个名为 krbtgt_AzureAD 的次级 krbtgt 账户。该账户包含 Azure AD 创建的 Kerberos 密钥

因此,如果该账户被攻破,可能会伪装任何用户……尽管这并不完全正确,因为该账户被禁止为任何常见的特权 AD 组(如域管理员、企业管理员、管理员等)创建票证。

然而,在实际场景中,会有特权用户不在这些组中。因此,如果新的 krbtgt 账户被攻破,可以用来伪装他们。

Kerberos TGT

此外,当用户在 Windows 上使用混合身份进行身份验证时,Azure AD 将发出 部分 Kerberos 票证以及 PRT。TGT 是部分的,因为 AzureAD 对用户在本地 AD 中的信息有限(如安全标识符 (SID) 和名称)。 Windows 然后可以通过请求 krbtgt 服务的服务票证来 用这个部分 TGT 交换一个完整的 TGT

NTLM

由于可能存在不支持 Kerberos 身份验证但支持 NTLM 的服务,因此可以请求一个 使用次级 krbtgt 密钥签名的 部分 TGT,在请求的 PADATA 部分中包含 KERB-KEY-LIST-REQ 字段,然后获取一个使用主 krbtgt 密钥签名的完整 TGT 包括响应中的 NT 哈希

利用 Cloud Kerberos Trust 获取域管理员权限

当 AzureAD 生成 部分 TGT 时,将使用它所拥有的关于用户的详细信息。因此,如果全球管理员能够修改数据,如 AzureAD 中用户的安全标识符和名称,在请求该用户的 TGT 时,安全标识符将是不同的

无法通过 Microsoft Graph 或 Azure AD Graph 来做到这一点,但可以使用 API Active Directory Connect 用于创建和更新同步用户的 API,全球管理员可以利用该 API 修改任何混合用户的 SAM 名称和 SID,然后如果我们进行身份验证,就会获得包含修改后的 SID 的部分 TGT。

请注意,我们可以使用 AADInternals 并通过 Set-AADIntAzureADObject cmdlet 更新同步用户。

攻击前提条件

攻击的成功和获得域管理员权限依赖于满足某些前提条件:

  • 通过同步 API 修改账户的能力至关重要。这可以通过拥有全球管理员角色或拥有 AD Connect 同步账户来实现。或者,混合身份管理员角色也足够,因为它授予管理 AD Connect 和建立新同步账户的能力。

  • 必须存在一个 混合账户。该账户必须能够修改为受害者账户的详细信息,并且应可用于身份验证。

  • 必须识别出 Active Directory 中的 目标受害者账户。虽然攻击可以在任何已同步的账户上执行,但 Azure AD 租户必须没有复制本地安全标识符,因此需要修改一个未同步的账户以获取票证。

  • 此外,该账户应具有域管理员等效权限,但必须不属于典型的 AD 管理员组,以避免 AzureAD RODC 生成无效的 TGT。

  • 最合适的目标是 AD Connect Sync 服务使用的 Active Directory 账户。该账户未与 Azure AD 同步,其 SID 是一个可行的目标,并且由于其在同步密码哈希中的角色,固有地具有域管理员等效权限(假设密码哈希同步处于活动状态)。对于快速安装的域,该账户以 MSOL_ 开头。对于其他实例,可以通过枚举所有在域对象上拥有目录复制权限的账户来确定该账户。

完整攻击

请查看原始文章:https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/

支持 HackTricks

Last updated