Edge新增安全机制—MemGC

2015年7月份,随着Windows 10的发布,Edge浏览器也备受关注。下面,笔者就向大家详细介绍下Edge独有的安全机制 — MemGC。

一、MemGC简介

MemGC(Memory Garbage Collector):内存垃圾收集器,是Edge的内存管理机制,由IE11的Memory Protector改进而来,首次在EdgeHTML和MSHTML中使用。Edge使用MemGC来管理DOM和DOM支持的对象,其采用标记清除(Mark-Sweep)算法对垃圾进行回收,能够阻止部分UAF漏洞。

二、MemGC的工作流程

MemGC的工作流程分为三步:分配(Allocate)、释放(Free)和标记清除(Mark-Sweep)。

1、分配(Allocate)

MemGC为其管理的对象分配内存:MemGC首先在堆中找到合适的bucket,然后在bucket所指向的内存块block中分配一个小的数据块chunk给它,并将这个分配的chunk标记为root,如图1所示。

1
图1  MemGC为其管理的对象分配内存

2、释放(Free)

当对象被释放时,为其分配的chunk的root标记被清除,此时,这个chunk成为垃圾回收的候选者,如图2所示。

2
图2  释放的chunk成为垃圾回收的候选者

值得指出的一点是:此处虽然清除了chunk的root标记,但并未真正释放chunk,其他对象不能使用这个chunk。

3、标记清除(Mark-Sweep)

(1)标记Mark

当被释放的chunk逐渐增多,达到特定的阈值,将触发垃圾回收机制。

3

图3  释放的chunk达到阈值

此时,除了待回收的chunk,还有未被释放的对象所占用的chunk,即标记为root的chunk(如图4所示),MemGC将全部进行扫描标记。首先,MemGC会将所有chunk的标志位清除。其次,将标有root的chunk进行标记。接着扫描寄存器、堆栈以及标有root的chunk,若在扫描中发现被引用的chunk,则将其标记。
4

图4  标记开始时,还有标有root的chunk

5
图5  MemGC首先将标有root的chunk标记

6
图6  MemGC将仍被引用的chunk标记

(2)清除Sweep

如图7所示,当标记完成时,MemGC将回收未被标记的chunk,可供再次分配利用,此时,所有被申请对象释放且没有被其他未free的对象所引用的chunk才真正被回收利用。
7

图7  MemGC回收未被标记的chunk

三、MemGC阻止UAF漏洞

1、什么是UAF漏洞

UAF(Use After Free):即释放后使用。CWE 给出的定义是:引用一段被释放的内存可导致程序崩溃,或处理非预期数值,或执行若干指令。

如图8展示了一个简单UAF漏洞的示例,对象A引用了对象B,使用完后释放B,但未将指针赋值为NULL,此时,攻击者在B的空间内写入恶意代码,从而利用A去执行恶意代码。从图9中可以看出,UAF漏洞并不罕见。

8

图8  UAF的简单示例9

图9  普遍存在的UAF漏洞

2、MemGC如何阻止UAF漏洞

10

图10  MemGC阻止UAF漏洞

图10展示了MemGC是如何阻止UAF漏洞的:对象A申请了一个数据块,当释放这个数据块时,若还有其他对象引用这个数据块,那么MemGC不会回收利用,其他程序无法将数据写入这个数据块,从而阻止了UAF漏洞的利用;若没有其他对象引用这个数据块,就不存在UAF漏洞了。

总结

微软在Windows 10系统中放弃了一直以来的IE浏览器,推出一款新的浏览器Edge。Edge浏览器不仅在功能和性能方面有了很大提高,在安全方面也做了很大改善,文中介绍的MemGC内存管理机制就是Edge在安全方面的一个典型代表,它能够阻止部分UAF漏洞,大大提高了Edge的安全性。

参考文章

  1. https://blogs.windows.com/msedgedev/2015/05/11/microsoft-edge-building-a-safer-browser/
  2. https://securityintelligence.com/memgc-use-after-free-exploit-mitigation-in-edge-and-ie-on-windows-10/
  3. http://blog.trendmicro.com/trendlabs-security-intelligence/windows-10-sharpens-browser-security-with-microsoft-edge/
  4. us-15-Yason-Understanding-The-Attack-Surface-And-Attack-Resilience-Of-Project-Spartans-New-EdgeHTML-Rendering-Engine-wp.pdf
  5. Microsoft Edge MemGC Internals.pptx