基於unicorn-engine的虛擬機的實現(WxSpectre)
反病毒虛擬機是一個很有優勢的工具,可以說反病毒軟件是否存在模擬器是衡量反病毒軟件能力的一個指標。反病毒虛擬機不光是內嵌在反病毒軟件內部,來動態執行樣本。這種虛擬機一般也可以單獨用來動態執行批量樣本,檢測樣本惡意行為,因為它相對virualbox+cuckoo更加的輕巧,節省資源。所以還是有很高的價值的。正因為其高效性與復雜性,現在公開這方面的資料很少。
一、虛擬機vs模擬器
對於惡意樣本分析領域,沙箱,虛擬機,模擬器,一個原則就是執行指令不會影響host環境.
Method | Performance | Execution granularity | System fidelity | |
---|---|---|---|---|
VirtualBox | Virtualization/VT | Quick +, heavily | N/A | Very good |
Bochs | Full emulation | Slow, tiny | Instruction level | Very good |
Uniron-engine | Emulation/dynamic translation | Quick, tiny | Instruction level | N/A |
virtualbox除過特權指令和部分ring0中運行的指令,是直接在宿主機上運行的。所以運行速度與宿主機沒有很大差異。Bochs是純粹的軟件模擬器,另外加上對硬件的模擬,所以其指令執行速度是非常慢的。Unicorn-engine基於動態翻譯技術,速度相對於純粹的指令模擬快的多.
所以如果關心系統仿真度當然選擇virtualbox,bochs,但是virtualbox會耗費更多的系統資源。
Unicorn-engine可以虛擬執行x86,x64,arm等指令集。因為其基於動態翻譯和部分模擬來執行目標指令,效率比bochs快的多。
很顯然,unicorn-engine只是一個”CPU”,所以要想運行樣本還缺的是一個windows的運行應用程序的環境。
WxSpectre就是這樣基於unicorn-engine的windows仿真環境來實現的虛擬機。
二、關於WxSpectre
Windows是一個多進程環境,這是現代操作系統的普遍的標配。但是在運行惡意樣本的時候,我們只關心的惡意樣本做了什麽,而且為了避免產生幹擾一次只能運行一個樣本,這就造成了很大的浪費,其實只要滿足樣本運行所需要的環境就可以,但是我們卻提供了一個完整的windows環境,顯然殺雞用了宰牛刀。如果我們只提供運行目標樣本所需的基本環境,顯然這將節省很多的資源。WxSpectre基本上實現了這一目標。
WxSpectre由兩大部分組成:Unicorn-engine+仿真WINDOWS系統環境.WxSpectre實現了大部分的windows執行應用程序的環境,包括文件系統,對象管理,註冊表,線程調度,內存管理,異常/中斷處理,Windows API(ring3).pe 執行環境初始化模塊。
WxSpectre可以跨平臺在windows,linux,Mac os,下運行,可以虛擬執行EXE/VBS腳本。
目前實現的功能是:1.api trace.2.運行時內存dump.3.指令trace,4,虛擬調試5.內存字符串提取等。
WxSpectre的框架結構:
1.內存管理:
包括內存的申請釋放,堆內存管理。
2.線程調度:
線程切換,線程調度。
3.異常處理:
將cpu的異常傳送到hyperviror,然後經過過濾處理,然後分發給相應的處理函數。
4.對象管理:
主要是指對象初始化,對象同步,對象釋放,對象的訪問。
5.WxVFS:
指的是虛擬文件系統,有點類似於linux的VFS系統,但是所不同的是這裏不是為了實現一個統一的文件系統界面,這裏主要是虛擬出文件系統的結構。從而使WxSpectre中所有樣本訪問文件系統的操作得以執行。比如讀寫文件,創建,刪除,文件,目錄等。
6.Wxhelper:
所用的api調用將會重定位到這個模塊中,然後執行。
7.腳本引擎(WxNscript):
這裏的腳本引擎主要用來執行vbs,js腳本.因為現在越來越多的病毒會利用腳本文件了來作為傳播載體.
8.兼容層:
在WxSpectre執行應用程序的時候,有的時候需要打補丁,patch某些指令序列從而讓樣本能順利執行下去(因為存在某些反虛擬機,反模擬器樣本或者其他的異常行為導致執行出現錯誤,或者奔潰)。
9.虛擬註冊表(WxRegistry)
Windows程序執行需要依賴註冊表。WxRegistry是對註冊表的虛擬。
10.網絡訪問模塊(WxNetwork)
WxNetwork會虛擬出一個sever模塊,當有樣本請求數據,wxnetwork會與其回話。
WxSpectre的功能:
1. API trace
Api trace是勾勒樣本動態行為的一個很重要的方面。這裏只記錄樣本直接調用的api日誌。不會記錄嵌套在api內部的api調用,這樣分析者更加能抓住重點。Cuckoo不好的一點api的記錄沒有做過濾。
2. 虛擬文件系統(WxVFS)
因為完成了文件系統所以WxSpectre如果捕獲到有文件的創建,寫入都會被監控。且可以dump創建出的文件。
3.虛擬調試(virtual debugger)
這個功能是非常有用的。因為通常情況下調試病毒必須在虛擬機裏面調試。分析者通常需要反復的還原虛擬機,將樣本用調試器加載起來,這樣會耗費很多的時間。WxSpectre的虛擬調試,完全不依賴虛擬機,啟動非常的快。對調試病毒非常的方便。
4. 虛擬註冊表&文件監控
監控註冊表的訪問,讀,寫,設置,文件及文件夾的創建,讀,寫,刪除等。
5. 進程創建監控
6. 內存dump&及內存字符串dump
三、demo情況
Api trace:
病毒名:DDoS:Win32/Nitol.A
Md5: 4666a8eef0e51323f85f569e083f5bc4、
VT: https://virustotal.com/en/file/c454119514c44e64df45d83160ca7b8a06c87a2b167b16700baa4e0cacafe95a/analysis/
Drop樣本釋放的文件:
病毒名:wanncry2.0
Md5: 84c82835a5d21bbcf75a61706d8ab549
VT: https://virustotal.com/en/file/ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa/analysis/
WxVFS監控到的病毒創建出來的文件
對應的文件內容
更多關於脫殼能力,註冊表監控,進程創建監控,虛擬調試,內存字符串dump,執行速度,這裏完整的演示視頻。
四、待完成部分
目前腳本執行模塊還在完善,調試功能還沒有完成。網絡模塊還沒有完成,脫殼能力還需要改善。等到機會合適我將放出這個工具。
基於unicorn-engine的虛擬機的實現(WxSpectre)