青青青国产依人在线观看视频_亚洲欧美一区二区骚虎_亚洲理论在线中文字幕a_无码a级毛片免费不卡

歡迎來到興華永恒!加入收藏設(shè)為首頁
您當(dāng)前所在位置:首頁 > 技術(shù)專欄 > 專業(yè)發(fā)布
技術(shù)專欄

針對CVE-2015-2545漏洞研究分析(下篇)


3.5.11 pNext指向填充構(gòu)造數(shù)據(jù)空間

觀察下一次循環(huán)的數(shù)據(jù)布局情況如`圖1`所示,`圖1`斷點(diǎn)<`EPSIMP32!RegisterPercentCallback+0x4664`>,經(jīng)過第一個(gè)call的時(shí)候,則key與value都被更改成了我們構(gòu)造好的數(shù)值如`圖2`所示,此時(shí)的`pNext`為0也就是下一次不用循環(huán)了,其中key和value都被賦值了我們之前構(gòu)造好的,其中的`0462e0b0`是之前釋放空間前的數(shù)據(jù),不是我們構(gòu)造的所帶的數(shù)據(jù),這個(gè)數(shù)據(jù)可以說是個(gè)泄露的地址;其中我們從eps文件格式上面或者動(dòng)態(tài)調(diào)試上面看也可以大概猜測 `00000500`為字符串類型

1491894008528077.png

圖1

2017-03-28_105259.png

圖2

3.5.12 構(gòu)造stirng類型長度為0x7ffffff及ROP PostScript代碼

為了快速定位位置,我們可以在相應(yīng)`memcopy`的位置下斷點(diǎn),這樣方便我們定位數(shù)據(jù)的位置,構(gòu)造出大小為0x7fffffff的可讀寫字符串空間。在該空間內(nèi)作任意讀寫操作,做后續(xù)的處理(ROP/SHELLCODE),其中shellcdoe pe copy大小為`0x00000430`,和`0x0001a010`大小,通過`bytesavailable`跑`ROP`,其中`ROP`是直接通過PostScript語法來搜索得到的如`圖2`所示。

1491894085904655.png

圖1(string類型字符串00000000-7ffffffff大小)

1491894122642750.png

圖2(搜索ROP鏈)

3.6 調(diào)試分析-ROP/SHELLCODE[第三個(gè)方向]

3.6.1 如何繞過EMET

Rop很簡單,直接單步跟蹤即可,指令都是EPSIMP32.FLT模塊中的指令,單步跟蹤觀察即可,如`圖1`所示,關(guān)于`0xd7`十進(jìn)制`215`為NtProctectVirtulMemory函數(shù)的調(diào)用號碼,可以通過`PChunter`這個(gè)軟件打開SSDT表即可,如`圖2,3`所示,這樣做是為什么呢?我們繼續(xù)往下面跟進(jìn)觀察如`圖4`所示,跑到了`ZwCreateEvent+5`的位置了,這個(gè)位置一看就是要3環(huán)進(jìn)0環(huán)的的地方,這就是繞過了EMET檢測,由于EMET在系統(tǒng)的關(guān)鍵API進(jìn)行了檢測也就是`mov eax,調(diào)用號`這里進(jìn)行了`jmp xxxx`檢測,所以樣本的做法為了繞過這個(gè)檢測,就需要找沒有被EMET hook的的函數(shù),正好,ZwCreteEvent沒有被hook那么就直接調(diào)用到這里來改我們的內(nèi)存保護(hù)。

1491894197835550.png

圖1

2017-03-28_151446.png

圖2

1491894243728314.png

圖3

1491894270450299.png

圖4

3.6.2 shellcode

Shellcode的功能主要為釋放一個(gè)plugin.dll并加載執(zhí)行。

4. POC/利用

關(guān)于POC,由于是forall中出現(xiàn)的問題,所以樣本出現(xiàn)問題的位置:dict{}forall,并且其中只有copy才會觸發(fā)漏洞所以POC的PostScript的語法是,這里列舉的是偽代碼。

 dict {dict1 dict2 copy....} forall

    ----------------------------------------------------------------------------------

    %%創(chuàng)建dict2并填充它

    %%幾個(gè)鍵值對

    / dict2 5 dict def

    dict2 begin

    / k1 1000 array def

    / k2 1000 array def

    ...

    dict2 end

    %%創(chuàng)建dict1并填充它

    %%一個(gè)鍵值對在k1

    / dict1 3 dict def

    dict1 begin

    / k1 1000 array def

    dict1 end

    %%在dict2上開始forall枚舉

    dict2 {

        dict1 dict2 copy

        .......

        0 <00000000ff0300000005000000000000000000002000e01303000000000000000000000044444444> putinterval

    } forall

4.2 簡易彈框

關(guān)于利用,縱觀已知網(wǎng)上的cve-2015-2545的樣本,用的利用方式都是在初期的樣本模塊上面進(jìn)行加以改造,所以只需要對其shellcode的方面進(jìn)行更改即可,`圖1`則為更改樣本彈出簡單的對畫框

<6A006A006A006A00B811EA2177FFD06A006AFFB8B51FFF75FFD090> putinterval

