本文介绍如何为本地安全机构 (LSA) 进程配置添加的保护,以防止代码注入可能损害凭据。
LSA,包括本地安全授权服务服务器进程(LSASS),用于验证用户进行本地和远程登录,并负责强制实施本地安全策略。 在 Windows 8.1 及更高版本上,为 LSA 添加了保护,以防止非受保护的进程读取内存和注入代码。 此功能为 LSA 存储和管理的凭据提供了额外的安全性。 使用统一可扩展固件接口(UEFI)锁和安全启动时,可以实现进一步的保护。 启用这些设置后,禁用 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项不起作用。
插件或驱动程序的受保护进程要求
若要使 LSA 插件或驱动程序成功加载为受保护的进程,它必须满足以下两个部分中的条件。
签名验证
受保护的模式要求加载到 LSA 中的任何插件都使用Microsoft签名进行数字签名。 任何未签名或未使用Microsoft签名签名的插件都无法在 LSA 中加载。 插件的示例包括智能卡驱动程序、加密插件和密码筛选器。
- LSA 插件中的驱动程序,如智能卡驱动程序,需要通过 Windows 硬件质量实验室(WHQL)认证进行签名。 有关详细信息,请参阅 WHQL 发布签名。
- 没有 WHQL 认证过程的 LSA 插件必须使用 LSA 的文件签名服务进行签名。
遵循Microsoft安全开发生命周期(SDL)流程指南
- 所有插件必须符合适用的 SDL 过程指南。 有关详细信息,请参阅 Microsoft安全开发生命周期 (SDL) – 过程指南。
- 即使插件经过 Microsoft 签名正确签署,如果不遵循 SDL 流程,仍可能导致插件加载失败。
推荐做法
在广泛部署该功能之前,请使用以下列表全面测试启用 LSA 保护:
- 标识组织使用的所有 LSA 插件和驱动程序。 包括非Microsoft驱动程序或插件,例如智能卡驱动程序和加密插件,以及用于强制实施密码筛选器或密码更改通知的任何内部开发软件。
- 确保所有 LSA 插件都使用微软证书进行数字签名,以便它们不会因为未签名而无法在 LSA 保护下加载。
- 确保所有正确签名的插件都可以成功加载到 LSA 中,并确保它们按预期方式执行。
- 使用审核日志标识任何无法作为受保护进程运行的 LSA 插件和驱动程序。
启用 LSA 保护的限制
如果启用了添加的 LSA 保护,则无法调试自定义 LSA 插件。 当调试器是受保护的进程时,无法将调试器附加到 LSASS。 通常没有支持进行调试正在运行的受保护进程的方法。
审核不会作为受保护进程加载的 LSA 插件和驱动程序
在启用 LSA 保护之前,请使用审核模式识别 LSA 插件和无法在 LSA 保护模式下加载的驱动程序。 在审核模式下,系统生成事件日志,用于识别启用 LSA 保护时无法在 LSA 下加载的所有插件和驱动程序。 这些消息会被记录下来,而不会实际阻止插件或驱动程序。
本部分中介绍的事件记录在事件查看器中的“操作”日志下的“应用程序和服务日志>Microsoft>Windows>CodeIntegrity”。 这些事件可以帮助你识别由于签名原因而无法加载的 LSA 插件和驱动程序。 若要管理这些事件,可以使用 wevtutil 命令行工具。 有关此工具的信息,请参阅 Wevtutil。
重要
如果在设备上启用了 智能应用控制 ,则不会生成审核事件。 若要检查或更改智能应用控件的状态,请打开 Windows 安全应用程序并转到 “应用和浏览器控制 ”页。 选择 “智能应用控制”设置 ,检查是否启用了智能应用控制。 如果要审核添加的 LSA 保护,请将配置更改为 “关闭”。
注释
默认情况下,在运行 Windows 11 版本 22H2 及更高版本的设备上启用用于添加 LSA 保护的审核模式。 如果设备正在运行此版本或更高版本,则无需执行其他作即可审核添加的 LSA 保护。
在单个计算机上为 LSASS.exe 启用审核模式
- 打开注册表编辑器,或在“运行”对话框中输入 RegEdit.exe,然后转到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe注册表项。
- 打开 AuditLevel 值。 将其数据类型设置为 dword ,并将其数据值设置为 00000008。
- 重启电脑
执行这些步骤后,查找具有以下 ID 的事件:3065 和 3066。 若要检查这些事件,请打开事件查看器,然后展开 应用程序和服务日志>Microsoft>Windows>CodeIntegrity>操作。
- 当代码完整性检查确定进程(通常 LSASS.exe)尝试加载不符合共享节安全要求的驱动程序时,将发生事件 3065。 但是,由于系统策略当前已设置,因此允许加载映像。
- 当代码完整性检查确定进程(通常 LSASS.exe)尝试加载不符合Microsoft签名级别要求的驱动程序时,将发生事件 3066。 但是,由于系统策略当前已设置,因此允许加载映像。
如果插件或驱动程序包含共享部分,则会记录事件 3066 和事件 3065。 删除共享部分应阻止这两个事件发生,除非插件不符合Microsoft签名级别要求。
重要
在系统上附加和启用内核调试器时,不会生成这些作事件。
在多台计算机上为 LSASS.exe 启用审核模式
若要为域中的多台计算机启用审核模式,可以使用组策略的注册表客户端扩展来部署 LSASS.exe 审核级注册表值。 需要修改 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe 注册表项。
- 通过在“运行”对话框中输入 gpmc.msc 或从“开始”菜单中选择组策略管理控制台,打开组策略管理控制台。
- 创建一个新的组策略对象 (GPO),该对象在域级别链接,或者链接到你的计算机帐户所在的组织单位。 或者选择一个已部署的 GPO。
- 右键单击 GPO,然后选择 “编辑 ”以打开组策略管理编辑器。
- 展开 计算机配置>首选项>Windows 设置。
- 右键单击 注册表,指向“ 新建”,然后选择 “注册表项”。 此时会显示“ 新建注册表属性 ”对话框。
- 在“ 新建注册表属性 ”对话框中,选择或输入以下值:
- 对于 Hive,请选择 HKEY_LOCAL_MACHINE。
- 对于 密钥路径,请选择 软件\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\LSASS.exe。
- 对于 值名称,请输入 AuditLevel。
- 对于 “值类型”,请选择“ REG_DWORD”。
- 对于 值数据,请输入 00000008。
- 选择“确定”。
注释
若要使 GPO 生效,必须将 GPO 更改复制到域中的所有域控制器。
若要在多台计算机上选择加入添加的 LSA 保护,可以使用组策略的注册表客户端扩展来修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa。 有关说明,请参阅本文后面的 “启用和配置添加的 LSA 凭据保护 ”。
识别 LSASS.exe 加载失败的插件和驱动程序
启用 LSA 保护后,系统会生成事件日志,用于标识 LSA 下无法加载的所有插件和驱动程序。 选择加入添加 LSA 保护后,可以使用事件日志识别 LSA 插件和无法在 LSA 保护模式下加载的驱动程序。
在事件查看器中检查以下事件(展开“应用程序和服务日志”>“Microsoft”>“Windows”>“CodeIntegrity”>“Operational”):
- 当代码完整性检查确定进程(通常 LSASS.exe)尝试加载不符合Microsoft签名级别要求的驱动程序时,将发生事件 3033。
- 当代码完整性检查确定进程(通常 LSASS.exe)尝试加载不符合共享节安全要求的驱动程序时,将发生事件 3063。
在编程技术允许实例数据与使用相同安全上下文的其他进程交互时,通常会产生共享部分。 共享部分可以创建安全漏洞。
启用和配置添加的 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 变量,可以使用注册表配置或策略。
在单个计算机上启用 LSA 保护
可以使用注册表或使用本地组策略在单个计算机上启用 LSA 保护。
使用注册表启用
- 打开注册表编辑器,或在“运行”对话框中输入 RegEdit.exe,然后转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项。
- 打开 RunAsPPL 值并编辑其数据:
- 若要使用 UEFI 变量配置该功能,请使用 一种类型的 dword 和数据值 00000001。
- 若要在没有 UEFI 变量的情况下配置该功能,请使用 一种类型的 dword 和数据值 00000002。 此值仅在 Windows 11 内部版本 22H2 及更高版本上强制执行。
- 重启电脑
在 Windows 11 版本 22H2 及更高版本上使用本地组策略启用
- 通过在“运行”对话框中输入 gpedit.msc,打开本地组策略编辑器。
- 展开 计算机配置>管理模板>系统>本地安全机构。
- 打开“将 LSASS 配置为作为受保护的进程运行”策略。
- 将策略设置为 “已启用”。
- 在 “选项”下,选择以下选项之一:
- 若要使用 UEFI 变量配置该功能,请选择 “已启用并锁定 UEFI”。
- 若要在没有 UEFI 变量的情况下配置该功能,请选择 “已启用且没有 UEFI 锁定”。
- 选择“确定”。
- 重启电脑
使用组策略启用 LSA 保护
- 通过在“运行”对话框中输入 gpmc.msc 或从“开始”菜单中选择组策略管理控制台,打开组策略管理控制台。
- 创建一个新 GPO,该 GPO 在域级别链接,或者链接到你的计算机帐户所在的组织单位。 或者选择一个已部署的 GPO。
- 右键单击 GPO,然后选择 “编辑 ”以打开组策略管理编辑器。
- 展开 计算机配置>首选项>Windows 设置。
- 右键单击 注册表,指向“ 新建”,然后选择 “注册表项”。 此时会显示“ 新建注册表属性 ”对话框。
- 在“ 新建注册表属性 ”对话框中,选择或输入以下值:
- 对于 Hive,请选择 HKEY_LOCAL_MACHINE。
- 对于 密钥路径,请选择 SYSTEM\CurrentControlSet\Control\Lsa。
- 对于 值名称,请输入 RunAsPPL。
- 对于 “值类型”,请选择“ REG_DWORD”。
- 对于 值数据,请输入以下值之一:
- 若要使用 UEFI 变量启用 LSA 保护,请输入 00000001。
- 若要在没有 UEFI 变量的情况下启用 LSA 保护,请输入 00000002。 此设置仅在 Windows 11 版本 22H2 及更高版本上强制执行。
- 选择“确定”。
通过创建自定义设备配置文件启用 LSA 保护
对于运行 Windows 11 版本 22H2 及更高版本的设备,可以执行以下部分中的步骤来启用和配置 LSA 保护。 此过程使用 Microsoft Intune 管理中心 创建自定义设备配置文件。
创建个人资料
- 在 Intune 管理中心,转到 “设备>Windows>配置文件”,然后选择“ 创建配置文件”。
- 在 “创建配置文件 ”屏幕上,选择以下选项:
- 在“平台”下,选择“Windows 10 和更高版本”。
- 在 “配置文件类型”下,选择“ 模板”,然后选择“ 自定义”。
- 选择 创建。
- 在基本信息屏幕上,输入资料的名称和描述(可选),然后选择下一步。
添加初始配置设置
- 在 “配置设置” 屏幕上,选择“ 添加”。
- 在 “添加行 ”屏幕上,输入以下信息:
- 对于 “名称”,请输入开放移动联盟 - 统一资源(OMA-URI)设置的名称。
- 对于“OMA-URI”,请输入“./Device/Vendor/MSFT/Policy/Config/LocalSecurityAuthority/ConfigureLsaProtectedProcess”。
- 对于 数据类型,请选择 “整数”。
- 对于 值,请输入以下值之一:
- 若要将 LSASS 配置为使用 UEFI 锁作为受保护进程运行,请输入 1。
- 若要将 LSASS 配置为在没有 UEFI 锁的情况下作为受保护进程运行,请输入 2。
- 选择“ 保存”,然后选择“ 下一步”。
完成配置文件的配置
- 在 “分配 ”页上,配置作业,然后选择“ 下一步”。
- 在“ 适用性规则 ”页上,配置任何适用性规则,然后选择“ 下一步”。
- 在 “查看 + 创建 ”页上,验证配置,然后选择“ 创建”。
- 重启电脑
有关此策略配置服务提供程序(CSP)的详细信息,请参阅 LocalSecurityAuthority - ConfigureLsaProtectedProcess。
禁用 LSA 保护
可以使用注册表或使用本地组策略禁用 LSA 保护。 如果设备使用的是安全启动,并在固件中设置 LSA 保护 UEFI 变量,则可以使用工具删除 UEFI 变量。
使用注册表禁用
- 打开注册表编辑器,或在“运行”对话框中输入 RegEdit.exe,然后转到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 注册表项。
- 打开 RunAsPPL 值,并将其数据值设置为 00000000。 或删除 RunAsPPL 值。
- 如果使用 UEFI 变量启用了受保护的进程轻型(PPL)功能,请使用 “本地安全机构保护的进程选择退出”工具 删除 UEFI 变量。
- 重启电脑
在 Windows 11 版本 22H2 及更高版本上使用本地策略禁用
- 通过在“运行”对话框中输入 gpedit.msc,打开本地组策略编辑器。
- 展开 计算机配置>管理模板>系统>本地安全机构。
- 打开“将 LSASS 配置为作为受保护的进程运行”策略。
- 将策略设置为 “已启用”。
- 在 “选项”下,选择“ 已禁用”。
- 选择“确定”。
- 重启电脑
注释
如果将此策略设置为 “未配置 ”,并且策略以前已启用,则以前的设置不会清理并继续强制执行。 必须在“选项”下拉列表下将策略设置为“已禁用”,才能禁用该功能。
删除 LSA 保护 UEFI 变量
如果设备正在使用安全启动,则可以从Microsoft下载中心使用 本地安全机构(LSA)受保护的进程选择退出工具 删除 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 票证授予票证和应用程序存储为域凭据的凭据来帮助防止凭据盗窃攻击。 Kerberos、NTLM 和凭据管理器使用基于虚拟化的安全性(VBS)隔离机密。
启用 Credential Guard 后,LSA 进程与称为隔离 LSA 进程或 LSAIso.exe的组件通信,该组件存储和保护机密。 独立 LSA 进程存储的数据通过使用 VBS 得到保护,操作系统的其他部分无法访问。 LSA 使用远程过程调用来与隔离的 LSA 进程进行通信。
从 Windows 11 版本 22H2 开始,VBS 和 Credential Guard 默认在所有满足系统要求的设备上启用。 凭据防护仅在 64 位安全启动设备上受支持。 LSA 保护和 Credential Guard 是互补的,默认情况下支持 Credential Guard 或启用它的系统也可以启用和受益于 LSA 保护。 有关 Credential Guard 的详细信息,请参阅 Credential Guard 概述。