作者:Yenn_
原文鏈接: https://0xdf1001f.github.io/2021/01/19/eps-malware/
EPS
EPS(英文全稱:Encapsulated PostScript)是PostScript的一種延伸類型,是目前系統中功能最強的一種圖像文件格式。
最近發現一個印度白象組織的樣本,樣本中使用了CVE 2017-0261的漏洞。
打開Office文檔時,FLTLDR.EXE將被用于渲染包含該漏洞的嵌入式EPS文件。該文件是由PostScript語言編寫而成,可以被攻擊者通過”save-restore”操作利用,其本質為一UAF漏洞。 當用戶打開包含格式錯誤的圖形圖像的文件時,或者當用戶將格式錯誤的圖形圖像插入到 Office 文件時,該漏洞可能會受到利用。
樣本情況
File Name : Chinese_Pakistani_fighter_planes_play_war_games.docx
File Size : 464,356 Byte
File md5 : 6d63dc5cdb504f3365403c1296e696a0
樣本打開后如圖:

打開樣本后,可以看見啟動了子進程FLTLDR.EXE,雖然存活時間很短,至少它啟動了。

如何調試惡意代碼
.EPS惡意代碼存放在Word中的\word\media\目錄下,7z打開.doc文件拖出來即可

在調試的時候發現,Word文檔的.EPS和韓國HWP的.EPS調試好像不太一樣,韓國的HWP可以直接用cerbero_suite_advanced將其中的Shellcode解壓出來,但是Word文檔不行。
后來在Github找到了一個LoadEPS的軟件,https://github.com/pdfswf/eps-CVE-2017-0261

具體使用方法,將樣本的.eps惡意文件放入\done\文件夾內覆蓋poc.eps,利用loadeps.exe加載惡意.eps,然后使用OD加載loadeps.exe,這里可以用鏡像劫持加載,也可以先用OD加載loadeps.exe然后在OD內修改參數
加載后如圖:

加載后在4011EE地址處下斷,F7步入,Alt+M找到EPSIMP32的加載基址

用IDA打開前面文件內的EPSIMP32.idb,修改基址,定位到closefile的地址

到了closefile_proc的地址,往下找到ROP鏈執行Shellcode的地方下斷


F7步入,可以發現有VirtualProtect函數修改內存頁屬性為PAGE_EXECUTE_READWRITE,這里的內存地址就是Shellcode存在的地址,可以跟過去調試了

Shellcode
申請內存,獲取API地址

硬編碼kernel32.dll,ntdll.dll加載并從中獲取函數地址


展開系統變量,獲取路徑%windir%\temp,并在目錄內創建一個文件然后又馬上刪除

檢查WINWORD.exe進程,隨便點開一個word文檔,保存WINWORD進程存在

這里需要F7進去手動修改一下,因為這樣本在獲取函數地址的時候,沒有獲取到CreateToolhelp32Snapshot這個函數,導致call edi的時候edi寄存器為0,程序會出錯,需要手動修改edi的值為CreateToolhelp32Snapshot的函數地址

遍歷進程,判斷WINWORD.EXE是否存在

創建文件“C:\Users\sam\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\MSBuild.exe”

將一個PE文件寫入創建的MSBuild.exe中

這里PE文件來自于.eps文件中的內容,與老版本不同的是,老版本是直接寫在.eps中只需要添加MZ即可,這里是通過XOR 0x16082019的計算后得出,每四字節與key 0x16082019 進行異或計算


這里可以寫一個JS代碼測試一下,在瀏覽器console直接運行

function xor(str){
var arr = str.split(" ");
var s = "";
for(var i in arr) s += (parseInt("0x" + arr[i]) ^ 0x16082019).toString(16) + " ";
console.log(s.toUpperCase());
}
再次給樣本修復CreateToolhelp32Snapshot的地址,樣本會遍歷進程查找explorer.exe進程并向其中注入代碼

注入的代碼也來自于.eps文件中

注入代碼的功能是啟動前面釋放的MSBuild.exe

創建一個隱藏文件
“C:\ProgramData/Microsoft/DeviceSync/Chinese_Pakistani_fighter_planes_play_war_games_to_prove_a_point_to_India.docxt”并將.EPS中的一個Word文檔寫入

創建進程執行這個釋放出的文檔然后退出進程

.eps的代碼到這里結束,后面的情況就好分析了
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1509/
暫無評論