Azure AD Connect 特权提升漏洞与密码回写安全配置详解

本文详细分析了Azure AD Connect中因密码回写功能配置不当可能导致本地AD特权账户被劫持的漏洞(CVE-2017-8613),并提供了检测、修复(升级至1.1.553.0版本)和临时缓解措施的操作指南。

漏洞概述:Azure AD Connect 可能导致权限提升

发布日期: 2017年6月27日 版本: 1.0

执行摘要

微软发布此安全公告旨在告知客户,新版本的 Azure Active Directory (AD) Connect 已可用,该版本解决了一个重要的安全漏洞。此次更新解决了一个漏洞,该漏洞可能在启用 Azure AD Connect 密码回写功能时因配置不当而导致权限提升。成功利用此漏洞的攻击者可以重置密码并获取对任意本地 AD 特权用户账户的未授权访问。

该问题已在 Azure AD Connect 的最新版本 (1.1.553.0) 中得到解决,解决方式是禁止向本地 AD 特权用户账户执行任意密码重置。

公告详情

密码回写是 Azure AD Connect 的一个组件。它允许用户将 Azure AD 配置为将密码写回其本地 Active Directory。它为用户提供了一种便捷的基于云的方式,使其无论身在何处都能重置其本地密码。有关密码回写的更多信息,请参阅密码回写概述

要启用密码回写,必须授予 Azure AD Connect 对本地 AD 用户账户的“重置密码”权限。在设置权限时,本地 AD 管理员可能无意中授予了 Azure AD Connect 对本地 AD 特权账户(包括企业和域管理员账户)的“重置密码”权限。有关 AD 特权用户账户的信息,请参阅 Active Directory 中的受保护账户和组

不建议采用此配置,因为它允许恶意的 Azure AD 管理员使用密码回写功能将任意本地 AD 用户特权账户的密码重置为已知值。这反过来又使得恶意 Azure AD 管理员能够获取对客户本地 AD 的特权访问。

参见 CVE-2017-8613 - Azure AD Connect 权限提升漏洞

建议措施

验证您的组织是否受影响

此问题仅影响已在 Azure AD Connect 上启用密码回写功能的客户。要确定是否启用了该功能:

  1. 登录到您的 Azure AD Connect 服务器。
  2. 启动 Azure AD Connect 向导 (开始 → Azure AD Connect)。
  3. 在欢迎屏幕上,单击“配置”。
  4. 在任务屏幕上,选择“查看当前配置”并单击“下一步”。
  5. 在“同步设置”下,检查“密码回写”是否已启用。

如果密码回写已启用,请评估您的 Azure AD Connect 服务器是否已被授予对本地 AD 特权账户的“重置密码”权限。Azure AD Connect 使用一个 AD DS 账户与本地 AD 同步更改。同一个 AD DS 账户用于对本地 AD 执行密码重置操作。要确定使用的是哪个 AD DS 账户:

  1. 登录到您的 Azure AD Connect 服务器。
  2. 启动同步服务管理器 (开始 → 同步服务)。
  3. 在“连接器”选项卡下,选择本地 AD 连接器并单击“属性”。
  4. 在属性对话框中选择“连接到 Active Directory 林”选项卡,并记下“用户名”属性。这是 Azure AD Connect 用于执行目录同步的 AD DS 账户。

若要使 Azure AD Connect 能够对本地 AD 特权账户执行密码回写,必须授予该 AD DS 账户对这些账户的“重置密码”权限。如果本地 AD 管理员执行了以下任一操作,通常会发生这种情况:

  • 使 AD DS 账户成为本地 AD 特权组(例如,企业管理员组或域管理员组)的成员,
  • adminSDHolder 容器上创建了控制访问权限,授予了 AD DS 账户“重置密码”权限。有关 adminSDHolder 容器如何影响对本地 AD 特权账户访问的信息,请参阅 Active Directory 中的受保护账户和组

您需要检查分配给此 AD DS 账户的有效权限。通过检查现有的 ACL 和组分配来执行此操作可能很困难且容易出错。更简单的方法是选择一组现有的本地 AD 特权账户,并使用 Windows 有效权限功能来确定 AD DS 账户是否对这些选定账户拥有“重置密码”权限。有关如何使用有效权限功能的信息,请参阅验证 Azure AD Connect 是否具有密码回写所需的权限

注意 如果您使用 Azure AD Connect 同步多个本地 AD 林,则可能有多个 AD DS 账户需要评估。

修复步骤

升级到可从此处下载的 Azure AD Connect 最新版本 (1.1.553.0)。即使您的组织目前未受影响,我们也建议您这样做。有关如何升级 Azure AD Connect 的信息,请参阅 Azure AD Connect:了解如何从先前版本升级到最新版本

最新版本的 Azure AD Connect 通过阻止对本地 AD 特权账户的密码回写请求来解决此问题,除非请求的 Azure AD 管理员是本地 AD 账户的所有者。更具体地说,当 Azure AD Connect 收到来自 Azure AD 的密码回写请求时:

  1. 它通过验证 AD 的 adminCount 属性来检查目标本地 AD 账户是否是特权账户。如果该值为 NULL 或 0,Azure AD Connect 会断定这不是特权账户并允许密码回写请求。
  2. 如果该值不是 NULL 或 0,Azure AD Connect 会断定这是一个特权账户。接下来,它验证请求用户是否是目标本地 AD 账户的所有者。它通过检查其 Metaverse 中目标本地 AD 账户与请求用户的 Azure AD 账户之间的关系来执行此操作。如果请求用户确实是所有者,则 Azure AD Connect 允许密码回写请求。否则,请求将被拒绝。

注意 adminCount 属性由 SDProp 进程管理。默认情况下,SDProp 每 60 分钟运行一次。因此,新创建的 AD 特权用户账户的 adminCount 属性从 NULL 更新为 1 最多可能需要一个小时。在此之前,Azure AD 管理员仍然可以重置此新创建账户的密码。有关 SDProp 进程的信息,请参阅 Active Directory 中的受保护账户和组

缓解步骤

如果无法立即升级到最新的 Azure AD Connect 版本,请考虑以下选项:

  • 如果 AD DS 账户是一个或多个本地 AD 特权组的成员,请考虑将 AD DS 账户从这些组中移除。
  • 如果本地 AD 管理员先前已在 adminSDHolder 对象上为 AD DS 账户创建了允许“重置密码”操作的控制访问权限,请考虑将其移除。
  • 可能并非总是能够移除授予 AD DS 账户的现有权限(例如,AD DS 账户依赖组成员身份来获取其他功能(如密码同步或 Exchange 混合回写)所需的权限)。请考虑在 adminSDHolder 对象上创建一个拒绝访问控制项 (DENY ACE),该条目禁止 AD DS 账户拥有“重置密码”权限。有关如何使用 Windows DSACLS 工具创建 DENY ACE 的信息,请参阅修改 AdminSDHolder 容器
1
DSACLS DNofAdminSDHolderContainer /D CONTOSO\ADDSAccount:CA;"Reset Password"

页面生成时间: 2017-06-27 09:50-07:00。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计