本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,尤其涉及一種基于多特征融合的安卓惡意應(yīng)用程序檢測方法和系統(tǒng)。
背景技術(shù):
隨著智能手機(jī)的熱銷,手機(jī)上網(wǎng)越來越流行,移動(dòng)互聯(lián)時(shí)代的爆發(fā)更是帶動(dòng)智能手機(jī)趨于全能化,伴隨手機(jī)用戶爆炸增長、手機(jī)上網(wǎng)愈加便利而來的是,手機(jī)安全隱患越來越多、問題越來越突出,移動(dòng)智能手機(jī)在為用戶創(chuàng)造便利的同時(shí)也為手機(jī)惡意代碼攻擊帶來了新的發(fā)展方向。手機(jī)中存儲(chǔ)的大量用戶個(gè)人隱私數(shù)據(jù)以及移動(dòng)互聯(lián)網(wǎng)絡(luò)潛在的巨大經(jīng)濟(jì)利益使得黑客和惡意軟件制造者將智能手機(jī)作為新的攻擊目標(biāo)。
但由于android的系統(tǒng)特性,無法像pc端那樣內(nèi)置功能完善的防病毒軟件,且應(yīng)用市場中沒有嚴(yán)格的審查機(jī)制,應(yīng)用程序在正式發(fā)布之前不需經(jīng)過google公司或任何一方的嚴(yán)格審査,導(dǎo)致應(yīng)用市場中存在大量惡意應(yīng)用。如何對惡意應(yīng)用進(jìn)行有效的檢測與分析不僅是研究熱點(diǎn)也是研究難點(diǎn)。
目前,各種分析方法主要集中在靜態(tài)分析和動(dòng)態(tài)分析兩個(gè)大方向,
2014年gorla等人提出了chabada檢測方法,該方法只依賴于良性樣本作為訓(xùn)練集構(gòu)建訓(xùn)練模型來進(jìn)行惡意應(yīng)用的檢測。2014年,楊歡等人提出了一種綜合考慮android多類行為特征的三層混合系綜算法thea(triplehybridensemblealgrithm)用于檢測android未知惡意應(yīng)用。2015年,劉陽等人利用隨機(jī)森林和神經(jīng)網(wǎng)絡(luò)算法對大規(guī)模的數(shù)據(jù)樣本的特征集進(jìn)行惡意檢測,提出了一個(gè)利用機(jī)器學(xué)習(xí)算法對android惡意代碼進(jìn)行檢測的方案對apk文件釆用靜態(tài)分析,提取出所需特征屬性。最后輸入分類算法,對惡意應(yīng)用進(jìn)行檢測。這些方法利用的大規(guī)模的數(shù)據(jù)樣本,能比較準(zhǔn)確的檢測出安卓惡意代碼,但由于數(shù)據(jù)量大,特征維數(shù)過多,所以運(yùn)行效率較低。
現(xiàn)有的研究面臨多維特征融合和深度分析處理的問題。首先,惡意代碼分類存在特征維度多、單個(gè)特征的維度高的特點(diǎn)。在惡意代碼的特征向量提取過程中,由于特征可以從文件實(shí)體、文件反匯編等多個(gè)方面提取,而基于單一特征進(jìn)行分類又往往具有片面性,需要從不同的角度來融合表達(dá)惡意代碼樣本的特征,從而形成具有更好的抗混淆特性和抗干擾特性的特征向量。對多維特征的綜合分析和深度處理,逐漸成為惡意代碼分類的一種新趨勢。其次,在惡意代碼分類的實(shí)際過程中,存在某些家族樣本數(shù)量相對比較少的特點(diǎn),由此造成樣本數(shù)量不平衡的問題。例如trojan.win32.downloader等家族樣本數(shù)量非常龐大,而regin、flame等高級威脅樣本的數(shù)量卻又非常稀少,往往不會(huì)超過100個(gè)。這些特點(diǎn)都為惡意代碼的分類技術(shù)帶來新的挑戰(zhàn)。
基于多個(gè)維度的特征進(jìn)行分類學(xué)習(xí),需要對這些特征進(jìn)行融合和深度處理。為了解決惡意代碼稀有樣本家族的高維特征分析問題,本發(fā)明借鑒現(xiàn)有的海量文本檢索中的文本處理方法,利用simhash方法的局部敏感特性,提出一種適用于惡意代碼分類的高維特征融合方法,進(jìn)行特征融合與深度處理,以達(dá)到較好的時(shí)間性能和分類準(zhǔn)確率。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種基于多特征融合的安卓惡意應(yīng)用程序檢測方法和系統(tǒng),能夠解決惡意代碼稀有樣本家族的高維特征分析問題。
為了解決上述技術(shù)問題,本發(fā)明是這樣實(shí)現(xiàn)的:
一種基于多特征融合的安卓惡意應(yīng)用程序檢測方法,包括:
步驟一、對安卓應(yīng)用樣本進(jìn)行反編譯,獲得反編譯文件;
步驟二、從反編譯文件中提取靜態(tài)特征;通過在安卓模擬器中運(yùn)行安卓應(yīng)用樣本提取動(dòng)態(tài)特征;
步驟三、對靜態(tài)特征和動(dòng)態(tài)特征,使用局部敏感哈希算法的文本哈希映射部分進(jìn)行特征映射,映射到低維特征空間,從而得到融合后的特征向量;
步驟四、基于融合后的特征向量,利用機(jī)器學(xué)習(xí)分類算法訓(xùn)練得到分類器,利用該分類器進(jìn)行分類檢測。
優(yōu)選地,所述步驟1為:使用靜態(tài)分析工具apktool對作為安卓應(yīng)用樣本的apk文件進(jìn)行反編譯,反編譯后的文件包括androidmanifest.xml、smail文件、res目錄、assets目錄;
所述反編譯為:用python的os.walk()函數(shù)遍歷樣本庫文件夾,若發(fā)現(xiàn)apk文件則將該apk文件路徑和輸出路徑組合,作為apktool反編譯的輸出路徑;用apk文件路徑、apktool輸出路徑組合apktool命令,加到命令列表;遍歷完成后啟用多個(gè)進(jìn)程并行運(yùn)行命令列表中的命令,輸出反編譯結(jié)果,這些命令將按照樣本原來的分類路徑輸出到一個(gè)新的反編譯文件夾中。
優(yōu)選地,所述靜態(tài)特征包括:權(quán)限和組件、函數(shù)調(diào)用和api調(diào)用特征、文件結(jié)構(gòu)特征、腳本信息特征、字符串信息特征;其中,
提取權(quán)限和組件的方式為:通過解析androidmanifest.xml文件獲得;
提取函數(shù)調(diào)用和api調(diào)用特征的提取方式為:提取函數(shù)調(diào)用時(shí),針對每一個(gè)樣本,查找出樣本里的所有smali文件,然后對于每個(gè)smali文件用正則匹配方式匹配出所有函數(shù)調(diào)用,提取出來的函數(shù)調(diào)用特征建立n-gram特征序列;提取api調(diào)用時(shí),對于每個(gè)smali文件匹配每個(gè)官網(wǎng)api對應(yīng)的smali代碼,提取出api調(diào)用特征;將函數(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)用序列特征;
提取文件結(jié)構(gòu)特征的方式為:提取文件目錄結(jié)構(gòu)特征;
提取腳本信息特征的方式為:在樣本中查找js腳本文件,作為腳本信息特征;
提取字符串信息特征的方式為:針對每一個(gè)樣本,查找出樣本里的所有smali文件,然后對于每個(gè)smali文件用正則匹配方式匹配出所有字符串信息作為提取字符串信息特征。
優(yōu)選地,所述動(dòng)態(tài)特征包括:系統(tǒng)調(diào)用特征、關(guān)鍵路徑和數(shù)據(jù)訪問特征、http請求特征以及惡意吸費(fèi)特征;
其中,所述惡意吸費(fèi)特征的提取方式為:記錄程序的短信發(fā)送、電話撥打行為;如果撥打號碼或短信發(fā)送號碼不在移動(dòng)通信運(yùn)營商之列,則認(rèn)為具有疑似惡意吸費(fèi)行為,將這些行為記錄作為惡意吸費(fèi)特征。
優(yōu)選地,所述局部敏感哈希算法為simhash算法;所述機(jī)器學(xué)習(xí)分類算法為梯度優(yōu)化決策樹gbdt算法。
優(yōu)選地,步驟三在進(jìn)行特征映射之前,進(jìn)一步對除了權(quán)限和組件的其他特征進(jìn)行特征篩選,篩選時(shí),針對每個(gè)特征計(jì)算信息增益,繼而獲得信息增益率,根據(jù)信息增益率進(jìn)行從大到小的特征排序,選取前k個(gè)特征進(jìn)行所述特征映射;k為設(shè)定的篩選量;
特征a的信息增益率gainratio(s,a)的計(jì)算公式為:
其中,splitinformation(s,a)為作為懲罰項(xiàng)的分裂信息;gran(s,a)為特征a的信息增益。
本發(fā)明還提供了一種基于多特征融合的安卓惡意應(yīng)用程序檢測系統(tǒng),包括反編譯模塊、靜態(tài)分析模塊、動(dòng)態(tài)分析模塊、特征融合模塊和分類檢測模塊;
反編譯模塊,用于對安卓惡意應(yīng)用樣本進(jìn)行反編譯,獲得反編譯后的apk文件;
靜態(tài)分析模塊,用于從反編譯后的apk文件中提取靜態(tài)特征;
動(dòng)態(tài)分析模塊,用于通過在安卓模擬器中運(yùn)行androidapk樣本提取動(dòng)態(tài)特征;
特征融合模塊,用于對靜態(tài)特征和動(dòng)態(tài)特征,使用局部敏感哈希算法的文本哈希映射部分進(jìn)行特征映射,映射到低維特征空間,從而得到融合后的特征向量;
分類檢測模塊,用于基于融合后的特征向量,利用機(jī)器學(xué)習(xí)分類算法訓(xùn)練得到分類器,利用該分類器進(jìn)行分類檢測。
優(yōu)選地,所述靜態(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請求特征以及惡意吸費(fèi)特征。
優(yōu)選地,靜態(tài)分析模塊提取函數(shù)調(diào)用和api調(diào)用特征后,進(jì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)用序列特征作為靜態(tài)特征;
所述特征融合模塊在進(jìn)行特征融合之前,進(jìn)一步對除了權(quán)限和組件之外的其他特征進(jìn)行篩選;篩選時(shí),對每一個(gè)特征計(jì)算信息增益,繼而獲得信息增益率,根據(jù)信息增益率進(jìn)行從大到小的特征排序,選取前k個(gè)特征作為篩選結(jié)果,然后再對篩選結(jié)果中的特征進(jìn)行特征映射;其中,k為設(shè)定的篩選量。
優(yōu)選地,特征融合模塊采用的局部敏感哈希算法為simhash算法;分類檢測模塊采用的機(jī)器學(xué)習(xí)分類算法為gbdt算法;
所述反編譯模塊使用靜態(tài)分析工具apktool對作為惡意安卓應(yīng)用樣本的apk文件進(jìn)行反編譯,反編譯后的文件包括androidmanifest.xml、smail文件、res目錄、assets目錄;
所述反編譯為:用python的os.walk()函數(shù)遍歷文件夾,若發(fā)現(xiàn)apk文件則用該文件的目錄和輸出目錄組成一個(gè)apktool的命令,加入命令隊(duì)列;遍歷完成后啟用多個(gè)進(jìn)程并行運(yùn)行命令反編譯樣本,這些命令會(huì)按照樣本原來的相對分類好的路徑輸出到一個(gè)新的反編譯文件夾中。
有益效果:
(1)本發(fā)明使用了動(dòng)態(tài)特征和靜態(tài)特征結(jié)合的方式,彌補(bǔ)了單種特征的缺點(diǎn),使得檢測準(zhǔn)確度有所提高。
(2)本發(fā)明針對安卓惡意應(yīng)用的行為特點(diǎn)出發(fā),篩選出了最有用的特征,使得該特征能夠更清晰的反映惡意應(yīng)用與良性應(yīng)用的區(qū)別。
(3)由于本發(fā)明采用了動(dòng)態(tài)特征和靜態(tài)特征的結(jié)合,因此特征維度必然很大,本發(fā)明采用局部敏感哈希算法進(jìn)行降維,不僅降維,而且實(shí)現(xiàn)了融合,從而解決惡意代碼稀有樣本家族的高維特征分析問題。
此外,本發(fā)明在安卓特征提取時(shí),能從一個(gè)安卓樣本中的androidmanifest文件中提取出的權(quán)限和組件特征量較少,而系統(tǒng)調(diào)用較之多一些,可能達(dá)到上百個(gè),最多的函數(shù)調(diào)用能達(dá)到上千個(gè),所以直接將這些特征融合,很有可能權(quán)限和組件特征就被淹沒了,針對這個(gè)問題,本發(fā)明首先將函數(shù)調(diào)用中沒有api調(diào)用的部分剔除,組合了函數(shù)調(diào)用特征和api調(diào)用特征,減少了自定義函數(shù)的干擾。然后對特征量較大的特征(除權(quán)限和組件的其他特征)使用信息增益進(jìn)行特征的篩選,取出信息量較大的特征,去除作用較少的特征。最后再用simhash融合特征,這樣就達(dá)到了選取了最有用的特征并高效融合處理的目的。
(4)為了防止過擬合,本發(fā)明還使用了dgbt分類算法。該算法適合混合數(shù)據(jù)類型的自然處理,預(yù)測力強(qiáng),并有健壯的輸出空間。融合后的特征輸入分類算法最終達(dá)到分類的目的。
附圖說明
圖1為本發(fā)明安卓惡意樣本檢測系統(tǒng)的工作流程圖。
圖2為本發(fā)明akptool反編譯各類安卓樣本流程圖。
圖3為本發(fā)明提取函數(shù)api調(diào)用序列的流程圖。
圖4為simhash特征融合方法的示意圖。
具體實(shí)施方式
下面結(jié)合附圖并舉實(shí)施例,對本發(fā)明進(jìn)行詳細(xì)描述。
本發(fā)明提出了一種基于多特征融合的安卓惡意應(yīng)用程序檢測方案,其基本思想是:對安卓惡意應(yīng)用樣本進(jìn)行反編譯,獲得反編譯后的apk文件;從反編譯后的apk文件中提取靜態(tài)特征;通過在安卓模擬器中運(yùn)行apk文件提取動(dòng)態(tài)特征;對靜態(tài)特征和動(dòng)態(tài)特征,使用局部敏感哈希算法的文本哈希算法部分進(jìn)行特征映射,映射到低維特征空間,從而得到融合后的特征向量;最后基于融合后的特征向量,利用機(jī)器學(xué)習(xí)分類算法訓(xùn)練得到分類器;利用該分類器分類檢測安卓惡意應(yīng)用。
為了實(shí)現(xiàn)上述方案,本發(fā)明提供了一種基于多特征融合的安卓惡意應(yīng)用程序檢測系統(tǒng),包括預(yù)處理模塊、反編譯模塊、靜態(tài)分析模塊、動(dòng)態(tài)分析模塊、特征融合模塊和分類檢測模塊,整體流程結(jié)構(gòu)如圖1所示。下面對每個(gè)模塊的功能進(jìn)行詳細(xì)描述。
(1)預(yù)處理模塊
預(yù)處理模塊用于解壓apk壓縮文件,搜集安卓應(yīng)用樣本,這些樣本包括惡意的和良性的。因?yàn)樗鸭降淖畛醯臉颖炯际窃S多壓縮包,每個(gè)壓縮包下都有幾個(gè)apk樣本,所以對所有的樣本壓縮文件解壓,提取apk樣本文件,并過濾不需要的其他文件。
(2)反編譯模塊
反編譯模塊對搜集的安卓應(yīng)用樣本進(jìn)行反編譯,獲得反編譯文件。
具體來說,反編譯模塊使用靜態(tài)分析工具apktool對作為樣本的apk文件進(jìn)行反編譯,反編譯后的文件包括androidmanifest.xml、smail文件、res目錄、assets目錄。
反編譯的流程如圖2。因?yàn)椴煌瑯颖緦儆诓煌诸惢蚣易?,處于不同文件夾下,所以需要深度遍歷文件夾,查找apk文件樣本,用python的os.walk()函數(shù)遍歷文件夾,若發(fā)現(xiàn)apk文件則將該apk文件路徑和輸出路徑組合,作為apktool反編譯的輸出路徑;用apk文件路徑、apktool輸出路徑組合apktool命令,加到命令列表。遍歷完成后啟用多個(gè)進(jìn)程并行運(yùn)行命令列表中的命令,輸出反編譯結(jié)果。這些命令會(huì)按照樣本原來的相對分類好的路徑輸出到一個(gè)新的反編譯文件夾。采用這種方式大大提高了處理速度。
(3)靜態(tài)分析模塊
靜態(tài)分析模塊從反編譯文件中提取靜態(tài)特征。具體來說,該靜態(tài)分析模塊自動(dòng)化分析反編譯后的apk文件目錄,提取apk文件中的特征,稱為靜態(tài)特征,這些靜態(tài)特征包括權(quán)限和組件、函數(shù)調(diào)用和api調(diào)用特征、文件結(jié)構(gòu)特征、腳本信息特征、字符串信息特征。其中,
權(quán)限和組件(活動(dòng),服務(wù),內(nèi)容提供器)特征的提取方式為:通過解析androidmanifest.xml文件獲得。解析方法為利用python的xml.dom.minidom包解析xml標(biāo)簽,獲取uses-permission、activity、services、contentprovider標(biāo)簽信息。
提取函數(shù)調(diào)用和api調(diào)用特征。提取方法如圖3,首先用python的os.walk()函數(shù)遍歷反編譯后的文件夾下的每個(gè)樣本,針對每一個(gè)apk樣本(因?yàn)闃颖痉淳幾g后的后綴沒有變,還是.apk,只是這時(shí)變成了反編譯的文件夾,判斷方法為如果后綴為.apk的文件夾即為一個(gè)樣本單位),查找出樣本里的所有smali文件。然后對于每個(gè)smali文件,提取函數(shù)調(diào)用時(shí),針對每一行用正則匹配方式匹配出所有函數(shù)調(diào)用,提取出來的函數(shù)調(diào)用特征建立n-gram特征序列。n-gram只是將一串?dāng)?shù)據(jù)轉(zhuǎn)化為n-gram向量形式,只是簡單地統(tǒng)計(jì)n-gram中元素出現(xiàn)的頻次,并不能從實(shí)質(zhì)上代表應(yīng)用程序的惡意行為,僅反映了在惡意程序中出現(xiàn)的元素并沒有在非惡意程序中出現(xiàn)。為了更好地區(qū)分和描述惡意行為特征,本發(fā)明還提取了api調(diào)用序列并與之組合,提取方法為對于每個(gè)smali文件,匹配每個(gè)官網(wǎng)api對應(yīng)的smali代碼,提取出api調(diào)用特征。因?yàn)楹瘮?shù)調(diào)用特征有上千個(gè),而許多函數(shù)是開發(fā)者自己定義的,和惡意行為并沒有多大直接關(guān)聯(lián),而真正的惡意代碼的行為肯定是在函數(shù)調(diào)用序列中調(diào)用了某些敏感api,例如hipposms的樣本,其發(fā)送短信的函數(shù)調(diào)用序列為oncreate()->sendmsms->sendtextmessage,而其中的sendmsms既屬于函數(shù)調(diào)用也屬于api調(diào)用。所以本發(fā)明將函數(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)用序列特征。
文件結(jié)構(gòu)特征。提取文件目錄結(jié)構(gòu)特征。有些惡意樣本所包含的包名是相同的,甚至該包內(nèi)層的文件結(jié)構(gòu)及內(nèi)容也很類似,對于這種樣本,我們有理由的相信這他們是“同源”的,甚至可能出自同樣的作者之手,所以本發(fā)明提取文件結(jié)構(gòu)特征作為待融合特征。
腳本信息特征。某些安卓應(yīng)用在運(yùn)行過程中會(huì)執(zhí)行惡意腳本,所以腳本信息可以作為一種特征,提取方法為在樣本中查找js腳本文件,將找到的文件作為特征。
字符串信息特征。安卓應(yīng)用中的字符串可能包含網(wǎng)絡(luò)http請求信息和一些關(guān)鍵數(shù)據(jù),提取方法為針對每一個(gè)樣本,查找出樣本里的所有smali文件,然后對于每個(gè)smali文件用正則匹配方式匹配出所有字符串信息作為特征。
(4)動(dòng)態(tài)分析模塊
靜態(tài)分析的優(yōu)點(diǎn)是快速、高效。但是難以應(yīng)對代碼混淆和多態(tài)變形技術(shù)。同時(shí),靜態(tài)分析難以識別漏洞利用攻擊。因?yàn)槁┒蠢霉舻姆治龊投ㄎ恍枰唧w的漏洞運(yùn)行環(huán)境。所以本發(fā)明采用動(dòng)態(tài)和靜態(tài)分析結(jié)合的方法。動(dòng)態(tài)分析模塊在安卓模擬器中運(yùn)行android應(yīng)用程序。提取系統(tǒng)調(diào)用特征、關(guān)鍵路徑訪問特征、http請求特征和惡意吸費(fèi)特征。
系統(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)用記錄并作為特征。
關(guān)鍵路徑訪問特征。android系統(tǒng)基于linux內(nèi)核,同樣存在一些敏感路徑,惡意代碼可以調(diào)用該敏感路徑目錄下的系統(tǒng)程序執(zhí)行命令。以root漏洞gingermaster為例,其在惡意行為執(zhí)行過程中會(huì)調(diào)用chmod、mount更改文件權(quán)限、掛載文件等命令,所以關(guān)鍵路徑訪問可以作為一種特征。
http請求特征。有的惡意軟件會(huì)在運(yùn)行過程中會(huì)發(fā)送http請求包。例如geinimi惡意樣本會(huì)從www.widifu.corn:8080獲取控制命令,因此可以分析http請求并提取特征。在解析http請求提取的屬性中,根據(jù)經(jīng)驗(yàn),請求內(nèi)容、path和cookie是惡意特征最重要的體現(xiàn)部位,所以應(yīng)該進(jìn)行更深入的特征提取,提取出http請求特征后再對其用正則匹配提取這幾種屬性的特征。
惡意吸費(fèi)特征。安卓惡意吸費(fèi)行為主要通過發(fā)短信和打電話來完成。雖然這些行為都會(huì)申請?zhí)囟ǖ臋?quán)限,但不是所有申請了發(fā)短信和打電話的應(yīng)用都是惡意應(yīng)用,所以記錄程序的短信發(fā)送、電話撥打行為。如果號碼不在移動(dòng)運(yùn)營商之列,如10086、10000等,則認(rèn)為可能具有惡意吸費(fèi)行為,將這些行為記錄作為一種特征,對前面的靜態(tài)特征的權(quán)限部分可能產(chǎn)生的誤查起到了補(bǔ)償和相互配合的作用。
(5)特征融合模塊
特征融合模塊主要對前文提取出的大量特征做篩選和融合,包括篩選部分和融合部分,其中篩選部分主要用來過濾不需要的特征,主要用到了信息增益方法。
信息增益是是一種用數(shù)學(xué)來度量信息的方法。用信息增益的方法來進(jìn)行特征選擇的核心思想是:重要性的衡量標(biāo)準(zhǔn)就是看特征能夠?yàn)榉诸愊到y(tǒng)帶來多少信息,帶來的信息越多,該特征越重要。這樣只需要計(jì)算特征集中所有特征的信息增益值,根據(jù)其信息增益值的大小就可以得到所有特征的重要程度。對樣本集s,其中的一個(gè)特征a的信息增益可以由公式1計(jì)算。這里的樣本為前文的每個(gè)apk樣本,而特征a屬于從樣本集中提取出來的所有靜態(tài)特征或者動(dòng)態(tài)特征中的一個(gè)。
其中,entropy(s)為樣本集合s的熵,在
其中,pi=|si|/|s|表示任意一條樣本屬于類別i的概率,si為樣本集中類別為i的樣本數(shù)目,|s|為樣本總數(shù)。對分類系統(tǒng)來說,類別i是變量,它可能的取值為1<=i<=n,而每一個(gè)類別出現(xiàn)的概率是pi,因此n就是類別的總數(shù),在判斷惡意或者良性時(shí),n取值為2。
信息增益是針對一個(gè)一個(gè)的特征而言的,就是看一個(gè)特征a,系統(tǒng)有它和沒它的時(shí)候信息量各是多少,兩者的差值就是這個(gè)特征給系統(tǒng)帶來的信息量,即增益。系統(tǒng)含有特征a的時(shí)候信息量用公式2計(jì)算,不含有特征a的信息量即為
信息增益能夠有效的度量屬性的區(qū)分度,但是其存在一個(gè)內(nèi)在偏置,就是偏袒具有較多取值的屬性。這個(gè)內(nèi)在的偏執(zhí)可以采用信息增益率的方式來取消,信息增益率在信息增益的基礎(chǔ)上做了一些改進(jìn),通過增加一個(gè)分裂信息(splitinformation)的懲罰項(xiàng)來平衡屬性分裂數(shù)據(jù)的深度和廣度。信息增益率的計(jì)算方式如公式3、4所示,公式4中,樣本集中的數(shù)據(jù)按照特征a的取值劃分成了n個(gè)子集,|si|為第i個(gè)子集的樣本數(shù)目,|s|為樣本總數(shù):
針對前文靜態(tài)分析和動(dòng)態(tài)分析提取出來的每個(gè)特征計(jì)算信息增益率后,進(jìn)行排序,然后選取前k個(gè)特征進(jìn)行后續(xù)的融合;其中,k為設(shè)定的篩選量,例如可以選取總量的50%。
融合部分對靜態(tài)分析模塊和動(dòng)態(tài)分析模塊提取出的各種種類的特征,使用局部敏感哈希算法的文本哈希映射部分進(jìn)行特征映射,映射到低維特征空間,從而得到融合后的特征向量。其中,局部敏感哈希算法可以為simhash算法,也可以是minhash算法。
simhash是google用來處理海量文本去重的算法,可以計(jì)算兩個(gè)文本的相似度,將數(shù)據(jù)降維到hash數(shù)字,使計(jì)算量變小,速度加快,適合維度高的樣本在特征深度處理階段。simhash分為兩個(gè)部分,文本哈希和相似度計(jì)算,本發(fā)明利用simhash的文本哈希算法部分來進(jìn)行特征映射和降維,對上述提取的特征進(jìn)行特征元素的映射,映射到低維特征空間,從而得到最終融合后的特征向量。其中特征深度處理和融合算法如下。
①輸入:篩選后的特征向量集,包括靜態(tài)和動(dòng)態(tài)特征向量和特征向量的權(quán)重,組成特征/權(quán)重對(feature,weight),其中權(quán)重通過統(tǒng)計(jì)次數(shù)確定。
②將特征/權(quán)重對(feature,weight)映射到哈希/權(quán)重對(hash(feature),weight),即對于每個(gè)特征(feature)映射到哈希特征(hash(feature)),生成圖中的(hash,weight)對,此時(shí)假設(shè)hash生成的位數(shù)bits_count=6(如圖4);
③對哈希/權(quán)重對(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)。
④對最后的數(shù)字進(jìn)行0和1的映射,[13,108,-22,-5,-32,55]->110001,根據(jù)獲得的數(shù)字序列按照正1負(fù)0的原則得到特征深度處理和融合后的特征向量。
本發(fā)明在安卓特征提取時(shí),能從一個(gè)安卓樣本中的androidmanifest文件中提取出的權(quán)限和組件特征量較少,而系統(tǒng)調(diào)用較之多一些,可能達(dá)到上百個(gè),最多的函數(shù)調(diào)用能達(dá)到上千個(gè),所以直接將這些特征融合,很有可能權(quán)限和組件特征就被淹沒了,針對這個(gè)問題,本發(fā)明首先將函數(shù)調(diào)用中沒有api調(diào)用的部分剔除,組合了函數(shù)調(diào)用特征和api調(diào)用特征,減少了自定義函數(shù)的干擾。然后對特征量較大的特征(除權(quán)限和組件的其他特征)使用信息增益進(jìn)行特征的篩選,取出信息量較大的特征,去除作用較少的特征。最后再用simhash融合特征,這樣就達(dá)到了選取了最有用的特征并高效融合處理的目的。
(6)分類檢測模塊
分類檢測模塊基于融合后的特征向量,利用機(jī)器學(xué)習(xí)分類算法訓(xùn)練得到分類器;利用該分類器分類檢測安卓惡意應(yīng)用。
本發(fā)明使用gbdt(gradientboostingdecisiontree)梯度優(yōu)化決策樹算法來分類檢測安卓惡意應(yīng)用,gbdt是一種迭代的決策樹算法,又叫mart(multipleadditiveregressiontree),該算法由多棵決策樹組成,所有樹的結(jié)論累加起來做最終答案。它在被提出之初就和svm一起被認(rèn)為是泛化能力(generalization)較強(qiáng)的算法。近些年更因?yàn)楸挥糜谒阉髋判虻臋C(jī)器學(xué)習(xí)模型而引起大家關(guān)注。該算法由多棵決策樹組成,所有樹的結(jié)論累加起來做最終答案。適合混合數(shù)據(jù)類型的自然處理,預(yù)測力強(qiáng),有健壯的輸出空間,并且能防止過擬合。
在本發(fā)明一優(yōu)選實(shí)施例中,將獲得的融合后的特征向量隨機(jī)分開,其中將80%數(shù)據(jù)用做訓(xùn)練集樣本,剩余20%的良性樣本和惡意樣本組成測試集樣本。分類檢測模塊使用gbdt(梯度優(yōu)化決策樹分類算法)算法,針對訓(xùn)練集樣本中每個(gè)樣本的特征維度,構(gòu)建多棵決策回歸樹并迭代累加,使算法的損失函數(shù)在梯度方向上逐步遞減,最終得到一個(gè)優(yōu)秀的模型,并用模型對測試集應(yīng)用進(jìn)行測試,檢測應(yīng)用的惡意代碼,得出測試結(jié)果。在實(shí)際分類時(shí),采用前面的模塊獲得待分類樣本的融合特征,然后輸入到模型中,從而獲得是否為惡意樣本、為哪類惡意樣本的結(jié)果。
本發(fā)明能夠分析已有的安卓樣本,提取多維度的不同種類的安卓惡意樣本特征庫,并針對未知的安卓應(yīng)用,檢測出其是否為惡意樣本,屬于哪種惡意樣本。
綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。