王 勇, 蔡建宇, 孟 春, 劉振巖, 薛靜鋒
北京理工大學(xué)計(jì)算機(jī)學(xué)院 北京 中國(guó) 100081
目前, 國(guó)外的智能手機(jī)的操作系統(tǒng)在我國(guó)的智能手機(jī)中所占比重已經(jīng)超過了 90%。作為智能手機(jī)市場(chǎng)中最為流行的操作系統(tǒng), Android的使用量Android系統(tǒng)受到了大量關(guān)注, 其中除了開發(fā)者和用戶, 還有大量的惡意代碼開發(fā)者, 因?yàn)橹悄苁謾C(jī)中攜帶著大量的用戶隱私, 甚至包括個(gè)人身份信息或銀行卡等重要信息, 惡意軟件也還有可能通過電話、短信等手段進(jìn)行惡意吸費(fèi)等流氓行為, 用戶的隱私和個(gè)人利益受到了極大的威脅。
在安卓市場(chǎng)日趨復(fù)雜, 惡意軟件種類和數(shù)量也在不斷攀升的情況下, 如何自動(dòng)化的, 高效的解決惡意應(yīng)用的檢測(cè)問題, 成為安卓安全首要解決的重中之重[1]。在安卓安全問題上, 國(guó)內(nèi)外研究問題最初想到的是增強(qiáng)現(xiàn)有的安卓安全機(jī)制, 但由于安卓版本眾多, 這種方法無法覆蓋所有的用戶版本。所以研究人員慢慢將檢測(cè)第三方應(yīng)用的安全性變成新的研究重點(diǎn)。通過檢測(cè)應(yīng)用程序的安全性來間接提升Android系統(tǒng)的安全性[2]來保證手機(jī)用戶的安全。這種方法在短時(shí)間內(nèi)發(fā)展迅速, 并以靜態(tài)和動(dòng)態(tài)兩種檢測(cè)手段為主要方法[3]。
目前安卓平臺(tái)下的惡意應(yīng)用檢測(cè)面臨著兩個(gè)問題, 第一個(gè)是準(zhǔn)確率低, 效率低的問題, 安卓的惡意代碼檢測(cè)一般基于特征提取, 而提取的特征種類和維度起著決定性的作用, 特征維度過多會(huì)導(dǎo)致檢測(cè)時(shí)間過長(zhǎng), 特征提取少又會(huì)導(dǎo)致檢測(cè)準(zhǔn)確率下降,為了首先提升檢測(cè)的準(zhǔn)確度, 研究人員不得不犧牲效率, 盡量提取出多種的多維度的特征, 所以如何對(duì)這些大維度特征篩選和降維, 是一個(gè)難點(diǎn)。第二,現(xiàn)有的安卓檢測(cè)技術(shù)缺少自動(dòng)化, 批量化的流程,許多操作需要用到其他工具并人工判斷, 使整個(gè)過程變得異常復(fù)雜。
因此, 研究一種自動(dòng)化的, 高效率和高準(zhǔn)確率的的檢測(cè)技術(shù)非常有必要。在豐富這一研究領(lǐng)域的同時(shí)也具有很強(qiáng)的實(shí)用性。本文將Android平臺(tái)的惡意應(yīng)用檢測(cè)作為研究重點(diǎn)。在對(duì)Android系統(tǒng)進(jìn)行深入分析與總結(jié)的基礎(chǔ)上, 提出了一種基于多特征融合的安卓惡意應(yīng)用程序檢測(cè)技術(shù), 從安卓程序的惡意行為出發(fā), 尋找關(guān)鍵特征, 過濾無用特征。然后本文借鑒現(xiàn)了半敏感哈希算法在降維后仍然保存著相似性的特性, 提出了基于Simhash算法的特征融合方法, 并為小維度樣本設(shè)置更高的權(quán)重, 解決了特征不平衡性, 利用此方法為惡意代碼分類的高維特征融合和降維, 進(jìn)行特征融合與深度處理, 然后使用GBDT算法和隨機(jī)森林算法為惡意樣本分類。實(shí)驗(yàn)結(jié)果表明, 本文提出的方法可以在分類效率和準(zhǔn)確率上顯著提高。
目前, 各種分析方法主要集中在靜態(tài)分析和動(dòng)態(tài)分析兩個(gè)大方向, 靜態(tài)分析方法的首次出現(xiàn)是在2011年, étienne Payet 等在研究安卓中的xml文件映射問題的時(shí)候, 改進(jìn)了 Julia(Java 字節(jié)碼靜態(tài)分析工具)使其適用于 DVM(Dalvik Virtual Machine)字節(jié)碼的分析[4], 首次將靜態(tài)分析用于了 Android 程序的分析。 隨后, Kui Luo針對(duì)隱私竊取類的惡意代碼提出了字節(jié)碼轉(zhuǎn)換器, 用于將 DVM 字節(jié)碼轉(zhuǎn)換為Java 字節(jié)碼, 并將生成的 Java 字節(jié)碼輸入一種Java 代碼靜態(tài)分析及切片工具進(jìn)行分析[5], 這種方法已經(jīng)比較類似于反編譯的方法。
2012年, Shabtai[6]等人使用動(dòng)態(tài)人工方法, 從自己編寫的Android惡意應(yīng)用中提取API特征, 然后用分類算法對(duì)安卓應(yīng)用檢測(cè)和分類。但使用的數(shù)據(jù)樣本少, 沒有靜態(tài)分析, 提取的特征維度和種類都較少。2014年, Gorla[7]等人從良性應(yīng)用的API為研究點(diǎn),提出了一種名為CHABADA的安卓惡意程序檢測(cè)方法。這種方法首先搜集大量的安卓良性應(yīng)用, 然后利用 LDA(文檔主題生成模型)算法, 提取每個(gè)應(yīng)用的主題。然后使用 k-means算法聚類這些應(yīng)用的主題,一共獲得了32類的應(yīng)用。對(duì)于每一種類別的應(yīng)用使用通過靜態(tài)分析方法, 提取出敏感 API并組成特征向量集, 而對(duì)于該種類別的惡意應(yīng)用往往會(huì)調(diào)用一些相對(duì)異常的敏感API, 如果發(fā)現(xiàn)這些API不是良性應(yīng)用中提取出來的 API, 即說明這個(gè)應(yīng)用是惡意應(yīng)用的概率比較大。這種方法最后通過機(jī)器學(xué)習(xí)算法OC-SVM分類檢測(cè)惡意應(yīng)用。2015年Avdiienko[8]等人利用靜態(tài)檢測(cè)工具FIOWDROID提取應(yīng)用中的敏感信息流。通過將惡意應(yīng)用與良性應(yīng)用中的敏感信息流進(jìn)行對(duì)比, 對(duì)未知惡意應(yīng)用進(jìn)行檢測(cè)。該方法同樣只利用良性樣本作為訓(xùn)練數(shù)據(jù)集來建立檢測(cè)模型,這兩種方法從良性應(yīng)用提取特征可以說是另辟蹊徑,最后實(shí)驗(yàn)也得出了良好的效果, 但缺點(diǎn)是沒有從安卓惡意應(yīng)用的具體行為考慮, 所以檢測(cè)準(zhǔn)確率和覆蓋面都有所欠缺。
2014年, 楊歡[9]等人提出了一種綜合考慮Android多類行為特征的三層混合系綜算法THEA(Triple Hybrid Ensemble Algorithm), 用于檢測(cè)Android未知惡意應(yīng)用。這種方法首先提取了組件、函數(shù)調(diào)用以及系統(tǒng)調(diào)用類特征, 然后, 針對(duì)上述3類特征設(shè)計(jì)了三層混合系綜算法 THEA, 該算法為每一類特征尋找出最佳的分類器。最后, 搜集現(xiàn)實(shí)中的1000多個(gè)惡意應(yīng)用和2000個(gè)非惡意應(yīng)用, 并對(duì)這些應(yīng)用進(jìn)行分類檢測(cè), 取得比較良好的實(shí)驗(yàn)效果。2015年, 劉陽(yáng)[1]等人提出了一個(gè)利用機(jī)器學(xué)習(xí)算法對(duì)Android惡意代碼進(jìn)行檢測(cè)的方案, 該方案首先采集大規(guī)模的數(shù)據(jù)樣本, 對(duì) APK文件釆用靜態(tài)分析, 使用逆向分析技術(shù)對(duì)APK文件做反編譯的處理, 提取出大量的特征屬性。之后利用隨機(jī)森林和神經(jīng)網(wǎng)絡(luò)這兩種分類算法對(duì)Android應(yīng)用進(jìn)行分類。并對(duì)比了兩種方法的分類效果。結(jié)論得出, 隨機(jī)森林算法在大規(guī)模應(yīng)用樣本檢測(cè)時(shí)的表現(xiàn)要優(yōu)于神經(jīng)網(wǎng)絡(luò)算法。該方法提取出了大量了靜態(tài)特征, 但沒有提取動(dòng)態(tài)特征, 并且在特征維度上沒有特殊處理, 所以效率上有所欠缺。
對(duì)于惡意代碼分析, 最重要的環(huán)節(jié)為特征的提取和處理上, 該提取哪些特征和如何提取, 是整個(gè)分析流程的重中之重, 本文針對(duì)安卓惡意應(yīng)用的行為特點(diǎn)出發(fā), 提取出了靜態(tài)特征和動(dòng)態(tài)的大量多種類的特征, 其中靜態(tài)特征特征包括權(quán)限和組件、函數(shù)調(diào)用和 API調(diào)用特征、文件結(jié)構(gòu)特征、腳本信息特征、字符串信息特征和簽名信息特征。動(dòng)態(tài)分析包括系統(tǒng)調(diào)用特征、關(guān)鍵路徑和數(shù)據(jù)訪問特征、http請(qǐng)求特征和惡意吸費(fèi)特征。提取出特征后, 使用信息增益方法篩選特征, 剔除作用較小的特征。
靜態(tài)分析自動(dòng)化分析反編譯后的apk文件目錄,提取apk文件中的特征, 這些特征包括權(quán)限和組件、函數(shù)調(diào)用和 API調(diào)用特征、文件結(jié)構(gòu)特征、腳本信息特征、字符串信息特征和簽名信息特征。靜態(tài)分析主要使用了反編譯技術(shù), 使用反編譯工具 Apktool反編譯樣本并輸出到反編譯文件夾, 以供靜態(tài)特征提取。
3.1.1 權(quán)限和組件特征
Android應(yīng)用程序由一個(gè)或多個(gè)組件組成, 所有的應(yīng)用程序都被賦予了最小權(quán)限。由于沙盒機(jī)制和線程隔離機(jī)制, 使得安卓應(yīng)用的整體行為特點(diǎn)變得相對(duì)容易管理, 不至于在沒有任何聲明的情況下實(shí)施惡意行為。權(quán)限和組件在一定程度上反映了程序的惡意性傾向。
權(quán)限和組件特征的提取主要通過解析AndroidManifest.xml文件獲得。解析方法為利用Python的 xml.dom.minidom包解析 xml標(biāo)簽, 獲取uses-permission、activity、services、contentProvider、Intent Receiver標(biāo)簽信息。對(duì)于組件特征, 主要提取activity、services、contentProvider標(biāo)簽內(nèi)信息, 提取方法與權(quán)限提取方法類似。特別的, 對(duì)于動(dòng)態(tài)注冊(cè)的廣播接收器特征的提取, 由于動(dòng)態(tài)注冊(cè)的廣播接收器需要開發(fā)者自己在代碼中注冊(cè)。用這種方法注冊(cè)的廣播接收器, 需要在smali文件中查找對(duì)應(yīng)的代碼,匹配提取。
3.1.2 函數(shù)調(diào)用和API調(diào)用特征
提取函數(shù)調(diào)用和API調(diào)用特征。提取方法如圖1所示, 主要針對(duì)樣本的每個(gè) smali文件, 用正則匹配方式匹配出所有函數(shù)調(diào)用, 提取出來的函數(shù)調(diào)用特征建立N-gram特征序列。為了更好地區(qū)分和描述惡意行為特征, 本文還提取了API調(diào)用序列, 提取方法為對(duì)于每個(gè) smali文件, 匹配每個(gè)官網(wǎng) API對(duì)應(yīng)的smali代碼, 提取出API調(diào)用特征。
因?yàn)槊總€(gè)樣本的函數(shù)調(diào)用非常多, 而許多函數(shù)是開發(fā)者自己定義的, 和惡意行為并沒有多大直接關(guān)聯(lián), 本文將函數(shù)調(diào)用和API調(diào)用兩種特征組合, 選取只包含 API調(diào)用的函數(shù)調(diào)用序列, 組合方法為遍歷每種函數(shù)調(diào)用序列, 若發(fā)現(xiàn)其中的某個(gè)函數(shù)調(diào)用也是 API調(diào)用, 則選取該特征, 否則丟棄該特征。這樣就提取出了所有帶有API調(diào)用的函數(shù)調(diào)用序列特征。
3.1.3 文件結(jié)構(gòu)特征
分析文件結(jié)構(gòu), 提取文件目錄結(jié)構(gòu)特征。有些惡意樣本所包含的包名是相同的, 甚至該包內(nèi)層的文件結(jié)構(gòu)及內(nèi)容也很類似, 對(duì)于這種樣本, 我們有理由的相信這他們是“同源”的, 甚至可能出自同樣的作者之手, 所以本文提取文件結(jié)構(gòu)特征作為待融合特征。
提取方法為用python的os.walk方法遍歷樣本文件夾, 提取出其中的文件作為特征, 因?yàn)槊總€(gè)樣本下的文件可能太多, 這里只提取代碼的文件結(jié)構(gòu),即只分析smali文件夾結(jié)構(gòu)。提取每個(gè)文件時(shí), 除了文件本身作為一種特征, 還將文件的路徑也作為一種特征。
3.1.4 腳本信息特征
腳本信息特征。某些安卓應(yīng)用在運(yùn)行過程中會(huì)執(zhí)行惡意腳本, 所以腳本信息可以作為一種特征,提取方法為用 find命令在樣本中查找 js腳本文件,將找到的文件名作為特征。
3.1.5 字符串信息特征
字符串信息特征。安卓惡意應(yīng)用中的字符串可能包含網(wǎng)絡(luò) http請(qǐng)求信息和一些關(guān)鍵數(shù)據(jù), 這些字符串可以是一種很好的特征資源。提取方法為針對(duì)每一個(gè)樣本, 查找出樣本里的所有 smali文件, 然后對(duì)于每個(gè)smali文件用正則匹配匹配出所有字符串信息, 提取出字符串后建立n-gram字符序列作為特征。
3.1.6 簽名信息特征
安卓的APK簽名保證了每個(gè)應(yīng)用程序開發(fā)商合法ID, 防止部分開放商可能通過使用相同的Package Name來混淆替換已經(jīng)安裝的程序和一些惡意開發(fā)者的重打包。所以提取簽名的MD5碼或SHA1碼作為一種特征。
靜態(tài)分析的優(yōu)點(diǎn)是快速、高效。但是難以應(yīng)對(duì)代碼混淆和多態(tài)變形技術(shù)。本文采用動(dòng)態(tài)和靜態(tài)分析結(jié)合的方法。動(dòng)態(tài)分析模塊主要使用工具 MobSF來完成, 本文在virtualbox上運(yùn)行安卓系統(tǒng)沙盒并分析樣本, 然后使用 MobSF工具提取了系統(tǒng)調(diào)用特征、關(guān)鍵路徑和數(shù)據(jù)訪問特征、http請(qǐng)求特征和惡意吸費(fèi)特征。
3.2.1 系統(tǒng)調(diào)用特征
安卓動(dòng)態(tài)運(yùn)行過程中也會(huì)執(zhí)行一些系統(tǒng)調(diào)用,這些調(diào)用可能包含敏感的數(shù)據(jù)和 API, 這里將這些系統(tǒng)調(diào)用記錄并作為特征。
3.2.2 命令執(zhí)行特征
Android系統(tǒng)基于Linux內(nèi)核, 同樣存在一些敏感路徑, 惡意代碼可以調(diào)用該目錄下的系統(tǒng)程序執(zhí)行命令。如果調(diào)用了chmod、rm更改文件權(quán)限、刪除文件等命令, 對(duì)操作系統(tǒng)本身將造成極大的威脅。所以命令執(zhí)行可以作為一種特征。本實(shí)驗(yàn)提取出的部分命令執(zhí)行如表1所示。
表1 應(yīng)用程序可能執(zhí)行的部分命令Table 1 Some commands that the application may execute
3.2.3 HTTP請(qǐng)求特征
有的惡意軟件會(huì)在運(yùn)行過程中會(huì)發(fā)送 http請(qǐng)求包。某些惡意應(yīng)用會(huì)通過http請(qǐng)求下載大流量文件造成用戶流量損失, 或者通過訪問其他網(wǎng)站獲取控制命令等信息, 因此可以分析http請(qǐng)求并提取特征。
在解析http請(qǐng)求提取的屬性中, 根據(jù)經(jīng)驗(yàn), 請(qǐng)求內(nèi)容、URI和Cookie是惡意特征最重要的體現(xiàn)部位,所以應(yīng)該進(jìn)行更深入的特征提取, 本文提取出 http請(qǐng)求特征后再對(duì)其用正則匹配提取這幾種屬性的特征。作為一種待融合的特征類。
3.2.4 惡意吸費(fèi)特征
安卓惡意吸費(fèi)行為主要通過發(fā)短信和打電話來完成。雖然這些行為都會(huì)申請(qǐng)?zhí)囟ǖ臋?quán)限, 但不是所有申請(qǐng)了發(fā)短信和打電話的應(yīng)用都是惡意應(yīng)用, 所以記錄程序的短信發(fā)送、電話撥打行為, 如果這些電話不在運(yùn)營(yíng)商之列則是真正的惡意行為。
靜態(tài)分析的時(shí)候, 如果發(fā)現(xiàn)程序申請(qǐng)了撥打電話的權(quán)限, 是不足以判定該程序就有惡意行為的,這里將這些行為記錄作為一種特征, 對(duì)前面的靜態(tài)特征的權(quán)限部分可能產(chǎn)生的誤查起到了補(bǔ)償和相互配合的作用。
提取出特征之后, 本文先使用信息增益方法篩選特征。信息增益是是一種用數(shù)學(xué)來度量信息的方法。此方法根據(jù)詞所歸屬于類別的信息量來判斷特征的有用程度, 即這個(gè)詞包含的類別的信息量越大,分類的準(zhǔn)確率也就越高。信息增益可以有效反映特征的有用程度, 但信息增益有一個(gè)缺點(diǎn), 就是它會(huì)偏袒取值更多的特征, 但實(shí)際上并不是取值越多這個(gè)特征就越有用。信息增益率在信息增益的基礎(chǔ)上做了一些改進(jìn), 通過增加一個(gè)分裂信息(splitinformation)來懲罰值更多的屬性。本文使用了信息增益率來篩選特征。
本文針對(duì)前文靜態(tài)分析和動(dòng)態(tài)分析提取出來的每個(gè)特征計(jì)算信息增益率后, 進(jìn)行排序, 然后選取前k個(gè)特征進(jìn)行后續(xù)的融合; 其中, k為設(shè)定的篩選量。做特征選擇, 目的就是選出對(duì)分類最有幫助的特征項(xiàng)。但是交給計(jì)算機(jī)去處理的話, 需要量化。因此如何選出這最有幫助的, 就出現(xiàn)了種種方法。一般來說, 選擇特征k值在3000的時(shí)候, 總體效益是很不錯(cuò)的, 再往上漲, 占用空間增大, 但是結(jié)果增長(zhǎng)并不明顯。
使用信息增益方法提取出的特征在維度上有所降低, 但類別還是太多, 并且維度上的差別還是偏大, 本文提出了一種基于Simhash算法的特征融合降維方法, 將特征再次降維的同時(shí)融合了所有特征。
LSH是Locality Sensitive Hashing的縮寫, 也翻譯為局部敏感哈希, 是用來處理海量文本數(shù)據(jù)的相似度度量的, 因?yàn)閺奈谋局刑崛〉奶卣骶S度會(huì)很高,需要給特征降維, 而數(shù)據(jù)的維數(shù)在某種程度上能反映其信息量, 一般來說維數(shù)越多, 其反映的信息量就越大, 就能越準(zhǔn)確地判定兩個(gè)東西的相似性, 所以, 降維就在某種程度上造成的信息的丟失, LSH算法基于一個(gè)假設(shè), 如果兩個(gè)文本在原有的數(shù)據(jù)空間是相似的, 在經(jīng)過哈希之后他們的相似性仍然存在, 這也是本文使用這種方法來做特征降維的合理性解釋。
Simhash是LSH的一種, 是google用來處理海量文本去重的算法, 可以計(jì)算兩個(gè)文本的相似度,將數(shù)據(jù)降維到 hash數(shù)字, 使計(jì)算量變小, 速度加快,適合在特征深度處理階段處理維度高的樣本。
本文基于 Simhash算法, 提出了一種特征降維和融合方法。Simhash分為兩個(gè)部分, 文本哈希和相似度計(jì)算, 本文利用 Simhash的文本哈希算法部分來進(jìn)行特征映射和降維, 對(duì)上述提取的特征進(jìn)行特征元素的映射, 映射到低維特征空間, 從而得到最終融合后的特征向量。其中特征深度處理和融合算法如下:
(1) 輸入:原始特征向量集, 包括靜態(tài)和動(dòng)態(tài)特征向量和特征向量的權(quán)重, 組成特征/權(quán)重對(duì)(feature,weight), 其中權(quán)重通過統(tǒng)計(jì)次數(shù)確定。
(2)將特征/權(quán)重對(duì)(feature, weight) 映射到哈希/權(quán)重對(duì)(hash(feature), weight), 即對(duì)于每個(gè)特征(feature)映射到哈希特征(hash(feature)), 生成圖中的(hash, weight)對(duì), 此時(shí)假設(shè) hash生成的位數(shù)bits_count=6(如圖2所示); 為了解決特征的不平衡性,防止大維度特征將小維度特征淹沒, 對(duì)于所有特征,其特征權(quán)重計(jì)算公式如公式1。其中times(feature)為根據(jù)每個(gè)特征出現(xiàn)的頻次, k為需要調(diào)節(jié)的參數(shù),為特征維度最高的特征為度的比例, 而開根號(hào)是為了降低這種比例, 因?yàn)槿绻卣髦挥?20維, 這里的權(quán)重比達(dá)到了上百, 開根號(hào)可以減少這種比例, 不至于Simhash計(jì)算時(shí)太過于考慮小維度特征。這個(gè)公式的主要思想為: 針對(duì)小特征維度, 為其設(shè)置更高的權(quán)重。
圖2 Simhash特征融合方法Figure 2 Simhash feature fusion method
(3) 對(duì)哈希/權(quán)重對(duì)(hash(feature), weight)進(jìn)行位的縱向累加, 如果該位是 1, 則+weight, 如果是 0,則-weight, 最后生成 bits_count個(gè)數(shù)字, 如圖所示是[13, 108, -22, -5, -32, 55], 這里產(chǎn)生的值和hash函數(shù)所用的算法相關(guān)。
(4) 對(duì)最后的數(shù)字進(jìn)行0和1的映射, [13, 108,-22, -5, -32, 55]->110001, 根據(jù)獲得的數(shù)字序列按照正1負(fù)0的原則得到特征深度處理和融合后的特征向量。
使用此特征融合方法測(cè)試特征, 設(shè)現(xiàn)有三個(gè)樣本, 樣本分別有特征1~20, 特征及權(quán)重表如表2所示,其中樣本1與樣本2的特征十分相似, 前十個(gè)特征的權(quán)重都基本。
當(dāng)hash位數(shù)為20時(shí), 三個(gè)樣本的特征hash值為:01101010001001101101, 01101000011000101101,11110110111110100010, 可以看到樣本1和樣本2的哈希值非常相似, 他們的海明距離(不同位數(shù))為 3,而樣本1與樣本3的海民距離為13, 當(dāng)hash位數(shù)位10位時(shí), 即特征從20維降維到了10維, 這時(shí)三個(gè)樣本的哈希值為: 1001101101, 1000101101, 1110100010,此時(shí)樣本1與樣本2的海明距離只有1, 樣本1與樣本3的海明距離為7。在hash位數(shù)位6位時(shí), 三個(gè)樣本的hash值為101101, 101101, 100010, 可以看到此時(shí)樣本1與樣本2的哈希值完全相同了, 從20位降維到了6位時(shí), 其不同的部分信息丟失了。但整體上的相似還是可以表達(dá)出來。
表2 測(cè)試樣本特征Table 2 Test sample characteristics
經(jīng)過前面對(duì)實(shí)現(xiàn) Android應(yīng)用惡意代碼檢測(cè)的研究分析后, 本章從網(wǎng)上收集到了大量安卓惡意樣本, 從這些樣本中提取特征并分類檢測(cè), 并做了不同的實(shí)驗(yàn)以驗(yàn)證本文提出的方法的有效性。
本文的樣本搜集渠道為, 惡意樣本從 http://contagiominidump.blogspot.jp搜集, 共1500個(gè)惡意樣本, 所有樣本的解壓密碼需要給作者發(fā)送郵件獲取。良性樣本從 https://www.secsilo.com 搜集, 同樣搜集了1500個(gè)良性樣本。將惡意樣本和良性樣本記錄樣本名并隨機(jī)分開, 其中將 80%數(shù)據(jù)用做訓(xùn)練集樣本,剩余20%的良性樣本和惡意樣本組成測(cè)試集樣本。
本實(shí)驗(yàn)的實(shí)驗(yàn)環(huán)境為 Macbook Unix內(nèi)核, 2.7 GHz Intel Core i5 CPU, 內(nèi)存為 8 GB 1867 MHz DDR3。
本實(shí)驗(yàn)將1500個(gè)惡意樣本和1500個(gè)良性樣本隨機(jī)分開, 80%數(shù)據(jù)用做訓(xùn)練集樣本, 剩余20%的良性樣本和惡意樣本組成測(cè)試集, 首先對(duì)樣本提取特征, 本文提取的所有特征及特征維度如表3所示。
首先為了驗(yàn)證信息增益的方法的有效性, 分別在使用信息增益方法和在不使用信息增益方法的情況下實(shí)驗(yàn), 直接使用 Simhash特征融合, 并輸入GBDT算法, 分類時(shí)間在80s左右, 分類的準(zhǔn)確率為93%。
表3 本實(shí)驗(yàn)提取的特征及維度Table 3 The features and dimensions extracted in the experiment
在使用信息增益特征篩選時(shí), 針對(duì)于每一種特征, 如果特征維度大于3000則使用信息增益方法篩選, 并將篩選出來的特征在GBDT分類算法下, 在不使用信息增益和Simhash降維融合方法、僅使用信息增益方法, 僅使用Simhash降維融合方法和同時(shí)使用兩種方法時(shí)做分類對(duì)比。如表4所示, 在兩種方法都不使用時(shí), 分類時(shí)間大概在 10分鐘左右, 分類的準(zhǔn)確率為95%; 只使用信息增益方法時(shí), 分類時(shí)間為1分鐘左右, 準(zhǔn)確率有所提高, 只使用Simhash特征融合時(shí), 分類時(shí)間只需要2s, 但準(zhǔn)確率只有94%, 在兩者都使用時(shí), 時(shí)間和準(zhǔn)確率達(dá)到了最優(yōu)。從表的數(shù)據(jù)可以得出結(jié)論如下結(jié)論:
表4 分類時(shí)間和準(zhǔn)確率Table 4 Classification time and accuracy
(1) 在不使用信息增益提取特征時(shí), 由于從樣本中提取出的字符串、函數(shù)和 API調(diào)用序列等特征維度過大, 而像權(quán)限, 命令執(zhí)行這種特征維度較小, 大維度的特征會(huì)將小維度的特征淹沒, 小維度特征就不起作用了。而且特征維度過多, 所以分類時(shí)間過慢;
(2)只使用信息增益方法時(shí), 過濾了無用特征,在一定程度上平衡了特征集, 檢測(cè)準(zhǔn)確率有所提高,但分類時(shí)間沒有達(dá)到最快。
(3)直接使用 Simhash特征融合方法時(shí)面臨著和結(jié)論1一樣的問題, 即在128位的哈希位數(shù)中, 大維度特征的比重占用太多, 小維度特征所占比重太少,使小維度特征不起作用, 這時(shí)候的分類時(shí)間很快,但分類準(zhǔn)確率并沒有達(dá)到最高。
(4) 使用信息增益方法和Simhash特征融合方法組合后, 為小維度特征設(shè)置更高的權(quán)重。這樣即沒有丟失大維度特征的信息, 也沒有淹沒小維度的特征,分類時(shí)間和效率都達(dá)到了最高。
本實(shí)驗(yàn)還測(cè)試了 Simhash分類時(shí)的不同哈希桶位數(shù)下的準(zhǔn)確率和分類時(shí)間, 其中準(zhǔn)確率如圖3所示。
圖3 不同Simhash哈希桶位數(shù)的分類準(zhǔn)確率Figure 3 Classification accuracy of different Simhash hash buckets
在哈希桶大小為6位時(shí), 即為將3000維度的特征降維到了 6位的特征, 無疑失去了大量的準(zhǔn)確率,這時(shí)候準(zhǔn)確度在55%左右, 位數(shù)大小為256位時(shí), 準(zhǔn)確率能達(dá)到96%。從數(shù)據(jù)上可以看出, 特征融合降維后分類的準(zhǔn)確率會(huì)有所降低, 但隨著融合的哈希桶位數(shù)的升高, 分類的準(zhǔn)確率不斷上升, 最后無限逼近不做降維融合的準(zhǔn)確率。根據(jù)實(shí)驗(yàn)可以得出結(jié)論,當(dāng)哈希位數(shù)為 128位左右時(shí), 本文提出的特征融合的方法可以達(dá)到效率和準(zhǔn)確度都不錯(cuò)的效果。
雖然在準(zhǔn)確率上有所下降, 但在分類時(shí)間上,使用此方法能大大降低, 圖 4表示了不同位數(shù)大小下的分類時(shí)間, 其中桶大小為6位時(shí), 只需0.5秒左右就能完成分類, 而哈希位數(shù)上升時(shí), 分類的時(shí)間緩慢上升, 但在哈希位數(shù)為256位時(shí), 分類時(shí)間也只達(dá)到了3.5秒, 所以此特征融合方法在分類效率上能有比較大的提升。
本文提出的特征融合算法, 在解決特征的不平衡性上做了特殊的處理, 根據(jù)公式(1), 這里的featureDimension即為表 3的特征維度, maxfeatureDimension為 3000, 本實(shí)驗(yàn)特別針對(duì)使用公式 1和直接使用頻次作為權(quán)重的兩種情況, 在哈希桶為128位時(shí)做實(shí)驗(yàn), 實(shí)驗(yàn)數(shù)據(jù)如表5所示。實(shí)驗(yàn)數(shù)據(jù)證明本文提出的公式具有良好的準(zhǔn)確率提升效果。
圖4 不同Simhash哈希桶位數(shù)的分類時(shí)間性能Figure 4 Classification time performance of different Simhash hash buckets
表5 分類時(shí)間和準(zhǔn)確率Table 5 Classification time and accuracy
本實(shí)驗(yàn)還針對(duì)兩種不同的分類算法做比較, 如表6所示。分別對(duì)6、16、32、64、128位的Simhash特征融合位數(shù)做比較, 可以看出, 在特征維度較低時(shí), GBDT的分類準(zhǔn)確率比隨機(jī)森林要高, 而隨機(jī)森林的分類時(shí)間比GBDT短。隨著位數(shù)增加, 兩種分類算法的準(zhǔn)確度都大幅提升。在分類時(shí)間上, GBDT增加的幅度比隨機(jī)森林要大, 隨機(jī)森林的時(shí)間雖然有所增加, 但一直保持在0.2s左右。
表6 GBDT和隨機(jī)森林分類時(shí)間和準(zhǔn)確率Table 6 GBDT and random forest classification time and accuracy
實(shí)驗(yàn)可以得出結(jié)論, 首先因?yàn)樘卣魅诤喜糠諷imhash算法已經(jīng)將所有特征歸一化, 所以兩種特征出現(xiàn)的過擬合現(xiàn)象都不明顯, 由于隨機(jī)森林的并行化特性, 在效率上一直優(yōu)于GBDT, 而且對(duì)于不同的哈希位數(shù), 隨機(jī)森林的分類時(shí)間都很短。而 GBDT在大維度特征上時(shí)間消耗會(huì)比較多。但雖然在時(shí)間上隨機(jī)森林取得了比較大的優(yōu)勢(shì), 在準(zhǔn)確率和性能消耗上隨機(jī)森林并沒有GBDT表現(xiàn)優(yōu)異。
對(duì)于安卓惡意應(yīng)用的檢測(cè), 現(xiàn)有的方法存在著檢測(cè)效率低, 檢測(cè)率低的問題, 針對(duì)這些問題, 本文提出了一種基于多特征融合的安卓惡意應(yīng)用程序檢測(cè)方法。檢測(cè)方法首先對(duì)安卓應(yīng)用樣本進(jìn)行反編譯,獲得反編譯文件; 然后從反編譯文件中提取出大量特征, 提取出的特征使用信息增益方法篩選特征。在不同特征的融合方面, 本文提出了基于Simhash的特征融合方法, 將高維特征映射到低維特征空間, 從而得到融合后的特征向量, 最后利用不同的機(jī)器學(xué)習(xí)分類算法對(duì)樣本進(jìn)行分類并得到了比較好的效率和準(zhǔn)確率。本文的主要工作總結(jié)如下:
(1) 針對(duì)安卓惡意行為, 提取出了大量的靜態(tài)和動(dòng)態(tài)特征, 在提取靜態(tài)特征的函數(shù)調(diào)用特征時(shí), 將函數(shù)調(diào)用中沒有 API調(diào)用的部分剔除, 組合了函數(shù)調(diào)用特征和 API調(diào)用特征, 減少了自定義函數(shù)的干擾。使用大量的多維度特征分類, 首先保證了分類的準(zhǔn)確度。
(2)從安卓應(yīng)用中提取的特征通常不同種類的維度相差太大, 這與不同特征的不同來源相關(guān), 無法通過重采樣等方法解決, 為了解決大維度特征將小維度特征淹沒的問題, 首先在進(jìn)行特征融合之前, 先對(duì)大維度特征進(jìn)行特征篩選, 篩選時(shí), 針對(duì)每個(gè)特征計(jì)算信息增益, 繼而獲得信息增益率, 根據(jù)信息增益率進(jìn)行從大到小的特征排序, 選取前3000個(gè)特征。
(3) 本文借鑒 Google處理海量文本相似度的原理, 利用Simhash方法的局部敏感特性, 提出一種適用于惡意代碼分類的高維特征融合方法, 進(jìn)行特征融合與深度處理, 用Simhash融合特征時(shí), 對(duì)于特征維度較少的特征, 為其設(shè)置較高的權(quán)重, 這樣就使得小維度的特征獲得了更多的哈希位數(shù)的占比, 達(dá)到了選取了最有用的特征并高效融合處理的目的,并且平衡了各種特征的貢獻(xiàn)。實(shí)驗(yàn)數(shù)據(jù)得出本方法獲得了較好的時(shí)間性能和分類準(zhǔn)確率的提升。
在Simhash的權(quán)重問題上, 目前是針對(duì)所有特征做權(quán)重上的整體調(diào)整, 沒有具體為每類特征調(diào)節(jié)權(quán)重, 之后考慮加入其他獲取權(quán)重的方法。另外, 本文提取出來的特征可以用作聚類, 這也是今后需要進(jìn)一步研究的工作。
致謝本文受國(guó)家重點(diǎn)研發(fā)計(jì)劃項(xiàng)目(2016YFB0801304)資助。