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