在分析惡意軟件過程中,我們經常看到,攻擊者以創新的方式使用特性傳輸和混淆惡意軟件。最近我們發現,利用RTF臨時文件作為一種傳遞方法來壓縮和刪除惡意軟件的樣本數量有所增加。所以,本文中我們就分析一款利用RTF文件作為傳輸向量的惡意軟件。
0×01 攻擊過程
這種攻擊使用下面的過程在一個系統中刪除并執行payload。
圖1 惡意軟件攻擊過程
1、用戶打開Office文檔并啟用宏。
2、宏將活動文檔保存為一個RTF文件。
3、宏靜默地打開RTF文檔。
4、在打開RTF文檔時,將嵌入的對象刪除為臨時文件。
5、宏執行被刪除的文件。
為了更好地理解這個傳遞方法是如何工作的,我們需要看看二進制文件在RTF文檔中是如何壓縮的,以及處理這些嵌入的對象時的默認行為。
當打開一個包含內嵌對象(從一個文件中插入的對象)的RTF格式文檔時,這些對象就會被提取到用戶的臨時目錄中,如果用戶在文檔中單擊了對象,那么對象就會在這里以默認的處理程序啟動。一旦文檔關閉,就會通過將它們從用戶臨時目錄中刪除而清理掉文件。所以,在文檔打開期間,系統中的其他進程都能夠訪問這些文件。
當一個對象被嵌入到一個文檔中時,它將使用Packager對象服務器,OLE1中的一個遺留實現。不幸的是,Packager格式并未以文檔形式發布,且微軟開放規范中也未包含它的信息。
對象存儲在一個文檔中的內嵌對象(objemb)部分。頭字段定義了對象服務器、大小以及其他有關底層內嵌數據的元數據。
圖2 Object頭
關于頭格式的更多信息可以在MS-OLEDS—2.2.4節ObjectHeader中查看。
0×02 理解OLE1 Packager格式
通過分析大量樣本,我們已經能夠理解Packager格式的大部分內容,以及它與文檔中內嵌對象的聯系。下表中列出了遺留Packager數據格式,并可用作解析包數據流的一個指導。
圖3 OLE1 Packager格式
除了嵌入的二進制內容,格式中還包括內嵌對象的元數據,這在DFIR中是很有用的。
1、默認情況下,標簽值將包含OrgPath中使用的文件名和ObjFile。如果這個值有所不同,表明標簽被篡改了。
2、OrgPath將包括內嵌二進制文件的原始路徑。
3、ObjFile將包括編寫系統% localappdata %的路徑,它將包括用戶名C:Users ...
為了幫助分析可疑的包數據流,我們編寫了一個python工具psparser,它會處理數據格式并將輸出元數據,并選擇性地提取嵌入的對象。使用該工具能夠有助于分析最近發現的釣魚活動中的惡意RTF文件,我們可以看到它與嵌入對象元數據之間具有很多潛在的相似性。
圖4 樣本分析
使用嵌入的元數據能夠給我們一些主要的指標,我們可以使用這些指標來進一步尋找相關的樣本進行分析。
0×03 文檔轉換
為了完成這個傳遞方法,攻擊者以一個RTF文檔開始,并嵌入一個惡意可執行文件,然后將該文檔轉換成一個Word文件(.doc)。一旦在Word中,攻擊者增加所需的宏調用來保存、打開和執行壓縮在源文檔中的payload。
圖5 惡意宏
圖5展示了利用這種傳遞向量的惡意宏的一個示例。宏使用函數SaveAs來保存活動的文檔,并以格式(wdFormatRTF)和CreateObject打開Word的一個新實例,而該Word靜默地打開了文檔。一旦RTF文檔打開后,宏會執行被提取到用戶臨時目錄的payload。
雖然一旦Word實例被關閉,可執行文件就會被刪除,但是宏寫入臨時目錄的RTF文件仍舊存在,并能夠在分流或響應活動中用作主機指標。對宏的檢查可以快速確認一旦payload被執行,RTF文件是否也被刪除。
0×04 RTF到Doc以及反向轉換
當Word打開時,雖然默認行為有所不同,嵌入對象不再被提取到臨時目錄中,但是分析嵌入的Ole10Native流顯示,當文件被保存到新的格式時并未被修改。
當惡意宏將文檔保存回RTF格式時,整個文檔增加了新的字段和格式,但是惡意payload的流保持不變。
圖6 原始RTF與保存RTF文檔對比
一旦文檔轉成回原始格式,當文件處于打開狀態時,在嵌入的對象被自動提取到臨時目錄的地方就會發生默認行為。
0×05 結論
我們可以看到,這是一種創新性的方式來使用默認行為壓縮和傳遞惡意二進制文件。另外,我們還看到,攻擊者使用混淆(XOR)的附加層來更好地掩蓋文檔對二進制文件的包含。
看著這些樣本中的惡意宏,并沒有顯式的調用來編寫或下載用作payload的二進制文件。當識別惡意二進制文件初始的傳遞向量時,惡意軟件分類過程中這可能會導致一些混亂。
0×06 參考資料
1、https://blogs.mcafee.com/mcafee-labs/dropping-files-temp-folder-raises-security-concerns/
2、https://isc.sans.edu/forums/diary/Getting+the+EXE+out+of+the+RTF/6703/
3、https://www.dshield.org/forums/diary/Getting+the+EXE+out+of+the+RTF+again/8506/
0×07 樣本
1、88c69cd7738b6c2228e3c602d385fab3
2、8cbb6205bb1619a4bde494e90c2ebeb6
3、836ff385edd291b1e81332c7c3946508
4、da86cbe009b415b3cf5cd37a7af44921