999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于angr的對(duì)抗惡意代碼沙箱檢測(cè)方法的研究

2019-04-01 12:44:04張君濤王軼駿
關(guān)鍵詞:指令程序分析

張君濤 王軼駿 薛 質(zhì)

(上海交通大學(xué)電子信息與電氣工程學(xué)院 上海 200240)

0 引 言

遠(yuǎn)控木馬、僵尸網(wǎng)絡(luò)、蠕蟲以及近些年爆發(fā)的勒索軟件、挖礦木馬等各類惡意代碼影響著用戶對(duì)計(jì)算機(jī)的正常使用。針對(duì)特定目標(biāo)的APT攻擊,采用高度定制化的惡意代碼進(jìn)行魚叉攻擊,成為了國家信息安全面臨的重大威脅。因而,惡意代碼一直受到網(wǎng)絡(luò)安全從業(yè)人員以及研究人員的廣泛關(guān)注。

十多年前,研究者就已經(jīng)采用沙箱技術(shù)來分析惡意代碼。布谷鳥(Cuckoo)是一款開源且使用廣泛的沙箱軟件,利用虛擬化技術(shù)構(gòu)造出與真實(shí)環(huán)境隔離且擁有快速還原能力的系統(tǒng),研究人員通過分析代碼在沙箱中的所有行為,進(jìn)而判斷是否為惡意代碼。因此,針對(duì)惡意軟件的分析沙箱被認(rèn)為是防御APT的最后一道防線。病毒檢測(cè)廠商比如CrowdStrike、Malwr以及國內(nèi)的微步科技都利用沙箱技術(shù)提供惡意代碼在線檢測(cè)的服務(wù)。

惡意代碼開發(fā)者為了逃避沙箱檢測(cè),防止自身暴露,會(huì)在惡意代碼中加入環(huán)境探測(cè)代碼,當(dāng)發(fā)現(xiàn)自身運(yùn)行于異常環(huán)境中時(shí),就會(huì)停止惡意行為,運(yùn)行無害代碼或者結(jié)束運(yùn)行,達(dá)到逃避檢測(cè)的目的。據(jù)McAfee 2017年發(fā)布的《威脅報(bào)告》顯示,反沙箱機(jī)制超過反調(diào)試、反監(jiān)視、代碼混淆等方法,成為惡意代碼使用最為廣泛的逃避檢測(cè)手段[1]。此外,Lastline實(shí)驗(yàn)室在2015年指出,具有逃避檢測(cè)功能的惡意代碼的比例從2014年年初的35%上升至2014年12月的80%,并且往往結(jié)合數(shù)10種方法[2]。

本文采用angr對(duì)惡意代碼進(jìn)行動(dòng)態(tài)分析。angr是一款基于Python實(shí)現(xiàn),可利用動(dòng)態(tài)符號(hào)執(zhí)行進(jìn)行二進(jìn)制代碼分析的調(diào)試器[3]。相比于現(xiàn)有的分析方法,動(dòng)態(tài)符號(hào)執(zhí)行可以遍歷程序不同的分支,獲得惡意代碼更多的行為特征。這能有效避免外部環(huán)境比如C&C服務(wù)器的失效對(duì)分析惡意代碼產(chǎn)生的影響[4]。相對(duì)的,反沙箱機(jī)制卻會(huì)導(dǎo)致符號(hào)執(zhí)行面臨路徑爆炸的難題,特別是當(dāng)符號(hào)值作為循環(huán)語句的參數(shù)時(shí),產(chǎn)生大量無害分支,導(dǎo)致難以發(fā)現(xiàn)真正執(zhí)行惡意行為的分支[5]。

因而本文將首先對(duì)使用最為廣泛的惡意代碼沙箱檢測(cè)機(jī)制進(jìn)行分析;接著說明我們?yōu)閍ngr制定的拓展程序,用于對(duì)抗不同類型的反沙箱機(jī)制以及原型系統(tǒng)的實(shí)現(xiàn)方法;最后通過對(duì)沙箱檢測(cè)軟件al-khaser以及paranoid fish的測(cè)試,證明我們開發(fā)的原型系統(tǒng)可以繞過常見的反沙箱機(jī)制,有效防止符號(hào)執(zhí)行的路徑爆炸問題。

1 沙箱檢測(cè)常用技術(shù)

