Entra ID - Revisiting the Abuse History of Connect Sync
字数 4254 2025-11-05 23:45:18
Microsoft Entra Connect 同步服务安全分析与滥用教学文档
概述
Microsoft Entra Connect(前身为 Azure AD Connect)是微软混合身份环境的核心组件,负责在本地 Active Directory 与 Microsoft Entra ID(前身为 Azure AD)之间同步身份信息。由于其高权限特性,Connect Sync 服务器被视为 Tier 0 资产,成为攻击者的重要目标。本文详细分析其安全风险、攻击面及防御措施。
1. Connect Sync 基础
1.1 什么是 Connect Sync?
- 功能:处理本地环境与 Microsoft Entra ID 之间的身份数据同步。
- 版本演进:
- V1 版本:已於 2022 年 8 月 31 日停止支持。
- V2 版本:当前推荐版本,使用最新基础组件构建。
- 组件:
- 本地同步代理(安装在 AD 环境中的服务器)。
- 云端的 Microsoft Entra Connect Sync 服务端组件。
1.2 核心功能
| 功能 | 描述 |
|---|---|
| 密码哈希同步(PHS) | 将本地 AD 用户密码的哈希同步到 Microsoft Entra ID。 |
| 直通认证(PTA) | 用户使用相同密码在本地和云端登录,无需额外基础设施。 |
| 联合集成 | 通过本地 AD FS 配置混合环境,提供证书续期等功能。 |
| 同步 | 创建和同步用户、组及其他对象,确保本地与云端信息一致。 |
| 健康监控 | 通过 Entra Connect Health 集中监控同步活动。 |
2. Connect Sync 使用的账户及权限
2.1 三类关键账户
| 账户类型 | 用途 |
|---|---|
| AD DS Connector 账户 | 读写本地 AD 信息(账户名格式:MSOL_*)。 |
| ADSync 服务账户 | 运行同步服务并访问 SQL Server 数据库。 |
| Microsoft Entra Connector 账户 | 将信息写入 Microsoft Entra ID(旧版为 Sync_* 用户,新版为服务主体)。 |
2.2 账户权限详情
(1)AD DS Connector 账户(MSOL_*)
- 权限:
Replicate Directory Changes和Replicate Directory Changes All:用于密码哈希同步。- 读写所有用户、组、联系人的属性。
- 重置密码权限(用于密码回写)。
- 安全风险:具备 DCSync 权限,可导出域内所有用户密码哈希。
(2)ADSync 服务账户
- 运行身份:
- 虚拟服务账户(VSA):
NT SERVICE\ADSync(默认选项)。 - 组管理服务账户(gMSA):适用于远程 SQL Server 场景。
- 用户账户:
AAD_*(旧版或特定场景)。
- 虚拟服务账户(VSA):
- 职责:加密存储其他账户的密码至数据库,使用 DPAPI 保护密钥。
(3)Microsoft Entra Connector 账户
- 历史形式:
Sync_*用户(UPN 格式:Sync_<服务器名>_<ID>@<域名>)。 - 现代形式:基于服务主体和证书认证(2025 年 5 月后推荐)。
- 角色分配:默认属于 Directory Synchronization Accounts 角色。
3. Directory Synchronization Accounts 角色的权限演变
3.1 2024 年 8 月前的权限(48 项)
- 高危权限举例:
microsoft.directory/applications/create:创建应用程序。microsoft.directory/servicePrincipals/credentials/update:修改服务主体凭据。- 密码重置、策略管理等特权操作。
- 攻击面:可通过该角色创建后门、提升至全局管理员。
3.2 2024 年 8 月后的权限(仅 1 项)
- 保留权限:
microsoft.directory/onPremisesSynchronization/standard/read(仅读权限)。 - 隐式风险:仍能通过未公开的私有 API(如
Azure AD Synchronization API)执行敏感操作。
4. Connect Sync 的攻击与滥用
4.1 攻击前提
- 获取 Connect Sync 服务器的管理员权限。
- 定位服务器方法:通过
MSOL_*账户的 LDAP 描述信息(包含主机名)。
4.2 凭据提取与解密
(1)数据库位置
- 路径:
C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf。 - 关键表:
mms_management_agent:存储账户配置(含加密凭据)。mms_server_configuration:存储解密所需的密钥材料。
(2)解密方法
- Azure AD Connect 1.4.x 之前:
- 密钥集存储在注册表(
HKLM\Software\Microsoft\Ad Sync\Shared\<keysetid>)。 - 使用 DPAPI 和系统 MasterKey 解密。
- 密钥集存储在注册表(
- Azure AD Connect 1.4.x 及之后:
- 密钥集存储在凭据管理器,由
NT SERVICE\ADSync账户的 MasterKey 保护。 - 需使用 DPAPI_SYSTEM 的 User Key 和账户 SID(
S-1-5-80)解密 MasterKey。
- 密钥集存储在凭据管理器,由
- 工具推荐:使用 adconnectdump 自动化提取。
(3)通过 mcrypt.dll 程序集解密
- 模拟 ADSync 服务令牌,直接调用
mcrypt.dll的解密函数。 - 步骤:
- 连接 LocalDB 数据库,获取
keyset_id、instance_id、entropy。 - 使用 PowerShell 模拟
NT SERVICE\ADSync身份。 - 解密
encrypted_configuration字段,提取明文凭据。
- 连接 LocalDB 数据库,获取
4.3 滥用场景
(1)DCSync 攻击
- 前提:启用密码哈希同步(PHS)。
- 方法:使用
MSOL_*账户的 DCSync 权限导出域内哈希。 - 工具:Mimikatz、SharpKatz 等。
(2)密码重置
- 前提:启用 PHS,且目标为混合账户。
- 方法:通过私有 API(
https://adminwebservice.microsoftonline.com/provisioningservice.svc)重置密码。 - 限制:
- 无法重置仅云用户的密码(2025 年 8 月后)。
- 若目标启用 MFA/FIDO2,认证仍会失败。
- 工具:AADInternals 的
Set-AADIntUserPassword命令。
(3)向特权应用添加凭据
- 历史方法:滥用
Directory Synchronization Accounts角色权限,为高权限应用添加凭据,继而提升权限。 - 现状:2024 年 8 月后权限被移除,此方法失效。
(4)持久化后门
- 方法:将
Directory Synchronization Accounts角色分配给受控账户。 - 管理命令(PowerShell):
# 列出角色成员 Get-MgDirectoryRoleMember -RoleTemplateId "d29b2b05-8046-44ba-8758-1e26182fcf32" # 添加角色分配 New-MgRoleManagementDirectoryRoleAssignment -PrincipalId "<用户ID>" -RoleDefinitionId "<角色ID>"
5. 防御建议
5.1 安全加固措施
- 升级至 Entra Connect V2:使用最新版本并启用基于服务主体的认证。
- 限制物理访问:将 Connect Sync 服务器视为 Tier 0 资产隔离保护。
- 启用 MFA:强制所有管理员账户使用多因素认证,阻断密码重置滥用。
- 定期审计:检查
Directory Synchronization Accounts角色的分配情况。
5.2 监控与检测
- 日志监控:关注 Entra Connect Health 的异常同步事件。
- 账户行为分析:检测
MSOL_*或Sync_*账户的异常登录或 DCSync 操作。
6. 总结
Microsoft Entra Connect 同步服务是混合身份环境的核心,但其高权限特性也带来显著风险。通过分析其滥用历史与防御演进,组织应:
- 严格保护 Connect Sync 服务器。
- 及时升级至最新版本并启用安全功能。
- 结合 MFA 和审计策略降低攻击面。
参考文献: