標籤:

工具篇:如何分析惡意文檔?

這篇博客採用實際的惡意樣本來說明如何分析惡意樣本。

疑似異常工作的惡意文檔

幾周前,katja Hahn在推特上公布了一個惡意樣本:鏈接。

文件在這裡公布出來了(SHA256 41a84ee951ec7efa36dc16c70aaaf6b8e6d1bce8bd9002d0a b5236197eb3b32a)。

在十六進位編輯器中打開,明顯包含了VBA宏病毒指令:

但是像oledump或是olevba卻不能夠檢測到VBA宏病毒。甚至MS word都不能顯示或者運行這些宏病毒。

$ olevba 41a84ee951ec7efa36dc16c70aaaf6b8e6d1bce8bd9002d0ab5236197eb3b32a.binnolevba 0.42 - http://decalage.info/python/oletoolsn[...]nFILE:n41a84ee951ec7efa36dc16c70aaaf6b8e6d1bce8bd9002d0ab5236197eb3b32a.binnType: OLEnNo VBA macros found.n

在文章"Malfunctioning Malware"中,作者通過一些底層的技術重建並提取文檔中宏的源碼。

現在我們想知道這是一種躲避檢測的方法或者是另一種漏洞?

oledir

首先使用oledir查看文檔內部的OLE目錄,oledir是我的oletoos工具包中比較新的工具。

OLE的目錄就是一種包含名稱和存儲了文件數據流位置的一種數據結構(詳見[MS-CFB])。每個目錄可能會被使用,或者完全是空的。

在本例中,我們可以看到有好幾個空的目錄入口(id從6到12),其後是一個非空目錄(id13)。由於這些目錄入口會被連續的創建,這就暗示了,這些空的入口可能是在使用完後釋放了的。

這同樣也證實了不存在VBA宏,因為在文件中沒有存儲名為」VBA」的結構(詳見[MS-OVBA])。

olemap

接著,我們使用另一個新工具olemap看一下OLE的FAT(文件分配表):

[…]

從上圖可知,在使用過的節區後存在大量標記為free的節區。這也從另一個側面顯示一些流可能被刪除了。

這也證實了在Hex Editor中文件偏移地址為0XE440處出現的VBA宏位於一個未使用的節區(number 71,offset 0XE400)。

很有可能這個文檔中原來包含的VBA宏病毒已經被刪除了。一個惡意軟體的作者發送一個去除宏病毒的文檔,這就很奇怪了,因為這些宏不可能會被執行。

我認為這個文檔實際上應該是被殺軟或者一些查殺工具清理了一番。例如,F-Prot和McAfee殺毒引擎就可以移除宏病毒。其他例如ExeFilter也可以做到。

為了證實這個,我們要找到清理之前的原始惡意樣本。這個也不簡單,因為原始文件早已被更改了:原始文件有不同的hash,而且原始文件名也不知道。

Tip: 如何找到含有特定字元串的惡意軟體樣本

詳見博客:freebuf.com/articles/ne

分析

在這些搜索結果中,我們可以看到在某個時期段有至少兩個樣本的大小是一樣的(78848bytes),但是hash不一樣:

? WIN_019_11.doc, SHA256 6780af202bf7534fd7fcfc37aa57e5a998e188ca7d65e22c0ea658 c73fad36a2n? WIN_019_11.doc, SHA256 f36cb4c31ee6cbce90b5d879cd2a97bcfe23a38d37365196c25e 6ff6a9f8aaa6n

這次olevba檢測到兩個文件中都包含VBA宏,可以在下面看到好幾個典型的惡意樣本特徵。這兩個文件除了在宏的一行源代碼其他都幾乎相同。