在惡意代碼分析領(lǐng)域,Sandboxie、布谷鳥、Anubis等是常見的沙箱軟件。然而,沙箱與真實(shí)環(huán)境存在一定的差別,沙箱為了監(jiān)控惡意代碼的行為、阻止惡意代碼從沙盒逃逸,部分采用進(jìn)程注入、函數(shù)掛鉤等機(jī)制監(jiān)控惡意代碼的行為[6-8]。有些沙箱利用虛擬化技術(shù)構(gòu)建真實(shí)操作系統(tǒng),但這些虛擬機(jī)存在特定的指紋信息[9-11]。因而,惡意代碼反沙箱方法可以分為基于沙箱的檢測(cè)以及基于虛擬機(jī)的檢測(cè)。

1.1 基于沙箱的檢測(cè)

Sandboxie與被分析的惡意代碼同處一個(gè)操作系統(tǒng)內(nèi),為了避免惡意代碼對(duì)真實(shí)系統(tǒng)產(chǎn)生影響,沙箱內(nèi)的程序?qū)φ鎸?shí)系統(tǒng)的文件、注冊(cè)表、進(jìn)程的訪問都需要獲得Sandboxie的授權(quán)。Sandboxie通過在內(nèi)核驅(qū)動(dòng)上掛載SbieDrv.sys實(shí)現(xiàn)對(duì)系統(tǒng)服務(wù)描述符表(SSDT)、Shadow SSDT表的掛鉤。通過將SbideDll.dll注入到進(jìn)入沙盒的程序中,實(shí)現(xiàn)對(duì)所有用戶態(tài)API函數(shù)的掛鉤。因而惡意代碼通過檢測(cè)程序自身是否被注入SbideDll.dll,即可成功繞過Sandboxie沙箱的檢測(cè)。

布谷鳥沙盒是蜜網(wǎng)社區(qū)2010年谷歌編程之夏的開源項(xiàng)目,經(jīng)過數(shù)年的開發(fā),其功能與性能不斷升級(jí),成為了目前較為流行的沙箱系統(tǒng)。布谷鳥沙箱可分為主從節(jié)點(diǎn),主節(jié)點(diǎn)主要負(fù)責(zé)任務(wù)的分發(fā)以及對(duì)惡意代碼運(yùn)行結(jié)果的分析展示。從節(jié)點(diǎn)為惡意代碼的動(dòng)態(tài)運(yùn)行提供真實(shí)的系統(tǒng)環(huán)境,為了能夠?qū)崿F(xiàn)系統(tǒng)的快速還原,從節(jié)點(diǎn)一般為虛擬機(jī)。布谷鳥同樣采取dll注入的方式來監(jiān)控Windows API的調(diào)用。此外,布谷鳥還采用API掛鉤的方法,因而David編寫的anti-cuckoo通過檢測(cè)ntdll.dll中的某幾個(gè)關(guān)鍵函數(shù)是否被篡改來探測(cè)布谷鳥程序。此外,anti-cuckoo通過檢查進(jìn)程的內(nèi)存空間中是否存在敏感詞,比如cuckoomon、HookHandle、retaddr-check等來探測(cè)是否運(yùn)行于布谷鳥中。

1.2 基于虛擬機(jī)的檢測(cè)

由于虛擬機(jī)具有快速還原的特點(diǎn)且與真實(shí)系統(tǒng)隔離,不僅僅是上一節(jié)敘述的布谷鳥、Anubis等沙箱使用虛擬機(jī)作為惡意代碼分析的宿主機(jī),反病毒研究員在日常分析惡意代碼行為時(shí),也大都使用虛擬機(jī)作為分析系統(tǒng)。常用的虛擬機(jī)有VirtualBox、Vmware、KVM、Xen等。惡意代碼針對(duì)虛擬機(jī)的檢測(cè)如圖1所示。

圖1 針對(duì)虛擬機(jī)檢測(cè)方法的分類

根據(jù)虛擬機(jī)操作系統(tǒng)的屬性進(jìn)行探測(cè)是惡意代碼檢測(cè)虛擬機(jī)的各類方法中手段最為豐富的一種方法。在虛擬機(jī)操作系統(tǒng)內(nèi),注冊(cè)表、文件系統(tǒng)、進(jìn)程、服務(wù)中存在各種虛擬機(jī)指紋特征。據(jù)統(tǒng)計(jì),安裝在Vmware上的WindowsXP虛擬機(jī)有超過50個(gè)與“Vmware”、“vmx”有關(guān)的文件,在注冊(cè)表中有超過500項(xiàng)鍵或鍵值與“Vmware”有關(guān)。此外,分析人員可能為用于惡意代碼分析的虛擬機(jī)設(shè)定特別的用戶名或重新命名惡意代碼程序,因而惡意代碼可以通過將這些敏感位置的名稱與自定義的黑名單列表匹配,來檢測(cè)是否為虛擬機(jī)。

