首页
论坛
课程
招聘
5.1 漫谈 Win10 漏洞利用防护
引子:Windows 操作系统的发展历程也符合既有的规律,**即初期攻强守弱,中期攻守焦灼,后期防守方占优。** 英文链接:[https://blogs.technet.microsoft.com/iftekhar/2017/08/28/threat-mitigation-in-windows-10/](https://blogs.technet.microsoft.com/iftekhar/2017/08/28/threat-mitigation-in-windows-10/) 过去,微软操作系统版本的发布间隔周期很长,在这段窗口期内,相应平台上的许多漏洞利用技术都得到了长足发展,但系统却没有提供任何的防护措施。 比如,一些现有的漏洞利用技术多年前还是不存在的。 多年前就存在的利用技术: - 堆栈溢出 - 返回地址覆盖 - Shellcode 后面发展的利用技术: - ARW(Arbitrary Read/Write) - 沙盒绕过 - 堆喷 - 内存破坏 - CFG 绕过 - ASLR 绕过 - DEP 绕过 - ROP Shellcode 鉴于此类威胁正不断增多,如果非要等上几年才能给出漏洞利用解决方案的话,那么这种情况就太不理想了,会使得用户和企业的系统处于风险之中。随着 Win10 的推出,系统每隔 6 个月就会发布新的功能和特性,从而压缩了漏洞利用的窗口期。 ![0](https://msdnshared.blob.core.windows.net/media/2017/08/image_thumb447.png) 下面的内容将详细介绍 Win10 中启用的那些安全缓解措施。 简单来说,Win10 中的防护功能实际上就是一堆特性,它们有助于缓解漏洞利用技术,并且使得漏洞的利用变得更加困难。 **1. User Mode Font Driver (UMFD)** Win10 在初始版本中就引入了 User Mode Font Driver 方案,主要用于实现隔离保护。原先字体的处理是在内核模式下完成的,相关的内存 bug 可以通过精心构造的字体文件来远程触发。而字体处理部分的代码都非常老了,而且还是由多位开发者编写的。启用 UMFD 保护后,字体会被放到用户模式下的 App Container 中进行处理,这实际上使得字体漏洞的利用不再有效,像利用字体漏洞来提权或者沙箱逃逸这些操作都变得不可能了。当然,还可以通过 ProcessFontDisablePolicy 函数禁止程序处理不被信任的字体。 **2. Win32k Syscall Filtering** Win32k 子系统是攻击者用于实现沙箱逃逸的首选目标组件。由于功能方面的关系,这个组件还是非常庞大的,图形显示功能大都是基于 Win32k 模块实现的,因此漏洞利用的攻击面自然也就多了,其中大约有 1200 个导出的 API。借助过滤方案,Edge 浏览器会维护所需的 Win32k API 列表,并且仅会允许页面处理过程中的调用,从而减小了攻击面。这些被过滤掉的 Win32k API 很可能会导致内存方面的错误。 **3. Less Privileged App Container (LPAC)** 在 App Container 中可访问的资源是受 ALL APPLICATION PACKAGES SID 保护的,其在默认情况下对所有的文件都具有读权限。而 LPAC 在此基础上进行了更严格的限制,默认是拒绝所有的访问,只有那些被 LPAC 认为是安全的对象才能进行访问。 **4. Structured Exception Handling Overwrite Protection (SEHOP)** 此特性旨在阻止借助 SEH(Structured Exception Handler)覆盖技术实现漏洞利用的 Exp。由于这种保护机制是在程序运行时提供的,因而不论编译时是否添加了此保护选项,系统都会为程序提供该保护。 **5. Address Space Layout Randomization (ASLR)** 通过 ASLR 保护,系统会对进程中加载的 DLL 模块起始地址进行随机化处理。一些特定 DLL 模块会被加载到可预测的地址空间上,该防护措施能够有效避免恶意程序对此进行的利用。 **6. Heap protections** Win10 包含了堆利用方面的防护,比如用于内部堆数据结构的 Heap metadata hardening 保护,还有 Heap allocation randomization 保护,即在堆分配时会对分配的起始地址和大小进行随机化处理,使得攻击者无法预测需要覆盖的堆内存地址。此外,在内存页面的前后会有 Tripwire,也就是 Heap guard pages 保护,如果攻击者试图向堆块之外的地址进行写入(如缓冲区溢出技术),那么就必须覆盖作为 Tripwire 的内存页,而对这些页面的修改会触发内存错误,系统会立即终止相关的程序。 **7. Kernel pool protections** Win10 也为内核中用到的 pool 提供了防护,例如,内核模式下的 DEP 和 ASLR 保护、避免 pool 被滥用的 safe unlinking 机制等。 **8. Control Flow Guard** CFG(Control Flow Guard)保护不需要我们对操作系统进行额外的配置,Microsoft Edge、IE11 和 Win10 中的其它功能都包含此特性。另外,在程序编译时会有相关的可选项,该特性可被应用于 C/C++ 编写的程序,或使用 Visual Studio 编译的程序。CFG 保护的作用是检测攻击者对程序执行流程的更改,如果出现这种情况,CFG 机制会终止程序的运行。 **9. Protected Processes** 借助 Protected Processes 特性,Win10 可阻止非信任进程与已验证进程间的交互。Protected Processes 机制为进程定义了不同的信任级别,不同信任级别间的进程禁止交互,从而避免信任级别高的进程被信任级别低的进程所攻击。该特性在 Win10 系统中被广泛使用,并且首次实现了将反恶意程序的解决方案应用到保护的进程中。 **10. Universal Windows apps protections** 当用户从 Windows 应用商店下载程序时,他们不太可能会碰到恶意软件,商店中的所有应用程序在提供下载前都经过了仔细的筛选,以确保其符合安全要求。 **11. No Child Proc** 攻击者可通过在沙盒中创建子进程来绕过各种防护措施,此特性能阻止这类攻击。 最后,我们给出 Win10 系统在各阶段特性更新中引入的保护措施示意图: ![1](https://msdnshared.blob.core.windows.net/media/2017/08/Pic_thumb1.png) 这些防护方案的主要目标是: - 减小 Windows 系统的攻击面 - 消除现有的漏洞利用技术 - 通过隔离机制弱化漏洞的影响 - 增加漏洞利用开发的难度和代价

上一节 :
下一节 :
章节评论 (0)
域名:加速乐 | SSL证书:亚洲诚信 | 安全网易易盾| 同盾反欺诈| 服务器:绿盟科技
©2000 - 2020 看雪学院 / 沪ICP备16048531号-1 / 沪公网安备 31011502006611号