Active Directory (AD) 环境中的 Kerberos 身份验证以前依赖于 RC4 加密算法。 RC4 是一种流密码,由于它与旧系统兼容,因此非常有用。 但是,RC4 现在被视为不安全,正在逐步淘汰。
本文介绍如何检测域中的 RC4 使用情况、审核仍依赖于 RC4 的设备和用户帐户,并采取措施修正使用情况,以支持更强大的加密类型或管理 RC4 依赖项。 使用这些说明为即将更改 Kerberos 默认值准备环境,并改进组织的安全状况。
总体而言,IT 管理员应执行以下操作,以为 Kerberos 对 RC4 支持的默认更改做好准备:
审核当前的 RC4 使用情况:使用本文中所述的审核工具和事件日志来识别仍在使用 RC4 的帐户、服务或设备。
解决旧版设备的问题:迁移或替换不支持的设备,尤其是运行 Windows Server 2003 或更早版本的设备,因为它们缺乏 AES-SHA1 支持。
禁用 RC4:尽可能显式禁用 RC4。
Windows 中的 RC4 使用情况及其风险
当帐户或设备不支持更强大的加密类型(如 AES-SHA1)时,通常会在 Windows 环境中使用 RC4。 RC4 的使用可能发生在旧系统、在引入 AES-SHA1 支持之前创建的帐户,或者在未显式配置加密设置时使用。 RC4 是默认加密类型,使其成为与旧基础结构兼容的常见选择。 但是,依赖 RC4 会使环境面临安全风险,其使用正积极逐步淘汰,以支持更安全的算法。
为了响应 CVE-2022-37966,2022 年 11 月 8 日或之后发布的 Windows 更新将 Kerberos 中的默认加密类型更改为使用高级加密标准 (AES)-SHA1,而不是针对未显式设置加密类型的帐户使用 RC4。 此更改导致 RC4 使用率显著减少,但默认情况下,不支持 AES-SHA1 的帐户仍使用 RC4。 有关详细信息,请参阅 KB5021131。
此更新添加了设置注册表值以控制 Kerberos 中默认支持的加密类型的功能。 如果未设置此注册表值,则默认支持的加密类型为 DES、RC4 和 AES 会话密钥。
可以滥用 Kerberos RC4 默认加密类型来执行称为 Kerberoasting 的攻击方法,该方法以 Microsoft Active Directory 中的服务票证为目标。 在 Kerberoasting 中,攻击者捕获这些票证并脱机破解其加密,以窃取用户凭据,从而可能损害整个网络的安全性。 将 Kerberos 的加密类型更改为默认使用 AES-SHA1,而不是 RC4 有助于保护客户免受此攻击。
重要
Microsoft计划在 2026 年第二季度结束时禁用 RC4 用作 Active Directory 域控制器的默认加密类型。
先决条件
在开始之前,需要满足以下先决条件:
需要有权访问域控制器上的安全事件日志,例如是 域管理员 组的成员或等效的成员。
若要运行本文中的 PowerShell 命令和脚本,需要在运行命令的设备上安装 ActiveDirectory 模块 。
审核 RC4 使用情况
有关 RC4 使用情况的详细信息存储在 Windows Server 2019 及更高版本的 Kerberos 密钥分发中心 (KDC)上的安全事件日志中。 2025 年 1 月累积更新中,事件日志中的 RC4 用法也添加到 Windows Server 2016。 以下事件 ID 标识了 RC4 的使用情况以及仅能使用 RC4 的帐户:
- 事件 ID 4768,用于请求 Kerberos 身份验证票证(TGT)。
- 事件 ID 4769,用于请求的 Kerberos 服务票证。
RC4 使用情况的事件日志字段
在事件 ID 4768 和 4769 的每个条目中,有几个字段提供对帐户支持的加密类型以及用于票证的加密类型的见解。 下面是一个示例屏幕截图。 以下列表描述了这两个事件中的相关字段。
帐户信息和服务信息部分:
MSDS-SupportedEncryptionTypes:是一个 Active Directory 属性,表示帐户支持的加密类型。 如果没有为帐户定义
msDS-SupportedEncryptionTypes,KDC 将应用来自DefaultSupportedEncryptionTypes的值。 此字段有时称为msds-SET。此值是已处理的值,这意味着某些帐户在 AD 数据库中设置的值之外
msDS-SupportedEncryptionTypes指定了额外的条件。 例如,在 Windows Server 2022 及更早版本上,msDS-SupportedEncryptionTypes始终显示数据加密标准版(DES)和 RC4,以确保与较旧的域控制器兼容,而不考虑你的设置。 从 Windows Server 2025 开始,仅显示 AES-SHA1 和更强的算法。 如果这些安全主体的已处理值与 Active Directory 属性中的内容不完全匹配,则这是正常的。此字段仅在帐户查找期间填充。 帐户查找在 ID 为 4768 的事件期间填充帐户信息和服务信息,并在 ID 为 4769 的事件期间将其列出在服务信息中。 有关详细信息,请参阅 支持的加密类型位标志。
可用密钥:AD 中帐户可用的密钥。 密码使用显示的算法进行哈希处理。 此字段的人群受与
msDS-SupportedEncryptionTypes相同的限制。 无论使用何种用法,都会显示 RC4。
“域控制器信息” 部分。 本部分还使用已处理的值,并遵循前面所述的相同指南
MSDS-SupportedEncryptionTypes:包括域控制器的
msDS-SupportedEncryptionTypes。帐户密钥:包括域控制器的帐户密钥。
网络信息 部分:
- Advertised Etypes:客户端计算机宣称支持用于当前操作的加密类型的枚举。
其他信息 部分:
- 会话加密类型:用于票证会话密钥的加密类型。
可以使用 msDS-SupportedEncryptionTypes 或 Advertized Etypes 字段来确定客户端或目标计算机是否不支持 AES-SHA1 或仅支持 RC4。
展开此部分以查看将加密类型映射到所用算法的表。
| 十进制值 | 十六进制值 | 支持的加密类型 |
|---|---|---|
| 0 | 0x0 | 未定义 - 默认为RC4_HMAC_MD5 |
| 1 | 0x1 | DES_CBC_CRC |
| 2 | 0x2 | DES_CBC_MD5 |
| 3 | 0x3 | DES_CBC_CRC,DES_CBC_MD5 |
| 4 | 0x4 | RC4 |
| 5 | 0x5 | DES_CBC_CRC,RC4 |
| 6 | 0x6 | DES_CBC_MD5,RC4 |
| 7 | 0x7 | DES_CBC_CRC、DES_CBC_MD5、RC4 |
| 8 | 0x8 | AES 128 |
| 9 | 0x9 | DES_CBC_CRC AES 128 |
| 10 | 0xA | DES_CBC_MD5 AES 128 |
| 11 | 0xB | DES_CBC_CRC、DES_CBC_MD5、AES 128 |
| 12 | 0xC | RC4、AES 128 |
| 13 | 0xD | DES_CBC_CRC、RC4、AES 128 |
| 14 | 0xE | DES_CBC_MD5、RC4、AES 128 |
| 15 | 0xF | DES_CBC_CRC、DES_CBC_MD5、RC4、AES 128 |
| 16 | 0x10 | AES 256 |
| 17 | 0x11 | DES_CBC_CRC, AES 256 |
| 18 | 0x12 | DES_CBC_MD5,AES 256 |
| 19 | 0x13 | DES_CBC_CRC、DES_CBC_MD5、AES 256 |
| 20 | 0x14 | RC4、AES 256 |
| 21 | 0x15 | DES_CBC_CRC、RC4、AES 256 |
| 22 | 0x16 | DES_CBC_MD5、RC4、AES 256 |
| 23 | 0x17 | DES_CBC_CRC、DES_CBC_MD5、RC4、AES 256 |
| 24 | 0x18 | AES 128、AES 256 |
| 二十五 | 0x19 | DES_CBC_CRC、AES 128、AES 256 |
| 26 | 0x1A | DES_CBC_MD5、AES 128、AES 256 |
| 二十七 | 0x1B | DES_CBC_CRC、DES_CBC_MD5、AES 128、AES 256 |
| 28 | 0x1C | RC4、AES 128、AES 256 |
| 二十九 | 0x1D | DES_CBC_CRC、RC4、AES 128、AES 256 |
| 30 | 0x1E | DES_CBC_MD5、RC4、AES 128、AES 256 |
| 31 | 0x1F | DES_CBC_CRC、DES_CBC_MD5、RC4-HMAC、AES128-CTS-HMAC-SHA1-96、AES256-CTS-HMAC-SHA1-96 |
展开此部分可查看将事件中的值映射到已颁发的票证的加密类型的表。
| 类型值 | 加密类型 |
|---|---|
| 0x1 | DES_CBC_CRC |
| 0x3 | DES_CBC_MD5 |
| 0x11 | AES128-CTS-HMAC-SHA1-96 |
| 0x12 | AES256-CTS-HMAC-SHA1-96 |
| 0x17 | RC4-HMAC |
| 0x18 | RC4-HMAC-EXP |
有关更深入的 msDS-SupportedEncryptionTypes 加密类型和加密类型细分,请参阅我们的博客文章 解密支持的 Kerberos 加密类型的选择。
使用 PowerShell 审核 RC4 使用情况
手动查看事件日志以识别 RC4 使用情况是一项繁琐的任务。 为了提高审核效率,可以下载两个 PowerShell 脚本来帮助:
-
List-AccountKeys.ps1用于查询事件日志以枚举帐户的可用加密密钥。 -
Get-KerbEncryptionUsage.ps1,用于识别正在使用的 Kerberos 加密类型,以及 RC4 等特定算法的筛选选项。
Microsoft将这些脚本发布为开放源代码,Microsoft Kerberos-Crypto GitHub 存储库中提供这些脚本。 或者,还可以使用安全信息和事件管理(SIEM)解决方案(如 Microsoft Sentinel)或内置的 Windows 转发来识别 RC4 使用情况,如我们的博客文章中所述 ,因此,你认为已准备好强制实施适用于 Kerberos 的 AES?。
从 Microsoft Kerberos-Crypto GitHub 存储库下载列出的两个 PowerShell 脚本。
以域控制器上的管理员身份打开 PowerShell 会话,或使用用于管理域控制器的设备上的 Enter-PSSession cmdlet 进行远程连接。
使用以下命令运行脚本
List-AccountKeys.ps1。 此脚本查询安全事件日志,并枚举其找到的帐户可用的密钥。.\List-AccountKeys.ps1在此示例输出中,可以看到事件发生的时间、帐户名称、帐户类型和帐户的密钥。 在这种情况下,可以看到 AES-SHA1 密钥可用,并且它们支持使用 AES-SHA1。
Time Name Type Keys ---- ---- ---- ---- 1/21/2025 2:00:10 PM VM01$ Machine {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...} 1/21/2025 2:00:10 PM AdminUser User {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...} 1/21/2025 6:50:34 PM VM01$ Machine {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...} 1/21/2025 6:50:34 PM AdminUser User {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...} 1/21/2025 6:50:34 PM VM01$ Machine {RC4, AES128-SHA96, AES256-SHA96, AES128-SHA256...}使用以下命令运行脚本
Get-KerbEncryptionUsage.ps1。 此脚本查询相同的事件,以查看环境中发现的 Kerberos 用法。.\Get-KerbEncryptionUsage.ps1Time : 1/21/2025 2:00:10 PM Requestor : ::1 Source : AdminUser@CONTOSO.COM Target : VM01$ Type : TGS Ticket : AES256-SHA96 SessionKey : AES256-SHA96 Time : 1/21/2025 2:00:10 PM Requestor : 192.168.1.1 Source : AdminUser Target : krbtgt Type : AS Ticket : AES256-SHA96 SessionKey : AES256-SHA96此脚本包括特定算法的筛选选项,可针对 RC4 用法进行筛选,如以下示例所示:
.\Get-KerbEncryptionUsage.ps1 -Encryption RC4
处理 RC4 用法的选项
如果发现仍使用 RC4,可以执行一些措施,具体取决于您使用 RC4 的原因。
用户帐户正在使用 RC4,因为它没有 AES-SHA1 密钥
如果在 Windows Kerberos 中支持 AES-SHA1 密钥之前创建了用户帐户,并且添加支持后从未重置密码,该帐户将缺少 AES-SHA1 密钥。 Windows Kerberos 中的 AES-SHA1 支持已在 Windows Server 2003 中添加。 更改帐户密码会生成这些密钥。
无需为 msDS-SupportedEncryptionTypes 没有服务主体名称(SPN)的用户帐户设置值。 设备的配置确定服务票证请求和会话密钥的加密类型。
处理后的 msDS-SupportedEncryptionTypes 值不包含 AES-SHA1 位数
如果已处理 msDS-SupportedEncryptionTypes 的值不包括 AES-SHA1,则可能是少数条件的结果。
案例: 源和/或目标计算机支持的加密类型不包括 AES-SHA1。 在这种情况下,请确认策略的配置并对其进行更新,使其包括 AES-SHA1。 可以通过 Active Directory 用户和计算机控制台中的帐户属性或使用 PowerShell 查看已配置的
msDS-SupportedEncryptionTypes。对于 Active Directory 用户和计算机,请确保已启用 “高级功能 ”视图,然后打开计算机帐户的属性并导航到“ 属性编辑器 ”选项卡。查找
msDS-SupportedEncryptionTypes属性:
对于 PowerShell,请运行以下命令以检索
msDS-SupportedEncryptionTypes属性。 请务必将<computer account name>替换为要检查的帐户的实际名称。$accountName = "<computer account name>" $parameters = @{ Filter = "Name -eq '$($accountName)' -and (ObjectClass -eq 'Computer' -or ObjectClass -eq 'User')" Properties = "msDS-SupportedEncryptionTypes" } Get-ADObject @parameters | FL "DistinguishedName","msDS-SupportedEncryptionTypes","Name","ObjectClass"下面是输出的示例。
msDS-SupportedEncryptionTypes该值以十进制而不是十六进制为单位,可以使用 RC4 使用情况的“事件日志”字段中提供的表进行转换。DistinguishedName : CN=vm01,CN=Computers,DC=contoso,DC=com msDS-SupportedEncryptionTypes : 28 Name : vm01 ObjectClass : computer
如果 AD 中未定义源和/或目标计算机的
msDS-SupportedEncryptionTypes值,则 KDC 会回退到DefaultDomainSupportedEncTypes值,如第二种情况所述。若要确定最适合你的环境设置的值,建议阅读 Active Directory 强化系列 - 第 4 部分 - 为 Kerberos 强制实施 AES | Microsoft 社区中心。 找到适合环境的组合后,请重启计算机,并在 AD 数据库中更新其
msDS-SupportedEncryptionTypes属性。案例:源计算机在 AD 中的
msDS-SupportedEncryptionTypes值未定义时,KDC 将回退到DefaultDomainSupportedEncTypes值。 这种情况更为复杂,需要全面了解环境才能解决。 该值DefaultDomainSupportedEncTypes用于为没有值的设备定义msDS-SupportedEncryptionTypes加密类型。 可通过两种方法解决这种情况:定义帐户属性中的特定
msDS-SupportedEncryptionTypes值,以确保它不会回退到DefaultDomainSupportedEncTypes该值。或者,将
DefaultDomainSupportedEncTypes值设置为包含 AES-SHA1。
正确的方法依赖于单个风险容忍度,因为更新
DefaultDomainSupportedEncTypes值会更改所有没有 值的帐户的行为 。
设备不支持 AES-SHA1
对于 Windows 设备,不支持 AES-SHA1 的最后一个版本的 Windows 是 Windows Server 2003,该版本 不受支持。 应迁移到支持 AES-SHA1 的 Windows 版本。 对于在 AES-SHA1 支持之前创建的帐户,请重置密码以生成新式加密密钥,例如 AES-SHA1。 对于不支持 SHA-1 的帐户,请手动配置支持的加密类型以包括 RC4。
小窍门
如果你有不支持 AES-SHA1 的第三方设备,请联系 stillneedrc4@microsoft.com 有关设备和方案的信息。
限制或禁用 RC4 用法
默认 Kerberos 加密类型的更改导致 RC4 使用量显著减少。 但是,如果要进一步减少 RC4 的使用,则可以限制组策略对 RC4 的使用范围,或者完全在域中禁用 RC4。
注意
从 Windows Server 2025 开始,域控制器不再颁发 RC4 票证授予票据。 虽然可以使用 RC4 向 旧版设备进行身份验证,但旧版设备无法使用 Kerberos 进行身份验证。 需要为域控制器使用早期版本的 Windows Server。
限制或禁用 RC4 用法:
使用组策略管理控制台创建组策略对象(GPO)。 有关详细信息,请参阅 组策略管理。
编辑 GPO 并导航到 计算机配置>策略>Windows 设置>安全设置>本地策略>安全选项。
找到策略设置 网络安全:配置 Kerberos 允许的加密类型。 双击策略以打开其属性。
指定要允许的加密类型。 下面是一些示例:
若要仅允许 AES-SHA1,请选中 AES128_HMAC_SHA1 和 AES256_HMAC_SHA1 的复选框。
若要允许 AES-SHA1 和 RC4,请选中AES128_HMAC_SHA1、AES256_HMAC_SHA1和RC4_HMAC_MD5的框。
将 GPO 范围确定为包含要向其应用策略的设备的适当组织单位(OU)或组。 确保它传播到目标设备,然后重启设备以应用新设置。
应用策略后,监视身份验证事件,以确保不会发生意外的身份验证失败。 可以使用“ 使用 PowerShell”部分中提到的 PowerShell 脚本来审核 RC4 使用情况 ,以验证不再使用 RC4。
或者,还可以通过设置以下注册表值来禁用域控制器上的 RC4,仅允许 AES128_HMAC_SHA1 和 AES256_HMAC_SHA1:
- 键:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\KDC - 值名称:
DefaultDomainSupportedEncTypes - 类型:
REG_DWORD - 值数据:
0x38
识别禁用 RC4 后身份验证失败
禁用 RC4 后,某些系统的身份验证可能会失败。 本部分介绍常见方案和指示器,以识别禁用 RC4 引起的潜在问题。 下面是可能出现身份验证失败的两种常见方案:
服务器消息块(SMB):当您尝试使用 SMB 访问共享,而 RC4 是
msDS-SupportedEncryptionTypes唯一的值时,身份验证失败将导致产生网络错误,如以下屏幕截图所示:
Windows Management Instrumentation (WMI):尝试使用 使用 WMI 的 New-PSSession cmdlet 创建远程 PowerShell 会话时,RC4 是唯一的值
msDS-SupportedEncryptionTypes,身份验证失败将生成错误消息,如以下示例所示:New-PSSession : [vm01.contoso.com] Connecting to remote server vm01.contoso.com failed with the following error message : WinRM cannot process the request. The following error with errorcode 0x80090342 occurred while using Kerberos authentication: An unknown security error occurred. Possible causes are: -The user name or password specified are invalid. -Kerberos is used when no authentication method and no user name are specified. -Kerberos accepts domain user names, but not local user names. -The Service Principal Name (SPN) for the remote computer name and port does not exist. -The client and remote computers are in different domains and there is no trust between the two domains. After checking for the above issues, try the following: -Check the Event Viewer for events related to authentication. -Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport. Note that computers in the TrustedHosts list might not be authenticated. -For more information about WinRM configuration, run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic. At line:1 char:6 + $s = New-PSSession vm01.contoso.com + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException + FullyQualifiedErrorId : err ,PSSessionOpenFailed
若要完成上述任一方案,请执行以下步骤:
尝试使用 klist Windows 命令向此终结点发出直接服务凭据请求,该命令为失败提供了更详细的错误信息。 以下示例演示了 vm01.contoso.com 上对 HOST 服务的服务票证的请求。
打开 PowerShell 会话,并从尝试向目标设备进行身份验证的设备运行以下命令:
klist get HOST/vm01.contoso.com下面是输出的示例,显示 KDC 不支持请求的加密类型:
Current LogonId is 0:0xd6ed18 Error calling API LsaCallAuthenticationPackage (GetTicket substatus): 0x80090342 klist failed with 0xc00002fd/-1073741059: The encryption type requested is not supported by the KDC.在 KDC 上为同一请求打开事件 ID 4769 时,可以看到错误代码
0xE,该代码映射到错误名称KDC_ERR_ETYPE_NOTSUPP。 此错误表示 KDC 不支持加密类型。 可以在 附录 C:Kerberos 和 LDAP 错误消息中关联更多错误。A Kerberos service ticket was requested. Account Information: Account Name: adele@CONTOSO.COM Account Domain: CONTOSO.COM Logon GUID: {00000000-0000-0000-0000-000000000000} MSDS-SupportedEncryptionTypes: - Available Keys: - Service Information: Service Name: HOST/vm01.contoso.com Service ID: NULL SID MSDS-SupportedEncryptionTypes: - Available Keys: - Domain Controller Information: MSDS-SupportedEncryptionTypes: - Available Keys: - Network Information: Client Address: ::ffff:192.168.1.112 Client Port: 60090 Advertized Etypes: - Additional Information: Ticket Options: 0x40810000 Ticket Encryption Type: 0xFFFFFFFF Session Encryption Type: 0x2D Failure Code: 0xE Transited Services: -请遵循“处理过的 msDS-SupportedEncryptionTypes 值不包括 AES-SHA1 位”部分中的步骤,以确定目标设备支持的加密类型。 在此示例中,
vm01.contoso.com的msDS-SupportedEncryptionTypes值是0x4,这表示该帐户仅配置了 RC4。