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