$ olevba -a 6780af202bf7534fd7fcfc37aa57e5a998e188ca7d65e22c0ea658c73fad36a2.binnolevba 0.42 - http://decalage.info/python/oletoolsnFlags Filename n----------- -----------------------------------------------------------------nOLE:MASIHB-V 6780af202bf7534fd7fcfc37aa57e5a998e188ca7d65e22c0ea658c73fad36a2.binn(Flags: OpX=OpenXML, XML=Word2003XML, MHT=MHTML, TXT=Text, M=Macros, A=Auto-executable, S=Suspicious keywords, I=IOCs, H=Hex strings, B=Base64 strings, D=Dridex strings, V=VBA strings, ?=Unknown)n===============================================================================nFILE: 6780af202bf7534fd7fcfc37aa57e5a998e188ca7d65e22c0ea658c73fad36a2.binnType: OLEn-------------------------------------------------------------------------------nVBA MACRO ThisDocument.clsnin file: 6780af202bf7534fd7fcfc37aa57e5a998e188ca7d65e22c0ea658c73fad36a2.bin - OLE stream: uMacros/VBA/ThisDocumentn-------------------------------------------------------------------------------nVBA MACRO Module1.basnin file: 6780af202bf7534fd7fcfc37aa57e5a998e188ca7d65e22c0ea658c73fad36a2.bin - OLE stream: uMacros/VBA/Module1n+------------+----------------------+-----------------------------------------+n| Type | Keyword | Description |n+------------+----------------------+-----------------------------------------+n| AutoExec | AutoOpen | Runs when the Word document is opened |n| Suspicious | Kill | May delete a file |n| Suspicious | Open | May open a file |n| Suspicious | Shell | May run an executable file or a system |n| | | command |n| Suspicious | vbNormal | May run an executable file or a system |n| | | command |n| Suspicious | CreateObject | May create an OLE object |n| Suspicious | Chr | May attempt to obfuscate specific |n| | | strings |n| Suspicious | FileCopy | May copy a file |n| Suspicious | SaveToFile | May create a text file |n| Suspicious | Write | May write to a file (if combined with |n| | | Open) |n| Suspicious | Hex Strings | Hex-encoded strings were detected, may |n| | | be used to obfuscate strings (option |n| | | --decode to see all) |n| Suspicious | Base64 Strings | Base64-encoded strings were detected, |n| | | may be used to obfuscate strings |n| | | (option --decode to see all) |n| Suspicious | VBA obfuscated | VBA string expressions were detected, |n| | Strings | may be used to obfuscate strings |n| | | (option --decode to see all) |n| IOC | codakes.exe | Executable file name (obfuscation: VBA |n| | | expression) |n| Base64 | 2+ | Micr |n| String | | |n| VBA string | GE | Chr(80 - 9) + "E" |n| VBA string | t | (Chr(100 + 10 + 6)) |n| VBA string | TE | Chr(80 + 4) + "E" |n| VBA string | mP | (Chr(80 + 20 + 9)) + "P" |n| VBA string | codakes.exe | Chr(90 + 2) + "codakes" + Chr(50 - 4) + |n| | | "exe" |n| VBA string | ConnectionDB | ("Connection") & "DB" |n+------------+----------------------+-----------------------------------------+n

文件比較

如果我們將這兩個文件和原始文件的OLE目錄進行對比,結果顯示除了包含VBA宏的流和存儲數據,其他目錄完全相同。

而且,文檔的元數據也完全相同,包括最後保存的時間戳。

如果該文件是在像MS Word編輯器中修改的,是不會出現這種情況的。

總結

分析後我們可以知道,這些不能夠被正常分析的文件(SHA256 41a84ee951ec7efa36dc1 6c70aaaf6b8e6d1bce8bd9002d0ab5236197eb3b32a)不是惡意軟體的作者實際發送的,而是被殺軟或者其他相似的工具清潔之後的文件。

尋找和惡意樣本具有相同的特徵字元串,有可能找到最原始的,具有正常功能的文件。隨後像olevba和oledump就可以提前並分析VBA宏病毒。

這裡給個建議,如果你捕獲了這樣一個不能被分析的樣本,首先可以在MS Office中運行下,檢查payload是否能夠執行。如果不能說明這是一個閹割的版本,下面就去找到最原始的版本。

為了防止惡意軟體的作者找到其他方法來躲避檢測,請將任何Bug或者奇怪的樣本發送至tool developers

至於殺軟引擎和文件清理工具,這裡例子顯示他們還不足以完全清楚包含的宏病毒。為了避免這些殺軟在正常文件中根據特徵值查殺,最好用null或者空格填充這些相關節區。

註:本文翻譯於decalage

推薦閱讀:

如何解決波浪理論中「千人千浪的問題」?
「無文件」惡意程序攻擊技術還原
背馳如果能夠準確判斷的話,那等於是肯定能盈利,這個是否為纏論,或者所有股市技術分析的核心?
除了MACD指標,還有哪些重要的指標可以判斷股票的走勢?

TAG:技术分析 |