配置附加 LSA 保护

本文介绍如何为本地安全机构 (LSA) 进程配置附加保护,以防止发生损害凭据安全性的代码注入。

LSA 包含本地安全机构服务器服务 (LSASS) 进程,可以验证用户的本地和远程登录,并强制本地安全策略。 从 Windows 8.1 及更高版本开始,为 LSA 添加了保护,以防止非受保护的进程读取内存和代码注入。 此功能为 LSA 存储和管理的凭据提供了更高的安全性。 使用 UEFI 锁和安全启动时可实现进一步的保护,因为禁用 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项无效。

插件或驱动程序的受保护进程要求

要使 LSA 插件或驱动程序以受保护进程的形式成功加载,它必须符合以下条件:

签名验证

保护模式要求加载到 LSA 中的任何插件都使用 Microsoft 签名进行数字签名。 未签名的或者未使用 Microsoft 签名进行签名的任何插件都无法加载到 LSA 中。 插件的例子包括智能卡驱动程序、加密插件和密码筛选器。

  • 用作驱动程序(例如智能卡驱动程序)的 LSA 插件需要使用 WHQL 认证进行签名。 有关详细信息,请参阅 WHQL 版本签名
  • 不需要经历 WHQL 认证过程的 LSA 插件必须使用 LSA 的文件签名服务进行签名。

遵守 Microsoft 安全开发生命周期 (SDL) 过程指导

  • 所有插件必须符合适用的 SDL 过程指导。 有关详细信息,请参阅 Microsoft 安全开发生命周期 (SDL)–过程指导
  • 即使插件已使用 Microsoft 签名正确地进行了签名,但如果不符合 SDL 过程,也可能会导致加载插件失败。

在广泛部署该功能之前,请使用以下列表来全面测试是否已启用 LSA 保护:

  • 标识你的组织使用的所有 LSA 插件和驱动程序。 包括非 Microsoft 驱动程序或插件(例如智能卡驱动程序和加密插件),以及内部开发的、用于强制密码筛选器或密码更改通知的所有软件。
  • 确保使用 Microsoft 证书对所有 LSA 插件进行数字签名,以防止它们在 LSA 保护下加载失败。
  • 确保正确签名的所有插件都能成功加载到 LSA 中,并且能按预期工作。
  • 使用审核日志来识别无法以受保护进程运行的 LSA 插件和驱动程序。

启用 LSA 保护的限制

如果启用了附加 LSA 保护,则无法调试自定义 LSA 插件。 如果调试器是受保护的进程,则无法将其附加到 LSASS。 通常,没有受支持的方法来调试正在运行的受保护进程。

审核不会作为受保护进程加载的 LSA 插件和驱动程序

在启用 LSA 保护之前,请使用审核模式识别将在 LSA 保护模式中加载失败的 LSA 插件和驱动程序。 在审核模式中,系统会生成事件日志,用于识别启用 LSA 保护时无法在 LSA 下加载的所有插件和驱动程序。 将会记录消息,而不阻止这些插件或驱动程序。

本部分所述的事件位于 Applications and Services Logs>Microsoft>Windows>CodeIntegrity 下的 Operational 日志的事件查看器中。 这些事件可帮助你识别由于签名方面的原因而无法加载的 LSA 插件和驱动程序。 若要管理这些事件,可使用 wevtutil 命令行工具。 有关此工具的信息,请参阅 Wevtutil

重要

如果在设备上启用了“智能应用控制”,则不会生成审核事件。 要检查或更改智能应用控制的启用状态,请打开 Windows 安全应用程序,然后转到应用和浏览器控制页面。 选择“智能应用控制设置”以检查启用状态,并在尝试审核附加 LSA 保护时将配置更改为“”。

注意

默认情况下,在运行 Windows 11 版本 22H2 及更高版本的设备上启用附加 LSA 保护的审核模式。 如果设备正在运行此版本或更高版本,则无需执行其他操作即可审核附加 LSA 保护。

在单个计算机上为 LSASS.exe 启用审核模式

  1. 打开注册表编辑器 (RegEdit.exe),然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe
  2. 将该注册表项的值设置为 AuditLevel=dword:00000008.。
  3. 重新启动计算机。

