来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] Detours修改段属性漏洞受影响的软件及系统Detours3 0和之前版本简介这个问题将其定位为一个漏洞可能不太合适,更可能是Detours的一个BUG,但是因为该缺陷会造成漏洞利用变得容易,因此...
Detours 修改段属性漏洞
受影响的软件及系统 Detours3.0 和之前 版本
简介 这个问题将其定位为一个漏洞可能不太合适,更可能是 Detours 的一个 BUG ,但是因为该缺陷会造成漏洞利用变得容易,因此将其定义为漏洞。其主要问题就是Detours 在使用过程中会将之前的可执行 段修改 为可写,但是修改完之后,没有将段属性修改回来。
漏洞危害 一些安全软件出于安全考虑,会把安全模块注入到 IE , Office 等软件里面,而很多注入模块里面使用 Detours 库对系统 API 进行 Hook 操作, Detours 库进行Hook 操作时( DetourAttachEx 函数)会将相关模块的 PE 头(具体是 DosHeader,不可写段)修改为可写可读可执行,然后写入一些特殊数据,但是后面没有修改成原始属性。这样就会破坏这些模块的段属性,造成一些其它漏洞利用时降低了绕过 DEP 的难度。
漏洞原理 Detours 进行 Inline Hook 操作时,会在相关模块 PE 头的 DosHeader 里面写入一个特殊的 Detours! 字符串(用于标识该模块被 Hook 过)。因为一般DosHeader 是不可写的,因此 Detours 会先把该处修改为可写可读可执行属性,然后再修改。
但是改完之后, Detours 并没有恢复这块内存的原始属性,这样就导致这块内存一直处于可写可读可执行属性。这样问题就产生了。 可以调试下 IE 试试,一般来说 IEXPLORE 模块本身不会被 Hook ,我们看看它的基址的内存属性。 0:040> lm start end module name 00f50000 01016000 IEXPLORE (deferred) 0:040 > ! address00f50000 Failed to map Heaps (error 80004005) Usage: Image Allocation Base: 00f50000 Base Address: 00f50000 End Address: 00f51000 Region Size: 00001000 Type: 01000000 MEM_IMAGE State: 00001000 MEM_COMMIT Protect: 00000002 PAGE_READONLY More info: lmv m IEXPLORE More info : ! lmi IEXPLORE More info: ln 0xf50000
而 mshtml 则是安全软件最喜欢 Hook 的模块,看看它的基址的内存属性。 0:040> lmvm mshtml start end module name 63d70000 64df3000 MSHTML (deferred) Image path:C:\windows\system32\MSHTML.dll Image name: MSHTML.dll Timestamp: ThuJun 19 08:14:41 2014 (53A22B71) CheckSum : 010838FF ImageSize : 01083000 File version: 11.0.9600.17207 Product version: 11.0.9600.17207 File flags: 0 (Mask3F) File OS: 40004 NT Win32 File type: 2.0 Dll File date: 00000000.00000000 Translations: 0409.04b0 CompanyName : MicrosoftCorporation ProductName : InternetExplorer InternalName : MSHTML OriginalFilename :MSHTML.DLL ProductVersion : 11.00.9600.17207 FileVersion : 11.00.9600.17207(winblue_gdr_escrow.140618-1157) FileDescription : Microsoft (R) HTML Viewer LegalCopyright : © Microsoft Corporation. Allrights reserved. 0:040 > ! address63d70000 Usage: Image Allocation Base: 63d70000 Base Address: 63d70000 End Address: 63d71000 Region Size: 00001000 Type: 01000000 MEM_IMAGE State: 00001000 MEM_COMMIT Protect: 00000040 PAGE_EXECUTE_READWRITE More info: lmv m MSHTML More info : ! lmi MSHTML More info: ln 0x63d70000
问题很明显吧! 有源代码,修改也很容易啦,一句代码的事情,把它的原始属性通过VirtualProtect 恢复即可。
修改完之后,大家可以再调试看看,是不是属性变成了 PAGE_READONLY ,留给大家去尝试吧。
参考文档 [1] Detours http://research.microsoft.com/en-us/projects/detours/ |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com