查看: 6441|回复: 0

Hacking Team持续追踪之IE 0day漏洞分析

[复制链接]
发表于 2015-7-17 16:47:28 | 显示全部楼层 |阅读模式
距离Hacking Team数据泄漏至今已经一周多了,越来越多有价值的东西渐渐的被大家从400G资料中挖掘出来。本周初,一个IE 0day在圈子内流传开来,这已经是从该组织泄漏的第7个漏洞了(其中有6个0day),幸运的是微软在本周的安全补丁中修补了这个漏洞,编号MS15-065。针对此漏洞,启明星辰ADLab根据获取的poc分析如下:
当页面加载时,IE浏览器会做两件与本漏洞相关的事情。
一是函数jscript9!InterpreterThunkEmitter::NewThunkBlock会调用jscript9!EmitBufferManager::NewAllocation函数。
1.png
该函数将会调用CustomHeap::Heap::Alloc分配一块内存这里的地址为07ab0000。
2.png
函数返回jscript9!InterpreterThunkEmitter::NewThunkBlock,此处将会对新分配的内存赋值,将需要执行的代码写入到堆上,经过一连串的拷贝、赋值和修改之后,当NewThunkBlock函数返回时新分配的内存已经布置好了。
3.png
二是维护两个对象:Js::FunctionBody(4d24120)和Js::ScriptFunction(4d18380)。
4.png
接着POC会运行到下面几句:
5.png
这几句会新建一个script对象,同时script的ScriptFunction和FunctionBody也会被创建。
6.png
接下来NativeCodeGenerator::CheckCodeGenThunk会被调用,该函数会找到FunctionBody+4处的函数指针并调用jscript9!Js::FunctionBody::EnsureDynamicInterpreterThunk这个函数。
这里EnsureDynamicInterpreterThunk做了很多事情,这些事主要是在函数GenerateDynamicInterpreterThunk中完成的。
7.png

函数里面值得注意的代码如上,调用GetNextThunk获取NextThunk,第一次获取失败,GetNextThunk会新建一块新的内存并将jit代码拷贝进去(4830000)。
8.png
并将新分配的4830000地址赋值给第二次创建的FunctionBody+4。
9.png
第二次GetNextThunk返回 07ab0000,所以第一个FunctionBody+4处的函数指针将被改为07ab0000。
10.png
当q1.parentNode.insertBefore(q2, q1)这句执行完成后,07ab0000这块内存将会被释放。
11.png
但是,此时FunctionBody+4处的指针仍旧是07ab0000。
12.png
之后CheckCodeGenDone被调用
jscript9!NativeCodeGenerator::CheckCodeGenDone:
6b29727e 8bff            mov     edi,edi
6b297280 55              push    ebp
6b297281 8bec            mov     ebp,esp
6b297283 83ec0c          sub     esp,0Ch
6b297286 8b4114          mov     eax,dword ptr [ecx+14h]
6b297289 53              push    ebx
6b29728a 56              push    esi
6b29728b 57              push    edi
6b29728c 8b7010          mov     esi,dword ptr [eax+10h]
……
6b496dc4 8b7e04          mov     edi,dword ptr [esi+4]
……
6b2472f8 8bc7            mov     eax,
13.png
看的出程序从代表了ScriptFunction的对象中取出了一个指向了FunctionBody的对象,而这个对象+4的偏移处正是已经释放的内存地址。
NativeCodeGenerator::CheckCodeGenThunk会将这个地址当作代码执行,因此导致漏洞产生。
14.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表