返回首页

微信公众号

5.1 漫谈 Win10 漏洞利用防护

引子:Windows 操作系统的发展历程也符合既有的规律,即初期攻强守弱,中期攻守焦灼,后期防守方占优。

英文链接: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

下面的内容将详细介绍 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

这些防护方案的主要目标是:

  • 减小 Windows 系统的攻击面
  • 消除现有的漏洞利用技术
  • 通过隔离机制弱化漏洞的影响
  • 增加漏洞利用开发的难度和代价

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册