网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

Detours修改段属性漏洞 - 网站安全 - 自学php

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

添加评论