CVE-2015-1641及利用樣本分析
1.本文一共1920個字 58張圖 預(yù)計(jì)閱讀時(shí)間12分鐘2.本文作者erfze 屬于Gcow安全團(tuán)隊(duì)復(fù)眼小組 未經(jīng)過許可禁止轉(zhuǎn)載3.本篇文章從CVE-2015-1641漏洞的分析入手 詳細(xì)的闡述漏洞的成因再分析Patchwork APT組織使用的該漏洞的樣本4.本篇文章一棟 十分適合漏洞安全研究人員 以及威脅分析人員進(jìn)行學(xué)習(xí)交流5.若文章中存在說得不清楚或者錯誤的地方 歡迎師傅到公眾號后臺留言中指出 感激不盡
0x01 漏洞描述
?漏洞成因:類型混淆漏洞。Word在處理displacedByCustomXml屬性時(shí)未對customXml標(biāo)簽對象進(jìn)行有效性驗(yàn)證,可以通過傳入其他標(biāo)簽對象,由類型混淆進(jìn)而達(dá)到任意內(nèi)存寫。故可以借由精心構(gòu)造的標(biāo)簽對象及對應(yīng)屬性值實(shí)現(xiàn)RCE。?影響版本:Microsoft Word 2007 SP3, Office 2010 SP2, Word 2010 SP2, Word 2013 SP1, Word 2013 RT SP1, Word for Mac 2011, Office Compatibility Pack SP3, Word Automation Services on SharePoint Server 2010 SP2 & 2013 SP1, Office Web Apps Server 2010 SP2 & 2013 SP1
0x02 漏洞分析
樣本信息及分析環(huán)境如下:
MD5:A69F778D1F511268019B1080F5E3B98B
OS版本:Windows 7 SP1(x86)
Word版本:2007
WWLIB.DLL版本:12.0.4518.1014
0x02.1 類型混淆—>任意地址寫
通過rtfobj查看該文檔的OLE對象:

手動提取出來2號對象存為一RTF文檔,Windbg附加Word 2007并打開該文檔,崩潰點(diǎn)如下:

之后將0號與2號對象提取出來存為一RTF文檔:

設(shè)斷bp wwlib!DllGetClassObject+0x50e6 ".if(ecx=7c38bd50){}.else{gc}":

待執(zhí)行call wwlib!DllGetClassObject+0x50fe前查看棧中參數(shù)如下:

通過rtfobj.py -s 2將2號對象存為一Word文檔,查看其word目錄下document.xml:

可以看到smartTag標(biāo)簽屬性值與棧中參數(shù)對應(yīng)關(guān)系。
根據(jù)微軟文檔,displacedByCustomXml屬性指定替換標(biāo)簽應(yīng)為customXml:

繼續(xù)跟進(jìn)分析,計(jì)算寫入地址:

計(jì)算公式為[[Parameter 1]+0x8]*[Parameter 2]+[[Parameter 1]+0xC]+[Parameter 1],具體參數(shù)值見圖5。直接步過該函數(shù),可以看到其結(jié)果與公式結(jié)果無異:

跟進(jìn),查看其memcpy傳遞參數(shù):


向0x7c38bd74地址處寫入0xffffe696,該值用于第二次計(jì)算Dst Address。
重新設(shè)斷bp wwlib!DllGetClassObject+0x50e6 ".if(ecx=7c38bd68){}.else{gc}",斷下之后跟進(jìn)到其計(jì)算Dst Address函數(shù):

可以看到[[Parameter 1]+0xC]為之前寫入值。第二次寫入覆蓋MSVCR71.DLL虛函數(shù)表中函數(shù)調(diào)用地址:

第三次寫入:

該值用于第四次計(jì)算Dst Address:

第四次寫入:

0x02.2 劫持執(zhí)行流
繼續(xù)向下執(zhí)行,崩潰點(diǎn)如下:

重新載入RTF文檔,于0x7c376fc4處設(shè)斷:


由上圖可知第二次內(nèi)存寫入——覆蓋MSVCR71.DLL虛函數(shù)表中函數(shù)調(diào)用地址,第四次內(nèi)存寫入——覆蓋傳遞參數(shù)。
將1號對象加入后存為RTF文檔,重新載入分析,bp 0x7c376fc8設(shè)斷:

