自定义漏洞保护

适用于:

希望体验 Defender for Endpoint? 注册免费试用版

漏洞保护会自动在操作系统进程和单个应用上应用多种漏洞缓解技术。

在单个设备上使用 Windows 安全应用配置这些设置。 然后,将配置导出为 XML 文件,以便可以部署到其他设备。 使用组策略一次将 XML 文件分发到多个设备。 还可以使用 PowerShell 配置缓解措施。

本文列出了漏洞保护中可用的每个缓解措施。 它指示缓解措施是可以应用于系统范围还是单个应用,并提供缓解措施的工作原理的简要说明。

它还介绍了如何使用 Windows 安全性、PowerShell 和移动设备管理 (MDM) 配置服务提供程序 (CSP) 启用或配置缓解措施。 这是创建可跨网络部署的配置的第一步。 下一步涉及 生成、导出、导入配置以及将配置部署到多个设备

警告

某些安全缓解技术可能存在某些应用程序的兼容性问题。 应在生产环境或网络的其余部分中部署配置之前,使用审核模式测试所有目标使用方案中的 Exploit Protection。

漏洞保护缓解措施

可以为单个应用配置所有缓解措施。 某些缓解措施也可以在操作系统级别应用。

可以将每个缓解措施设置为打开、关闭或设置为其默认值。 某些缓解措施具有表中说明中所示的其他选项。

默认值总是在每个缓解措施的 使用默认 选项的括号内指定。 在下面的示例中,数据执行防护的默认值为“开”。

每个缓解设置的“使用默认” 配置指示我们建议为家庭用户的日常使用提供基本级别的保护。 企业部署应考虑其个人需求所需的保护,并且可能需要在默认值之外修改配置。

有关每个缓解措施的关联 PowerShell cmdlet,请参阅本文底部的 PowerShell 参考表

缓解 说明 可以应用于 审核模式可用
控制流保护 (CFG) 确保间接调用的控制流完整性。 可以选择取消导出并使用严格的 CFG。 系统和应用级别
数据执行保护(DEP) 防止从仅数据内存页(如堆和堆栈)运行代码。 仅可为 32 位 (x86) 应用配置,为所有其他体系结构永久启用。 可以选择性地启用 ATL thunk 仿真。 系统和应用级别
强制图像随机化(强制 ASLR) 强制重新定位未使用 /DYNAMICBASE 编译的图像。 可以选择不加载没有重新定位信息的映像。 系统和应用级别
随机内存分配(由下而上 ASLR) 随机化虚拟内存分配位置。 它包括系统结构堆、堆栈、TEB 和 PEB。 可以选择对 64 位进程使用更广的随机化方差。 系统和应用级别
验证异常链(SEHOP) 确保异常调度期间异常链的完整性。 仅适用于 32 位 (x86) 应用程序。 系统和应用级别
验证堆完整性 检测到堆损坏时即终止进程。 系统和应用级别
任意代码防护(ACG) 防止引入非映像支持的可执行代码,并阻止修改代码页。 可以选择性地允许线程退出并允许远程降级(只能使用 PowerShell 进行配置)。 仅限应用级别
阻止低完整性图像 阻止加载标记低完整性的映像。 仅限应用级别
阻止远程图像 阻止从远程设备加载映像。 仅限应用级别
阻止不受信任的字体 防止加载系统字体目录中未安装的任何基于 GDI 的字体,尤其是来自 Web 的字体。 仅限应用级别
代码完整性防护 限制加载由 Microsoft、WHQL 或更高版本签名的映像。 可以选择允许 Microsoft Store 签名的映像。 仅限应用级别
禁用扩展点 禁用各种可扩展性机制,这些机制允许 DLL 注入到所有进程,例如 AppInit DLL、窗口挂钩和 Winsock 服务提供程序。 仅限应用级别
禁用 Win32k 系统调用 阻止应用使用 Win32k 系统调用表。 仅限应用级别
不允许子进程 阻止应用创建子进程。 仅限应用级别
导出地址筛选(EAF) 检测恶意代码正在解决危险操作。 可以选择通过漏洞常用的模块验证访问权限。 仅限应用级别
导入地址筛选(IAF) 检测恶意代码正在解决危险操作。 仅限应用级别
模拟执行(SimExec) 确保对敏感 API 的调用返回到合法调用方。 仅适用于 32 位 (x86) 应用程序。 与 ACG 不兼容。 仅限应用级别
验证 API 调用(CallerCheck) 确保合法调用方调用敏感 API。 仅适用于 32 位 (x86) 应用程序。 与 ACG 不兼容 仅限应用级别
验证处理使用情况 导致对任何无效图柄引用引发异常。 仅限应用级别
验证映像依赖项完整性 强制对 Windows 映像依赖项加载进行代码签名。 仅限应用级别
验证堆栈完整性(StackPivot) 确保未针对敏感 API 重定向堆栈。 与 ACG 不兼容。 仅限应用级别

重要

如果将应用添加到“程序设置”部分并在其中配置单个缓解设置,则系统设置部分中指定的相同缓解措施的配置上方将采用这些应用。 以下矩阵和示例有助于说明默认值的工作原理:

