更改日期 |
说明 |
---|---|
10/24/2024 |
更新了“采取操作”部分的步骤 2、“Windows 更新时间线”部分的“完全强制模式”说明中的文本,并修订了“注册表项信息”部分中“密钥分发中心 (KDC) 注册表项”和“证书回退注册表项”主题的日期信息。 |
9/10/2024 |
更改了“Windows 更新的计时”部分中的完全强制模式说明,以反映新日期。 2025 年 2 月 11 日会将设备移动到强制模式,但保留支持以返回到兼容模式。 完整注册表项支持现已于 2025 年 9 月 10 日结束。 |
7/5/2024 |
在“注册表项信息”部分中,向密钥分发中心 (KDC) 注册表项添加了有关 SID 扩展的信息。 |
2023/10/10 |
在“Windows 汇报的时间线”下添加了有关强映射默认更改的信息 |
6/30/2023 |
已将完全强制模式日期从 2023 年 11 月 14 日更改为 2025 年 2 月 11 日, (这些日期以前列为 2023 年 5 月 19 日至 2023 年 11 月 14 日,) 。 |
1/26/2023 |
已将禁用模式的删除从 2023 年 2 月 14 日更改为 2023 年 4 月 11 日 |
摘要
CVE-2022-34691、 CVE-2022-26931 和 CVE-2022-26923 解决了当 Kerberos 密钥分发中心 (KDC) 为基于证书的身份验证请求提供服务时可能发生的特权提升漏洞。 在 2022 年 5 月 10 日安全更新之前,基于证书的身份验证不会考虑计算机名称末尾的美元符号 ($) 。 这允许以各种方式模拟 (欺骗) 的相关证书。 此外,用户主体名称 (UPN) 和 sAMAccountName 之间的冲突引入了其他模拟 (欺骗) 漏洞,我们还通过此安全更新解决了这些漏洞。
采取行动
若要保护环境,请完成以下步骤进行基于证书的身份验证:
-
使用 2022 年 5 月 10 日更新更新运行 Active Directory 证书服务的所有服务器和为基于证书的身份验证提供服务的 Windows 域控制器 (请参阅 兼容模式) 。 2022 年 5 月 10 日更新将提供 审核事件 ,用于标识与完全强制模式不兼容的证书。
-
如果在安装更新后一个月内未在域控制器上创建审核事件日志,请继续在所有域控制器上启用完全强制模式。 到 2025 年 2 月,如果未配置 StrongCertificateBindingEnforcement 注册表项,域控制器将进入完全强制模式。 否则,将继续遵循注册表项兼容性模式设置。 在完全强制模式下,如果证书不符合强 (安全) 映射条件 (请参阅证书映射) ,身份验证将被拒绝。 但是,返回到兼容模式的选项将保留到 2025 年 9 月。
审核事件
2022 年 5 月 10 日 Windows 更新添加了以下事件日志。
找不到强证书映射,并且证书没有 KDC 可以验证的新安全标识符 (SID) 扩展。
事件日志 |
系统警报 |
事件类型 |
如果 KDC 处于兼容模式,则发出警告 如果 KDC 处于强制模式,则出错 |
事件源 |
Kdcsvc |
事件 ID |
39 41 (Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2) |
事件文本 |
密钥分发中心 (KDC) 遇到用户证书,该证书有效,但无法以强 (方式映射到用户,例如通过显式映射、密钥信任映射或 SID) 。 此类证书应通过显式映射替换或直接映射到用户。 有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2189925。 用户:<主体名称> 证书使用者:证书> 中的 <使用者名称 证书颁发者:<颁发者完全限定的域名 (FQDN) > 证书序列号:证书> 的 <序列号 证书指纹:证书> <指纹 |
在 Active Directory 中存在用户之前,证书已颁发给用户,并且找不到强映射。 仅当 KDC 处于兼容模式时,才会记录此事件。
事件日志 |
系统警报 |
事件类型 |
错误 |
事件源 |
Kdcsvc |
事件 ID |
40 适用于 Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2 的 48 ( |
事件文本 |
密钥分发中心 (KDC) 遇到用户证书,该证书有效,但无法以强 (方式映射到用户,例如通过显式映射、密钥信任映射或 SID) 。 证书也早于它映射到的用户,因此被拒绝。 有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2189925。 用户:<主体名称> 证书使用者:证书> 中的 <使用者名称 证书颁发者:<颁发者 FQDN> 证书序列号:证书> 的 <序列号 证书指纹:证书> <指纹 证书颁发时间:<证书> 的 FILETIME 帐户创建时间:<AD> 中主体对象的 FILETIME |
用户证书的新扩展中包含的 SID 与用户 SID 不匹配,这意味着证书已颁发给其他用户。
事件日志 |
系统警报 |
事件类型 |
错误 |
事件源 |
Kdcsvc |
事件 ID |
41 49 (适用于 Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2) |
事件文本 |
密钥分发中心 (KDC) 遇到用户证书,该证书有效,但包含与其映射到的用户不同的 SID。 因此,涉及证书的请求失败。 有关详细信息,请参阅 https://go.microsoft.cm/fwlink/?linkid=2189925。 用户:<主体名称> 用户 SID:<身份验证主体> 的 SID 证书使用者:证书> 中的 <使用者名称 证书颁发者:<颁发者 FQDN> 证书序列号:证书> 的 <序列号 证书指纹:证书> <指纹 证书 SID:在新的证书扩展> 中找到 <SID |
证书映射
域管理员可以使用用户 Object 的 altSecurityIdentities 属性将证书手动映射到 Active Directory 中的用户。 此属性支持六个值,其中三个映射被视为弱 (不安全) ,其他三个映射被视为强映射。 通常,如果映射类型基于你不能重用的标识符,则它们被视为强。 因此,基于用户名和电子邮件地址的所有映射类型都被视为弱映射类型。
映射 |
示例 |
类型 |
备注 |
X509IssuerSubject |
“X509:<I>IssuerName<S>SubjectName” |
弱 |
|
X509SubjectOnly |
“X509:<S>SubjectName” |
弱 |
|
X509RFC822 |
“X509:<RFC822>user@contoso.com” |
弱 |
电子邮件地址 |
X509IssuerSerialNumber |
“X509:<I>IssuerName<SR>1234567890” |
强 |
推荐 |
X509SKI |
“X509:<SKI>123456789abcdef” |
强 |
|
X509SHA1PublicKey |
“X509:<SHA1-PUKEY>123456789abcdef” |
强 |
如果客户无法使用新的 SID 扩展重新颁发证书,我们建议使用上述强映射之一创建手动映射。 为此,可以将相应的映射字符串添加到 Active Directory 中的用户 altSecurityIdentities 属性。
备注 某些字段(如颁发者、使用者和序列号)以“转发”格式报告。 将映射字符串添加到 altSecurityIdentities 属性时,必须反转此格式。 例如,若要向用户添加 X509IssuerSerialNumber 映射,请搜索要映射到用户的证书的“颁发者”和“序列号”字段。 请参阅下面的示例输出。
-
颁发者:CN=CONTOSO-DC-CA、DC=contoso、DC=com
-
SerialNumber:2B0000000011AC000000012
然后,使用以下字符串更新 Active Directory 中用户的 altSecurityIdentities 属性:
-
“X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>1200000000AC11000000002B”
若要使用 Powershell 更新此属性,可以使用以下命令。 请记住,默认情况下,只有域管理员有权更新此属性。
-
set-aduser 'DomainUser' -replace @{altSecurityIdentities= “X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>1200000000AC1100000002B”}
请注意,反转 SerialNumber 时,必须保留字节顺序。 这意味着,反转 SerialNumber“A1B2C3”应生成字符串“C3B2A1” ,而不是 “3C2B1A”。 有关详细信息,请参阅 HowTo:通过 altSecurityIdentities 属性中提供的所有方法将用户映射到证书。
Windows 更新的时间线
重要提示 启用阶段从 Windows 的 2023 年 4 月 11 日更新开始,这将忽略“禁用模式”注册表项设置。
安装 2022 年 5 月 10 日 Windows 更新后,设备将处于兼容模式。 如果证书可以强映射到用户,身份验证将按预期进行。 如果证书只能弱映射到用户,身份验证将按预期进行。 但是,除非证书早于用户,否则将记录警告消息。 如果证书早于用户,并且证书备份注册表项不存在,或者该范围超出了回退补偿范围,身份验证将失败,并且将记录错误消息。 如果配置了证书备份注册表项,如果日期在回退补偿范围内,它将在事件日志中记录警告消息。
安装 2022 年 5 月 10 日 Windows 更新后,watch一个月或更晚后可能出现的任何警告消息。 如果没有警告消息,我们强烈建议使用基于证书的身份验证在所有域控制器上启用完全强制模式。 可以使用 KDC 注册表项 启用完全强制模式。
除非之前使用 StrongCertificateBindingEnforcement 注册表项更新为审核模式或强制模式,否则安装 2025 年 2 月 Windows 安全更新后,域控制器将移至完全强制模式。 如果证书无法进行强映射,身份验证将被拒绝。 返回到兼容模式的选项将保留到 2025 年 9 月。 在此日期之后, 将不再支持 StrongCertificateBindingEnforcement 注册表项
如果基于证书的身份验证依赖于无法从环境中移动的弱映射,则可以使用 注册表项设置将域控制器置于“禁用”模式。 Microsoft 不建议 这样做,我们将在 2023 年 4 月 11 日删除禁用模式。
在 Server 2019 及更高版本上安装 2024 年 2 月 13 日或更高版本的 Windows 更新以及安装了 RSAT 可选功能的受支持客户端后,Active Directory 用户 & 计算机中的证书映射将默认使用 X509IssuerSerialNumber 选择强映射,而不是使用 X509IssuerSubject 选择弱映射。 仍可根据需要更改设置。
疑难解答
-
在相关计算机上使用 Kerberos 操作日志来确定哪个域控制器未能通过登录。 转到 事件查看器 > 应用程序和服务日志\Microsoft \Windows\Security-Kerberos\Operational。
-
在域控制器上的系统事件日志中查找帐户尝试进行身份验证的相关事件。
-
如果证书早于帐户,请重新颁发证书或向帐户添加安全的 altSecurityIdentities 映射 (请参阅 证书映射) 。
-
如果证书包含 SID 扩展,请验证 SID 是否与帐户匹配。
-
如果证书用于对多个不同的帐户进行身份验证,则每个帐户都需要单独的 altSecurityIdentities 映射。
-
如果证书没有到帐户的安全映射,请添加一个或将域保留为兼容模式,直到可以添加一个。
TLS 证书映射的一个示例是使用 IIS Intranet Web 应用程序。
-
安装 CVE-2022-26391 和 CVE-2022-26923 保护后,这些方案默认使用 Kerberos 证书服务用户 (S4U) 协议进行证书映射和身份验证。
-
在 Kerberos 证书 S4U 协议中,身份验证请求从应用程序服务器流向域控制器,而不是从客户端流向域控制器。 因此,相关事件将位于应用程序服务器上。
注册表项信息
在 2022 年 5 月 10 日至 2025 年 9 月 10 日或更高版本发布的 Windows 更新中安装 CVE-2022-26931 和 CVE-2022-26923 保护后,以下注册表项可用。
安装 2025 年 9 月或之后发布的 Windows 更新后,此注册表项将不受支持。
重要
对于需要此注册表项的环境,使用此注册表项是一种临时解决方法,必须谨慎使用。 对于环境,使用此注册表项意味着以下内容:
-
此注册表项仅适用于从 2022 年 5 月 10 日发布的更新开始的兼容模式。
-
安装 2025 年 9 月 10 日发布的 Windows 更新后,将不支持此注册表项。
-
强证书绑定强制使用的 SID 扩展检测和验证依赖于 KDC 注册表项 UseSubjectAltName 值。 如果注册表值不存在或值设置为 0x1 值,将使用 SID 扩展。 如果 UseSubjectAltName 存在,并且值设置为 0x0,则不会使用 SID 扩展。
注册表子项 |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc |
值 |
StrongCertificateBindingEnforcement |
数据类型 |
REG_DWORD |
数据 |
1 – 检查是否存在强证书映射。 如果是,则允许身份验证。 否则,如果证书具有新的 SID 扩展,KDC 将检查并对其进行验证。 如果此扩展不存在,则如果用户帐户早于证书,则允许进行身份验证。 2 – 检查是否存在强证书映射。 如果是,则允许身份验证。 否则,如果证书具有新的 SID 扩展,KDC 将检查并对其进行验证。 如果此扩展不存在,身份验证将被拒绝。 0 – 禁用强证书映射检查。 不建议这样做,因为这将禁用所有安全增强功能。 如果将其设置为 0,还必须将 CertificateMappingMethods 设置为 0x1F,如下面的 Schannel 注册表项部分所述,计算机基于证书的身份验证才能成功。 |
需要重启? |
否 |
当服务器应用程序需要客户端身份验证时,Schannel 会自动尝试将 TLS 客户端提供的证书映射到用户帐户。 可以通过创建将证书信息关联到 Windows 用户帐户的映射,对使用客户端证书登录的用户进行身份验证。 创建并启用证书映射后,每当客户端提供客户端证书时,服务器应用程序会自动将该用户与相应的 Windows 用户帐户相关联。
Schannel 将尝试映射已启用的每个证书映射方法,直到成功。 Schannel 首先尝试映射 Service-For-User-To-Self (S4U2Self) 映射。 “使用者/颁发者”、“颁发者”和“UPN”证书映射现在被视为弱证书映射,并且默认处于禁用状态。 所选选项的位掩码总和决定了可用的证书映射方法列表。
SChannel 注册表项默认值已0x1F,现在0x18。 如果遇到基于 Schannel 的服务器应用程序的身份验证失败,建议执行测试。 在域控制器上添加或修改 CertificateMappingMethods 注册表项值,并将其设置为 0x1F,并查看这是否解决了该问题。 有关详细信息,请查看域控制器上的系统事件日志,了解本文中列出的任何错误。 请记住,将 SChannel 注册表项值改回以前的默认 (0x1F) 将还原使用弱证书映射方法。
注册表子项 |
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel |
值 |
CertificateMappingMethods |
数据类型 |
DWORD |
数据 |
0x0001 - 主题/颁发者证书映射 (弱 – 默认禁用) 0x0002 - 颁发者证书映射 (弱 – 默认禁用) 0x0004 - UPN 证书映射 (弱 – 默认禁用) 0x0008 - S4U2 自身证书映射 (强) 0x0010 - S4U2 自身显式证书映射 (强) |
需要重启? |
否 |
有关其他资源和支持,请参阅“其他资源”部分。
安装解决 CVE-2022-26931 和 CVE-2022-26923 的更新后,如果用户证书早于用户创建时间,身份验证可能会失败。 在环境中使用弱 证书映射 并且证书时间早于设置范围内的用户创建时间之前,此注册表项允许成功进行身份验证。 此注册表项不会影响具有强证书映射的用户或计算机,因为不会使用强证书映射检查证书时间和用户创建时间。 当 StrongCertificateBindingEnforcement 设置为 2 时,此注册表项没有任何影响。
对于需要此注册表项的环境,使用此注册表项是一种临时解决方法,必须谨慎使用。 对于环境,使用此注册表项意味着以下内容:
-
此注册表项仅适用于从 2022 年 5 月 10 日发布的更新开始 的兼容模式 。 允许在后退补偿偏移量内进行身份验证,但会记录弱绑定的事件日志警告。
-
启用此注册表项允许在证书时间早于设置范围内的用户创建时间时对用户进行身份验证,作为弱映射。 安装 2025 年 9 月或之后发布的 Windows 更新后,弱映射将不受支持。
注册表子项 |
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc |
值 |
CertificateBackdatingCompensation |
数据类型 |
REG_DWORD |
数据 |
大约几年内解决方法的值:
注意 如果知道环境中的证书生存期,请将此注册表项设置为略长于证书生存期。 如果不知道环境的证书生存期,请将此注册表项设置为 50 年。 当此密钥不存在时,默认为 10 分钟,这与 Active Directory 证书服务 (ADCS) 匹配。 最大值为 50 年 (0x5E0C89C0) 。 此密钥设置密钥分发中心 (KDC) 将忽略用户/计算机帐户的身份验证证书颁发时间和帐户创建时间之间的时差(以秒为单位)。 重要提示 仅当环境需要时设置此注册表项。 使用此注册表项会禁用安全检查。 |
需要重启? |
否 |
企业证书颁发机构
在安装 2022 年 5 月 10 日 Windows 更新后,企业证书颁发机构 (CA) 将开始添加对象标识符 (OID) (1.3.6.1.4.1.311.25.) 2 的新非关键扩展。 可以通过在相应模板的 msPKI-Enrollment-Flag 值中设置0x00080000位来停止添加此扩展。
运行以下 certutil 命令,从获取新 扩展的用户模板 中排除证书。
-
使用企业管理员或等效凭据登录到证书颁发机构服务器或已加入域的Windows 10客户端。
-
打开命令提示符并选择 “以管理员身份运行”。
-
运行 certutil -dstemplate 用户 msPKI-Enrollment-Flag +0x00080000。
禁用此扩展的添加将删除新扩展提供的保护。 请考虑仅在以下任一操作后执行此操作:
-
确认在 KDC 进行 Kerberos 协议身份验证时,对于初始身份验证的公钥加密 (PKINIT) ,不能接受相应的证书
-
相应的证书配置了其他强证书映射
安装 2022 年 5 月 10 日 Windows 更新后,不会使用新的 SID 扩展保护具有非Microsoft CA 部署的环境。 受影响的客户应与相应的 CA 供应商合作来解决此问题,或者应考虑使用上述其他强证书映射。
有关其他资源和支持,请参阅“其他资源”部分。
常见问题解答
否,不需要续订。 CA 将以兼容模式提供。 如果需要使用 ObjectSID 扩展进行强映射,则需要一个新证书。
在 2025 年 2 月 11 日 Windows 更新中,尚未在强制 (StrongCertificateBindingEnforcement 注册表值设置为 2) 的设备将移至 Enforcement。 如果身份验证被拒绝,你将看到 Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2) 的事件 ID 39 (或事件 ID 41。 在此阶段,可以选择将注册表项值重新设置为 1 (兼容模式) 。
在 2025 年 9 月 10 日 Windows 更新中, 将不再支持 StrongCertificateBindingEnforcement 注册表值。
其他资源
有关 TLS 客户端证书映射的详细信息,请参阅以下文章: