Windows 10 Fall Creators Update安全新特性之WDEG

本文对Windows 10 Fall Creators Update更新中的新安全特性WDEG进行介绍,并分析其中攻击防护功能的实现。

一、概述

微软于2017年10月17日正式发布了Windows 10的新版本Fall Creators Update(RS3)。

在此次更新中,微软将其缓解工具集EMET(The Enhanced Mitigation Experience Toolkit)的功能集成到操作系统中,推出了WDEG(Windows Defender Exploit Guard)。

WDEG主要实现以下四项功能:

  • 攻击防护(Exploit protection

通过应用缓解技术来阻止攻击者利用漏洞,可以应用于指定的程序或者系统中所有的程序。

  • 攻击面减少(Attack surface reduction

通过设置智能规则来减少潜在的攻击面,以阻止基于Office应用、脚本、邮件等的攻击。

  • 网络保护(Network protection

扩展Windows Defender SmartScreen的范围,为所有网络相关的操作提供基于信誉的防护。

  • 受控制文件夹的访问(Controlled folder access

协助保护系统中的重要文件,使其不会被恶意软件(尤其是加密文件的勒索软件)修改。

二、攻击防护

攻击防护功能由系统的缓解措施与EMET的增强功能发展而来,通过阻止漏洞利用中的关键技术来进行防护。

2.1 设置

攻击防护可以通过Windows Defender安全中心进行设置:

攻击防护的设置有系统设置与程序设置两类:

2.1.1 系统设置

系统设置用于设置全局性的策略,包含以下项目:

  • 控制流保护(CFG

确保间接调用的控制流完整性。

默认设置为打开。

  • 数据执行保护(DEP

阻止代码从仅数据内存页中运行。

默认设置为打开。

  • 强制映像随机化(强制性ASLR

强制重定位未用/DYNAMICBASE编译的映像。

默认设置为关闭。

  • 随机化内存分配(自下而上ASLR

随机化虚拟内存分配位置。

默认设置为打开。

  • 验证异常链(SEHOP

确保调度期间异常链的完整性。

默认设置为打开。

  • 验证堆完整性

检测到堆损坏时终止进程。

默认设置为打开。

2.1.2 程序设置

程序设置用于对特定程序进行自定义设置,包含以下项目:

  • 任意代码保护(ACG

阻止非映像支持的可执行代码和代码页修改。

可选设置有:允许线程退出、审核。

  • 阻止低完整性映像

阻止加载标记低完整性的映像。

可选设置有:审核。

  • 阻止远程映像

阻止从远程设备加载映像。

可选设置有:审核。

  • 阻止不受信任的字体

阻止加载系统字体目录中未安装的任何基于GDI的字体。

可选设置有:审核。

  • 代码完整性保护

只允许加载由Microsoft签名的映像。

可选设置有:同时允许加载由Windows应用商店签名的映像、审核。

  • 控制流保护(CFG

确保间接调用的控制流完整性。

可选设置有:使用严格CFG。

  • 数据执行保护(DEP

阻止代码从仅数据内存页中运行。

可选设置有:启用ATL形式转换模拟。

  • 禁用扩展点

禁用各种允许DLL注入到所有进程的可扩展机制,如窗口挂接。

  • 禁用Win32k系统调用

阻止程序使用Win32k系统调用表。

可选设置有:审核。

  • 不允许子进程

阻止程序创建子进程。

可选设置有:审核。

  • 导出地址筛选(EAF

检测由恶意代码解析的危险导出函数。

可选设置有:验证通常被攻击滥用的模块的访问权限、审核。

  • 强制映像随机化(强制性ASLR

强制重定位未用/DYNAMICBASE编译的映像。

可选设置有:不允许去除的映像。

  • 导入地址筛选(IAF

检测由恶意代码解析的危险导入函数。

可选设置有:审核。

  • 随机化内存分配(自下而上ASLR

随机化虚拟内存分配位置。

可选设置有:不使用高熵。

  • 模拟执行(SimExec

确保对敏感函数的调用返回到合法调用方。

可选设置有:审核。

  • 验证API调用(CallerCheck

确保由合法调用方调用敏感API。

可选设置有:审核。

  • 验证异常链(SEHOP

确保调度期间异常链的完整性。

  • 验证句柄使用情况

对任何无效句柄引用引发异常。

  • 验证堆完整性

检测到堆损坏时终止进程。

  • 验证映像依赖项完整性

对Windows映像依赖项加载强制执行代码签名。

可选设置有:审核。

  • 验证堆栈完整性(StackPivot

确保未对敏感函数重定向堆栈。

可选设置有:审核。

  • 实现
    • 加载系统设置

攻击防护的系统设置保存在注册表中HKLM\System\CurrentControlSet\Control\Session Manager\kernel项下:

系统启动时,在初始化过程中会调用nt!CmGetSystemControlValues函数来获取注册表中保存的设置:

其中,MitigationOptions的值保存到nt!PspSystemMitigationOptions中,MitigationAuditOptions的值保存到nt!PspSystemMitigationAuditOptions中:

2.2.2 加载程序设置

攻击防护的程序设置保存在对应程序的IFEO(Image File Execution Options)项中:

系统创建新的进程时,将调用nt!PspAllocateProcess函数:

nt!PspAllocateProcess函数调用nt!PspReadIFEOMitigationOptions函数以及nt!PspReadIFEOMitigationAuditOptions函数来读取IFEO中保存的程序设置:

2.2.3 应用设置

然后,nt!PspAllocateProcess函数调用nt!PspInheritMitigationOptions函数合并系统设置与程序设置,得到需要应用的设置:

最后,nt!PspAllocateProcess函数调用nt!PspApplyMitigationOptions函数来应用设置:

nt!PspApplyMitigationOptions根据MitigationOptions与MitigationAuditOption的值来设置EPROCESS的MitigationFlags与MitigationFlags2对应的标志位:

MitigationFlags对应系统的缓解措施,设置对应的标志位之后即可生效。

MitigationFlags2对应增强的缓解措施,需要加载动态库PayloadRestrictions.dll来实现。

 

2.2.4 加载Payload Restriction

完成进程创建之后,将调用ntdll.dll的LdrInitializeThunk函数进行初始化。

初始化过程中,将逐步调用到ntdll!LdrpInitializeExecutionOptions函数:

ntdll!LdrpInitializeExecutionOptions函数检查PEB的NtGlobalFlag是否设置了FLG_HEAP_PAGE_ALLOCS或FLG_APPLICATION_VERIFIER标志位,同时调用ntdll!LdrpPayloadRestrictionMitigationsEnabled函数来判断是否启用了Payload Restriction的缓解措施:

满足任一条件时,将调用ntdll!LdrpInitializeApplicationVerifierPackage函数来初始化ApplicationVerifier;后者将调用ntdll!AvrfMiniLoadDll函数来加载动态库verifier.dll:

verifier.dll进行初始化时,将调用verifier!MitLibInitialize函数:

verifier!MitLibInitialize函数完成动态库PayloadRestrictions.dll的加载:

2.2.5 应用Payload Restriction

PayloadRestrictions.dll进行初始化时,将调用ntdll!LdrRegisterDllNotification函数来注册回调函数PayloadRestrictions!MitLibDllNotification:

此后加载、卸载模块时,系统会调用PayloadRestrictions!MitLibDllNotification函数进行通知:

加载模块时,PayloadRestrictions!MitLibHandleDllLoadEvent为该模块注入相应的防护机制:

三、攻击面减少

攻击面减少用于阻止Office应用、脚本、邮件的一些特性被攻击者滥用,包括:

  • 在Office应用或Web Mail中执行程序或脚本来下载或执行文件;
  • 执行混淆的可疑脚本;
  • 其他在正常的日常工作中不太可能出现的行为;

攻击面减少可以通过组策略编辑器来设置,其路径为“计算机配置 > 管理模板 > Windows组件 > Windows Defender防病毒程序 > Windows Defender攻击防护 > 攻击面减少”:

攻击面减少规则由GUID来标识,启用后可以设置每个规则的状态(1表示阻止,0表示关闭,2表示审核)。

目前支持的规则如下:

规则ID 说明
BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550 阻止从邮件中执行内容
D4F940AB-401B-4EFC-AADC-AD5F3C50688A 阻止Office应用创建子进程
3B576869-A4EC-4529-8536-B80A7769E899 阻止Office应用创建可执行内容
75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84 阻止Office应用向其他进程注入代码
D3E037E1-3EB8-44C8-A917-57927947596D 阻止脚本执行下载的内容
5BEB7EFE-FD9A-4556-801D-275E5FFC04CC 阻止执行混淆的脚本
92E97FA1-2EDF-4476-BDD6-9DD0B4DDDC7B 阻止在宏中调用Win32 API

 

同时,可以指定从上述规则中排除的文件和路径:

攻击面减少的规则保存在注册表中

HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{EE798E8D-335D-4D47-9C4B-ECDF73662A1F}Machine\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\Rules项下。

四、网络保护

网络保护通过阻止任意程序访问危险的网站(可能包含钓鱼诈骗、漏洞利用等恶意内容)来减少基于网络的攻击面。

网络保护扩展了Windows Defender SmartScreen的范围,将阻断全部试图连接低信誉目标的HTTP / HTTPS流量。

网络保护可以通过组策略编辑器来设置,其路径为“计算机配置 > 管理模板 > Windows组件 > Windows Defender防病毒程序 > Windows Defender攻击防护 > 网络保护”:

网络保护的规则保存在注册表中

HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{EE798E8D-335D-4D47-9C4B-ECDF73662A1F}Machine\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ Network Protection项下。

五、受控制文件夹的访问

受控制文件夹的访问用于阻止恶意应用(如勒索软件)修改重要的文件,只有Windows Defender防病毒程序评估为安全的应用才被允许修改受控制文件夹中的文件。

受控制文件夹的访问可以通过组策略编辑器来设置,其路径为“计算机配置 > 管理模板 > Windows组件 > Windows Defender防病毒程序 > Windows Defender攻击防护 > 受控制文件夹的访问”:

 

可以通过配置允许的应用程序,将受信任的程序加入白名单:

缺省情况受保护的只有系统文件夹,可以通过配置受保护的文件夹来添加应该受到该功能保护的文件夹:

受控制文件夹的访问的规则保存在注册表中

HKCU\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{EE798E8D-335D-4D47-9C4B-ECDF73662A1F}Machine\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ Controlled Folder Access项下。

 

六、总结

Windows 10 Fall Creators Update更新中的WDEG提供了全面而强大的漏洞利用防护功能。

然而,安全与便捷往往不可兼得,为了不过多的影响用户体验,WDEG中的许多功能缺省并未开启。

系统管理员应当根据其实际情况来设置组策略,以便更好的利用WDEG来进行防护。

Spread the word. Share this post!

Meet The Author

Leave Comment