虛擬機(jī)的硬件并非真實(shí)的硬件,因而通過模擬出的硬件信息也能夠探測(cè)虛擬機(jī)。和操作系統(tǒng)一樣,硬件也存在多種多樣的指紋信息,其指紋檢測(cè)包括對(duì)CPU、BIOS、硬盤類型的判斷以及對(duì)CPU名稱、網(wǎng)卡地址、網(wǎng)卡名稱、可插拔硬件設(shè)備的檢測(cè)。除此之外,考慮到為虛擬機(jī)分配的硬件資源往往小于真實(shí)計(jì)算機(jī)的硬件資源,因而可以通過對(duì)CPU核心數(shù)、內(nèi)存大小、硬盤容量的檢測(cè)來判斷是否為虛擬機(jī)。在虛擬機(jī)中,指令運(yùn)行的速度遠(yuǎn)遠(yuǎn)慢于真實(shí)系統(tǒng),因而部分惡意代碼通過計(jì)算指令運(yùn)行的時(shí)間來檢測(cè)虛擬機(jī)。

基于進(jìn)程的檢測(cè)是惡意代碼對(duì)自身運(yùn)行時(shí)虛擬內(nèi)存空間的探測(cè),常見的方法是檢測(cè)中斷描述符表(IDT)、全局描述符表(GDT)以及局部描述符表(LDT)在內(nèi)存中的地址。真實(shí)系統(tǒng)中,這些描述符表的位置基本在確定的地址附近,且完全不同于虛擬機(jī),因而具有較高的檢測(cè)正確率。

最后,是對(duì)特殊檢測(cè)方法的匯總。反圖靈測(cè)試是主動(dòng)探測(cè)人機(jī)交互的行為,在一定的時(shí)間間隔內(nèi),兩次獲取當(dāng)前鼠標(biāo)在屏幕上的位置坐標(biāo),比較兩次位置是否發(fā)生變化,從而檢測(cè)虛擬機(jī)。休眠是指在程序運(yùn)行后,休眠一段較長(zhǎng)的時(shí)間,再執(zhí)行惡意行為,往往虛擬機(jī)在惡意代碼真正運(yùn)行前已停止工作,因而可以有效地躲避分析。

2 對(duì)抗沙箱檢測(cè)方法

2.1 angr介紹

angr是美國圣巴巴拉大學(xué)ShellPhish團(tuán)隊(duì)研發(fā)的一款二進(jìn)制分析框架,其源代碼由Python編寫,在2015年項(xiàng)目得到開源,目前項(xiàng)目已迭代至第七個(gè)版本。angr可以實(shí)現(xiàn)動(dòng)靜態(tài)符號(hào)執(zhí)行、控制流平坦化、自動(dòng)化生成ROP鏈,應(yīng)用于漏洞挖掘與軟件破解,同時(shí)也是CTF比賽中逆向分析的常用工具之一[3,12-13]。使用者通過導(dǎo)入angr庫并編寫Python腳本實(shí)現(xiàn)對(duì)二進(jìn)制代碼的加載與分析。

angr由以下幾個(gè)子模塊組成,每個(gè)子模塊都可以獨(dú)立加載:

CLE(CLE Loads Everything)將可執(zhí)行程序加載進(jìn)內(nèi)存空間。例如,對(duì)于EXE程序,通過解析文件頭,獲得加載地址、各段對(duì)應(yīng)的文件與內(nèi)存的映射關(guān)系,進(jìn)而將主文件加載至虛化的內(nèi)存空間。接著,遞歸加載程序需要的dll文件。

Archinfo針對(duì)不同架構(gòu)的指令集,如x86、ARM、MIPS、PowerPC等,提供專有的類。每個(gè)類中都涉及寄存器類型、處理器位數(shù)、數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式以及是否支持VEX、Capstone、Unicorn、KeyStone等特性。

PyVEX可以將機(jī)器代碼轉(zhuǎn)化為Valgrind使用的中間語言VEX。通過VEX模擬執(zhí)行程序的代碼并修改內(nèi)存、寄存器的值。

