更新于 2024 年 3 月 20 日 - 添加了 LDS 引用
摘要
CVE-2021-42291 解决了安全旁路漏洞,该漏洞允许某些用户对 Active Directory (AD) 或轻型目录服务 (LDS) 中存储的特定对象的安全敏感属性设置任意值。 要利用此漏洞,用户必须具有足够的权限来创建计算机派生对象,例如,向用户授予对计算机对象的 CreateChild 权限。 该用户可以创建一个计算机帐户,使用轻型目录访问协议 (LDAP) 添加调用,该调用允许对 securityDescriptor 属性进行过度允许的访问。 此外,创建者和所有者可以在创建帐户后修改安全敏感属性。 在某些情况下,可以利用它来执行特权提升。
备注 LDS 将记录关于隐式对象访问状态的事件 3050、3053、3051 和 3054,就像 AD 所做的一样。
CVE-2021-42291 中的缓解措施包括:
-
如果没有域或 LDS 管理员权限的用户尝试对计算机派生对象执行 LDAP 添加操作,需要进行额外的授权验证。 这包括 Audit-By-Default 模式,该模式在此类尝试发生时进行审核,而不会干扰请求,以及阻止此类尝试的 Enforcement 模式。
-
当没有域管理员权限的用户尝试对 securityDescriptor 属性执行 LDAP 修改操作时,临时删除隐式所有者权限。 进行验证以确认是否允许用户在没有隐式所有者权限的情况下写入安全描述符。 这还包括 Audit-By-Default 模式,该模式在此类尝试发生时进行审核,而不干扰请求,以及阻止此类尝试的 Enforcement 模式。
采取操作
为保护您的所在环境并避免停机,请完成以下步骤:
-
通过安装最新的 Windows 更新来更新托管 Active Directory 域控制器或 LDS 服务器角色的所有设备。 具有 2021 年 11 月 9 日或更高版本更新的 DC 将默认拥有审核模式中的更改。
-
在具有 2021 年 11 月 9 日或更高版本 Windows 更新的域控制器和 LDS 服务器上监视目录服务或 LDS 事件日志中的 3044-3056 事件。 记录的事件表明用户可能具有创建具有任意安全敏感属性的计算机帐户的过多权限。 使用高级或统一支持案例或反馈中心向 Microsoft 报告任何意外情况。 (这些事件的示例可以在“新添加的事件”部分找到。)
-
如果审核模式在足够长的时间内未检测到任何意外权限,请切换到强制模式以确保不会出现负面结果。 使用高级或统一支持案例或反馈中心向 Microsoft 报告任何意外情况。
Windows 更新时间安排
这些 Windows 更新将分两个阶段发布:
-
初始部署 - 引入更新,包括使用 dSHeuristics 属性配置的默认审计、强制或禁用模式。
-
最终部署 –默认情况下强制执行。
2021 年 11 月 9 日:初始部署阶段
初始部署阶段从 2021 年 11 月 9 日发布的 Windows 更新开始。 此版本添加了在创建或修改计算机或计算机派生对象期间对没有域管理员权限的用户设置的权限进行审核。 还添加了强制和禁用模式。 可以使用 dSHeuristics 属性全局设置每个 Active Directory 林的模式。
(2023 年 12 月 15 日更新)最终部署阶段
完成“采取行动”部分中列出的步骤后方可开始最终部署阶段。 若要移动到强制模式,请按照部署指南部分中的说明在 dSHeuristics 属性上设置第 28 位和第 29 位。 然后监视事件 3044-3046。 当强制模式阻止了以前可能在审核模式下允许的 LDAP 添加或修改操作时,会触发报告。
部署指南
设置配置信息
安装 CVE-2021-42291 后,dSHeuristics 属性的字符 28 和 29 控制更新的行为。 dSHeuristics 属性存在于每个 Active Directory 林中,并包含整个林的设置。 dSHeuristics 属性是“CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,<Domain>”(AD) 或“CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,<configuration set>”(LDS) 对象的属性。 有关详细信息 ,请参阅 6.1.1.2.4.1.2 dSHeuristics 和 DS-启发 式属性。
字符 28 - LDAP 添加操作的附加 AuthZ 验证
0:启用默认审核模式。 当没有域管理员权限的用户将 securityDescriptor 或其他属性设置为可能授予过多权限的值(可能允许将来利用新计算机派生的 AD 对象)时,将记录事件。
1: 启用强制模式。 这可以防止没有域管理员权限的用户将 securityDescriptor 或其他属性设置为可能授予对计算机派生的 AD 对象的过多权限的值。 发生此情况时,也会记录事件。
2: 禁用更新的审核,不强制实施增加的安全性。 不建议。
例如:如果林中未启用其他 dSHeuristics 设置,并且想要切换到强制模式进行其他 AuthZ 验证,则 dSHeuristics 属性应设置为:
“0000000001000000000200000001”
在这种情况下设置的字符是:
第 10 个字符:如果 dSHeuristics 属性至少为 10 个字符,则必须设置为 1
第 20 个字符:如果 dSHeuristics 属性至少为 20 个字符,则必须设置为 2
第 28 个字符:必须设置为 1 才能启用附加 AuthZ 验证的强制模式
字符 29 - 针对 LDAP 修改操作临时删除隐式所有权
0:启用默认审核模式。 没有域管理员权限的用户将 securityDescriptor 设置为可能授予过多权限的值(可能允许将来利用现有计算机派生的 AD 对象)时,将记录事件。
1: 启用强制模式。 这可以防止没有域管理员权限的用户将 securityDescriptor 设置为可能授予对现有计算机派生 AD 对象过多权限的值。 发生此情况时,也会记录事件。
2:禁用更新的审核,不强制实施增加的安全性。 不建议。
例如:如果林中仅设置了其他 AuthZ 验证 dsHeuristics 标志,并且想要切换到强制模式以临时删除隐式所有权,则 dSHeuristics 属性应设置为:
“00000000010000000002000000011”
在这种情况下设置的字符是:
第 10 个字符:如果 dSHeuristics 属性至少为 10 个字符,则必须设置为 1
第 20 个字符:如果 dSHeuristics 属性至少为 20 个字符,则必须设置为 2
第 28 个字符:必须设置为 1 才能启用附加 AuthZ 验证的强制模式
第 29 个字符:必须设置为 1 才能启用临时删除隐式所有权的强制模式
新添加的事件
2021 年 11 月 9 日的 Windows 更新还将添加新的事件日志。
模式更改事件 - LDAP 添加操作的附加 AuthZ 验证
dSHeuristics 属性第 28 位更改时发生的事件,会更改针对更新的 LDAP 添加操作部分的附加 AuthZ 验证模式。
事件日志 |
目录服务 |
事件类型 |
信息 |
事件 ID |
3050 |
事件文本 |
该目录已配置为在 LDAP 添加操作期间强制执行每个属性授权。 这是最安全的设置,无需进一步操作。 |
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3051 |
事件文本 |
目录已配置为在 LDAP 添加操作期间不强制执行每个属性的授权。 将记录警告事件,但不会阻止任何请求。 此设置不安全,只应用作临时故障排除步骤。 请查看以下链接中的建议缓解措施。 |
事件日志 |
目录服务 |
事件类型 |
错误 |
事件 ID |
3052 |
事件文本 |
目录已配置为在 LDAP 添加操作期间不强制执行每个属性的授权。 不会记录任何事件,并且不会阻止任何请求。 此设置不安全,只应用作临时故障排除步骤。 请查看以下链接中的建议缓解措施。 |
模式更改事件 - 暂时删除所有者隐式权限
dSHeuristics 属性第 29 位更改时发生的事件,会更改更新的隐式所有权权限部分的临时删除模式。
事件日志 |
目录服务 |
事件类型 |
信息 |
事件 ID |
3053 |
事件文本 |
目录已配置为在 LDAP 添加和修改操作期间最初设置或修改 nTSecurityDescriptor 属性时阻止所有者隐式特权。 这是最安全的设置,无需进一步操作。 |
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3054 |
事件文本 |
目录已配置为在 LDAP 添加和修改操作期间最初设置或修改 nTSecurityDescriptor 属性时允许所有者隐式特权。 将记录警告事件,但不会阻止任何请求。 此设置不安全,只应用作临时故障排除步骤。 |
事件日志 |
目录服务 |
事件类型 |
错误 |
事件 ID |
3055 |
事件文本 |
目录已配置为在 LDAP 添加和修改操作期间最初设置或修改 nTSecurityDescriptor 属性时允许所有者隐式特权。 不会记录任何事件,并且不会阻止任何请求。 此设置不安全,只应用作临时故障排除步骤。 |
审核模式事件
在审核模式下发生的事件,用于记录 LDAP 添加或修改操作的潜在安全问题。
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3047 |
事件文本 |
目录服务检测到针对以下对象的 LDAP 添加请求,该请求通常会由于以下安全原因而被阻止。 客户端无权根据默认的合并安全描述符写入添加请求中包含的一个或多个属性。 该请求被允许继续进行,因为目录当前配置为仅在审核模式下进行此安全检查。 对象 DN:<created object’s DN> 对象类:<created object’s objectClass> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> 安全性 desc:<the SD that was attempted> |
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3048 |
事件文本 |
目录服务检测到针对以下对象的 LDAP 添加请求,该请求通常会由于以下安全原因而被阻止。 客户端在添加请求中包括 nTSecurityDescriptor 属性,但没有基于默认合并的安全描述符写入新安全描述符的一个或多个部分的显式权限。 该请求被允许继续进行,因为目录当前配置为仅在审核模式下进行此安全检查。 对象 DN:<created object’s DN> 对象类:<created object’s objectClass> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> |
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3049 |
事件文本 |
目录服务检测到以下对象的 LDAP 修改请求,该对象通常由于以下安全原因被阻止。 客户端在添加请求中包括 nTSecurityDescriptor 属性,但没有基于默认合并的安全描述符写入新安全描述符的一个或多个部分的显式权限。 该请求被允许继续进行,因为目录当前配置为仅在审核模式下进行此安全检查。 对象 DN:<created object’s DN> 对象类:<created object’s objectClass> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> |
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3056 |
事件文本 |
目录服务针对下面指定的对象处理了 sdRightsEffective 属性的查询。 返回的访问掩码包含在WRITE_DAC,但仅因为目录已配置为允许隐式所有者权限,而该权限不是一个安全的设置。 对象 DN:<created object’s DN> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> |
强制模式 - LDAP 添加失败
拒绝 LDAP 添加操作时发生的事件。
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3044 |
事件文本 |
目录服务拒绝了针对以下对象的 LDAP 添加请求。 请求被拒绝,因为客户端无权根据默认的合并安全描述符写入添加请求中包含的一个或多个属性。 对象 DN:<created object’s DN> 对象类:<created object’s objectClass> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> 安全性 desc:<the SD that was attempted> |
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3045 |
事件文本 |
目录服务拒绝了针对以下对象的 LDAP 添加请求。 请求被拒绝,因为客户端在添加请求中包含 nTSecurityDescriptor 属性,但没有基于默认合并的安全描述符写入新安全描述符的一个或多个部分的显式权限。 对象 DN:<created object’s DN> 对象类:<created object’s objectClass> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> |
强制模式 - LDAP 修改失败
LDAP 修改操作被拒绝时发生的事件。
事件日志 |
目录服务 |
事件类型 |
警告 |
事件 ID |
3046 |
事件文本 |
目录服务拒绝了以下对象的 LDAP 修改请求。 请求被拒绝,因为客户端在修改请求中包含 nTSecurityDescriptor 属性,但没有基于对象的现有安全描述符写入新安全描述符的一个或多个部分的显式权限。 对象 DN:<created object’s DN> 对象类:<created object’s objectClass> 用户:<user who attempted the LDAP add> 客户端 IP 地址:<the IP of the requestor> |
常见问题
问题 1 如果混合了已更新和未更新的 Active Directory 域控制器,会发生什么情况?
解答 1:未更新的 DCs 不会记录与此漏洞相关的事件。
问题 2,我需要为 Read-Only Domain Controllers (RODCs) 做什么?
解答 2:无;LDAP Add 和 Modify 操作不能以 RODC 为目标。
问题 3 我拥有启用 Enforcement 模式后失败的第三方产品或流程。 是否需要授予服务或用户域管理员权限?
解答 3:我们通常不建议将服务或用户添加到 Domain Administrators 组作为此问题的第一个解决方案。 检查事件日志,了解需要哪些特定权限,并考虑在为此目的指定的单独 Organizational Unit 中为该用户委派适当受限的权限。
第 4 季度,我还看到 LDS 服务器的审核事件。 为什么会发生这种情况?
A4 上述所有内容也适用于 AD LDS,尽管在 LDS 中具有计算机对象非常罕见。 当审核模式未检测到任何意外权限时,还应采取缓解措施来启用对 AD LDS 的保护。