莫建平,應(yīng)凌云,蘇璞睿,王嘉捷
1(中國科學(xué)院 軟件研究所,北京 100190)
2(中國科學(xué)院大學(xué),北京 100049)
3(中國信息安全測評中心,北京 100085)
動態(tài)分析具有不受加殼、混淆等代碼保護技術(shù)影響的優(yōu)點,是分析新惡意代碼的首選方法.動態(tài)分析通常在虛擬環(huán)境中運行樣本,利用監(jiān)控模塊提取樣本的進程、內(nèi)存、文件、注冊表、網(wǎng)絡(luò)等行為數(shù)據(jù),通過對這些行為數(shù)據(jù)的匯總分析來推斷樣本的功能和惡意性.反虛擬化是造成動態(tài)分析系統(tǒng)無法獲取樣本全部行為數(shù)據(jù)的重要因素.樣本在檢測到運行在虛擬環(huán)境后,隱藏惡意行為或直接退出,導(dǎo)致動態(tài)分析系統(tǒng)只能獲取樣本的部分行為數(shù)據(jù),影響動態(tài)分析的準(zhǔn)確性.本文將對現(xiàn)有的針對惡意代碼動態(tài)分析的反虛擬化技術(shù)進行調(diào)研,并提出系統(tǒng)的反虛擬化對抗方案,接著將反虛擬化對抗應(yīng)用到已有的基于QEMU的動態(tài)分析系統(tǒng)上,通過實驗驗證了反虛擬化對抗有效性.
本文的組織結(jié)構(gòu)如下,第一節(jié)介紹現(xiàn)有的反虛擬化對抗方法并指出其存在的不足,第二節(jié)對目前的反虛擬化方法進行分類闡述,接著第三節(jié)介紹如何對抗這些反虛擬化方法,第四節(jié)將反虛擬化對抗應(yīng)用到已有的惡意代碼動態(tài)分析系統(tǒng),并通過實驗驗證對抗的有效性,最后第五節(jié)是全文的總結(jié)和展望.
針對樣本的反虛擬化問題,目前提出的解決思路主要有兩種.一是構(gòu)建更難被檢測,更透明的分析系統(tǒng).如基于硬件虛擬化技術(shù)實現(xiàn)的動態(tài)分析系統(tǒng)Ether[1],V2E[2],基于真實硬件(bare-metal)的BareBox[3],BareCloud[4]和LO-PHIL[5]都試圖通過增加分析系統(tǒng)的透明性對抗反虛擬化檢測.但是Thomas Raffetseder[6]等人指出硬件虛擬化技術(shù)能被檢測出來,基于baremetal的方法則代價高昂,難以大規(guī)模應(yīng)用,并且由于缺乏對樣本執(zhí)行的細粒度監(jiān)控,容易受到樣本的拖延技術(shù)(樣本通過睡眠,空操作等方式使動態(tài)分析超時的技術(shù))的影響.
二是識別樣本對虛擬環(huán)境的檢測手段并繞過檢測.如Cobra[7]使用二進制翻譯來監(jiān)控每個基本塊的執(zhí)行,通過替換掉所有可能的針對Cobra的檢測指令來繞過樣本反虛擬化檢查,但是Cobra使用細粒度的二進制插樁,性能下降明顯.而Balzarotti[8]等人在虛擬分析環(huán)境上重放參考主機(物理主機)上的執(zhí)行記錄,通過比較樣本在兩次執(zhí)行中的差異來發(fā)現(xiàn)樣本對虛擬環(huán)境的檢測方法.
動態(tài)分析環(huán)境包括主機環(huán)境,網(wǎng)絡(luò)環(huán)境和用戶交互環(huán)境三個方面,僅僅考慮主機環(huán)境的反虛擬化對抗是不夠的,樣本可以通過對網(wǎng)絡(luò)環(huán)境或用戶交互的探測進行反虛擬化.
樣本的反虛擬化基于模擬分析環(huán)境和真實環(huán)境的差異進行,這樣的差異可以分為主機環(huán)境差異,網(wǎng)絡(luò)環(huán)境差異和用戶交互環(huán)境差異三個方面.
動態(tài)分析系統(tǒng)主機環(huán)境的構(gòu)建主要有基于硬件模擬器 (如 Bochs,QEMU),基于硬件虛擬化 (如VirtualBox,VMware),基于虛擬機監(jiān)視器 (又稱hypervisor,如 Xen,VMware ESXi)和基于真實硬件四類.現(xiàn)有針對主機環(huán)境差異的虛擬化檢測方法主要包括基于硬件特征的檢測方法和基于系統(tǒng)特征的檢測方法兩類.
硬件特征主要包括CPU、內(nèi)存、硬盤驅(qū)動器、CD/DVD驅(qū)動器、BIOS、ACPI、顯卡和網(wǎng)卡幾類.表1對這些檢測方法進行了總結(jié).表中列出了針對每類特征的各個檢測項并舉例說明,注釋部分對檢測項或例子做出了說明.比如針對內(nèi)存大小的檢測項,動態(tài)分析系統(tǒng)由于考慮到資源的消耗和分析的并行度,一般會分配給虛擬機較小的內(nèi)存,如1 GB.
表1 基于硬件特征的反虛擬化方法
CPU個數(shù)和核數(shù),內(nèi)存大小,硬盤大小等特征為通用的反虛擬化特征,對所有類型的虛擬化平臺都適用.其它硬件特征則是虛擬化平臺相關(guān)的,不同的虛擬化平臺含有不同的特征值,同一虛擬化平臺的不同版本的特征值可能也不一樣.基于真實硬件的主機環(huán)境由于使用真實的硬件,并且一般CPU為多個或為多核,內(nèi)存和硬盤空間比較大,因而不包含用于反虛擬化的硬件特征.
基于系統(tǒng)特征的檢測方法可以分為兩類:一是查找系統(tǒng)進程列表,文件,注冊表,服務(wù)列表等是否含有模擬器相關(guān)的特征字符串.二是基于時間的檢測方法,包括檢測系統(tǒng)啟動時間,通過比較在真實系統(tǒng)和虛擬機上執(zhí)行特定代碼或任務(wù)的絕對或相對時間差來探測虛擬機的存在.
虛擬化平臺為了實現(xiàn)虛擬化的功能或增加平臺的易用性,需要向guest引入必要的組件,如設(shè)備驅(qū)動,DLL文件,EXE文件等,可能還會注冊隨系統(tǒng)啟動的服務(wù)或程序,這些組件的信息會在系統(tǒng)安裝或運行過程中保存到注冊表或日志文件中.虛擬化平臺額外引入的這些文件成為反虛擬化利用的特征.這些特征是虛擬化平臺相關(guān)的.表2總結(jié)了基于系統(tǒng)特征的反虛擬方法.其中進程和服務(wù)特征可以通過遍歷進程列表和服務(wù)列表進行檢查.
表2 基于系統(tǒng)特征的反虛擬化方法
硬件模擬器需要模擬所有的硬件操作,還需要將guest CPU的代碼動態(tài)翻譯成宿主機CPU的代碼,基于硬件虛擬化或hypervisor的虛擬化平臺雖然減輕了在硬件操作上的模擬壓力,但在性能上還是比相同配置的物理主機要低,這樣的性能差異通過可以測量虛擬機和物理主機運行特定代碼或任務(wù)耗時絕對時間差或相對時間差體現(xiàn)出來.絕對時間差是指運行同一代碼或任務(wù),虛擬機和物理機耗時的差值或比值,而相對時間差是指兩段不同代碼或兩個不同任務(wù)在虛擬機和物理機上耗時的差值或比值之間的差異.為了增加測量的穩(wěn)定性,通常會循環(huán)執(zhí)行特定代碼或任務(wù)多次,取平均值作為測量結(jié)果.時間的測定使用rdtsc指令,GetLocalTime,GetTickCount,QueryPerformance-Counter和 QueryPerformanceFrequency 等 API.特定代碼包括cpuid指令,GetProcessHeap和CloseHandle及其它在虛擬機和物理機上執(zhí)行時間有顯著差異的代碼或任務(wù).基于時間的檢測方法為通用的反虛擬化方法,適用于所有虛擬化平臺.
真實網(wǎng)絡(luò)的站點和服務(wù)程序數(shù)量巨大,而模擬網(wǎng)絡(luò)在實現(xiàn)上往往只模擬一個程序和一個站點,這樣的矛盾性導(dǎo)致了基于網(wǎng)絡(luò)環(huán)境差異的反虛擬化方法.模擬網(wǎng)絡(luò)和真實網(wǎng)絡(luò)的差異可以歸納為如下兩個方面:1)性能差異,模擬網(wǎng)絡(luò)通常與分析主機處于同一局域網(wǎng),對請求響應(yīng)迅速,延時比真實網(wǎng)絡(luò)小,2)服務(wù)細節(jié)差異,模擬服務(wù)往往響應(yīng)固定模式的消息,和真實服務(wù)在細節(jié)方面存在差異,如DNS查詢總是響應(yīng)相同的IP,HTTP對不同動態(tài)參數(shù)的url響應(yīng)相同頁面,不同HTTPS站點使用相同的證書等.表3總結(jié)了針對常見協(xié)議的反虛擬化方法.其中性能差異的數(shù)據(jù)表示模擬網(wǎng)絡(luò)服務(wù)的響應(yīng)速度,括號中數(shù)據(jù)為真實服務(wù)的響應(yīng)速度,測量的是服務(wù)成功連接后,一次請求的響應(yīng)時間.選用國內(nèi)常見站點作為測試目標(biāo).
惡意代碼動態(tài)分析系統(tǒng)為了提高分析效率,往往采用自動化分析,沒有用戶使用系統(tǒng),因而與有用戶使用的系統(tǒng)存在明顯差異.基于用戶交互環(huán)境差異的檢測方法可以分為用戶使用記錄和用戶交互動作兩類.
表3 常見協(xié)議的反虛擬化方法
用戶使用記錄是指用戶在使用操作系統(tǒng)時留下的用戶痕跡,包括如下幾點:剪切板是否有臨時數(shù)據(jù);常見的軟件是否安裝;是否有一定量的個人數(shù)據(jù),圖片,文檔,音視頻等;是否有近期的瀏覽器歷史記錄;是否具有一定量的用戶登錄記錄,系統(tǒng)日志等.
用戶交互動作主要指鼠標(biāo)的移動點擊和鍵盤的擊鍵.鍵盤和鼠標(biāo)是PC機的主要輸入設(shè)備,用戶使用系統(tǒng)時會經(jīng)常進行鼠標(biāo)和鍵盤的操作,而動態(tài)分析系統(tǒng)由于是自動化分析,故缺乏相關(guān)的用戶交互動作.鼠標(biāo)的位置可以使用 GetCursorPos API獲取,鍵盤擊鍵的可以通過安裝全局hook進行監(jiān)視.表4總結(jié)了基于用戶交互環(huán)境差異的反虛擬化方法.
表4 基于用戶交互環(huán)境差異的反虛擬化方法
雖然部分特征可以通過定制鏡像或inbox的API hook應(yīng)對,但是并不徹底.比如注冊表中硬盤相關(guān)的字符串,可以通過修改注冊表鍵值移除,但是系統(tǒng)重啟之后,原有的鍵值由于備份的原因仍然會出現(xiàn),而通過inbox的hook注冊表鍵值打開,查詢等API的方式隱藏相關(guān)字符串方式,難免對操作系統(tǒng)做出修改,使得隱藏本身引入了新的檢測虛擬環(huán)境的特征.由于QEMU在惡意代碼動態(tài)分析中被廣泛使用,并且是開源的硬件模擬器,便于從源碼移除字符串類型的特征,實現(xiàn)outbox的API hook隱藏系統(tǒng)信息,因此本文選取在QEMU實現(xiàn)對抗基于主機環(huán)境的反虛擬化方法.
從源碼移除硬件特征需要熟悉QEMU啟動流程,通過搜索得到所有可能的硬件特征字符串,然后利用靜態(tài)數(shù)據(jù)流分析,判斷可疑字符串是否為模擬硬件使用,并評估是否可移除或替換,最后重新編譯,測試修改是否有效及是否對系統(tǒng)運行產(chǎn)生負面影響.
對于不便從源碼移除的特征,如內(nèi)存大小,hypervisor bit及基于性能差異的反虛擬化方法,采用outbox的 API hook 進行對抗.Outbox 的 API hook 框架如圖1所示.首先獲取被監(jiān)控目標(biāo),每當(dāng)遇到一個新的進程時,通過進程的環(huán)境控制塊TEB獲取進程名,與樣本名比較,若一致則表明該進程為被監(jiān)控目標(biāo),提取進程控制塊ETHREAD地址和當(dāng)前CR3為進程標(biāo)志.然后利用得到的CR3和ETHREAD對輪轉(zhuǎn)的進程/線程進行過濾,當(dāng)命中目標(biāo)進程且當(dāng)前IP地址為需要監(jiān)控的API地址時,接管當(dāng)前進程控制流,進行 hook 處理.最后重置相關(guān)參數(shù),進行清理工作,為下一輪hook做準(zhǔn)備.
API hook 的實現(xiàn)需要注意如下問題:(1)需要對被監(jiān)控進程/線程及其子進程/子線程進行;(2)避免對虛擬機運行產(chǎn)生負面影響;(3)盡量減少hook帶來的性能損耗.為了監(jiān)控目標(biāo)進程派生的線程樹和進程樹,對進程/線程的創(chuàng)建和銷毀的API進行監(jiān)控,使用列表維護目標(biāo)進程派生的后代,在進程過濾時查找該列表.為了避免對虛擬機運行產(chǎn)生負面影響,API監(jiān)控只針對目標(biāo)進程及其后代進程和線程.而為了降低hook帶來的性能消耗,在過濾進程時,若當(dāng)前IP處在用戶空間,則認為進程沒有切換,不再查找當(dāng)前進程的ETHREAD地址進行進程過濾.在首次尋找目標(biāo)進程時,可以維持一個列表用于緩存已經(jīng)檢視過的進程ETHREAD和CR3,以加速目標(biāo)進程的匹配.目前的實現(xiàn)沒有對目標(biāo)進程的子進程樹和子線程樹進行監(jiān)控.
表5中總結(jié)了基于硬件特征的反虛擬化對抗方法.根據(jù)表2,針對基于系統(tǒng)特征的反虛擬化方法主要包括6類.其中進程列表和服務(wù)列表不包含QEMU相關(guān)特征字符串,無需對抗.而注冊表鍵值和特殊文件所包含的特征字符串全部是硬件相關(guān)的,經(jīng)過測試,在從源碼移除硬件特征字符串后,注冊表和特殊文件(使用新的系統(tǒng)鏡像)不再包含QEMU相關(guān)特征字符串.
圖1 Outbox 的 API hook 流程圖
表5 基于硬件特征的反虛擬化對抗方法
針對基于時間的檢測方法,沒有通用有效的對抗方案.雖然隨著版本的更新迭代,硬件模擬器的性能在不斷提升,但目前仍然存在某些特殊任務(wù)能在宏觀或微觀上區(qū)分模擬硬件和真實硬件.如使用GPU渲染高幀率的游戲畫面,在模擬硬件上耗時遠超過真實硬件.Windows XP 上 GetProcessHeap 與 CloseHandle API調(diào)用耗時的比值在模擬硬件上超過10倍,而在真實硬件上兩者耗時相近.對于特征明顯,并且使用特定指令或API進行時間測量的任務(wù),可以通過hook相關(guān)API,修改時間測量結(jié)果的方法對抗.但是對于樣本運行某些在真實硬件耗時很少,而虛擬硬件耗時較多的”正?!钡娜蝿?wù),從而使動態(tài)分析超時的拖延戰(zhàn)術(shù),在耗時任務(wù)不易識別的情況下,很難實施有效的對抗方法.
時間測量計算的是代碼執(zhí)行前后時間的差值,因此hook API時關(guān)注的不是函數(shù)當(dāng)前的返回值,而是前后兩次返回值的差值.簡單的將前后兩次的差值置為定值或定值加上一個小范圍的隨機數(shù),不能滿足對抗的需要.差值為定值容易被檢測出來,且不符合現(xiàn)實情況,因為操作系統(tǒng)任務(wù)調(diào)度和外部事件的不確定性,即使相同代碼,執(zhí)行時間也可能不一致.加上隨機值模擬了執(zhí)行時間的不確定性,但仍可以通過測量Sleep的執(zhí)行時間進行檢測.如果測量得到的差值遠小于Sleep指定的時間,則說明Sleep函數(shù)或時間測量函數(shù)被patch,這都指示了樣本運行在虛擬機中.因此本文提出了如圖2所示的差值修改方法.
圖2 時間測量函數(shù)返回值曲線
圖中虛線為未調(diào)整的返回值曲線,斜率為1,實線為調(diào)整后的返回值曲線.實線形狀類似向上的臺階,臺階平面波動向上,即差值隨機化.臺階向上躍遷即不做修改,直接返回函數(shù)調(diào)用結(jié)果.躍遷的條件是自上次測量函數(shù)的調(diào)用經(jīng)過了超過閾值的時間,或者這期間調(diào)用了Sleep,SleepEx和NtDelayExecution等延時函數(shù),躍遷可以對抗通過測量Sleep執(zhí)行時間檢測虛擬機的方法,減小對兩次差值測量之間的代碼執(zhí)行時間產(chǎn)生的影響.閾值的大小決定了隱藏性能差異的大小.樣本第一次調(diào)用時間測量函數(shù)時,不對返回值進行修改.返回值修改只針對被監(jiān)控進程進行,不影響系統(tǒng)中其它進程對時間測量函數(shù)的調(diào)用.差值修改方法雖然在QEMU上實現(xiàn),但對其它虛擬化平臺也適用.表6總結(jié)了針對QEMU的基于系統(tǒng)特征的反虛擬化對抗方法.
表6 基于系統(tǒng)特征的反虛擬化對抗方法
INetSim[9](Internet Service Simulation Suite)是一款由Perl編寫的開源網(wǎng)絡(luò)服務(wù)模擬軟件.其提供DNS,HTTP,SMTP,IRC 等多種常見的網(wǎng)絡(luò)服務(wù)模擬,以支持惡意軟件的動態(tài)分析,同時支持使用配置文件對模擬服務(wù)進行個性化配置.因此本文在INetSim上實現(xiàn)基于網(wǎng)絡(luò)環(huán)境差異的反虛擬化方法的對抗.
基于網(wǎng)絡(luò)環(huán)境差異的反虛擬化方法包括性能差異和服務(wù)細節(jié)差異.針對性能差異,在服務(wù)響應(yīng)請求時延時一定時間,如 20 ms 至 40 ms,以與正常網(wǎng)絡(luò)的延時相近.由于INetSim采取Fork模式,每個請求都Fork一個子進程進行處理,因此使用進程睡眠延時的方式雖然降低了服務(wù)的吞吐率,但是不會對后續(xù)同類型和和其它類型請求造成影響.
針對服務(wù)細節(jié)差異,主要采用隨機化的方法改變原來服務(wù)返回的固定信息進行對抗,如DNS服務(wù)在解析不同域名時,從指定IP池中隨機返回一個,在服務(wù)初始化時,從指定的程序版本中隨機返回一個等.由于網(wǎng)絡(luò)服務(wù)獨立于主機環(huán)境,實現(xiàn)在INetSim的對抗方法適用于所有虛擬化平臺.表7總結(jié)了針對常用協(xié)議的反虛擬化對抗方法.
表7 常用協(xié)議的反虛擬化對抗方法
根據(jù)表4,基于用戶交互環(huán)境差異的反虛擬化方法主要包括用戶使用記錄和用戶交互動作兩類.針對用戶交互記錄,主要通過定制鏡像的方法進行對抗.由于組內(nèi)惡意代碼動態(tài)分析系統(tǒng)已有的系統(tǒng)鏡像經(jīng)過了幾年的定制更新,常見的軟件,用戶數(shù)據(jù),瀏覽器記錄,系統(tǒng)登錄日志等用戶使用記錄都具備,滿足對抗要求.考慮到從新的系統(tǒng)鏡像重新進行一輪定制的時間代價和最終效果,本文直接使用這個系統(tǒng)鏡像對抗基于用戶使用記錄的反虛擬化方法.
使用腳本模擬鼠標(biāo)的移動點擊和鍵盤的擊鍵,屬于inbox的方式,在對抗的同時也引入了新的反虛擬化特征.因此本文提出通過發(fā)送硬件事件的outbox方式提供用戶鼠標(biāo)和鍵盤動作的模擬.真實用戶操作在基于QEMU的虛擬機上,都是以發(fā)送事件的方式改變鼠標(biāo)和鍵盤的狀態(tài).本文實現(xiàn)了3種發(fā)送硬件事件的方式,分別是基于QEMU主循環(huán)的,基于線程的和基于QEMU定時器的.QEMU使用一個大循環(huán)處理外部事件和中斷,基于主循環(huán)的方式即在主循環(huán)中插入發(fā)送事件的代碼,但由于主循環(huán)執(zhí)行的頻率較高,而正常用戶的操作速度較慢,因此需要一個計數(shù)器指定主循環(huán)執(zhí)行若干次后觸發(fā)硬件發(fā)送事件,但是使用循環(huán)次數(shù)不好估計時間,難以精確事件發(fā)送的間隔.基于線程的方式則在QEMU啟動時單獨創(chuàng)建一個線程,線程在隨機睡眠一段時間后發(fā)送硬件事件,為了便于控制,模擬鼠標(biāo)和鍵盤的操作至少需要兩個線程.QEMU時鐘支持定時器以定期完成某些任務(wù),每次主循環(huán)都會檢測是否有到期的定時器,如果有,則執(zhí)行定時器預(yù)設(shè)的函數(shù).基于定時器的方式在QEMU時鐘上安裝定時器,定時器注冊的函數(shù)發(fā)送硬件事件并重置定時器,該函數(shù)的執(zhí)行時間不能過長,否則影響對其它外部事件的響應(yīng).考慮到三種實現(xiàn)方式的侵入性和性能損耗,采用基于定時器的實現(xiàn)鼠標(biāo)隨機移動和點擊,采用基于線程的方式實現(xiàn)鍵盤的隨機擊鍵.表7總結(jié)了基于用戶交互環(huán)境差異的反虛擬化對抗方法.
表8 基于用戶交互環(huán)境差異的反虛擬化對抗方法
實驗使用的樣本包括兩個部分,來源為網(wǎng)絡(luò)收集,組內(nèi)已有樣本和作者編寫的樣本.樣本集一的分布如表9示,總計113個.其中包括2個開源反虛擬化軟件pafish[10]和al-khaser[11],它們包含了多項針對主機環(huán)境差異和用戶交互環(huán)境差異的反虛擬檢測技術(shù).除了針對QEMU,VMware,VBOX等常見虛擬化平的的反虛擬化樣本外,還包括31個自編寫樣本,根據(jù)第2節(jié)總結(jié)的反虛擬方法,為每個檢測項編寫對應(yīng)的反虛擬化樣本作為補充,同時為了使樣本具有”惡意功能”,樣本在相應(yīng)的反虛擬檢測通過后,會表現(xiàn)出若干敏感行為,包括設(shè)置自身為開機自啟動,訪問baidu.com獲取當(dāng)前時間,啟動記事本進程并在5秒后將其關(guān)閉及在系統(tǒng)目錄創(chuàng)建名為invasion.txt的空文件.樣本集二為隨機選擇的1274個樣本,用于測試改進在真實樣本上的效果.
表9 反虛擬化對抗實驗樣本分布
如果改進后的動態(tài)分析系統(tǒng)觀察到更多的樣本行為,則認為改進是有效的.樣本行為數(shù)目統(tǒng)計樣本的進程操作,網(wǎng)絡(luò)訪問,文件操作和注冊表操作的數(shù)量.針對樣本可能在不同的運行過程中訪問不同站點,創(chuàng)建不同的文件名的臨時文件等影響樣本行為條目的隨機性問題,在統(tǒng)計相同類型行為數(shù)量時,只關(guān)注行為操作對象的相異性,而不關(guān)注操作對象的具體值,如樣本在一次運行過程中訪問 A,B,C 3 個站點,在另一次運行過程中訪問了 A,B,D 3 個站點,則認為樣本兩次運行產(chǎn)生的網(wǎng)絡(luò)行為數(shù)目相同,都訪問了3個不同的站點.
本文將反虛擬化對抗應(yīng)用到組內(nèi)已有的基于QEMU的惡意代碼動態(tài)分析系統(tǒng)上,并進行改進前后對比實驗.實驗中每個樣本的分析時間為默認的2分鐘,虛擬機鏡像為 Windows XP 32 位.
將樣本集上傳到改進前和改進后的動態(tài)分析系統(tǒng),然后下載XML格式的分析報告和網(wǎng)絡(luò)數(shù)據(jù)包cap文件,統(tǒng)計樣本的行為數(shù)目,進行對比分析.表10匯總了開源反虛擬化工具pafish和al-khaser在改進前后針對QEMU的檢測項的通過情況,其中”X”表示未通過,“√”表示通過.可以看到,經(jīng)過反虛擬化對抗,動態(tài)分析系統(tǒng)通過了pafish和al-khaser所有針對QEMU的反虛擬化檢測項.
表10 pafish 和 al-khaser實驗結(jié)果
表11展示了所有反虛擬化樣本的實驗結(jié)果(不計pafish和al-khaser).可見,改進后的動態(tài)分析系統(tǒng)在所有針對QEMU的作者編寫樣本和收集樣本中都觀察到了更多行為.而針對VMware和VBOX的反虛擬化樣本則和改進前的分析系統(tǒng)表現(xiàn)相同,這是因為改進前后的動態(tài)分析系統(tǒng)都是基于QEMU的,針對VMware和VBOX的反虛擬化方法自然不起作用,因此改進后的動態(tài)分析系統(tǒng)并沒有觀察到這些樣本的更多行為.
在樣本集二中,378個樣本觀察到更多行為數(shù)據(jù),為總樣本數(shù)的29.7%..說明反虛擬化對抗使動態(tài)分析系統(tǒng)更全面的了解樣本行為,同時也說明反虛擬化在實際樣本中使用廣泛.綜合樣本集一和樣本集二的實驗結(jié)果,反虛擬化對抗顯著增強了動態(tài)分析系統(tǒng)獲取樣本行為數(shù)據(jù)的能力.
表11 反虛擬化對抗實驗結(jié)果 (不計 pafish 和 al-khaser)
本文對當(dāng)前針對惡意代碼動態(tài)分析系統(tǒng)的反虛擬化方法進行了分類總結(jié),提出從惡意代碼動態(tài)分析系統(tǒng)的主機環(huán)境,網(wǎng)絡(luò)環(huán)境和用戶交互環(huán)境三個方面進行系統(tǒng)的反虛擬對抗的方法,并將反虛擬化對抗應(yīng)用到已有的基于QEMU的動態(tài)分析系統(tǒng)上,實驗結(jié)果表明反虛擬化對抗有效地幫助了動態(tài)分析系統(tǒng)對樣本行為的全面了解.現(xiàn)代CPU功能強大,硬件邏輯復(fù)雜,又缺乏公開的指令設(shè)計文檔,模擬CPU的指令執(zhí)行效果難免會有與真實CPU出入的地方,從而成為惡意代碼檢測虛擬CPU的特征.本文目前沒有對基于CPU語義差異的反虛擬方法進行對抗,這是未來工作方向之一.