Claripy是一個(gè)符號(hào)執(zhí)行求解器,其后端為Z3。

利用angr編寫Python腳本,對(duì)二進(jìn)制程序進(jìn)行分析的整體流程如圖2所示。首先,通過Project方法,加載程序至內(nèi)存空間,并得到包含加載對(duì)象名稱、各段地址空間、導(dǎo)入函數(shù)地址空間等屬性的project對(duì)象。接著,利用State方法初始化程序堆棧以及寄存器,得到可以動(dòng)態(tài)執(zhí)行的對(duì)象SimState。通過SimState對(duì)象可以查看、修改、符號(hào)化內(nèi)存空間以及寄存器的值,并且提供用于保存用戶自定義屬性的插件。由于動(dòng)態(tài)符號(hào)執(zhí)行會(huì)產(chǎn)生分支,得到多個(gè)Simstate對(duì)象,仿真管理器(Simulation Managers)提供了對(duì)所有分支進(jìn)行訪問以及管理的功能。此外,仿真管理器在程序運(yùn)行到某個(gè)地址或滿足某種條件時(shí),停止對(duì)應(yīng)分支執(zhí)行或者丟棄分支。

圖2 基于angr的程序分析流程

2.2 angr對(duì)抗沙箱檢測(cè)方法的原理

具有沙箱檢測(cè)功能的惡意代碼,大部分結(jié)合了十種以上的檢測(cè)機(jī)制,基于符號(hào)執(zhí)行的特點(diǎn),會(huì)帶來路徑爆炸的問題,淹沒惡意行為的分支。由于angr動(dòng)態(tài)的模擬程序運(yùn)行,可以方便地對(duì)Win32 API函數(shù)掛鉤、重寫VEX指令、完善內(nèi)存結(jié)構(gòu)。因而,針對(duì)于各種惡意代碼對(duì)沙箱的探測(cè),都可以采取措施進(jìn)行對(duì)抗。

2.2.1 Win32 API掛鉤

惡意代碼與普通EXE程序一樣,在運(yùn)行時(shí)動(dòng)態(tài)鏈接系統(tǒng)提供的庫函數(shù)。angr在模擬程序動(dòng)態(tài)運(yùn)行時(shí),提供了兩種方法實(shí)現(xiàn)Win32 API函數(shù)。由于CLE Loader已經(jīng)加載主程序以及其導(dǎo)入的dll文件至相應(yīng)的地址空間,因而可以直接運(yùn)行API函數(shù)對(duì)應(yīng)的代碼。對(duì)于大小寫變換、字符串比較型的函數(shù),比如tolower()、wcsstr()、lstrcmpiA(),這種方法可以達(dá)到很好的效果。但是,對(duì)于大多數(shù)需要系統(tǒng)信息或者進(jìn)行內(nèi)核函數(shù)調(diào)用的函數(shù),比如CreateFileA()、GetModuleHandleA(),往往會(huì)產(chǎn)生眾多分支,導(dǎo)致路徑爆炸甚至出現(xiàn)分支異常終止。第二種方法是對(duì)Win32 API函數(shù)掛鉤。首先,通過構(gòu)建SimProcedure類,并在類中定義與實(shí)際API函數(shù)具有相同參數(shù)數(shù)量以及類型的run函數(shù)模擬API的實(shí)現(xiàn)。在程序加載后,對(duì)project對(duì)象使用hook_symbol方法替換Win32 API函數(shù)。在程序執(zhí)行時(shí),當(dāng)指令指針指向Win32 API函數(shù)的首地址時(shí),實(shí)際執(zhí)行的是run函數(shù)中的Python代碼。

注冊(cè)表、文件、進(jìn)程、服務(wù)的指紋特征是惡意代碼檢測(cè)沙箱最為常見的方法。表1展示了沙箱檢測(cè)方法對(duì)應(yīng)的API函數(shù)調(diào)用序列。掛鉤這些函數(shù)并修改返回參數(shù)以及返回值即可繞過沙箱檢測(cè)。

表1 沙箱檢測(cè)方法調(diào)用的API函數(shù)序列

以RegOpenKeyExA函數(shù)為例,查閱微軟Win32 API手冊(cè),其參數(shù)分別為主鍵(hKey)、子鍵(lpSubKey)、ulOptions、訪問權(quán)限(samDesired)、注冊(cè)表句柄(phkResult)。如圖3所示。