可以看到堆噴布局如上,該布局由1號對象\word\activeX目錄中activeX1.bin完成:

根據(jù)其布局,不斷執(zhí)行ret,到0x7c3651EB處開始ROP鏈:

執(zhí)行VirtualProtect以繞過DEP保護(hù):

然后開始執(zhí)行activeX1.bin內(nèi)Shellcode部分:

0x02.3 Shellcode of activeX1.bin
遍歷當(dāng)前進(jìn)程中打開文件句柄,查找其Size符合如下條件的文件:

映射到內(nèi)存中:

通過文件頭與FEFEFEFE FEFEFEFE FFFFFFFF判斷是否為樣本文件及Shellcode起始位置:

復(fù)制Shellcode到VirtualAlloc開辟空間內(nèi),之后跳轉(zhuǎn)到第二部分Shellcode執(zhí)行。
0x02.4 Shellcode of RTF
解密后續(xù)Shellcode:

由ANY.RUN可見其后續(xù)行為(有興趣的讀者請自行下載樣本分析):

附
正常情況下,Word在解析customXml標(biāo)簽時(shí)會開辟一新空間:


而在解析smartTag時(shí):

故借此可以控制目標(biāo)寫入地址。
0x03 Patchwork組織某利用樣本分析
0x03.1 RTF文檔分析
MD5:2C22EA1CED258346351EAD09B1DC6074
查看OLE對象:

0號對象用以加載OTKLOADR.DLL以引入MSVCR71.DLL繞過ASLR;
1號對象用以完成堆噴及Shellcode布局;
2號對象用以觸發(fā)CVE-2015-1641漏洞,觸發(fā)點(diǎn)位于styles.xml中:

載入RTF文檔,bp 0x7c376fc8設(shè)斷,執(zhí)行ROP鏈后調(diào)用VirtualProtect更改內(nèi)存屬性,跳轉(zhuǎn)到Shellcode:

通過jmp+call+pop給傳參,解密后續(xù)Shellcode:

解密邏輯如下:

開辟內(nèi)存空間,復(fù)制加密Shellcode并解密:

通過call指令為函數(shù)傳遞參數(shù):

后續(xù)仍有數(shù)次解密Shellcode過程,不再一 一列出。于C:\Users\xxx\AppData\Roaming\Microsoft\Templates目錄下創(chuàng)建文件:

寫入文件內(nèi)容:

之后于相同目錄下創(chuàng)建~$Normal.dat并寫入內(nèi)容:


該文件具有隱藏屬性:

于HKEY_CURRENT_USER下創(chuàng)建注冊表項(xiàng):

設(shè)置注冊表鍵值:

刪除注冊表禁用項(xiàng):

后續(xù)將由wscript.exe執(zhí)行C:\Users\xxx\AppData\Roaming\Microsoft\Templates\Normal.domx,該文件實(shí)際為VBE格式:

可借由scrdec18工具解密:

0x03.2 Normal.domx分析
該文件本質(zhì)為VBE格式,可由wscript.exe正常加載。分析時(shí)需通過工具解密出VBS腳本。
讀取~$Normal.dat第一部分內(nèi)容并解密,寫入%USERPROFILE%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Word\PLAs_NEW_ORBAT.doc:

該文檔用于迷惑受害者:

之后釋放三個PE文件并設(shè)置隱藏屬性:

執(zhí)行MicroScMgmt.exe并刪除自身以及~$Normal.dat:

0x03.3 MicroScMgmt.exe分析
查看導(dǎo)入表:

該文件為帶有數(shù)字簽名的白文件:

其用于加載惡意DLL——jli.dll。
0x03.4 jli.dll分析
MD5:051573B9173DE6886E0575F81778EA03
查看其導(dǎo)出函數(shù):

該文件帶有無效簽名:

其與Patchwork組織之前使用過的BADNEWS木馬存在相似性,此處暫不展開分析。完整攻擊鏈如下:

0x04 參閱鏈接
?CVE-2015-1641 Word 利用樣本分析(https://paper.seebug.org/351/)?Microsoft Docs——displacedByCustomXml(https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/cc847826(v=office.14)?redirectedfrom=MSDN)?手把手教你如何構(gòu)造office漏洞EXP(第四期)(https://www.anquanke.com/post/id/85031)