程序设置中启用 系统设置中启用 行为
程序设置中所定义
程序设置中所定义
系统设置中所定义
默认如使用默认选项中所定义
  • 示例 1 Mikael 在“系统设置”部分中将数据执行防护 (DEP) 配置为 默认关闭。 之后,Mikael 将应用 test.exe 添加到程序设置部分。 在该应用的选项中,在“数据执行防护 (DEP)”下,J他启用“替代系统设置”选项,并将开关设置为“”。 “ 程序设置 ”部分中未列出其他应用。 结果是,将仅为 test.exe 启用 DEP。 所有其他应用将不会应用 DEP。

  • 示例 2 Josie 在“系统设置”部分中将数据执行防护 (DEP) 配置为 默认关闭。 之后,Josie 将应用 test.exe 添加到程序设置部分。 在该应用的选项中,在“数据执行防护 (DEP)”下,她启用“替代系统设置”选项,并将开关设置为“”。 Josie 还会将应用 miles.exe 添加到“程序设置”部分,并将 控制流防护 (CFG) 配置为“”。 她不会为 DEP 启用 替代系统设置 选项,也不会为该应用启用任何其他缓解措施。 结果是将为 test.exe 启用 DEP。 将不会为任何其他应用(包括 miles.exe)启用 DEP。 将对 miles.exe 启用 CFG。

注意

如果在本文中发现了任何问题,可以直接将其报告给 Windows Server/Windows 客户端合作伙伴,或使用所在国家/地区的 Microsoft 技术支持号码。

使用 Windows 安全应用配置系统级缓解措施

  1. 通过选择任务栏中的防护图标或搜索 Windows 安全性的“开始”菜单,打开 Windows 安全应用。

  2. 选择 应用和浏览器控制 磁贴(或左侧菜单栏上的应用图标),然后选择 漏洞保护

  3. 在“系统设置”部分下,找到要配置的缓解措施,然后选择以下设置之一。 未在“程序设置”部分单独配置的应用将使用此处配置的设置:

    • 默认启用 - 对未在特定于应用的“程序设置”部分中设置此缓解措施的应用启用缓解措施
    • 默认关闭 - 对未在特定于应用的“程序设置”部分中设置此缓解措施的应用关闭缓解措施
    • 使用默认值 - 根据 Windows 10 或 Windows 11 安装设置的默认配置,启用或禁用缓解;默认值(打开关闭)始终在每个缓解措施的“使用默认”标签旁边指定

    注意

    更改某些设置时,可能会看到“用户帐户控制”窗口。 输入管理员凭据以应用设置。

    更改某些设置可能需要重启。

  4. 对要配置的所有系统级缓解措施重复此操作。

  5. 转到 “程序”设置部分,然后选择要向其采取缓解措施的应用:

    1. 如果要配置的应用已列出,请选择它,然后选择“编辑
    2. 如果应用未列出,请在列表顶部选择“添加程序进行自定义”,然后选择要添加应用的方式:
      • 使用“按程序添加名称”将缓解措施应用于具有该名称的任何正在运行的进程。 必须指定具有扩展名的文件。 可以输入完整路径,以仅将缓解措施限制为该位置中具有该名称的应用。
      • 使用“选择确切的文件路径”,以使用标准 Windows 资源管理器文件选取器窗口查找并选择所需的文件。
  6. 选择应用后,你将看到可采取的所有缓解措施的列表。 若要启用缓解,请选中复选框,然后将滑块更改为“”。 选择任何其他选项。 选择“审核”将仅在审核模式下应用缓解措施。 如果需要重启进程或应用,或者需要重新启动 Windows,系统会通知你。

  7. 对要配置的所有应用和缓解措施重复这些步骤。 设置完配置后,选择“应用”。

现在可以 将这些设置导出为 XML 文件 ,也可以继续配置特定于应用的缓解措施。

通过将配置导出为 XML 文件,可以将配置从一台设备复制到其他设备上。

PowerShell 参考

可以使用 Windows 安全应用配置漏洞保护,也可以使用 PowerShell cmdlet。

将始终应用最近修改的配置设置 - 无论是使用 PowerShell 还是 Windows 安全性。 这意味着,如果使用应用配置缓解措施,然后使用 PowerShell 配置相同的缓解措施,应用将更新以显示使用 PowerShell 所做的更改。 如果随后使用该应用再次更改缓解措施,则该更改将适用。

重要

通过组策略部署到设备的任何更改都将覆盖本地配置。 设置初始配置时,请使用不会应用组策略配置的设备,以确保更改不会被重写。

可以将 PowerShell 谓词 GetSet 与 cmdlet ProcessMitigation 一起使用。 使用 Get 将列出设备上已启用的任何缓解措施的当前配置状态 - 添加 -Name cmdlet 和应用 exe 以仅查看该应用的缓解措施:

Get-ProcessMitigation -Name processName.exe

重要

尚未配置的系统级缓解措施将显示 NOTSET 状态。

对于系统级别设置,NOTSET 表示已应用该缓解措施的默认设置。

对于应用级别设置,NOTSET 表示将应用缓解措施的系统级别设置。