圖3 RegOpenKeyExA函數(shù)的掛鉤流程

函數(shù)存在以下三種情況:

(1) 首先定義敏感鍵列表,包括vm、vmware、virtualbox、qemu等對(duì)注冊(cè)表檢測(cè)的核心詞語。接著,傳入的參數(shù)子鍵與敏感鍵列表匹配,如果匹配成功,則函數(shù)返回值為2(ERROR_FILE_NOT_FOUND),表示注冊(cè)表項(xiàng)不存在。這種方式,可以成功對(duì)抗惡意代碼對(duì)注冊(cè)表特定鍵值的檢測(cè)。如果匹配失敗,則執(zhí)行第二種情況。

(2) 首先定義敏感鍵值字典,字典中的鍵表示注冊(cè)表的子鍵,值表示注冊(cè)表的鍵名和鍵值,比如“HARDWAREDEVICEMAPSCSISCSI PORT 0SCSI BUS 0TARGET ID 0LOGICAL UNIT ID 0′: {′IDENTIFIER′: ′INTEL′}”。接著,比較傳入?yún)?shù)的子鍵是否等于敏感鍵值字典中的鍵,如果相等,則隨機(jī)產(chǎn)生注冊(cè)表句柄值并且函數(shù)返回值為0,表示注冊(cè)表存在并且成功打開。

(3) 如果前兩種情況都不滿足,根據(jù)符號(hào)執(zhí)行的特點(diǎn),將程序分支并符號(hào)化輸出。對(duì)于RegOpenKeyExA函數(shù),存在打開文件成功并寫入注冊(cè)表句柄以及打開文件未能成功兩種情況。前一種情況,符號(hào)化句柄且函數(shù)返回值為0;對(duì)于后一種情況,無需對(duì)句柄進(jìn)行賦值,只需符號(hào)化返回值。

如表1所示,打開注冊(cè)表鍵值需要兩個(gè)函數(shù),對(duì)于后序的RegQueryValueEx函數(shù),其傳入的注冊(cè)表句柄參數(shù)是一個(gè)隨機(jī)化的數(shù)值。為了獲得其對(duì)應(yīng)的子鍵名稱,進(jìn)而結(jié)合鍵名、鍵值兩個(gè)參數(shù)與定義的敏感鍵值字典進(jìn)行匹配,需要在RegOpenKeyExA函數(shù)中映射注冊(cè)表句柄與子鍵名稱。利用angr提供的自定義插件功能,可以為當(dāng)前SimState增加屬性,從而實(shí)現(xiàn)多個(gè)函數(shù)之間的狀態(tài)共享。

2.2.2 VEX指令修補(bǔ)

angr在模擬程序動(dòng)態(tài)執(zhí)行時(shí)依據(jù)中間語言VEX完成各項(xiàng)操作。VEX兼容大部分x86指令,實(shí)現(xiàn)對(duì)寄存器、內(nèi)存的修改,但是對(duì)于某些特殊指令,如表所示,當(dāng)程序分支執(zhí)行這些指令時(shí),該分支的狀態(tài)變?yōu)殄e(cuò)誤并且停止運(yùn)行。雖然angr對(duì)極少部分VEX指令,比如CPUID進(jìn)行了修補(bǔ),但不能滿足實(shí)際惡意代碼分析的需要,因而,我們對(duì)表2中的VEX指令都進(jìn)行修補(bǔ)。

表2 x86特殊指令與VEX指令的對(duì)照表

以指令CPUID為例,如圖4所示。eax寄存器是指令的輸入?yún)?shù),eax、ebx、ecx、edx寄存器保存指令執(zhí)行后返回信息,根據(jù)輸入?yún)?shù)不同,可以獲得CPU類型、制造商、商標(biāo)、序列號(hào)、緩存等一系列信息。在沙箱檢測(cè)中,當(dāng)輸入?yún)?shù)為0x1時(shí),往往是對(duì)返回值中ecx寄存器的最高位:hypervisor CPU位的檢測(cè),此時(shí)將ecx置為0,其他寄存器符號(hào)化。當(dāng)輸入?yún)?shù)為0x40000000時(shí),執(zhí)行指令獲得CPU型號(hào)并保存在ebx、ecx、edx寄存器中。每個(gè)寄存器代表4個(gè)字符,共同構(gòu)成12字符的型號(hào)名稱。通過與″KVMKVMKVM″、″VMwareVMware″、″XenVMMXenVMM″等字符比較,進(jìn)而判斷是否為虛擬機(jī)環(huán)境。當(dāng)輸入?yún)?shù)分別為0x80000002、0x80000003、0x80000004且執(zhí)行三次CPUID指令,可以獲得共48個(gè)字符的CPU名稱。通過賦值普通字符,比如″Intel(R) Core(TM)2 CPU 6600 @2.4 GHz″可以對(duì)抗檢測(cè)。