执行这些步骤后,分析事件 3065 和事件 3066 的结果。 在事件查看器中,在 Applications and Services Logs>Microsoft>Windows>CodeIntegrity 下的 Operational 日志中检查这些事件。

  • 事件 3065 记录:代码完整性检查已确定某个进程(通常为 LSASS.exe)尝试加载某个驱动程序,而该驱动程序不符合共享区域的安全要求。 但是,由于当前设置的系统策略,允许加载相应的映像。
  • 事件 3066 记录:代码完整性检查已确定某个进程(通常为 LSASS.exe)尝试加载某个驱动程序,而该驱动程序不符合 Microsoft 签名级别要求。 但是,由于当前设置的系统策略,允许加载相应的映像。

如果插件或驱动程序包含共享区域,则会同时记录事件 3066 和事件 3065。 除非插件不符合 Microsoft 签名级别要求,否则,移除共享区域应可防止发生这两个事件。

重要

如果在系统上附加并启用了内核调试程序,则不会生成这些操作事件。

在多台计算机上为 LSASS.exe 启用审核模式

要为域中的多台计算机启用审核模式,可以使用组策略的注册表客户端扩展来部署 LSASS.exe 审核级别注册表值。 需要修改 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe 注册表项。

  1. 通过在“运行”对话框中输入 gpmc.msc 或从“开始”菜单中选择“组策略管理控制台”,打开组策略管理控制台 (GPMC)。
  2. 创建一个新的组策略对象 (GPO),该对象在域级别链接,或者链接到你的计算机帐户所在的组织单位。 或者,选择一个已部署的 GPO。
  3. 右键单击该 GPO,然后选择编辑打开组策略管理编辑器。
  4. 展开计算机配置>首选项>Windows 设置
  5. 右键单击注册表,指向新建,然后选择注册表项。 此时将出现“新建注册表属性”对话框
  6. Hive 列表中,选择 HKEY_LOCAL_MACHINE
  7. 在“注册表项路径”列表中浏览到“SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe”。
  8. “值名称” 框中键入 AuditLevel
  9. 值类型框中,选择 REG_DWORD
  10. 值数据 框中,键入 00000008
  11. 选择确定

注意

要使 GPO 生效,必须将 GPO 更改复制到域中的所有域控制器。

要在多台计算机上选择使用附加 LSA 保护,可以使用组策略的注册表客户端扩展来修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa。 如需说明,请参阅本文后面的“配置附加 LSA 凭据保护”。

识别 LSASS.exe 无法加载的插件和驱动程序

启用 LSA 保护后,系统将生成事件日志,识别无法在 LSA 下加载的所有插件和驱动程序。 选择使用附加 LSA 保护后,可以使用事件日志识别无法在 LSA 保护模式下加载的 LSA 插件和驱动程序。

在事件查看器中检查以下事件(Applications and Services Logs>Microsoft>Windows>CodeIntegrity>Operational):

  • 事件 3033 记录:代码完整性检查已确定某个进程(通常为 LSASS.exe)尝试加载某个驱动程序,而该驱动程序不符合 Microsoft 签名级别要求。
  • 事件 3063 记录:代码完整性检查已确定某个进程(通常为 LSASS.exe)尝试加载某个驱动程序,而该驱动程序不符合共享区域的安全要求。

共享区域通常是运用某些编程技术的后果,这些技术允许实例数据与使用相同安全上下文的其他进程交互,这可能会形成安全漏洞。

启用和配置附加 LSA 凭据保护

可以使用本节中的过程为运行 Windows 8.1 或更高版本或 Windows Server 2012 R2 或更高版本的设备配置附加 LSA 保护。

使用安全启动和 UEFI 的设备

在使用安全启动或 UEFI 的基于 x86 或基于 x64 的设备上启用 LSA 保护时,可以使用注册表项或策略将 UEFI 变量存储在 UEFI 固件中。 使用 UEFI 锁启用后,LSASS 将作为受保护的进程运行,此设置存储在固件中的 UEFI 变量中。

当设置存储在固件中时,无法通过修改注册表或使用策略来删除或更改 UEFI 变量以配置附加 LSA 保护。 必须使用移除 LSA 保护 UEFI 变量中的说明重置 UEFI 变量。

在没有 UEFI 锁的情况下启用时,LSASS 将作为受保护的进程运行,并且此设置不会存储在 UEFI 变量中。 默认情况下,此设置在安装了 Windows 11 版本 22H2 或更高版本的设备上应用。

在不支持 UEFI 或禁用安全启动的基于 x86 或 x64 的设备上,无法在固件中存储 LSA 保护的配置。 这些设备仅依赖于注册表项的存在。 在此情况下,可以使用对设备的远程访问权限来禁用 LSA 保护。 在设备重新启动之前,LSA 保护的禁用不会生效。

