来源:自学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