首页
论坛
专栏
课程

分享:
# Memory Garbage Collector Memory Garbage Collector简称MemGC是Edge浏览器新引入的一种内存管理机制,本质上是一种标记清除法GC。 MemGC也可以说是继承自IE的一种机制,在IE时代存在类似功能的Memory Protector。Memory Protector对我们来说有更通俗的名字:延迟释放(Deferred Free)。 在介绍MemGC之前先介绍一下延迟释放和隔离堆,首先这两个缓解机制都是为了应对UAF漏洞推出来的,加入IE的时候是在14年6月7月。我们知道14年这个时间点正是IE浏览器各种UAF大爆发的时候,根据我考古的结果来看,这两个缓解措施刚推出的时候对漏洞利用的影响还是很大的。之前可利用漏洞占总数的10%到15%,加入缓解措施后降到了2%到3%。 ## 隔离堆 首先介绍一下隔离堆(Isolated Heap),通俗的说隔离堆就是把一些关键的对象放在一个独立的堆里进行分配释放。之所以要这样做是因为在进行UAF漏洞的利用时一般都采用占位的操作,如果发生UAF的对象处于一个独立的堆的话那么攻击者就不能进行占位从而难以利用了。 ![1E39AC39-5FCD-4B7A-B7E9-BAA17EF364A0.png-66.8kB][1] 在隔离堆中分配的一般是DOM对象,比如HTML元素CElement对象、SVG元素CSVGElement对象、以及CTreeNode、CMarkup、CTreePos等。 隔离堆的实现方式其实很简单,就是在dll初始化时调用HeapCreate新建一个堆区域,之后在分配的时候均使用这个堆句柄进行分配。 ![B2026FDA-2C8C-4AC8-AC76-7312A15C07A4.png-208.4kB][2] 上图中的g_hIsolatedHeap即是隔离堆的句柄。 同时,为了支持隔离堆分配也增加了一个新的函数 ![](http://blog.trendmicro.com/trendlabs-security-intelligence/files/2014/06/figure3_isolateheap.png) ## 延迟释放 以往一个对象不再使用需要释放的时候会调用HeapFree函数进行释放,但是当延迟释放机制加入之后对象释放会转而调用CMemoryProtector::ProtectedFree。并且调用这个函数并不会真的引起内存的释放,而是把这些欲释放的内存加入数组中统一管理。 ![QQ20180329-185206@2x.png-406.4kB][3] 以往,我们想要在IE中触发回收可能只需要在js中调用CollectGarbage(),但是在延迟释放的情况下调用这个函数不会立即引起释放。只有当待释放块的总大小达到10w字节时才会触发真正的回收操作。 ![QQ20180329-191528@2x.png-317.5kB][4] 并且更重要的是,如果触发了延迟释放,在释放过程中会做一个标记清除的操作。即遍历目标栈中指针,因为栈中存在指针说明这些内存块仍有可能被使用所以会对它们进行标记,之后在释放数组中管理的内存块时不会释放这些具有标记的内存块。我们知道UAF漏洞正是因为存在着悬垂指针导致的,延迟释放可以缓解一些UAF漏洞的发生。 ## MemGC MemGC的基本思想与Memory Protector相似,都是利用类似标记清除法的GC去缓解UAF类型的漏洞,并且MemGC在MP的基础上进行了加强。当MP要实际释放内存块时会进行标记,如果栈中存在指向这个内存块指针那么就不会进行释放。不过,MP没有保护堆中的指针,可能存在堆上的悬垂导致UAF的情况。MemGC改进了这一点,同时检测栈和堆中的指针,进一步阻断的UAF漏洞的可能性。此外MemGC实际上是实现在chakra.dll中,并且与Chakra GC使用同一套机制。 关于MemGC的细节推荐看一下zenhumany的议题《Microsoft Edge MemGC Internals》 ## Reference https://0x.557.im/swan/201407/16_12.html 《IE 11 0day & Windows 8.1 Exploit》 exp-sky https://blog.trendmicro.com/trendlabs-security-intelligence/isolated-heap-for-internet-explorer-helps-mitigate-uaf-exploits/ https://bromiumlabs.files.wordpress.com/2015/01/demott_uaf_migitation_and_bypass2.pdf [1]: http://static.zybuluo.com/vbty/0pd2xaw5j1sn7pehxpn6nxtc/1E39AC39-5FCD-4B7A-B7E9-BAA17EF364A0.png [2]: http://static.zybuluo.com/vbty/1pxjqsspybo2bwtv7ueql172/B2026FDA-2C8C-4AC8-AC76-7312A15C07A4.png [3]: http://static.zybuluo.com/vbty/r2w73joxldxm6kv2xhwflwcg/QQ20180329-185206@2x.png [4]: http://static.zybuluo.com/vbty/j4gcgroziszsx540e8w29fp5/QQ20180329-191528@2x.png

上一篇 :
下一篇 :
讨论 (1)
daowang 2018-5-29
 举报
好像还有其他的防御机制,比如Nozzle  &  BuBBle,能完整介绍一下吗,大神
沪ICP备16048531号-1
沪公网安备 31011502006611号