摘要

CVE-2022-26931CVE-2022-26923 解决了 Kerberos 分发中心 (KDC) 为基于证书的身份验证请求提供服务时可能发生的特权提升漏洞。 在 2022 年 5 月 10 日安全更新之前,基于证书的身份验证不会在计算机名称结束时计入美元符号 ($) 。 这允许以各种方式模拟相关证书 (欺骗) 。 此外,用户主体名称 (UPN) 和 sAMAccountName 之间的冲突引入了其他仿真 (欺骗) 漏洞,我们也通过此安全更新来解决这些漏洞。

执行操作

若要保护环境,请完成以下基于证书的身份验证步骤:

  1. 使用 2022 年 5 月 10 日的更新更新运行 Active Directory 证书服务并Windows域控制器以服务基于证书的身份验证的所有服务器 (请参阅兼容模式) 。 2022 年 5 月 10 日更新将提供 审核事件 ,用于标识与完全强制模式不兼容的证书。

  2. 如果在安装更新后一个月内未在域控制器上创建审核事件日志,请继续在所有域控制器上启用 完全强制模式 。 到 2023 年 5 月 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

48 (适用于 Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2

事件文本

密钥分发中心 (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

证书映射

域管理员可以使用用户对象的 altSecurityIdentities 属性手动将证书映射到 Active Directory 中的用户。 此属性有 6 个受支持的值,其中 3 个映射被视为弱 (不安全) ,另外 3 个映射被视为强。 一般情况下,如果映射类型基于无法重复使用的标识符,则会被视为强映射类型。 因此,基于用户名和电子邮件地址的所有映射类型都被视为弱。

映射

示例

类型

备注

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:2B00000000011AC0000000012

然后,使用以下字符串更新 Active Directory 中用户的 altSecurityIdentities 属性:

  • “X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>1200000000AC10000000002B”

若要使用 Powershell 更新此属性,可以使用以下命令。 请记住,默认情况下,只有域管理员有权更新此属性。

  • set-aduser 'DomainUser' -replace @{altSecurityIdentities= “X509:<I>DC=com,DC=contoso,CN=CONTOSO-DC-CA<SR>12000000000AC100000000002B”}

请注意,反转 SerialNumber 时,必须保持字节顺序。 这意味着,反转 SerialNumber“A1B2C3”应会导致字符串“C3B2A1” 而不是 “3C2B1A”。 有关详细信息,请参阅 HowTo:通过 altSecurityIdentities 属性中提供的所有方法将用户映射到证书

Windows更新的时间线

安装 2022 年 5 月 10 日Windows更新后,设备将处于兼容模式。 如果证书可以强映射到用户,身份验证将按预期进行。 如果证书只能弱映射到用户,身份验证将按预期进行。 但是,除非证书早于用户,否则将记录警告消息。 如果证书早于用户,并且证书备份注册表项不存在或范围超出回退补偿范围,身份验证将失败,并且将记录错误消息。  如果配置了证书备份注册表项,则如果日期在回退补偿范围内,它将在事件日志中记录警告消息。

安装 2022 年 5 月 10 日Windows更新后,请注意一个月或更多之后可能出现的任何警告消息。 如果没有警告消息,强烈建议使用基于证书的身份验证在所有域控制器上启用完全强制模式。 可以使用 KDC 注册表项 启用完全强制模式。

除非之前更新到此模式,否则我们将在 2023 年 5 月 9 日之前将所有设备更新为完全强制模式。 如果无法强映射证书,身份验证将被拒绝。

如果基于证书的身份验证依赖于无法从环境中移动的弱映射,则可以使用 注册表项设置将域控制器置于禁用模式。 Microsoft 不建议 这样做,我们将在 2023 年 2 月 14 日删除“禁用”模式。

疑难解答

  • 使用相关计算机上的 Kerberos 操作日志确定哪个域控制器登录失败。 转到事件查看器 >应用程序和服务日志\Microsoft \Windows\Security-Kerberos\Operational

  • 在帐户尝试进行身份验证的域控制器上的系统事件日志中查找相关事件。

  • 如果证书早于帐户,请重新颁发证书或向帐户添加安全 altSecurityIdentities 映射 (请参阅 证书映射) 。

  • 如果证书包含 SID 扩展,请验证 SID 是否与帐户匹配。

  • 如果证书用于对多个不同帐户进行身份验证,则每个帐户都需要单独 的 altSecurityIdentities 映射。

  • 如果证书没有对帐户的安全映射,请添加一个或使域处于兼容模式,直到可以添加一个。

TLS 证书映射的示例是使用 IIS Intranet Web 应用程序。

  • 安装 CVE-2022-26391CVE-2022-26923 保护后,这些方案默认使用 Kerberos Certificate Service for User (S4U) 协议进行证书映射和身份验证。

  • 在 Kerberos 证书 S4U 协议中,身份验证请求从应用程序服务器流向域控制器,而不是从客户端流向域控制器。 因此,相关事件将位于应用程序服务器上。

注册表项信息

在 2022 年 5 月 10 日至 2023 年 5 月 9 日发布的Windows更新中安装 CVE-2022-26931 和 CVE-2022-26923 保护后,可使用以下注册表项。

此注册表项将 KDC 的强制模式更改为禁用模式、兼容模式或完全强制模式。

重要事项

对于需要此注册表项且必须谨慎执行的环境,使用此注册表项是一种临时解决方法。 对于环境,使用此注册表项意味着以下各项:

  • 从 2022 年 5 月 10 日发布的更新开始,此注册表项仅在兼容模式下工作。

  • 安装 2023 年 5 月 9 日发布的Windows更新后,将不支持此注册表项,这将启用完全强制模式

注册表子项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc

StrongCertificateBindingEnforcement

数据类型

REG_DWORD

数据

1 – 检查是否有强证书映射。 如果是,则允许身份验证。 否则,KDC 将检查证书是否具有新的 SID 扩展并对其进行验证。 如果此扩展不存在,则如果用户帐户早于证书,则允许进行身份验证。

2 – 检查是否有强证书映射。 如果是,则允许身份验证。 否则,KDC 将检查证书是否具有新的 SID 扩展并对其进行验证。 如果此扩展不存在,身份验证将被拒绝。

0 – 禁用强证书映射检查。 不建议这样做。

是否需要重启?

当服务器应用程序需要客户端身份验证时,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 - S4U2Self 证书映射 (强)

0x0010 - S4U2Self 显式证书映射 (强)

是否需要重启?

有关其他资源和支持,请参阅“其他资源”部分。

安装地址 为 CVE-2022-26931CVE-2022-26923 的更新后,如果用户证书早于用户创建时间,身份验证可能会失败。 在环境中使用弱 证书映射 时,此注册表项允许成功进行身份验证,并且证书时间在用户创建时间在设置范围内之前。 此注册表项不会影响具有强证书映射的用户或计算机,因为不使用强证书映射检查证书时间和用户创建时间。 当 StrongCertificateBindingEnforcement 设置为 2 时,此注册表项没有任何效果。

对于需要此注册表项且必须谨慎执行的环境,使用此注册表项是一种临时解决方法。 对于环境,使用此注册表项意味着以下各项:

  • 从 2022 年 5 月 10 日发布的更新开始,此注册表项仅在 兼容模式 下工作。 允许在回退补偿偏移量内进行身份验证,但会针对弱绑定记录事件日志警告。

  • 启用此注册表项可在证书时间在设置范围内的用户创建时间之前进行身份验证,作为弱映射。 安装 2023 年 5 月 9 日发布的Windows更新后,弱映射将不受支持,这将启用完全强制模式

注册表子项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc

CertificateBackdatingCompensation

数据类型

REG_DWORD

数据

近似年份中解决方法的值:

  • 50 年:0x5E0C89C0

  • 25 年:0x2EFE0780

  • 10 年:0x12CC0300

  • 5 年:0x9660180

  • 3 年:0x5A39A80

  • 1 年:0x1E13380

注意 如果知道环境中证书的生存期,请将此注册表项设置为略长于证书生存期。  如果不知道环境的证书生存期,请将此注册表项设置为 50 年。 如果此密钥不存在,则默认为 10 分钟,这与 Active Directory 证书服务 (ADCS) 相匹配。 最大值为 50 年 (0x5E0C89C0) 。

此密钥设置密钥分发中心 (KDC) 在用户/计算机帐户的身份验证证书颁发时间和帐户创建时间之间忽略的时间差(以秒为单位)。

重要事项 仅在环境需要时设置此注册表项。 使用此注册表项会禁用安全检查。

是否需要重启?

Enterprise证书颁发机构

Enterprise证书颁发机构 (CA) 将在安装 2022 年 5 月 10 日Windows更新后,在针对联机模板颁发的所有证书中,默认开始使用对象标识符 (OID) (1.3.6.1.4.1.311.25.2) 添加新的非关键扩展。 可以通过在相应模板的 msPKI-Enrollment-Flag 值中设置0x00080000位来停止添加此扩展。

运行以下 certutil 命令,将 用户 模板的证书排除在获取新扩展名之外。

  1. 使用企业管理员或等效凭据登录到证书颁发机构服务器或已加入域的Windows 10客户端。

  2. 打开命令提示符,然后选择 以管理员身份运行

  3. 运行 certutil -dstemplate 用户 msPKI-Enrollment-Flag +0x00080000。 

禁用添加此扩展将删除新扩展提供的保护。 请考虑仅在以下操作之一之后执行此操作:

  1. 你确认在 KDC 的 Kerberos 协议身份验证中初始身份验证 (PKINIT) 的公钥加密不能接受相应的证书

  2. 相应的证书配置了其他强证书映射

安装 2022 年 5 月 10 日Windows更新后,使用新的 SID 扩展将不会保护具有非 Microsoft CA 部署的环境。 受影响的客户应与相应的 CA 供应商合作来解决此问题,或者应考虑使用上述其他强证书映射。

有关其他资源和支持,请参阅“其他资源”部分。

常见问题

否,不需要续订。 CA 将以兼容模式交付。 如果希望使用 ObjectSID 扩展进行强映射,则需要一个新证书。

其他资源

有关 TLS 客户端证书映射的详细信息,请参阅以下文章:

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×