圖4 CPUID指令執(zhí)行流程

2.2.3 內(nèi)存結(jié)構(gòu)完善

angr利用state方法初始化程序,設(shè)定寄存器以及內(nèi)存空間的值,雖然可以實(shí)現(xiàn)代碼執(zhí)行,但不同于正常操作系統(tǒng),沒有在內(nèi)存中設(shè)置完整的PEB、TEB、TLS等結(jié)構(gòu)體。由于惡意代碼通過讀取結(jié)構(gòu)體對(duì)應(yīng)位置的值獲取硬件信息,比如PEB進(jìn)程環(huán)境塊的0x64字節(jié)代表CPU數(shù)量,進(jìn)而判斷是否運(yùn)行在虛擬機(jī)中。因而需要對(duì)angr的初始化文件打補(bǔ)丁,完善程序內(nèi)存中的結(jié)構(gòu)體。

2.2.4 angr特性

angr自身的特性同樣能夠?qū)箰阂獯a對(duì)沙箱的部分檢測(cè)方法。對(duì)于dll注入的檢測(cè),由于angr從外部實(shí)現(xiàn)對(duì)惡意代碼執(zhí)行流程的監(jiān)控,其內(nèi)存空間中不存在附加的dll函數(shù)。同時(shí),angr采用的Win32 API掛鉤并沒有改變內(nèi)存空間中API函數(shù)的內(nèi)容,從而繞過將API函數(shù)第一個(gè)操作碼與跳轉(zhuǎn)指令對(duì)應(yīng)的操作碼比較的檢測(cè)方法。

通過上文所述的各種方法,可以對(duì)抗大多數(shù)惡意代碼對(duì)沙箱的檢測(cè)。對(duì)于未知的檢測(cè)手段,基于angr動(dòng)態(tài)符號(hào)執(zhí)行的特點(diǎn),需要做到在其所有分支路徑中包含惡意行為的分支并且盡可能減少產(chǎn)生的分支數(shù)目。考慮到執(zhí)行Win32 API函數(shù)內(nèi)部的代碼會(huì)造成路徑爆炸,因而掛鉤所有Win32 API函數(shù)(除2.2.1節(jié)描述的字符串變換、比較型的函數(shù)),且在函數(shù)體內(nèi)不執(zhí)行任何操作,僅僅將函數(shù)的返回值設(shè)定為符號(hào)值。并且由于angr將未賦值的內(nèi)存空間作為符號(hào)值代入動(dòng)態(tài)執(zhí)行,雖然可能增加路徑分支的數(shù)目,卻可以確保惡意行為分支不被遺漏。

2.3 angr對(duì)抗沙箱檢測(cè)方法的實(shí)現(xiàn)

基于angr對(duì)抗惡意代碼沙箱檢測(cè)的原型系統(tǒng)的實(shí)現(xiàn)如圖5所示。首先,在程序加載時(shí),將auto_load_libs以及except_missing_libs兩個(gè)參數(shù)設(shè)置為真,并指定加載dll文件的路徑;其次,利用analyses對(duì)象中提供的CalleeCleanupFinder方法,對(duì)所有導(dǎo)入的API函數(shù)掛鉤,掛鉤的函數(shù)體內(nèi)不執(zhí)行任何操作;接著,將Win32_API_Hooking.py文件中定義的函數(shù)掛鉤程序,對(duì)于同一個(gè)API函數(shù),這一步的掛鉤將覆蓋CalleeCleanupFinder中的掛鉤;之后,利用angr提供的SimStatePlugin對(duì)象,注冊(cè)可以增加SimState屬性的插件。最后,使用動(dòng)態(tài)符號(hào)執(zhí)行模擬程序的運(yùn)行。

圖5 對(duì)抗惡意代碼沙箱檢測(cè)的原型系統(tǒng)