自动启用

对于运行 Windows 11 版本 22H2 及更高版本的客户端设备,如果满足以下条件,则默认启用附加 LSA 保护:

  • 该设备是 Windows 11 版本 22H2 或更高版本的新安装,未从以前的版本升级。
  • 此设备已加入企业(已加入 Active Directory 域、已加入 Microsoft Entra 域或已加入混合 Microsoft Entra 域)。
  • 该设备支持虚拟机监控程序保护的代码完整性 (HVCI)

在 Windows 11 版本 22H2 及更高版本上自动启用附加 LSA 保护后,不会为该功能设置 UEFI 变量。 如果要设置 UEFI 变量,可以使用注册表配置或策略。

注意

对于运行 Windows RT 8.1 的设备,附加 LSA 保护始终处于启用状态,并且无法关闭。

在一台计算机上启用 LSA 保护

可以使用注册表或使用本地组策略在单个计算机上启用 LSA 保护。

使用注册表启用

  1. 打开注册表编辑器 RegEdit.exe,然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  2. 将该注册表项的值设置为:
    • "RunAsPPL"=dword:00000001,使用 UEFI 变量来配置此功能。
    • "RunAsPPL"=dword:00000002,不使用 UEFI 变量来配置此功能,仅在 Windows 11 版本 22H2 及更高版本上强制实施。
  3. 重新启动计算机。

在 Windows 11 版本 22H2 及更高版本上使用本地组策略启用

  1. 输入 gpedit.msc 打开本地组策略编辑器。
  2. 展开计算机配置>管理模板>系统>本地安全机构
  3. 打开将 LSASS 配置为作为受保护的进程运行策略。
  4. 将策略设置为已启用
  5. 在“选项”下,选择以下选项之一。
    • 已启用,带 UEFI 锁定”:使用 UEFI 变量配置功能。
    • 已启用,不带 UEFI 锁定”:不使用 UEFI 变量配置功能。
  6. 选择“确定”
  7. 重新启动计算机。

使用组策略启用 LSA 保护

  1. 通过在“运行”对话框中输入 gpmc.msc 或从“开始”菜单中选择“组策略管理控制台”来打开 GPMC。
  2. 创建一个新 GPO,该 GPO 在域级别链接,或者链接到你的计算机帐户所在的组织单位。 或者,选择一个已部署的 GPO。
  3. 右键单击该 GPO,然后选择编辑打开组策略管理编辑器。
  4. 展开计算机配置>首选项>Windows 设置
  5. 右键单击注册表,指向新建,然后单击注册表项。 此时将出现“新建注册表属性”对话框
  6. Hive 列表中,选择 HKEY_LOCAL_MACHINE
  7. 在“注册表项路径” 列表中,浏览到 SYSTEM\CurrentControlSet\Control\Lsa
  8. 在“值名称”框中,键入 RunAsPPL
  9. 值类型框中,选择 REG_DWORD
  10. 在“值数据”框中,键入:
    • 00000001,使用 UEFI 变量启用 LSA 保护。
    • 00000002:不使用 UEFI 变量启用 LSA 保护,仅在 Windows 11 版本 22H2 及更高版本上强制实施。
  11. 选择“确定”

通过创建自定义设备配置文件启用 LSA 保护

对于运行 Windows 11 版本 22H2 及更高版本的设备,可以通过在 Microsoft Intune 管理中心创建自定义设备配置文件来启用和配置 LSA 保护。

  1. 在 Intune 管理中心,导航到设备>Windows>配置文件,然后选择创建配置文件
  2. 在“创建配置文件”屏幕上,选择以下选项:
    • 平台:Windows 10 及更高版本
    • 配置文件类型:选择“模板”,然后选择“自定义”。
  3. 选择创建
  4. 在“基本信息”屏幕上,输入配置文件的“名称”和可选“说明”,然后选择“下一步”。
  5. 在“配置设置”屏幕上,选择“添加”。
  6. 在“添加行”屏幕上,提供以下信息:
    • 名称:提供 OMA-URI 设置的名称。
    • OMA-URI:输入 ./Device/Vendor/MSFT/Policy/Config/LocalSecurityAuthority/ConfigureLsaProtectedProcess
    • 数据类型:选择“整数”。
    • :输入 1 以将 LSASS 配置为使用 UEFI 锁作为受保护进程运行,或输入 2 将 LSASS 配置为不使用 UEFI 锁作为受保护进程运行。
  7. 选择保存,然后选择下一步
  8. 在“分配”页上,配置分配,然后选择“下一页”。
  9. 在“适用性规则”页上,配置任何适用性规则,然后选择“下一页”。
  10. 在“查看 + 创建”页上,验证配置,然后选择“创建”。
  11. 重新启动计算机。