1491894531288704.png

圖1

5. Word插入EPS

Word在插入EPS格式文件之后,第一運(yùn)行完其目錄`wordmedia`中的`image1.eps`會變成`.wmf`格式文件,如果想每次都運(yùn)行完`.eps`之后不會變成`.wmf`格式的文件,需要通過修改壓縮包里面的一些內(nèi)容即可,如`圖1,2, 3`所示。

第一個(gè)文件:rels/document.xml 追加內(nèi)容:


<Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" 

Target="media/image1.eps"/<Relationship Id="rId9" 

Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" 

Target="ooxWord://word/media/image1.eps" TargetMode="External"/></Relationships>

   



圖1

第二個(gè)文件:world/document.xml 追加內(nèi)容:


<w:p><w:r><w:pict><v:shape style="width:1;height:1"><v:imagedata r:id="rId8" r:href="rId9"/></v:shape></w:pict></w:r></w:p>

   



圖2

第三個(gè)文件:[Content_Types].xml:


<Default ContentType="application/postscript" Extension="eps"/>

   

6.漏洞防護(hù)

分析都調(diào)試完成,明白其漏洞發(fā)生的位置,那么我們需要去防御cve-2015-2545漏洞,防御可以分為兩個(gè)方面來完成:

1.靜態(tài)防御(yara規(guī)則)
2.動(dòng)態(tài)防御

6.1 靜態(tài)防御

6.1.1 github yara

1.GitHub上面有關(guān)于cve-2015-2545的yara規(guī)則檢測,但是自己觀看了一下,可以看出規(guī)則寫的不像是針對eps/doc寫的,而是對dll,exe進(jìn)行的yara規(guī)則編寫,自己進(jìn)行測試,如下圖所示。

1491894834814679.png

圖1(未檢測出來樣本)

1491894879692938.png

圖2(檢測出來樣本生成的文件)

6.1.2 自己寫的yara

自己寫關(guān)于eps的文件的檢測,需要對其里面的eps文件規(guī)則進(jìn)行檢測,自己簡易寫的yara規(guī)則[針對的是EPS文件]如下`圖1`所示,檢測出來惡意構(gòu)造的EPS文件。

 /*

        Yara Rule Set

        Author: Boluo

        Date: 2017年3月28日19:16:16

        Identifier: CVE-2015-2545

    */

     

    /* Rule Set ----------------------------------------------------------------- */

     

    rule cve_2015_2545 : BASE

    {

        meta:

            description = "Check The EPS File"

            author = "Boluo"

            date = "2017年3月28日19:16:16"

            hash1 = "1f9b7d8e692a1c9fadbdd05b794e8c49502323b073b44becaae5eee5e2186fc4"

        strings:

            $s1 = {3C 30 30 30 30 30 30 30 30 66 66 30 33 30 30 30 30 30 33 30 30 30 30 30 30 30 30 30 30 

30 30 30 30 30 30 30 30 30 30 30 30 34 34 34 34 34 34 34 34 30 30 30 35 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30}

        condition:

            $s1

             

    }


 

1491895044848928.png

圖1(檢測eps文件為惡意)


6.2 動(dòng)態(tài)防御

動(dòng)態(tài)防御通過hook兩個(gè)點(diǎn)來進(jìn)行防御,第一個(gè)hook點(diǎn)的位置為`pNext`進(jìn)入PROC前其中0x28的內(nèi)容保存一下,第二個(gè)hook點(diǎn)的位置為`pNext`在進(jìn)入PROC后中0x28的內(nèi)容是否發(fā)生變化進(jìn)行hook,之后進(jìn)行比較其內(nèi)容進(jìn)行判斷即可,之所以不能在循環(huán)遍歷刪除的位置檢測是因?yàn)镻ostScript中只要`dict1 dict2 copy`都會先把dict2的內(nèi)容全部釋放掉然后再申請空間,不能直觀判斷是否為cve-2015-2545類型漏洞樣本,在釋放空間的位置進(jìn)行檢測相當(dāng)于給其打了補(bǔ)丁而不能直觀檢測為cve-2015-2545類型漏洞;測試結(jié)果如下圖所示。

1491895108430984.png

圖1(動(dòng)態(tài)檢測)

7. 結(jié)語

該漏洞及利用樣本的威脅程度非常高,可以在多種環(huán)境下成功利用,并且其構(gòu)造的ROP鏈及shellcode能夠繞過多款安全性增強(qiáng)工具的檢測。所以需要做好防范工作。

8.參考資料

1.http://seclab.dbappsecurity.com.cn/?p=603
2.http://bbs.pediy.com/thread-216045.htm
3.http://bbs.pediy.com/thread-216046.htm
4.https://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf
5.https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/twoforonefinal.pdf
6.https://github.com/Yara-Rules/rules/tree/master/CVE_Rules
7.https://wenku.baidu.com/view/55adb37c8e9951e79b8927ed.html
*本文為 華興永恒安全團(tuán)隊(duì)發(fā)布,如若轉(zhuǎn)載,請注明來源于:miantirepression.org
在線咨詢 周一至周五
09:00-18:00