對(duì)于2.2節(jié)中提到的方法,在原型系統(tǒng)實(shí)現(xiàn)時(shí),對(duì)于Win32 API函數(shù)掛鉤,只需要在Win32_API_Hooking.py文件中創(chuàng)建與API函數(shù)名稱一致的類并實(shí)現(xiàn)函數(shù)執(zhí)行的方法,就可以通過angr提供的接口函數(shù)hook_symbol將API函數(shù)掛鉤。而對(duì)于VEX指令修補(bǔ)以及內(nèi)存結(jié)構(gòu)完善兩種方法,需要通過修改angr的源代碼,從而實(shí)現(xiàn)功能,對(duì)應(yīng)修改的文件分別是angr/engines/vex/dirty.py以及angr/simos/windows.py。

表3列舉了原型系統(tǒng)對(duì)抗沙箱檢測(cè)各類方法時(shí)采取的應(yīng)對(duì)措施。考慮到不同指令、函數(shù)功能上的差異,相應(yīng)的修補(bǔ)方式也不盡相同,修補(bǔ)代碼的實(shí)現(xiàn)遵循這兩條原則:對(duì)于單指令、單函數(shù)的修補(bǔ),首先判斷輸入的參數(shù)與沙箱檢測(cè)時(shí)使用的參數(shù)是否一致,如果能夠匹配,使用對(duì)抗沙箱檢測(cè)的方法,否則符號(hào)化函數(shù)的輸出參數(shù)以及返回值;對(duì)于序列化的函數(shù),采用的修補(bǔ)方式不僅需要滿足單函數(shù)修補(bǔ)原則,并且利用插件功能記錄程序執(zhí)行的狀態(tài),后序函數(shù)實(shí)現(xiàn)時(shí)需要考慮前序函數(shù)及其參數(shù)是否已經(jīng)滿足沙箱檢測(cè)的條件。

表3 對(duì)抗沙箱檢測(cè)的方法

續(xù)表3

3 測(cè)試與分析

基于angr對(duì)抗沙箱檢測(cè)方法的原型系統(tǒng)使用最新的angr7,并且通過OSX Sierra系統(tǒng)下Python2.7中的測(cè)試。用于angr加載惡意代碼的dll文件拷貝于32位Windows XP SP3系統(tǒng)中的system32文件夾。al-khaser以及paranoid fish是兩款用于對(duì)沙箱、虛擬機(jī)進(jìn)行檢測(cè)的開源項(xiàng)目,均使用C++編程實(shí)現(xiàn),其搜集并總結(jié)了122類惡意代碼使用的方法,并且al-khaser仍處于不斷更新的狀態(tài)。為了便于分析,我們使用32位編譯器生成用于分析的EXE文件。

微步科技提供的微步云沙箱,內(nèi)核集成了人機(jī)交互、反沙箱檢測(cè)、內(nèi)核級(jí)分析、網(wǎng)絡(luò)模擬等多個(gè)高級(jí)分析模塊。CrowdStrike公司的VxStream沙箱是基于機(jī)器學(xué)習(xí)的下一代惡意軟件掃描器。值得一提的是,可以在其掃描配置中將反沙箱檢測(cè)設(shè)為強(qiáng)等級(jí)。對(duì)于al-khaser以及paranoid fish,我們分別使用布谷鳥沙箱2.0.4版本、微步云沙箱以及強(qiáng)反沙箱檢測(cè)等級(jí)的VxStream進(jìn)行掃描,其分析環(huán)境均為Windows 7,與原型系統(tǒng)分析比較的結(jié)果如表4所示,其中T代表惡意代碼檢測(cè)出沙箱環(huán)境、F代表未能檢測(cè)出沙箱環(huán)境。為了簡(jiǎn)化表格,表4中沒有列出四款系統(tǒng)均能識(shí)別的沙箱檢測(cè)技巧以及paranoid fish與al-khaser中重復(fù)的檢測(cè)技巧。

表4 針對(duì)al-khaser以及paranoid fish的檢測(cè)結(jié)果

續(xù)表4

從表4的結(jié)果可知,相比于開源的布谷鳥平臺(tái),微步云沙箱以及VxStream沙箱在對(duì)抗惡意代碼檢測(cè)沙箱環(huán)境方面均有一定的提升,特別是設(shè)置了強(qiáng)反沙箱等級(jí)的VxStream檢出率僅僅為7/122。但是對(duì)于由匯編代碼直接獲取系統(tǒng)信息的檢測(cè)方法,比如cpuid、rdtsc,這幾種沙箱都未能成功對(duì)抗。本文設(shè)計(jì)的原型系統(tǒng)能夠成功繞過大部分檢測(cè)方法,因而顯著優(yōu)于現(xiàn)有的在線沙箱檢測(cè)平臺(tái)。

