摘要
特定的受信任的平台模块(TPM) 芯片集中存在安全漏洞。 漏洞会减弱密钥强度。
若要详细了解此漏洞,请转到 ADV170012。
更多信息
概述
以下部分有助于识别和纠正受 Microsoft 安全公告 ADV170012 中描述的漏洞影响的 Active Directory (AD) 域和域控制器中的问题。
此缓解过程专注于以下 Active Directory 公钥方案:
-
域加入计算机凭据密钥
有关撤销和颁发新的 KDC 证书的信息,请参阅针对基于 Active Directory 证书服务的方案的缓解计划。
确定域加入计算机凭据密钥风险工作流
是否有 Windows Server 2016(或更高版本)域控制器?
已为 Windows Server 2016 域控制器引入凭据密钥。 在使用凭据密钥进行身份验证时,域控制器将添加已知的 SID KEY_TRUST_IDENTITY (S-1-18-4)。 早期的域控制器不支持凭据密钥,因此 AD 不支持凭据密钥对象,且下层域控制器不能使用凭据密钥对主体进行身份验证。
以前,altSecurityIdentities(经常被称为 altSecID)属性可以用来提供类似的行为。 Windows 不支持在本机预配 altSsecID。 因此,需要一个提供此行为的第三方解决方案。 如果预配的密钥易受攻击,那么相应的 altSsecID 必须在 AD 中进行更新。
是否有任何域 Windows Server 2016(或更高版本)DFL?
Windows Server 2016 域控制器支持公钥加密,以便在 Kerberos (PKINIT) Freshness Extension [RFC 8070] 中进行初始身份验证,虽然不会默认进行验证。 在 Windows Server 2016 DFL 或更高版本域的域控制器上启用对 PKInit Freshness Extension 的支持时,如果成功使用此扩展,域控制器将会添加已知的 SID FRESH_PUBLIC_KEY_IDENTITY (S-1-18-3)。 有关详细信息,请参阅 Kerberos 客户端和对 RFC 8070 PKInit Freshness Extension 的 KDC 支持。
修补计算机
为具有 2017 年 10 月安全更新的 Windows 10 计算机提供服务时,将删除现有的 TPM 凭据密钥。 Windows 将只预配受到 Credential Guard 保护的密钥,以确保为域加入设备密钥提供票据传递攻击保护。 由于许多客户在域加入其计算机之后会添加 Credential Guard,这一变化确保启用了 Credential Guard 的设备能够确保使用凭据密钥发布的任何 TGT 都受到 Credential Guard 的保护。
临时域保护
在 Microsoft 发布域控制器服务修补程序以及用户部署修补程序之前,攻击者可以使用 AD 中的错误凭据密钥来作为域加入设备进行身份验证。 严重程度取决于目标设备。 例如,你可能会决定优先保护域控制器计算机帐户,然后再保护其他类型的计算机帐户。
可以通过在 Active Directory 中的计算机对象上设置一个不可用的凭据密钥,来保护计算机帐户免受此漏洞的影响。 这将导致计算机使用凭据密钥进行身份验证失败。 计算机随后会使用密码进行身份验证,而不是凭据密钥。
注意,确保没有配置使用证书来强制设备身份验证的组策略。 有关详细信息,请参阅域加入设备公钥身份验证中的“配置设备仅使用公钥”。
首先,下载 Windows PowerShell 模块获取 Active Directory 计算机凭据密钥。
接下来,使用以下示例来禁用 Active Directory 中计算机帐户上的计算机凭据密钥
例如: 在单个计算机帐户上禁用凭据密钥
在本例中,我们在 Active Directory 中的单个计算机对象上设置了一个不可用的凭据密钥:
Import-Module .\ADComputerKeys.psm1;
Set-DRComputerKey -SamAccountName "MyComputer$" -Domain "contoso.com" -ReplaceWithUnusableKey;
例如: 在多个计算机帐户上禁用凭据密钥
在本例中,我们在 Active Directory 中的多个计算机对象上设置了一个不可用的凭据密钥。 为此,我们将此模块与 ActiveDirectory PowerShell 模块相结合。
例如,将目标指向虚拟运输部门组织单元中的所有计算机。
Import-Module .\ADComputerKeys.psm1;
Import-Module ActiveDirectory;
$computers = Get-ADComputer -SearchBase "OU=Shipping Department,DC=contoso,DC=com" -LDAPFilter "(CN=*)" -Server "contoso.com";
foreach($comp in $computers)
{
Set-DRComputerKey -SamAccountName $comp.SamAccountName -Domain "contoso.com" -ReplaceWithUnusableKey;
}
删除临时域保护
为 DC 提供服务后,可以从 Active Directory 中的所有计算机对象中删除不可用的密钥。 此操作允许计算机帐户生成一个可以使用的新凭据密钥,而不是密码身份验证。
首先,下载 Windows PowerShell 模块获取 Active Directory 计算机凭据密钥。
接下来,按照此示例从计算机对象中删除凭据密钥:
例如: 从多个计算机帐户中删除凭据密钥
在本例中,我们从 Active Directory 中的多个计算机对象中删除了凭据密钥。 为此,我们将此模块与 ActiveDirectory PowerShell 模块相结合。
例如,将目标指向虚拟运输部门组织单元中的所有计算机。
Import-Module .\ADComputerKeys.psm1;
Import-Module ActiveDirectory;
$computers = Get-ADComputer -SearchBase "OU=Shipping Department,DC=contoso,DC=com" -LDAPFilter "(CN=*)" -Server "contoso.com";
foreach($comp in $computers)
{
Set-DRComputerKey -SamAccountName $comp.SamAccountName -Domain "contoso.com" -RemoveKey
}