有关此策略 CSP 的详细信息,请参阅 LocalSecurityAuthority - ConfigureLsaProtectedProcess

禁用 LSA 保护

可以使用注册表或使用本地组策略禁用 LSA 保护。 如果设备使用的是安全启动,并且你在固件中设置了 LSA 保护 UEFI 变量,则可以使用工具移除 UEFI 变量。

使用注册表禁用

  1. 打开注册表编辑器 RegEdit.exe,然后导航到位于以下位置的注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  2. 将注册表项的值设置为 "RunAsPPL"=dword:00000000,或删除 DWORD
  3. 如果使用 UEFI 变量启用了 PPL,请使用本地安全机构保护的进程选择退出工具来删除 UEFI 变量。
  4. 重新启动计算机。

在 Windows 11 版本 22H2 及更高版本上使用本地策略进行禁用

  1. 输入 gpedit.msc 打开本地组策略编辑器。
  2. 展开计算机配置>管理模板>系统>本地安全机构
  3. 打开将 LSASS 配置为作为受保护的进程运行策略。
  4. 将策略设置为已启用
  5. 在“选项”下,选择“已禁用 ”。
  6. 选择“确定”
  7. 重新启动计算机。

注意

如果将此策略设置为“未配置”,并且以前启用了该策略,则不会清除以前的设置,并将继续强制执行。 必须在选项下拉列表下将策略设置为已禁用才能禁用该功能。

移除 LSA 保护 UEFI 变量

如果设备正在使用安全启动,则可以在 Microsoft 下载中心使用本地安全机构 (LSA) 受保护进程选择退出工具 (LSAPPLConfig) 删除 UEFI 变量。

注意

下载中心提供了两个名为 LsaPplConfig.efi 的文件。 较小的文件适用于基于 x86 的系统,较大的文件适用于基于 x64 的系统。

有关管理安全启动的详细信息,请参阅 UEFI 固件

注意

关闭安全启动后,将会重置所有与安全启动和 UEFI 相关的配置。 仅当禁用 LSA 保护的所有其他方法均已失败时,才应关闭安全启动。

验证 LSA 保护

要确定 LSA 在 Windows 启动时是否在受保护模式下启动,请检查事件查看器中的 Windows 日志>系统,看看是否存在以下 WinInit 事件:

  • 12:LSASS.exe 已作为级别 4 受保护进程启动

LSA 和 Credential Guard

LSA 保护是一项安全功能,它通过阻止不受信任的 LSA 代码注入和进程内存转储来保护敏感信息(例如凭据)不被盗窃。 LSA 防护在后台运行,方法是隔离容器中的 LSA 进程,并阻止其他进程(如恶意执行组件或应用)访问该功能。 这种隔离使 LSA 保护成为重要的安全功能,这就是为什么它在 Windows 11 中默认启用。

从 Windows 10 开始,Credential Guard 还通过保护 NTLM 密码哈希、Kerberos 票证授予票证 (TGT) 和应用程序以域凭据形式存储的凭据来帮助防止凭据盗窃攻击。 Kerberos、NTLM 和 Credential Manager 使用基于虚拟化的安全性 (VBS) 来隔离机密。

启用 Credential Guard 后,LSA 进程会与名为隔离 LSA 进程的组件 (LSAIso.exe) 进行对话,该组件负责存储和保护机密。 独立 LSA 进程存储的数据使用 VBS 进行保护,无法被操作系统的其余部分访问。 LSA 使用远程过程调用来与隔离的 LSA 进程进行通信。

从 Windows 11 版本 22H2 开始,VBS 和 Credential Guard 默认在所有满足系统要求的设备上启用。 Credential Guard 仅在 64 位安全启动设备上受支持。 LSA 保护和 Credential Guard 是互补的,支持 Credential Guard 或默认启用它的系统也可以启用 LSA 保护并从中受益。 有关 Credential Guard 的详细信息,请参阅 Credential Guard 概述

更多资源