每个系统级缓解措施的默认设置都可在 Windows 安全中心查看。

使用 Set 以以下格式配置每个缓解措施:

Set-ProcessMitigation -<scope> <app executable> -<action> <mitigation or options>,<mitigation or options>,<mitigation or options>

其中:

  • <范围>:
    • -Name 表示应将缓解措施应用于特定应用。 在此标志之后指定应用的可执行文件。
    • -System 表示应在系统级别应用缓解措施
  • <操作>:
    • -Enable 以启用缓解措施
    • -Disable 以禁用缓解措施
  • <缓解措施>:
    • 下面的 缓解 cmdlet 表 中定义的缓解措施 cmdlet,以及任何子选项(用空格括起)。 每个缓解措施用逗号隔开。

例如,若要在文件夹 C:\Apps\LOB\tests 中使用 ATL thunk 仿真和名为 testing.exe 的可执行文件启用数据执行防护 (DEP) 缓解,并防止该可执行文件创建子进程,可以使用以下命令:

Set-ProcessMitigation -Name c:\apps\lob\tests\testing.exe -Enable DEP, EmulateAtlThunks, DisallowChildProcessCreation

重要

用逗号隔开每个缓解措施选项。

如果要在系统级别应用 DEP,请使用以下命令:

Set-Processmitigation -System -Enable DEP

若要禁用缓解,可以将 -Enable 替换为 -Disable。 但是,对于应用级缓解措施,此将强制仅对该应用禁用缓解。

如果需要将缓解还原回系统默认值,则还需要包括 -Remove cmdlet,如以下示例所示:

Set-Processmitigation -Name test.exe -Remove -Disable DEP

还可以将一些缓解设置为审核模式。 请使用下面的 缓解 cmdlet 表 中指定的 审核模式 cmdlet,而不是使用 PowerShell cmdlet 进行缓解。

例如,若要在审核模式下为之前使用的 testing.exe 启用任意代码防护 (ACG),请使用以下命令:

Set-ProcessMitigation -Name c:\apps\lob\tests\testing.exe -Enable AuditDynamicCode

可以使用相同的命令禁用审核模式,但将 -Enable 替换为 -Disable

PowerShell 参考表

下表列出了可用于配置每个缓解措施的 PowerShell cmdlet (和关联的审核模式 cmdlet)。

缓解 适用对象 PowerShell cmdlet 审核模式 cmdlet
控制流保护 (CFG) 系统和应用级别 CFG、StrictCFG、SuppressExports 审核不可用
数据执行保护(DEP) 系统和应用级别 DEP、EmulateAtlThunks 审核不可用
强制图像随机化(强制 ASLR) 系统和应用级别 ForceRelocateImages 审核不可用
随机内存分配(由下而上 ASLR) 系统和应用级别 BottomUp、HighEntropy 审核不可用
验证异常链(SEHOP) 系统和应用级别 SEHOP、SEHOPTelemetry 审核不可用
验证堆完整性 系统和应用级别 TerminateOnError 审核不可用
任意代码防护(ACG) 仅限应用级别 DynamicCode AuditDynamicCode
阻止低完整性图像 仅限应用级别 BlockLowLabel AuditImageLoad
阻止远程图像 仅限应用级别 BlockRemoteImages 审核不可用
阻止不受信任的字体 仅限应用级别 DisableNonSystemFonts AuditFont、FontAuditOnly
代码完整性防护 仅限应用级别 BlockNonMicrosoftSigned、AllowStoreSigned AuditMicrosoftSigned, AuditStoreSigned
禁用扩展点 仅限应用级别 ExtensionPoint 审核不可用
禁用 Win32k 系统调用 仅限应用级别 DisableWin32kSystemCalls AuditSystemCall
不允许子进程 仅限应用级别 DisallowChildProcessCreation AuditChildProcess
导出地址筛选(EAF) 仅限应用级别 EnableExportAddressFilterPlus、EnableExportAddressFilter [1] 审核不可用[2]
导入地址筛选(IAF) 仅限应用级别 EnableImportAddressFilter 审核不可用[2]
模拟执行(SimExec) 仅限应用级别 EnableRopSimExec 审核不可用[2]
验证 API 调用(CallerCheck) 仅限应用级别 EnableRopCallerCheck 审核不可用[2]
验证处理使用情况 仅限应用级别 StrictHandle 审核不可用
验证映像依赖项完整性 仅限应用级别 EnforceModuleDepencySigning 审核不可用
验证堆栈完整性(StackPivot) 仅限应用级别 EnableRopStackPivot 审核不可用[2]

[1]:使用以下格式为进程启用 dll 的 EAF 模块:

Set-ProcessMitigation -Name processName.exe -Enable EnableExportAddressFilterPlus -EAFModules dllName1.dll,dllName2.dll

[2]:无法通过 PowerShell cmdlet 对此缓解措施进行审核。

自定义通知

有关在触发了规则并阻止应用或文件时自定义通知的详细信息,请参阅 Windows 安全中心

另请参阅

提示

想要了解更多信息? Engage技术社区中的 Microsoft 安全社区:Microsoft Defender for Endpoint技术社区