◆蘇 暉 王怡然
(華能貴誠信托有限公司電子商務(wù)部 北京 100093)
隨著全球化和信息化的發(fā)展,移動(dòng)互聯(lián)網(wǎng)的發(fā)展進(jìn)入了高速行駛的快車道,同時(shí),移動(dòng)互聯(lián)網(wǎng)病毒也加快蔓延。2018 年,CNCERT 通過移動(dòng)互聯(lián)網(wǎng)惡意程序監(jiān)測體系共監(jiān)測移動(dòng)互聯(lián)網(wǎng)惡意程序5702861 個(gè),比2017 年同期監(jiān)測3162981 個(gè)惡意程序增長1.8 倍,涉及移動(dòng)惡意程序702 個(gè),繼續(xù)呈現(xiàn)出爆炸式增長趨勢。
現(xiàn)在對(duì)手機(jī)病毒的分析及檢測主要采用基于特征的檢測方法,它通過對(duì)已知特征匹配來判斷是否存在手機(jī)病毒?,F(xiàn)在,基于行為的檢測方法也被引入手機(jī)病毒檢測,它通過對(duì)手機(jī)程序執(zhí)行監(jiān)視,對(duì)文件、內(nèi)存、進(jìn)程等變化進(jìn)行判斷來完成檢測,如J2ME 沙箱、Android 沙箱等[1-9]。但是,無論是基于特征還是基于行為的檢測方法都無法難以對(duì)多態(tài)[10-11]和變形技術(shù)[12-13]處理后的手機(jī)病毒進(jìn)行有效的檢測。因?yàn)槎鄳B(tài)和變形技術(shù)處理后的手機(jī)病毒,可以通過逃避已知檢測點(diǎn)或者加入混淆信息欺騙檢測工具的方法來防止其被檢測。由于沒有對(duì)手機(jī)操作系統(tǒng)底層進(jìn)行研究,檢測不到操作系統(tǒng)底層的工作狀態(tài),如內(nèi)存的變化,僅僅是監(jiān)視了應(yīng)用層APP 的數(shù)據(jù)改動(dòng)及API 調(diào)用[14],因此無法對(duì)多態(tài)和變形技術(shù)處理后的手機(jī)病毒進(jìn)行判斷,從而對(duì)其也無法進(jìn)行檢測。
本文提出了一種基于余弦算法的二進(jìn)制程序手機(jī)病毒檢測方法,該方法對(duì)二進(jìn)制程序行為進(jìn)行分析,監(jiān)視手機(jī)操作系統(tǒng)底層,跟蹤內(nèi)存及APP 存儲(chǔ)空間的變化情況,揭示手機(jī)病毒程序的工作機(jī)制,通過余弦相似度比較對(duì)其進(jìn)行檢測,從而有效地解決了對(duì)多態(tài)和變形技術(shù)處理后的二進(jìn)制程序手機(jī)病毒無法進(jìn)行檢查的問題。
為了進(jìn)行手機(jī)病毒的二進(jìn)制程序分析,本文定義了一種用于安全性分析的中間語言 EDIL(Exploit Detection for Intermediate Language),針對(duì)手機(jī)病毒檢測,對(duì)BIL 中間語言[15]進(jìn)行優(yōu)化和擴(kuò)展。BIL 是一種二進(jìn)制程序分析的語言,能對(duì)數(shù)據(jù)流和控制流進(jìn)行正確描述。
EDIL 語法由程序狀態(tài)語句列表(∑),當(dāng)前內(nèi)存狀態(tài)(μ),當(dāng)前變量值(φ),程序計(jì)數(shù)器(η)以及程序當(dāng)前狀態(tài)(σ)組成。參數(shù)的語法敘述見表1。
其中,∑、μ和φ都是起到了映射作用。如φ[x←10]表示將變量x進(jìn)行更新,將它賦值為數(shù)值v=10。
表1 EDIL 基本語法描述
EDIL 有完整的形式化方法,它的每一個(gè)程序狀態(tài)語句都符合以下的形式化表達(dá)式:
表達(dá)式(1)表示在程序狀態(tài)語句s由當(dāng)前狀態(tài)改變到下一終止?fàn)顟B(tài)s’的時(shí)候,其他規(guī)則都在分?jǐn)?shù)線上的computation發(fā)生了變化。例如,在成功發(fā)生條件跳轉(zhuǎn)時(shí),EDIL 的形式化表達(dá)式如下:
在形式化表達(dá)式(2)中有一個(gè)簡單的計(jì)算規(guī)則需要指明。表達(dá)式 ,μ φ? ?e v表示在當(dāng)前狀態(tài)語句下,根據(jù)μ和φ的具體范圍,求出e的數(shù)值v。
通過對(duì)二進(jìn)制程序行為進(jìn)行分析,利用余弦相似度比較惡意行為和正常行為之間的差異,從而檢測二進(jìn)制程序是否是一個(gè)惡意的手機(jī)病毒程序。基于余弦相似度的二進(jìn)制程序手機(jī)病毒檢測算法主要包括以下三個(gè)子算法:基本塊劃分算法、控制流分析算法以及行為分析算法。
基本塊劃分是在匯編代碼的基礎(chǔ)上進(jìn)行的,基本塊的過程可以分為兩步:
(1)確定每個(gè)基本塊的入口指令,根據(jù)上述原理,基本塊入口指令只可能有三種:
· ①程序入口處的第一條指令;
· ②jmp 或者jcc 跳轉(zhuǎn)目標(biāo)地址處的指令;
· ③jmp 或者jcc 指令的下一條指令。
(2)根據(jù)每個(gè)基本塊的入口指令,構(gòu)造其所在的基本塊。此時(shí)又有三種情況:
· ①由當(dāng)前入口指令的開始地址直到下一個(gè)入口指令開始的地址之間的所有指令構(gòu)成一個(gè)基本塊;
· ②由當(dāng)前入口指令的開始地址到其后第一條跳轉(zhuǎn)指令的結(jié)束地址之間的所有指令構(gòu)成一個(gè)基本塊;
· ③由當(dāng)前入口指令的開始地址到程序結(jié)尾之間的所有指令構(gòu)成一個(gè)基本塊。
本文利用分層法[16]對(duì)程序的控制流進(jìn)行分析的過程分為三輪。
(1)第一輪先分析程序中的函數(shù),得出起始地址和結(jié)束地址;
(2)第二輪調(diào)用基本塊劃分模塊對(duì)每個(gè)函數(shù)內(nèi)部的匯編代碼進(jìn)行分析,對(duì)每個(gè)基本塊屬性進(jìn)行記錄。在分析過程中關(guān)注的屬性包括基本塊的入口地址、出口地址和跳轉(zhuǎn)目標(biāo)。
(3)第三輪根據(jù)控制流圖求函數(shù)的所有控制流路徑,即求出從控制流根節(jié)點(diǎn)(函數(shù)入口基本塊)到葉子節(jié)點(diǎn)的所有可能路徑。路徑皆由所經(jīng)過的基本塊組成。
在基本塊劃分算法和控制流分析算法的基礎(chǔ)上,可以通過EDIL 對(duì)手機(jī)病毒程序行為進(jìn)行描述,利用余弦相似度比較算法對(duì)手機(jī)病毒程序行為進(jìn)行比較,從而對(duì)其進(jìn)行檢測。
對(duì)程序行為的兩個(gè)程序行為向量間的角度定義如下:
其中,G為基本塊算法劃分成的基本塊。則與兩個(gè)向量的夾角為:
在初始情況下,ai=1,i= 1,2,...,m。經(jīng)過學(xué)習(xí)可以對(duì)余弦夾角測度進(jìn)行校正。
圖1 給出了基于二進(jìn)制程序行為分析的手機(jī)病毒檢測模型系統(tǒng),框圖代表核心部件,其余表示文件格式和中間過程。該模型系統(tǒng)包括了3 個(gè)主要部分:APP 行為監(jiān)視器、預(yù)處理器以及APP 行為檢測器,現(xiàn)就它們的工作原理進(jìn)行詳細(xì)介紹。
APP 行為監(jiān)視器用于對(duì)需要進(jìn)行手機(jī)病毒檢測的文件進(jìn)行監(jiān)控,它跟蹤文件在二進(jìn)制程序中的執(zhí)行情況。在APP 行為監(jiān)視器中使用OllyDBG v1.1[17]完成反匯編工作。OllyDBG 可以解析多種PE 格式,得到其中的匯編指令、寄存器、內(nèi)存以及導(dǎo)出函數(shù)等信息。同時(shí),APP 行為監(jiān)視器還對(duì)程序執(zhí)行時(shí)特定進(jìn)程的執(zhí)行路徑進(jìn)行動(dòng)態(tài)監(jiān)視,所采用的方法是通過掛鉤系統(tǒng)服務(wù)描述符表(SSDT)中的Native API。這樣可以通過相關(guān)堆棧信息對(duì)程序執(zhí)行路徑進(jìn)行回溯,并且通過監(jiān)視調(diào)用Native API 情況,輔助和簡化二進(jìn)制程序分析,特別體現(xiàn)在處理函數(shù)調(diào)用以及動(dòng)態(tài)代碼生成時(shí)。
圖1 基于二進(jìn)制程序行為分析的手機(jī)病毒檢測系統(tǒng)模型
預(yù)處理器包括兩個(gè)方面:基于基本塊劃分和控制流分析。預(yù)處理器的輸入是匯編語言,輸出是EDIL 中間語言,同時(shí)能優(yōu)化匯編代碼,增加檢測效率。例如,一個(gè)程序入口點(diǎn)初始化分配堆棧的匯編代碼如下:
在經(jīng)過預(yù)處理器轉(zhuǎn)化之后,輸出的需EDIL 中間語言如下:
APP 行為檢測器的功能是確定進(jìn)行檢測的APP 文件是否存在手機(jī)病毒。它通過將對(duì)需要進(jìn)行手機(jī)病毒檢測的文件程序行為描述和正常行為描述相比較。需要指出的是在反匯編器和程序行為監(jiān)視器有差異,反匯編器僅僅是通過OllyDBG 完成了相應(yīng)的匯編代碼生成,而并沒有采集程序執(zhí)行時(shí)特定進(jìn)程的執(zhí)行路徑。原因在計(jì)算行為狀態(tài)序列時(shí)并不需要回溯路徑,僅僅計(jì)算出每個(gè)基本塊的程序調(diào)用序列即可。
為驗(yàn)證本文所提出的APP 分析的手機(jī)病毒檢測方法的有效性,選擇遠(yuǎn)程控制手機(jī)病毒和本地文件手機(jī)病毒進(jìn)行實(shí)驗(yàn)。
遠(yuǎn)程控制手機(jī)病毒[18]檢測的實(shí)驗(yàn)環(huán)境:操作系統(tǒng)為Android。為保證樣本可對(duì)比性,選用10 個(gè)常用的遠(yuǎn)程控制類手機(jī)病毒,結(jié)果如表2。
表2 給出了4 種主流殺毒軟件和EDIL 手機(jī)病毒檢測系統(tǒng)模型對(duì)10 種遠(yuǎn)程控制類手機(jī)病毒樣本的檢測結(jié)果,√表示能夠檢測,×表示無法檢測。從實(shí)驗(yàn)結(jié)果可以看出,EDIL 檢測系統(tǒng)模型可以有效地檢測出手機(jī)病毒樣本,而其他4 種殺毒軟件存在著檢測不出樣本的情況。特別是針對(duì)0007 和0009,各種測試的殺毒軟件皆不能夠進(jìn)行檢測。0007 的手機(jī)病毒方式是由于瀏覽器的CFunctionPointer 函數(shù)沒有正確地處理文檔對(duì)象,如果以特定序列附加并刪除了對(duì)象,就可以觸發(fā)內(nèi)存破壞,導(dǎo)致以當(dāng)前登錄用戶的權(quán)限執(zhí)行任意代碼。而殺毒軟件沒有監(jiān)測這個(gè)函數(shù)的行為,并對(duì)此進(jìn)行檢測,從而根本不能判斷進(jìn)行此變形后的手機(jī)病毒。
表2 遠(yuǎn)程控制手機(jī)病毒檢測結(jié)果
表3 中給出了實(shí)驗(yàn)中各個(gè)樣本的空間代價(jià)占用情況及時(shí)間代價(jià)占用情況。由實(shí)驗(yàn)結(jié)果可以看出,行為描述文件的生成大小與原始的手機(jī)病毒文件大小無關(guān)。例如,0006 與0007 兩個(gè)實(shí)驗(yàn)樣本的原始的手機(jī)病毒文件大小都為633KB,但是行為描述文件大小分別是4,897KB 和10,687KB。由于兩者的手機(jī)病毒方式不一樣,導(dǎo)致了在進(jìn)行二進(jìn)制行為分析時(shí)所經(jīng)歷的路徑不同,因此描述文件的生成大小與原始的手機(jī)病毒文件大小無必然聯(lián)系。
表3 遠(yuǎn)程控制類手機(jī)病毒檢測結(jié)果
手機(jī)病毒的時(shí)間代價(jià)包括預(yù)處理時(shí)間和檢測時(shí)間,它與生成的行為描述文件大小成正比。行為描述文件大小越大,其預(yù)處理時(shí)間和檢測時(shí)間也就消耗得越多。
本地文件手機(jī)病毒檢測的實(shí)驗(yàn)環(huán)境:操作系統(tǒng)為Android。
本文選取了13 個(gè)本地文件手機(jī)病毒程序,表4 給出了4種主流殺毒軟件和EDIL手機(jī)病毒檢測系統(tǒng)模型對(duì)13 個(gè)本地文件手機(jī)病毒的檢測結(jié)果。從實(shí)驗(yàn)結(jié)果可以看出,EDIL 檢測系統(tǒng)模型可以有效地檢測出手機(jī)病毒樣本,而其他4 種殺毒軟件則存在著檢測不出樣本的情況。4 種殺毒軟件都不能夠?qū)Σ《?008 進(jìn)行檢測。
表4 本地文件手機(jī)病毒檢測結(jié)果
表5 中給出了實(shí)驗(yàn)中各個(gè)樣本的空間代價(jià)占用情況及時(shí)間代價(jià)占用情況。由實(shí)驗(yàn)結(jié)果可以看出,本地文件手機(jī)病毒檢測的行為描述文件的生成大小與原始的手機(jī)病毒文件大小也是不具有直接聯(lián)系的,決定其大小的在于利用的何種漏洞。同時(shí),由于APP 應(yīng)用軟件的類型不同,空間和時(shí)間代價(jià)都有所差別。
表5 本地文件手機(jī)病毒檢測結(jié)果
基于余弦相似度算法的二進(jìn)制程序手機(jī)病毒檢測算法通過對(duì)APP 二進(jìn)制程序行為進(jìn)行跟蹤,監(jiān)視手機(jī)內(nèi)存和APP 空間的變化,在中間語言層對(duì)程序行為進(jìn)行形式化分析,從而對(duì)手機(jī)病毒進(jìn)行檢測。實(shí)驗(yàn)結(jié)果表明該方法可以有效地對(duì)手機(jī)病毒進(jìn)行分析和檢測,并且具有較小的時(shí)間復(fù)雜度和空間復(fù)雜度。