首页 > 代码库 > Detours改动段属性漏洞

Detours改动段属性漏洞

<style>v:* { } o:* { } w:* { } .shape { }</style><style>p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" } p.MsoHeader,li.MsoHeader,div.MsoHeader { margin: 0cm; margin-bottom: .0001pt; text-align: center; border: none; padding: 0cm; font-size: 9.0pt; font-family: "Calibri", "sans-serif" } p.MsoFooter,li.MsoFooter,div.MsoFooter { margin: 0cm; margin-bottom: .0001pt; font-size: 9.0pt; font-family: "Calibri", "sans-serif" } a:link,span.MsoHyperlink { color: blue; text-decoration: underline } a:visited,span.MsoHyperlinkFollowed { color: purple; text-decoration: underline } p.MsoAcetate,li.MsoAcetate,div.MsoAcetate { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 9.0pt; font-family: "Calibri", "sans-serif" } span.Char { } span.Char0 { } span.Char1 { } span.SpellE { } span.GramE { } .MsoChpDefault { } div.WordSection1 { }</style><style>table.MsoNormalTable { font-size: 10.5pt; font-family: "Calibri", "sans-serif" }</style>

Detours改动段属性漏洞

受影响的软件及系统

Detours3.0和之前版本号

简单介绍

这个问题将其定位为一个漏洞可能不太合适,更可能是Detours的一个BUG,可是由于该缺陷会造成漏洞利用变得easy,因此将其定义为漏洞。其主要问题就是Detours在使用过程中会将之前的可运行段改动为可写,可是改动完之后,没有将段属性改动回来。

漏洞危害

一些安全软件出于安全考虑。会把安全模块注入到IEOffice等软件里面。而非常多注入模块里面使用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> lmvmmshtml

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

问题非常明显吧!

有源码,改动也非常easy啦,一句代码的事情,把它的原始属性通过VirtualProtect恢复就可以。

技术分享

改动完之后。大家能够再调试看看,是不是属性变成了PAGE_READONLY。留给大家去尝试吧。

參考文档

 [1] Detours http://research.microsoft.com/en-us/projects/detours/

Detours改动段属性漏洞