您好,登錄后才能下訂單哦!
這篇文章給大家介紹NDAY漏洞CVE-2017-11882與0Day漏洞CVE-2018-0802漏洞組合傳播遠控木馬的示例分析,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
2018年1月9日,微軟發(fā)布了2018年1月份的安全補丁更新,其中較引人關(guān)注的Office遠程代碼執(zhí)行漏洞CVE-2018-0802。該漏洞為Office內(nèi)存破壞漏洞,影響目前流行的所有Office版本。攻擊者可以利用漏洞以當(dāng)前登錄的用戶的身份執(zhí)行任意命令。
該漏洞影響的版本包括:
Microsoft Office 2007
Microsoft Office 2010
Microsoft Office 2013
Microsoft Office 2016
該漏洞早在微軟公布補丁之前,由騰訊電腦管家團隊首先發(fā)現(xiàn),并上報給微軟后一直與微軟保持積極溝通,推動漏洞修復(fù),使得漏洞得到妥善解決后再披露漏洞信息。
該漏洞出現(xiàn)在模塊EQNEDT32.EXE中,與CVE-2017-11882如出一轍,都屬于棧溢出漏洞,都是對Equation Native 數(shù)據(jù)結(jié)構(gòu)處理不當(dāng)導(dǎo)致。騰訊反病毒實驗室在上周微軟補丁尚未發(fā)布之前就已經(jīng)捕獲在野利用樣本,本文將通過利用樣本詳細闡述漏洞利用攻擊過程。
樣本hash: 643927925BC2E4AD42B0B11221E8053A
樣本為rtf文檔類型,在rtf里面嵌入了兩個OLE對象,其中一個OLE對象會觸發(fā)CVE-2017-11882漏洞利用,另外一個OLE對象會觸發(fā)是CVE-2018-0802漏洞利用。此外,rtf文檔中嵌入了一個package對象,通過package對象釋放setup.zip到臨時目錄下。只要Ole對象中的兩個漏洞利用有一個成功觸發(fā)后,shellcode代碼都會將setup.zip拷貝到C:\Users\[username]\AppData\Roaming\Microsoft\Word\STARTUP\z.wll,這樣word在下次啟動時就會自動加載z.wll,實現(xiàn)自啟動。
2.1.1 Package對象分析
Package對象的功能是釋放PE文件到臨時目錄下的setup.zip文件中。
對于RTF格式文檔,如果用戶單擊文檔內(nèi)的對象,則WORD進程會將對象提取到用戶的臨時目錄中,并使用默認處理程序啟動它們。在文檔關(guān)閉后,WORD進程會將用戶的臨時目錄中提取的ole對象進行刪除。因此,在文檔打開的時間段內(nèi),這些文件可用于系統(tǒng)上的其他進程。
當(dāng)一個對象從文件嵌入到文檔中時,它將使用Packager對象服務(wù),它符合OLE1標準。 但微軟并沒有公開Packager結(jié)構(gòu)格式。
結(jié)合我們對大量帶有package對象的rtf樣本的分析,給出我們對Packager格式的理解以及它如何與文檔中的嵌入對象相關(guān)聯(lián)。
字段名稱 | 長度 | 描述 |
---|---|---|
Header | 4 | 數(shù)據(jù)流的頭標志,總為0x0200 |
Label | 可變長度 | 嵌入對象的標簽,默認為文件名 (Null Terminated) |
OrgPath | 可變長度 | 嵌入對象的原始路徑 |
UType | 8 | 含義不明,可能與格式相差 – 對于嵌入對象,值為 00000300 – 對于鏈接對象,值為00000100 |
DataPathLen | 8 | DataPath字段的長度 |
DataPath | 可變長度 | 釋放的路徑和文件名,默認為 %localappdata%/Temp |
DataLen | 8 | 嵌入數(shù)據(jù)的長度 |
Data | 可變長度 | 嵌入數(shù)據(jù)的內(nèi)容 |
OrgPathWLen | 8 | OrgFileW字段的長度 |
OrgPathW | 可變長度 | 嵌入對象的原始路徑(WChar) |
LabelLen | 8 | LabelW字段的長度 |
LabelW | 可變長度 | 嵌入對象的標簽,默認為文件名 (WChar) |
DefPathWLen | 8 | OrgPathW字段的長度 |
DefPathW | 可變長度 | 嵌入對象的默認路徑 (WChar) |
對于樣本中的package對象,根據(jù)上面的數(shù)據(jù)結(jié)構(gòu)在010editor中看到的字段內(nèi)容如下:
2.1.2 Equation Native 數(shù)據(jù)結(jié)構(gòu)
“Equation Native”描述了公式編輯器中公式對象的二進制格式。它的數(shù)據(jù)構(gòu)成為:
Equation Native Stream Data = EQNOLEFILEHDR+MTEFData
其中MTEFData = MTEF header+ MTEF Byte Stream。
其中EQNOLEFILEHDR的數(shù)據(jù)結(jié)構(gòu)如下:
MTEF header的結(jié)構(gòu)(對于2.0及以后版本)大小為5字節(jié),其對應(yīng)的數(shù)據(jù)結(jié)構(gòu)如下表所示
偏移量 | 說明 | 值 |
---|---|---|
0 | MTEF版本號 | 3 |
1 | 該數(shù)據(jù)的生成平臺 | 0 for Macintosh, 1 for Windows |
2 | 該數(shù)據(jù)的生成產(chǎn)品 | 0 for MathType, 1 for Equation Editor |
3 | 產(chǎn)品主版本號 | 3 |
4 | 產(chǎn)品副版本號 | 0 |
在MTEF header數(shù)據(jù)頭之后的字節(jié)流即為公式數(shù)據(jù),即上面所提到的MTEF Byte Stream結(jié)構(gòu)。
MTEF數(shù)據(jù)由一系列記錄組成。每條記錄都以包含記錄類型和一些標志位的標簽字節(jié)開始。 整體結(jié)構(gòu)是:
FONT記錄及FONT內(nèi)容結(jié)構(gòu)如下:
字段 | 值 | 說明 |
---|---|---|
Tag | 0x08 | 1字節(jié),固定為0x08 |
tface | typeface number | 1字節(jié),Typeface編號 |
style | 1或者2 | 1字節(jié),1表示斜體,2表示粗體 |
name | Font name (null-terminated) | 字體名字,以Null結(jié)尾 |
更多關(guān)于結(jié)構(gòu)的描述,可參考http://rtf2latex2e.sourceforge.net/MTEF3.html
2.2.1 CVE-2017-11882漏洞利用
在未安裝CVE-2017-11882漏洞補丁的機器中,文檔會利用CVE-2017-11882漏洞執(zhí)行shellcode。Shellcode功能為將package對象釋放的setup.zip拷貝到word啟動目錄中。
文檔中的第一個ole對象中包含Equation Native 數(shù)據(jù)內(nèi)容如下
動態(tài)調(diào)試CVE-2017-11882漏洞示意圖如下, 這里strcpy的源地址的內(nèi)容就對應(yīng)著上一章中Equation Native數(shù)據(jù)中的Font name的內(nèi)容:
漏洞利用成功后,執(zhí)行shellcode,shellcode的主要功能是將上面釋放到臨時目錄下的setup.zip拷貝到word的插件目錄中。
Shellcode使用通過hash得到的函數(shù)地址,使用的hash是shellcode中常用的ROR 0X0D的方式。通過調(diào)用ExpandEnvironmentStringAStub分別獲得setup.zip和word的插件目錄。
隨后,通過CopyFile函數(shù),將zip文件拷貝到啟動目錄中。
至此shellcode的功能完成,在IDA中看到的shellcode過程如下。
2.2.2 CVE-2018-0802漏洞利用
在安裝CVE-2017-11882漏洞補丁的機器中,文檔會利用CVE-2018-0802漏洞執(zhí)行shellcode。Shellcode功能同樣為將package對象釋放的setup.zip拷貝到word的插件目錄。
通過靜態(tài)IDA分析CVE-2018-0802漏洞所在的位置如下:
內(nèi)部函數(shù)421E39處的代碼實現(xiàn),在這里在沒有檢測字符長度的情況下,直接通過strcpy覆蓋了局部變量,這里strcpy的源地址的內(nèi)容就對應(yīng)著上一章中Equation Native數(shù)據(jù)中的Font name的內(nèi)容。
在安裝CVE-2017-11882補丁的機器上,動態(tài)調(diào)試樣本時會觸發(fā)CVE-2018-0802漏洞利用過程,如下所示:
在執(zhí)行拷貝時,發(fā)生了棧溢出,導(dǎo)致??臻g內(nèi)容破壞。在執(zhí)行拷貝之前的棧內(nèi)容如下:
拷貝內(nèi)容的最后兩個字節(jié)(25 00)將覆蓋函數(shù)的返回地址,如下所示。
隨后,函數(shù)繼續(xù)運行,后面的sub_4115A7函數(shù)為CVE-2017-11882修補的函數(shù),在補丁條件下會返回非0,從而導(dǎo)致最終該函數(shù)會再次遞歸調(diào)用sub_421774。在第二次調(diào)用sub_421774的過程中,函數(shù)就會正常返回。
函數(shù)正常返回,就會跳轉(zhuǎn)到上面修改過的返回地址運行。
而011d0025的代碼指令也為RET
最后跳轉(zhuǎn)到棧中的shellcode執(zhí)行,shellcode與文件中的內(nèi)容比較如下:
最終shellcode實現(xiàn)的功能為通過CopyFile函數(shù),將zip文件拷貝到word的插件目錄。
木馬的執(zhí)行流程如下:
注意區(qū)分這里的兩個文件名相似的文件:servernet.exe和servicenet.exe。servernet.exe由tmp.exe文件釋放的,起到中轉(zhuǎn)加載執(zhí)行的作用;而servicenet.exe是保存NetWork目錄中的tmp.exe文件,它與tmp.exe的數(shù)據(jù)內(nèi)容是完全一致的。
在木馬加載執(zhí)行過程中,會根據(jù)用戶的環(huán)境采用不同的方式繞過安全軟件,在某些安全軟件存在的情況下會使用中轉(zhuǎn)加載的方式繞過安全檢測,在另外一些安全軟件存在的情況下會使用白利用方式加載執(zhí)行。
木馬涉及的多個不同的文件功能列表如下。
文件名 | 角色 | 功能 |
---|---|---|
z.wll | 加載器 | 釋放木馬文件并加載執(zhí)行,word運行時自動加載 |
Tmp.exe/servicenet.exe | 木馬 | 實現(xiàn)木馬功能 |
Srvlic.dll/msTracer.dll | 調(diào)用中轉(zhuǎn)執(zhí)行 | 加載servernet.exe執(zhí)行 |
MemRunExe32.exe/MemRunExe64.exe | Bypass UAC功能 | |
servernet.exe | 中轉(zhuǎn)加載木馬 | 加載servicenet.exe(實現(xiàn)了木馬主功能)執(zhí)行 |
SandboxieBITS.exe | 白利用程序 | 添加計劃任務(wù),啟動時加載servernet.exe執(zhí)行 |
HookMessageBox.dll | 防止用戶感知 | Hook MessageBox函數(shù),防止彈窗 |
下面,我們將對每個文件依次展開進行分析說明。
2.3.1 z.wll
漏洞利用成功后Shellcode會將setup.zip拷貝到%APPDATA%\Microsoft\Word\STARTUP目錄中保存成z.wll。%APPDATA%\Microsoft\Word\STARTUP目錄為WORD程序的插件目錄,在WORD程序啟動時,WORD會自動加載該目錄下擴展名wll的文件。這樣在下一次word啟動時,z.wll就會被加載執(zhí)行。
z.wll功能為:釋放%ALLUSERSPROFILE%\\NetWork\\tmp.exe,加載tmp.exe執(zhí)行
tmp.exe是以硬編碼的方式保存在0x10003030處,大小為0xB601字節(jié)。
2.3.2 Tmp.exe/servicenet.exe
在407C90處將標志“5A 5A 5A 5A”后的大小為0x1962字節(jié)的內(nèi)容異或0x6B解碼,解碼出來的代碼為線程函數(shù)的代碼
未解碼前的線程函數(shù),未解碼前線程函數(shù)并不是可以執(zhí)行的代碼,從下圖可以看到ida無法將這些數(shù)據(jù)處理成代碼格式:
解碼后的線程函數(shù),IDA 在解碼后就可以正常的識別出代碼。
線程函數(shù)的功能
釋放C:\Documents andSettings\All Users\NetWork\ servernet文件
判斷當(dāng)前進程是不是servicenet.exe,如果當(dāng)前進程不是servicenet.exe,則將自身拷貝到servicenet.exe,并使用cmd加載servicenet.exe執(zhí)行,同時刪除當(dāng)前的自身文件。
如果當(dāng)前進程是servicenet.exe,則首先會開啟三個線程,用來模擬鼠標點擊,用來繞過BKAV、Symantec等防火墻產(chǎn)品。
模擬鼠標點擊繞過防火墻部分代碼:
隨后會遍歷系統(tǒng)進程,判斷是否存在安全軟件進程,判斷的安全軟件如下:
先后與83.166.242.122:443和109.237.110.10:81通信,執(zhí)行不同的功能
其中木馬功能與對應(yīng)的操作指令如下:
指令I(lǐng)D | 功能 |
---|---|
0x01 | 文件操作 |
0x28 | 管道命令 |
0x2E | 清除日志 |
0x2A | 本地提權(quán) |
0x31 | 設(shè)置注冊表內(nèi)容 |
0x2D | 更新木馬服務(wù)端 |
0x2B | 清除木馬服務(wù)端 |
0x39 | 關(guān)閉連接 |
0x3A | 修改木馬上線分組名 |
0x47 | 向t1.dat文件追加內(nèi)容 |
2.3.3 Srvlic.dll/msTracer.dll文件
功能:加載network目錄下的servernet.exe執(zhí)行
2.3.4 servernet.exe文件分析
功能:以EXPLORER.EXE的權(quán)限加載執(zhí)行servicenet.exe。樣本的pdb名為:e:\倚天劍\小馬(英文版)\馬端代碼\GetExplorerToken\Release\GetExplorerToken.pdb。從pdb名稱也可以看到,文件功能為使用Explorer的Token加載木馬主體文件(servicenet.exe)執(zhí)行。
2.3.5 白利用樣本分析
涉及到的白利用程序包含三個文件:SandboxieBITS.exe、SbieDll.dll
其中使用的白簽名為“SANDBOXIE L.T.D”,具體簽名內(nèi)容如下:
使用PE工具,查看SandboxieBITS.exe的導(dǎo)入表,在導(dǎo)入函數(shù)中引用了SbieDll.dll文件中的SbieDll_Hook函數(shù)。
由于SandboxieBITS.exe在調(diào)用SbieDll.dll時,沒有對SbieDll.dll進行驗證,導(dǎo)致將惡意的SbieDll.dll放置在SandboxieBITS.exe相同目錄下并運行SandboxieBITS.exe時,惡意SbieDll.dll會被自動加載,從而執(zhí)行惡意代碼。
SbieDll.dll主要實現(xiàn)兩個功能:
1. 將servernet.exe加入計劃任務(wù),實現(xiàn)開機自啟動的功能
2. 如果加入計劃任務(wù)失敗,則加載HookMessageBox.dll
Sbiedll.dll中的字符串經(jīng)過了異或編碼,使用的異或key為0x05,解碼字符內(nèi)容的代碼片段如下:
判斷是不是有360安全產(chǎn)品,如果沒有安裝360則直接加載HookMessageBox.dll
加載HookMessageBox.dll的代碼片段
HookMessageBox.dll功能就是將MessageBoxA與MessageBoxW函數(shù)直接Hook成空函數(shù)。
如果安裝有360安全產(chǎn)品,則將servernet.exe加入計劃任務(wù)
加入的計劃任務(wù)如下所示
2.3.6 MemRunExe32.exe/MemRunExe64.exe
這兩個文件分別對應(yīng)著32位版本與64位版本,主要功能為:繞過系統(tǒng)的UAC賬戶控制。該文件主要來源于開源代碼實現(xiàn)。從代碼上看,完全從開源代碼編譯而來,連程序的窗口類名與窗口名稱都沒有改變,甚至程序的圖標都完全一樣。
從代碼中可以看到程序窗口的ClassName與TitleName分別為“reirraC”和“igakA”。
分析完上面的樣本后,我們從騰訊的安全大數(shù)據(jù)中按照樣本特征,關(guān)聯(lián)出一批同源樣本,在這些樣本中,有下面幾類的同源但不同功能的樣本。
1. CopyFileToSystem32文件,主要實現(xiàn)將%ALLUSERSPROFILE%\NetWork目錄下的msTracer.dll或者srvlic.dll(根據(jù)系統(tǒng)的位數(shù)決定)拷貝到%system%目錄。
2. 測試樣本。包含三類測試樣本,一是功能測試樣本,主要用來測試加載servernet.exe功能是否正常,樣本字符串中有“IsRunning”等互斥體名。第二類是測試簽名,在一些樣本中,看到黑客給樣本打上了“亞洲誠信代碼簽名測試證書SHA2”的測試簽名。第三類為測試CC地址的樣本,在一些樣本中,我們發(fā)現(xiàn)連接的CC地址為:192.168.2.74:8008,192.168.2.155:8099,192.168.2.155:81等測試地址。
測試的簽名如下
從樣本層面看,該木馬有下面的顯著特點:
l 利用NDAY漏洞CVE-2017-11882與0Day漏洞CVE-2018-0802組合利用,在CVE-2017-11882漏洞利用失敗的情況下,依然可以使用CVE-2018-0802漏洞再次觸發(fā)惡意代碼執(zhí)行?!敖M合拳”的打法更大的增加利用成功率。
l 利用word啟動目錄實現(xiàn)首次的加載執(zhí)行。漏洞利用成功后,并不會直接加載惡意程序執(zhí)行,而是在用戶再次使用word時加載執(zhí)行。這利用WORD進程自身機制,達到啟動的目的對于繞過安全軟件的加載檢測有著極好的效果。
對于這類木馬的防范,騰訊反病毒實驗室建議用戶:
1. 及時更新系統(tǒng)補丁,針對此次攻擊的兩個補丁下載地址為:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-0802
2. 安裝騰訊電腦管家等安全軟件,并保持安全軟件更新,目前騰訊電腦管家已經(jīng)可以查殺此類木馬。
3. 企業(yè)客戶可以使用采用騰訊企業(yè)安全的解決方案。騰訊企業(yè)安全針對APT防御方面提供了多種解決方案,騰訊御界、騰訊御點等產(chǎn)品均可以檢測和防御本次APT攻擊。
4. 如果用戶總是使用word打開rtf文件,可以通過禁用Package ActiveX控件來阻止,rtf文件在臨時目錄釋放文件的問題,從而切斷木馬釋放環(huán)節(jié)的攻擊鏈路。這種方式僅可以阻斷文中分析的以rtf為載體,package對象釋放文件的攻擊類型。具體操作為設(shè)置下面的注冊表項。
5. 通過禁用公式編輯器COM控件的方式進行緩解。
關(guān)于NDAY漏洞CVE-2017-11882與0Day漏洞CVE-2018-0802漏洞組合傳播遠控木馬的示例分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。