專利名稱:一種惡意代碼捕獲方法
技術(shù)領(lǐng)域:
本發(fā)明屬于網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,具體涉及ー種基于硬件模擬器和污點傳播的惡意代碼捕獲方法。
背景技術(shù):
隨著社會的不斷發(fā)展和進(jìn)步,計算機(jī)在社會各個領(lǐng)域的應(yīng)用越來越廣泛。由于軟件漏洞的廣泛存在和用戶安全意識的不足,木馬的傳播速度越來越快,感染范圍不斷擴(kuò)大,造成的破壞日益嚴(yán)重。傳統(tǒng)的惡意代碼捕獲和分析手段由于受分析效率和用戶技術(shù)水平的限制,響應(yīng)周期難以縮短,響應(yīng)速度已經(jīng)逐漸不能適應(yīng)這種新情況。因此,提高惡意代碼的捕獲和分析能力顯得十分必要?,F(xiàn)有的惡意代碼捕獲工具,如360云安全平臺、金山云安全平臺等,必須對操作系統(tǒng)進(jìn)行修改,如Hook系統(tǒng)函數(shù),或者通過PsSetCreateProcessNotifyRoutine注冊■回調(diào)函數(shù),才能實現(xiàn)相應(yīng)的捕獲功能。而由于對操作系統(tǒng)做修改,本身會引起完整性問題,因此被修改的數(shù)據(jù)補(bǔ)丁或者注冊的函數(shù)很容易被惡意代碼發(fā)現(xiàn),并產(chǎn)生相應(yīng)的對抗手段。同時由于當(dāng)前的惡意代碼捕獲平臺,都是在跟惡意代碼同一操作系統(tǒng)上運行,在對系統(tǒng)的控制權(quán)上和惡意代碼產(chǎn)生競爭關(guān)系,不利于準(zhǔn)確而穩(wěn)定的實現(xiàn)惡意代碼捕獲。當(dāng)前的惡意代碼捕獲技術(shù),通常使用如下的幾種方法I.系統(tǒng)完整性校驗系統(tǒng)完整性校驗方法首先在干凈的系統(tǒng)上創(chuàng)建系統(tǒng)快照或記錄系統(tǒng)中文件散列數(shù)據(jù)的記錄,在系統(tǒng)運行時隨機(jī)或在特定行為執(zhí)行后,將記錄的系統(tǒng)快照或文件散列值和當(dāng)前文件的相比較,當(dāng)比較結(jié)果出現(xiàn)差異時,認(rèn)為感染了惡意代碼并提取惡意代碼的樣本。2.啟發(fā)式檢測,提取違規(guī)行為啟發(fā)式檢測的方法是通過定義正常操作,以其為基準(zhǔn)比較代碼執(zhí)行流程中所產(chǎn)生的行為,度量當(dāng)前惡意代碼行為和正常操作之間的差異,當(dāng)行為偏離正常操作較遠(yuǎn)時,認(rèn)為是惡意行為,提取執(zhí)行該行為的惡意代碼樣本。目前分析隱藏進(jìn)程中惡意代碼的虛擬機(jī)調(diào)試分析方法,應(yīng)用VMware、VirtualPC等虛擬機(jī)系統(tǒng)實現(xiàn)。虛擬機(jī)系統(tǒng)將虛擬指令直接交給本地的真實CPU執(zhí)行,同時自身存在后門。隱藏進(jìn)程中的惡意代碼可通過檢查代碼執(zhí)行時間,或者調(diào)用虛擬機(jī)后門功能的方法判別自己在一個虛擬系統(tǒng)上運行,采取操作隱藏真實功能。綜上,目前惡意代碼樣本提取的主要缺陷在于隱藏進(jìn)程和惡意代碼處于同一層次上,容易被惡意代碼檢測并產(chǎn)生相應(yīng)的對抗手段;僅能夠提取惡意代碼樣本,而對其行為和攻擊過程的分析不足。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明的目的在于提供一種基于硬件模擬器的惡意代碼捕獲方法,通過構(gòu)建惡意代碼運行環(huán)境,操縱和控制模擬CPU指令和各種模擬硬件的訪問操作,硬件模擬器中的數(shù)據(jù)采集模塊收集系統(tǒng)中所有進(jìn)程的信息,以CR3為標(biāo)志,分析進(jìn)程執(zhí)行過程;監(jiān)控所有進(jìn)程的運行過程,從虛擬內(nèi)存中直接提取惡意代碼鏡像,分析攻擊數(shù)據(jù)和攻擊過程的相互關(guān)系,提取惡意代碼執(zhí)行的行為特征和攻擊數(shù)據(jù)特征。本發(fā)明的技術(shù)方案為
一種惡意代碼捕獲方法,其步驟為I)配置硬件模擬器,硬件模擬器加載并啟動目標(biāo)操作系統(tǒng);2)硬件模擬器讀取目標(biāo)操作系統(tǒng)的虛擬內(nèi)存,識別當(dāng)前系統(tǒng)中執(zhí)行的所有進(jìn)程及進(jìn)程所加載的動態(tài)庫中的導(dǎo)出表,獲取所述導(dǎo)出表中所有API的地址并攔截網(wǎng)絡(luò)接收API函數(shù);3)根據(jù)網(wǎng)絡(luò)接收API函數(shù)的返回值,將進(jìn)程由網(wǎng)絡(luò)接收到的數(shù)據(jù)包標(biāo)記為污點數(shù)據(jù)包;4)硬件模擬器反匯編當(dāng)前進(jìn)程執(zhí)行的指令,如果該指令的源操作數(shù)偏移地址和長度在污點數(shù)據(jù)包范圍內(nèi),則對該指令進(jìn)行污點傳播計算,如果該指令為API函數(shù)調(diào)用指令,則根據(jù)API地址獲取該API名稱并查詢其傳入?yún)?shù)的偏移和長度是否屬于污點數(shù)據(jù)范圍,如果屬于污點數(shù)據(jù)范圍則對該API調(diào)用進(jìn)行污點傳播計算;5)判定污點傳播過程中當(dāng)前進(jìn)程的狀態(tài)是否發(fā)生異常行為,如果發(fā)生異常行為則判定當(dāng)前進(jìn)程為惡意代碼,并從目標(biāo)操作系統(tǒng)的內(nèi)存中提取惡意代碼鏡像。進(jìn)一步的,所述配置硬件模擬器包括配置硬件模擬器的模擬內(nèi)存大小、模擬CPU的類型、虛擬硬盤。進(jìn)一步的,配置硬件模擬器的虛擬硬盤的方法為采用線性尋址的方法創(chuàng)建虛擬鏡像文件,將所創(chuàng)建虛擬鏡像文件作為虛擬的硬盤。進(jìn)一步的,獲取所述導(dǎo)出表中所有API的地址的方法為比較所述動態(tài)庫的導(dǎo)出表中的名稱與API表中的名稱,獲取所述導(dǎo)出表中所有API的地址。進(jìn)一步的,所述污點傳播計算的方法為根據(jù)當(dāng)前進(jìn)程執(zhí)行的指令,判定污點數(shù)據(jù)包所產(chǎn)生的污點數(shù)據(jù)所影響的變量和寄存器。進(jìn)一步的,所述異常行為包括當(dāng)前進(jìn)程對應(yīng)堆棧中的函數(shù)返回地址被污點數(shù)據(jù)包或者由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù)覆蓋、當(dāng)前進(jìn)程執(zhí)行的API調(diào)用序列與預(yù)定義的異常行為序列匹配。進(jìn)一步的,判定當(dāng)前進(jìn)程的狀態(tài)是否發(fā)生異常行為的方法為I)設(shè)置一異常行為序列,硬件模擬器讀取并在內(nèi)存中維護(hù)一個異常行為序列的單鏈表數(shù)據(jù)結(jié)構(gòu);2)在當(dāng)前進(jìn)程的對應(yīng)結(jié)構(gòu)中創(chuàng)建污點記錄;同時建立污點行為列表,記錄當(dāng)前進(jìn)程對污點數(shù)據(jù)包或由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù)進(jìn)行操作的指令和API調(diào)用;3)從當(dāng)前進(jìn)程網(wǎng)絡(luò)數(shù)據(jù)接收函數(shù)返回的時刻開始,分析該進(jìn)程后續(xù)執(zhí)行的每一條指令如果該指令操作了污點數(shù)據(jù),則將當(dāng)前指令得到的結(jié)果作為由污點數(shù)據(jù)包產(chǎn)生的污點加入到所述污點記錄中,并將該指令加入污點行為列表;如果是API調(diào)用,并且該API調(diào)用的參數(shù)含有污點數(shù)據(jù)包或由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù),則將該API調(diào)用加入污點行為列表;
4)判定污點數(shù)據(jù)操作的目標(biāo)地址是否覆蓋了函數(shù)的返回地址,如果覆蓋則判定當(dāng)前進(jìn)程的狀態(tài)發(fā)生異常行為;根據(jù)污點行為列表判定進(jìn)程執(zhí)行的API調(diào)用與內(nèi)存中的異常行為序列是否匹配,如果匹配,則判定當(dāng)前進(jìn)程的狀態(tài)發(fā)生異常行為。進(jìn)ー步的,提取所述惡意代碼鏡像的方法為對污點行為列表進(jìn)行回溯,根據(jù)異常行為進(jìn)程所調(diào)用的API和執(zhí)行的指令,找到該進(jìn)程的行為序列依賴的污點數(shù)據(jù),即為捕獲到的惡意代碼;同時提取攻擊過程執(zhí)行的數(shù)據(jù)在整個污點數(shù)據(jù)包中的偏移、長度和內(nèi)容。進(jìn)ー步的,所述異常行為序列為ー系列連續(xù)的API操作一種惡意代碼捕獲方法,其使用方法如下I.配置鏡像路徑、硬件模擬器的模擬內(nèi)存大小及模擬CPU的類型;硬件模擬器加載す呆作系統(tǒng)鏡像以啟動目標(biāo)系統(tǒng);2.利用硬件模擬器讀取當(dāng)前系統(tǒng)內(nèi)存,解析系統(tǒng)內(nèi)存數(shù)據(jù),識別當(dāng)前系統(tǒng)中執(zhí)行的所有進(jìn)程及進(jìn)程所加載的動態(tài)庫中的導(dǎo)出表;比較所述動態(tài)庫的導(dǎo)出表中的名稱與API表中的名稱,獲取所述導(dǎo)出表中所有API的地址并攔截預(yù)定義的網(wǎng)絡(luò)的API函數(shù)WSARecv、recv和RecvFrom (即網(wǎng)絡(luò)接收API)。3.根據(jù)第2步中攔截的網(wǎng)絡(luò)接收API函數(shù)的返回值,獲取進(jìn)程由網(wǎng)絡(luò)接收到的數(shù)據(jù)包,標(biāo)記該數(shù)據(jù)包為污點數(shù)據(jù)。4.硬件模擬器在當(dāng)前進(jìn)程執(zhí)行過程中反匯編并分析當(dāng)前進(jìn)程執(zhí)行的指令,如果當(dāng)前進(jìn)程指令的源操作數(shù)的地址和偏移屬于第2步中生成的污點源數(shù)據(jù),則需要對該指令進(jìn)行污點傳播計算。如果該指令為API函數(shù)調(diào)用指令,則根據(jù)API地址獲取該API名稱并查詢其傳入?yún)?shù)的地址和偏移是否屬于污點數(shù)據(jù),如果屬于污點數(shù)據(jù)則對該API調(diào)用進(jìn)行污點傳播計算;污點傳播運算,即根據(jù)當(dāng)前進(jìn)程執(zhí)行的指令,判定污點數(shù)據(jù)包以及該數(shù)據(jù)包所產(chǎn)生的污點數(shù)據(jù)所影響的變量和寄存器。為了進(jìn)行傳播運算,我們解析了 CPU指令的操作碼、源操作數(shù)和目的操作數(shù)對于每一條指令,如果其源操作數(shù)引用了污點數(shù)據(jù),則其目的操作數(shù)也被標(biāo)記為污點數(shù)據(jù)。進(jìn)行污點傳播的目的,是為了更加準(zhǔn)確的提取在進(jìn)程執(zhí)行過程中對網(wǎng)絡(luò)輸入數(shù)據(jù)的處理過程。在污點傳播過程中,判定當(dāng)前進(jìn)程的狀態(tài),如當(dāng)前進(jìn)程對應(yīng)堆棧中的返回地址是否被污點數(shù)據(jù)所覆蓋,是否執(zhí)行了連續(xù)的API調(diào)用序列實現(xiàn)數(shù)據(jù)轉(zhuǎn)發(fā)的行為等。5.定義異常行為在程序執(zhí)行過程中判定當(dāng)前進(jìn)程對應(yīng)堆棧中的函數(shù)返回地址是否被污點數(shù)據(jù)包或者由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù)覆蓋,或當(dāng)前進(jìn)程執(zhí)行的API調(diào)用序列與預(yù)定義的異常行為序列匹配;通過上述兩種方法判定異常行為。如果發(fā)現(xiàn)異常行為,則開始回溯整個污點傳播計算過程,判定污點數(shù)據(jù)中不同的數(shù)據(jù)范圍和其對該攻擊過程所起到的作用,獲得其在污點源中的偏移、長度、內(nèi)容和作用信息并以日志文件的格式輸出。進(jìn)ー步,在上述步驟4中檢測到進(jìn)程狀態(tài)的非法改變,則自動提取樣本。其過程為硬件模擬器中集成的監(jiān)控程序在監(jiān)控進(jìn)程的執(zhí)行指令吋,根據(jù)獲取到的進(jìn)程EPR0CESS結(jié)構(gòu)獲取進(jìn)程加載地址,以該地址為起點讀取物理內(nèi)存中的代碼,分析進(jìn)程可執(zhí)行文件的PE結(jié)構(gòu),確定需要讀取的文件在內(nèi)存中的范圍;并根據(jù)內(nèi)存頁表找到相應(yīng)的內(nèi)存頁在虛擬物理內(nèi)存的位置,依據(jù)獲取的地址偏移和在內(nèi)存中的文件長度,一次性讀出代碼鏡像。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點和積極效果如下I.本發(fā)明由于數(shù)據(jù)采集通過硬件模擬技術(shù)實現(xiàn),而不是將惡意代碼放在真實的CPU上執(zhí)行,惡意代碼無法感知自身是否運行在虛擬環(huán)境中,也無法分辨自身是否被跟蹤,從而實現(xiàn)對惡意代碼完全透明的分析。2.本發(fā)明的模擬硬件設(shè)備的所有虛擬CPU的指令和各種硬件操作都在翻譯之后模擬執(zhí)行,而不是直接使用代碼片段在真實機(jī)器上執(zhí)行,可在指令運行過程中精確計算該條指令運行的時間,從而保證了虛擬環(huán)境的透明性。3.本發(fā)明基于污點傳播對惡意代碼進(jìn)行分析,通過識別污點數(shù)據(jù)的運算過程來判定惡意操作和攻擊行為,具有更高的效率和準(zhǔn)確性。
圖I基于硬件模擬器和污點傳播的惡意代碼捕獲方法示意圖。圖2基于硬件模擬器和污點傳播的惡意代碼捕獲方法流程圖。
具體實施例方式下面結(jié)合附圖詳細(xì)說明本發(fā)明的技術(shù)方案如圖I所示,一種基于硬件模擬器和污點傳播的惡意代碼捕獲方法及系統(tǒng),包括步驟I、創(chuàng)建目標(biāo)文件運行所需的操作系統(tǒng)鏡像本發(fā)明采用線性尋址的方法,創(chuàng)建虛擬鏡像文件,該文件作為虛擬的硬盤使用,以其為基礎(chǔ)在虛擬化分析平臺上安裝操作系統(tǒng)。2、配置并啟動硬件模擬器配置操作系統(tǒng)的鏡像路徑,獲取實際運行的操作系統(tǒng)鏡像所在位置;配置硬件模擬器的模擬物理內(nèi)存大小、系統(tǒng)啟動時間及模擬CPU的類型,硬件模擬器根據(jù)輸入的內(nèi)存大小分配相應(yīng)大小的內(nèi)存空間,作為模擬的物理內(nèi)存;根據(jù)輸入的系統(tǒng)啟動時間設(shè)定模擬器的系統(tǒng)時鐘;根據(jù)模擬CPU的類型選擇相應(yīng)的指令譯碼引擎,實現(xiàn)源指令和目標(biāo)指令的翻譯執(zhí)行。在完成上述操作后,硬件模擬器讀取操作系統(tǒng)鏡像中的引導(dǎo)代碼,將EIP跳轉(zhuǎn)到該引導(dǎo)代碼處啟動該操作系統(tǒng)。其中,本發(fā)明的虛擬內(nèi)存通過在真實機(jī)器上直接申請相應(yīng)大小的內(nèi)存進(jìn)行模擬。配置模擬內(nèi)存的大小是虛擬操作系統(tǒng)運行的基礎(chǔ),模擬內(nèi)存設(shè)置越大,則虛擬操作系統(tǒng)運行越快。本實施例給出模擬內(nèi)存的大小配置在216M IG之間。本發(fā)明定義當(dāng)前模擬CPU的類型,是通過硬件模擬器的譯碼模塊獲得,使得模擬CPU的指令轉(zhuǎn)化為本地CPU的指令再運行,在虛擬機(jī)上運轉(zhuǎn)的操作系統(tǒng)能夠正確的執(zhí)行指令,本發(fā)明可以模擬多種CPU。例如若當(dāng)前的鏡像是從一臺P4的機(jī)器上讀取出來,則本發(fā)明需要將硬件模擬器模擬CPU的類型配置為P4,而不能是ARM或者M(jìn)IPS等其他類型CPU,否則該操作系統(tǒng)無法正確運行。若真實CPU是Intel P4,而本發(fā)明硬件模擬器模擬的CPU 是ARM,則需利用譯碼模塊將ARM的指令轉(zhuǎn)化為一條或者多條Intel P4的指令。3、硬件模擬器執(zhí)行目標(biāo)操作系統(tǒng)的指令,識別進(jìn)程的系統(tǒng)調(diào)用和執(zhí)行的指令應(yīng)用層的程序通過API來訪問操作系統(tǒng)。本實施例使用地址比較的方法獲取系統(tǒng)調(diào)用。在進(jìn)程被調(diào)度執(zhí)行之前,此時進(jìn)程的代碼還沒有執(zhí)行,但是自身的可執(zhí)行文件和進(jìn)程需要的動態(tài)庫都已經(jīng)被映射進(jìn)內(nèi)存。故本發(fā)明在進(jìn)程加載之后,代碼執(zhí)行之前,通過硬件模擬器的內(nèi)存管理模塊機(jī),讀取進(jìn)程的內(nèi)存,并分析進(jìn)程加載的動態(tài)庫中的導(dǎo)出表,導(dǎo)出表包括API名稱和API地址,本發(fā)明通過采用字符比較的方法,比較導(dǎo)出表中API名稱與API表中的名稱,獲取導(dǎo)出表中所有API的地址,將所有API地址加入到API表,所述API表包括API名稱、API地址及API參數(shù)和返回值。隱藏進(jìn)程執(zhí)行中,將隱藏進(jìn)程的EIP值與API表中函數(shù)地址的參數(shù)逐一做匹配比較。若EIP值與API表中每個函數(shù)的第一條指令相匹配,則調(diào)用解析函數(shù),讀取堆棧和當(dāng)前CPU中的通用寄存器,獲取函數(shù)參數(shù)和返回地址,當(dāng)函數(shù)執(zhí)行到返回地址時讀取eax寄存器獲取函數(shù)返回值;硬件模擬器中數(shù)據(jù)采集模塊記錄該指令及該指令執(zhí)行的數(shù)據(jù),其中,指令執(zhí)行的數(shù)據(jù)包括該指令打開的文件、打開的端ロ、通過某端ロ發(fā)送的數(shù)據(jù)、訪問的文件、創(chuàng)建的進(jìn)程和線程、創(chuàng)建或終止的服務(wù)、創(chuàng)建或使用的操作系統(tǒng)同歩/互斥量、網(wǎng)絡(luò)數(shù)據(jù)發(fā)送操作的內(nèi)容,文件創(chuàng)建操作的文件名等信息。4、判定程序執(zhí)行異常和非法行為對進(jìn)程執(zhí)行過程進(jìn)行污點傳播分析,手工設(shè)定網(wǎng)絡(luò)污點源標(biāo)記規(guī)則,所有網(wǎng)絡(luò)接收的數(shù)據(jù)包被標(biāo)記為污點源,該過程由硬件模擬器根據(jù)規(guī)則自動進(jìn)行。程序執(zhí)行異常和非法行為的判定過程如下I)為了識別進(jìn)程的惡意操作,我們首先設(shè)置了異常行為序列,該異常行為序列表示一系列連續(xù)的API操作,該序列的集合存儲在ー個配置文件中,由硬件模擬器讀取并在內(nèi)存中維護(hù)ー個異常行為序列的單鏈表數(shù)據(jù)結(jié)構(gòu)。2)當(dāng)目標(biāo)系統(tǒng)中的某個進(jìn)程發(fā)生網(wǎng)絡(luò)數(shù)據(jù)接收時,標(biāo)記其獲取的網(wǎng)絡(luò)數(shù)據(jù)包為污點數(shù)據(jù)包,在該進(jìn)程的對應(yīng)結(jié)構(gòu)中創(chuàng)建對應(yīng)的污點記錄,同時建立污點行為列表記錄對污點數(shù)據(jù)包或由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù)進(jìn)行操作的指令和API調(diào)用。3)從網(wǎng)絡(luò)數(shù)據(jù)接收函數(shù)返回的時刻開始,分析該進(jìn)程后續(xù)執(zhí)行的每一條指令,如果該指令操作了污點數(shù)據(jù),則將當(dāng)前指令得到的結(jié)果作為由污點數(shù)據(jù)包產(chǎn)生的污點加入到污點記錄中,并將該指令加入污點行為列表;如果是API調(diào)用,并且該API調(diào)用的參數(shù)含有污點數(shù)據(jù)包或由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù),同樣需要將該API調(diào)用加入污點行為列表。在進(jìn)程執(zhí)行的同時,判定污點數(shù)據(jù)操作的目標(biāo)地址,是否覆蓋了函數(shù)的返回地址;同時將進(jìn)程執(zhí)行的API調(diào)用和內(nèi)存中的異常行為序列進(jìn)行匹配。對于異常行為序列的匹配方法為如果當(dāng)前發(fā)生的API調(diào)用名稱和參數(shù)都與異常鏈表中的第一個API相同,則使用相同的方法繼續(xù)比較該序列中的后續(xù)記錄;如果存在差異不同則查找其他預(yù)定義的異常API序列的第一個API,使用相同的方法與之匹配。如果污點傳播路徑可與預(yù)定義的異常操作序列相匹配,則可判定此時正在執(zhí)行的進(jìn)程為惡意代碼。5、采集并分析數(shù)據(jù)
在判定惡意代碼后,需要提取惡意代碼樣本和攻擊數(shù)據(jù)的樣本。惡意代碼樣本的提取通過直接由硬件模擬器加載的目標(biāo)操作系統(tǒng)鏡像中讀取文件實現(xiàn),攻擊數(shù)據(jù)樣本通過將該進(jìn)程接收到的污點數(shù)據(jù)包轉(zhuǎn)儲實現(xiàn)。為了更好的提取惡意代碼,本發(fā)明通過對分析過程中產(chǎn)生的污點行為列表進(jìn)行回溯,根據(jù)發(fā)生異常行為的進(jìn)程所調(diào)用的API和執(zhí)行的指令,找到該進(jìn)程的行為序列依賴的污點數(shù)據(jù),提取所述惡意代碼鏡像,其中污點數(shù)據(jù)包括其在整個污點數(shù)據(jù)包中的偏移、長度和內(nèi)容。數(shù)據(jù)分析模塊接收并存儲上述數(shù)據(jù)采集模塊收集的數(shù)據(jù),將該數(shù)據(jù)返回給用戶。
本發(fā)明提出的基于硬件模擬器和污點傳播的惡意代碼捕獲方法,對于本領(lǐng)域的技術(shù)人員而言,可以根據(jù)需要自己配置各種環(huán)境信息,設(shè)計分析和捕獲方法,從而全面分析隱藏進(jìn)程中的惡意代碼。盡管為說明目的公開了本發(fā)明的具體實施例和附圖,其目的在于幫助理解本發(fā)明的內(nèi)容并據(jù)以實施,但是本領(lǐng)域的技 術(shù)人員可以理解在不脫離本發(fā)明及所附的權(quán)利要求的精神和范圍內(nèi),各種替換、變化和修改都是可能的。因此,本發(fā)明不應(yīng)局限于最佳實施例和附圖所公開的內(nèi)容,本發(fā)明要求保護(hù)的范圍以權(quán)利要求書界定的范圍為準(zhǔn)。
權(quán)利要求
1.一種惡意代碼捕獲方法,其步驟為 1)配置硬件模擬器,硬件模擬器加載并啟動目標(biāo)操作系統(tǒng); 2)硬件模擬器讀取目標(biāo)操作系統(tǒng)的虛擬內(nèi)存,識別當(dāng)前系統(tǒng)中執(zhí)行的所有進(jìn)程及進(jìn)程所加載的動態(tài)庫中的導(dǎo)出表,獲取所述導(dǎo)出表中所有API的地址并攔截網(wǎng)絡(luò)接收API函數(shù); 3)根據(jù)網(wǎng)絡(luò)接收API函數(shù)的返回值,將進(jìn)程由網(wǎng)絡(luò)接收到的數(shù)據(jù)包標(biāo)記為污點數(shù)據(jù)包; 4)硬件模擬器反匯編當(dāng)前進(jìn)程執(zhí)行的指令,如果該指令的源操作數(shù)偏移地址和長度在污點數(shù)據(jù)包范圍內(nèi),則對該指令進(jìn)行污點傳播計算,如果該指令為API函數(shù)調(diào)用指令,則根據(jù)API地址獲取該API名稱并查詢其傳入?yún)?shù)的偏移和長度是否屬于污點數(shù)據(jù)范圍,如果屬于污點數(shù)據(jù)范圍則對該API調(diào)用進(jìn)行污點傳播計算; 5)判定污點傳播過程中當(dāng)前進(jìn)程的狀態(tài)是否發(fā)生異常行為,如果發(fā)生異常行為則判定當(dāng)前進(jìn)程為惡意代碼,并從目標(biāo)操作系統(tǒng)的內(nèi)存中提取惡意代碼鏡像。
2.如權(quán)利要求I所述的方法,其特征在于所述配置硬件模擬器包括配置硬件模擬器的模擬內(nèi)存大小、模擬CPU的類型、虛擬硬盤。
3.如權(quán)利要求2所述的方法,其特征在于配置硬件模擬器的虛擬硬盤的方法為采用線性尋址的方法創(chuàng)建虛擬鏡像文件,將所創(chuàng)建虛擬鏡像文件作為虛擬的硬盤。
4.如權(quán)利要求3所述的方法,其特征在于獲取所述導(dǎo)出表中所有API的地址的方法為比較所述動態(tài)庫的導(dǎo)出表中的名稱與API表中的名稱,獲取所述導(dǎo)出表中所有API的地址。
5.如權(quán)利要求I或2或3或4所述的方法,其特征在于所述污點傳播計算的方法為根據(jù)當(dāng)前進(jìn)程執(zhí)行的指令,判定污點數(shù)據(jù)包所產(chǎn)生的污點數(shù)據(jù)所影響的變量和寄存器。
6.如權(quán)利要求5所述的方法,其特征在于所述異常行為包括當(dāng)前進(jìn)程對應(yīng)堆棧中的函數(shù)返回地址被污點數(shù)據(jù)包或者由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù)覆蓋、當(dāng)前進(jìn)程執(zhí)行的API調(diào)用序列與預(yù)定義的異常行為序列匹配。
7.如權(quán)利要求6所述的方法,其特征在于判定當(dāng)前進(jìn)程的狀態(tài)是否發(fā)生異常行為的方法為 1)設(shè)置一異常行為序列,硬件模擬器讀取并在內(nèi)存中維護(hù)一個異常行為序列的單鏈表數(shù)據(jù)結(jié)構(gòu); 2)在當(dāng)前進(jìn)程的對應(yīng)結(jié)構(gòu)中創(chuàng)建污點記錄;同時建立污點行為列表,記錄當(dāng)前進(jìn)程對污點數(shù)據(jù)包或由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù)進(jìn)行操作的指令和API調(diào)用; 3)從當(dāng)前進(jìn)程網(wǎng)絡(luò)數(shù)據(jù)接收函數(shù)返回的時刻開始,分析該進(jìn)程后續(xù)執(zhí)行的每一條指令 如果該指令操作了污點數(shù)據(jù),則將當(dāng)前指令得到的結(jié)果作為由污點數(shù)據(jù)包產(chǎn)生的污點加入到所述污點記錄中,并將該指令加入污點行為列表;如果是API調(diào)用,并且該API調(diào)用的參數(shù)含有污點數(shù)據(jù)包或由污點數(shù)據(jù)包產(chǎn)生的污點數(shù)據(jù),則將該API調(diào)用加入污點行為列表; 4)判定污點數(shù)據(jù)操作的目標(biāo)地址是否覆蓋了函數(shù)的返回地址,如果覆蓋則判定當(dāng)前進(jìn)程的狀態(tài)發(fā)生異常行為;根據(jù)污點行為列表判定進(jìn)程執(zhí)行的API調(diào)用與內(nèi)存中的異常行為序列是否匹配,如果匹配,則判定當(dāng)前進(jìn)程的狀態(tài)發(fā)生異常行為。
8.如權(quán)利要求7所述的方法,其特征在于提取所述惡意代碼鏡像的方法為對污點行為列表進(jìn)行回溯,根據(jù)異常行為進(jìn)程所調(diào)用的API和執(zhí)行的指令,找到該進(jìn)程的行為序列依賴的污點數(shù)據(jù),即為捕獲到的惡意代碼;同時提取攻擊過程執(zhí)行的數(shù)據(jù)在整個污點數(shù)據(jù)包中的偏移、長度和內(nèi)容。
9.如權(quán)利要求7所述的方法,其特征在于所述異常行為序列為一系列連續(xù)的API操作。
全文摘要
本發(fā)明公開了一種惡意代碼捕獲方法,屬于網(wǎng)絡(luò)安全技術(shù)領(lǐng)域。本方法為1)配置硬件模擬器,加載并啟動目標(biāo)操作系統(tǒng);2)硬件模擬器讀取目標(biāo)操作系統(tǒng)的虛擬內(nèi)存,識別所有進(jìn)程及進(jìn)程所加載的動態(tài)庫中的導(dǎo)出表,獲取所述導(dǎo)出表中所有API的地址并攔截網(wǎng)絡(luò)接收API函數(shù);3)根據(jù)網(wǎng)絡(luò)接收API函數(shù)的返回值,將進(jìn)程由網(wǎng)絡(luò)接收到的數(shù)據(jù)包標(biāo)記為污點數(shù)據(jù)包;4)硬件模擬器反匯編當(dāng)前進(jìn)程執(zhí)行的指令,對其進(jìn)行污點傳播計算;5)判定污點傳播過程中當(dāng)前進(jìn)程的狀態(tài)是否發(fā)生異常行為,如果發(fā)生異常行為則判定當(dāng)前進(jìn)程為惡意代碼,并從目標(biāo)操作系統(tǒng)的內(nèi)存中提取惡意代碼鏡像。本發(fā)明實現(xiàn)對惡意代碼完全透明的分析,具有更高的效率和準(zhǔn)確性。
文檔編號G06F21/00GK102622536SQ20111002913
公開日2012年8月1日 申請日期2011年1月26日 優(yōu)先權(quán)日2011年1月26日
發(fā)明者馮登國, 應(yīng)凌云, 楊軼, 蘇璞睿 申請人:中國科學(xué)院軟件研究所