4 結(jié) 語

本文基于angr提出了一種能夠?qū)箰阂獯a針對(duì)沙箱環(huán)境進(jìn)行探測(cè)的二進(jìn)制代碼分析方法。原型系統(tǒng)采用Win32 API函數(shù)掛鉤、VEX指令修補(bǔ)以及內(nèi)存結(jié)構(gòu)完善三種方法,針對(duì)常見的惡意代碼反沙箱機(jī)制采取相應(yīng)的修補(bǔ)措施。實(shí)驗(yàn)表明,本文提出的方法在對(duì)抗惡意代碼沙箱檢測(cè)方面,優(yōu)于其他傳統(tǒng)的方法。因此,在本文的基礎(chǔ)上,利用angr動(dòng)態(tài)符號(hào)執(zhí)行的特點(diǎn),自動(dòng)化地捕獲惡意代碼的行為特征是我們下一步的研究工作。

猜你喜歡
指令程序分析
聽我指令:大催眠術(shù)
隱蔽失效適航要求符合性驗(yàn)證分析
試論我國未決羈押程序的立法完善
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電力系統(tǒng)不平衡分析
電子制作(2018年18期)2018-11-14 01:48:24
“程序猿”的生活什么樣
英國與歐盟正式啟動(dòng)“離婚”程序程序
電力系統(tǒng)及其自動(dòng)化發(fā)展趨勢(shì)分析
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 在线国产综合一区二区三区| 国产乱码精品一区二区三区中文 | 99久久无色码中文字幕| 亚洲天堂首页| 久久综合丝袜长腿丝袜| 在线观看免费黄色网址| 久久久久久午夜精品| 中文毛片无遮挡播放免费| 中文字幕无码制服中字| 国产青青操| 视频二区国产精品职场同事| 国产亚洲高清视频| 国产成人AV男人的天堂| 国产精品久线在线观看| 中文字幕无码av专区久久| 免费在线不卡视频| www.99在线观看| 奇米影视狠狠精品7777| 99精品福利视频| 日本精品视频| 国产91视频观看| 亚洲区第一页| 欧美劲爆第一页| 在线观看国产小视频| 久久国产精品夜色| 久久精品免费看一| 亚洲va欧美va国产综合下载| 伊人久久大香线蕉影院| 国产打屁股免费区网站| 中国特黄美女一级视频| 国产原创自拍不卡第一页| 福利小视频在线播放| 免费无码又爽又黄又刺激网站| 91视频99| 精品欧美一区二区三区久久久| 性欧美久久| 免费jjzz在在线播放国产| 亚洲Aⅴ无码专区在线观看q| 91免费片| 欧美国产精品不卡在线观看| 久久无码av三级| 色婷婷视频在线| 秋霞午夜国产精品成人片| 青青草原国产一区二区| 亚洲第一成年网| 超碰91免费人妻| 99久久精品免费看国产电影| 亚洲男人在线| 精品国产女同疯狂摩擦2| 国产网站免费观看| 国产成人精品亚洲日本对白优播| 国产9191精品免费观看| 精品一区二区三区波多野结衣 | 精品国产Ⅴ无码大片在线观看81| 亚洲免费三区| 欧美一级大片在线观看| 福利一区三区| 日韩最新中文字幕| 中文字幕 91| 波多野结衣中文字幕一区二区| 国产欧美视频在线观看| 国产精品无码AⅤ在线观看播放| 日韩欧美在线观看| 成年片色大黄全免费网站久久| 99视频在线免费观看| 成年人久久黄色网站| 天堂亚洲网| 国产视频久久久久| 美女被操黄色视频网站| 99久久精品无码专区免费| 久久一本日韩精品中文字幕屁孩| 久久国产精品麻豆系列| 色婷婷在线播放| 九九热精品免费视频| 18禁色诱爆乳网站| 国内精品久久久久久久久久影视 | 亚洲动漫h| 亚洲国产精品日韩欧美一区| 久久动漫精品| 亚洲午夜片| 高h视频在线| 尤物精品国产福利网站|