于媛爾, 張琳琳, 趙 楷, 方文波, 胡英杰,宋 鑫, 王晨躍
(1. 新疆大學(xué) 信息科學(xué)與工程學(xué)院 新疆 烏魯木齊 830046; 2. 新疆大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院 新疆 烏魯木齊 830046; 3.新疆大學(xué) 軟件學(xué)院 新疆 烏魯木齊 830091)
自2007年面世以來,Android系統(tǒng)迅速發(fā)展為移動終端應(yīng)用最廣泛的操作系統(tǒng)。相比于個人計(jì)算機(jī),移動設(shè)備與用戶的隱私信息和財(cái)產(chǎn)安全聯(lián)系更為密切。此外,由于系統(tǒng)的開源性與市場開放性,Android操作系統(tǒng)更加容易被惡意軟件利用。2019年8月13日,360互聯(lián)網(wǎng)安全中心最新發(fā)布《2019年上半年中國手機(jī)安全狀況報(bào)告》[1]。報(bào)告顯示,2019年上半年,360互聯(lián)網(wǎng)安全中心共截獲安卓平臺新增惡意程序樣本約92.0萬個,平均每天截獲新增手機(jī)惡意程序樣本約0.5萬個。惡意軟件樣本數(shù)量的增長速度遠(yuǎn)遠(yuǎn)超過了惡意軟件檢測系統(tǒng)分析的速度。
大多數(shù)新型惡意軟件樣本都是已知惡意軟件的多態(tài)變體[2-3],由于同源惡意軟件家族很大程度上都共用了祖先的大部分代碼,具有內(nèi)在關(guān)聯(lián)性,因此,同一家族的樣本可能執(zhí)行類似的惡意行為。將惡意軟件樣本分類到各個已知的家族中,不僅可以減少這些惡意軟件變體的分析時間,還可用于預(yù)測未知惡意軟件樣本的行為。這對于惡意軟件的檢測和分類具有重要意義。
本文依據(jù)惡意家族繼承性與衍生性的本質(zhì)特征,結(jié)合靜態(tài)分析方法,提出一種基于敏感權(quán)限和API的Android惡意軟件家族分類方法,并結(jié)合隨機(jī)森林算法實(shí)現(xiàn)對Android惡意軟件的家族分類。
目前,通過對Android不同家族的特征進(jìn)行研究,總結(jié)出119個家族的惡意行為,例如,數(shù)據(jù)竊取、惡意下載、將信息竊取到遠(yuǎn)程服務(wù)器等。惡意軟件家族之間的區(qū)別微不可察,惡意行為的大量重疊使得區(qū)分家族變得異常困難。國內(nèi)外學(xué)者針對Android惡意軟件家族分類提出了多種方法。分類方法大致可以分為靜態(tài)分析方法和動態(tài)分析方法。
靜態(tài)分析方法是在不運(yùn)行程序情況下,需要先對應(yīng)用程序進(jìn)行反編譯或反匯編處理,通過處理過后的代碼來分析Android應(yīng)用程序的行為,并根據(jù)這些行為來判斷應(yīng)用程序是否具有相似性。文獻(xiàn)[4]通過多個簽名條目(字符串、方法名、方法體等)評估不同樣本間的相似性,進(jìn)而歸類同家族樣本,使得檢測變體成為可能。Dendroid[5]利用數(shù)據(jù)挖掘的方法分析Android惡意軟件家族樣本的代碼結(jié)構(gòu),通過靜態(tài)分析,提取與應(yīng)用程序片段關(guān)聯(lián)的代碼結(jié)構(gòu)CFG來進(jìn)行惡意軟件的相似性計(jì)算。DroidSieve[6]是一種基于靜態(tài)分析的Android惡意軟件分類器,該分類器快速、準(zhǔn)確且對混淆具有彈性。Fan等[7]為了識別Android惡意軟件的多態(tài)變體,采用聚類算法和社區(qū)結(jié)構(gòu)方法,從家族樣本的敏感API調(diào)用子圖中提取頻繁子圖作為惡意軟件的家族行為特征,并利用該家族特征識別未知惡意軟件,檢測率達(dá)到94.5%。文獻(xiàn)[8]定義了Android軟件基因,從代碼段、資源段和配置清單文件三個方面對基因進(jìn)行了提取,并進(jìn)行檢測與分類,有較高的檢測率和分類正確率。文獻(xiàn)[9]提出了一種用于發(fā)現(xiàn)不同數(shù)量大小的Android惡意軟件家族的新算法,通過在Drebin[10]和最近的Koodous惡意軟件數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),得到良好的分類效果。文獻(xiàn)[11]提出了一個兩級行為圖模型DroidMiner,并提取敏感路徑來表示惡意軟件的行為模式。但是敏感路徑可能出現(xiàn)在合法部分和惡意組件中,從而導(dǎo)致高誤報(bào)率。DroidSIFT[12]提取加權(quán)上下文API依賴圖作為程序語義來構(gòu)造特征集,確定應(yīng)用程序是否屬于惡意應(yīng)用程序,以及惡意應(yīng)用程序所屬的家族,其依賴于一組良性子圖來刪除惡意軟件中的常見子圖。不足的是,確保良性子圖集的完整性往往是困難的。文獻(xiàn)[13]提出了MassVet,它將應(yīng)用程序的UI建模為有向圖,其中每個節(jié)點(diǎn)都是一個視圖,每個邊描述它們之間的導(dǎo)向關(guān)系。通過不同應(yīng)用程序中的類似視圖結(jié)構(gòu),MassVet可以有效地識別重新打包的應(yīng)用程序。
動態(tài)分析方法主要是通過運(yùn)行Android應(yīng)用程序發(fā)現(xiàn)應(yīng)用漏洞,常見的方式是通過在沙箱中運(yùn)行應(yīng)用程序,觀察應(yīng)用程序所表現(xiàn)出的行為,分析其中是否存在惡意行為,如是否泄漏用戶隱私、是否含有誘騙信息等。文獻(xiàn)[14]提出了一種自動提取Android惡意軟件家族簽名的方法,通過識別使用相同(或類似)惡意代碼搭載在不同的良性應(yīng)用程序上,對產(chǎn)生的惡意軟件的簽名進(jìn)行家族匹配,但該方法的重點(diǎn)明確放在搭載和重新打包的應(yīng)用程序上。DroidScribe[15]使用機(jī)器學(xué)習(xí)方法將Android惡意軟件樣本自動準(zhǔn)確分類到各個家族中,同時僅觀察其運(yùn)行時的行為。
由于靜態(tài)分析只需要反編譯提取文件的相關(guān)特征就可以進(jìn)行分析,相比于動態(tài)分析,不會對系統(tǒng)運(yùn)行產(chǎn)生影響,所消耗的系統(tǒng)資源與時間較少,效率更高。因此本文提出一種基于靜態(tài)分析的方法,進(jìn)行惡意軟件的家族分類。
任何Android應(yīng)用程序的后綴都是.apk,即Android application file package。APK文件是一個壓縮包,主要包括Java源代碼編譯后的文件、資源文件、簽名證書和配置文件等,本文所提取的API在classes.dex文件中,采用dex2jar工具進(jìn)行反編譯,可得到.jar后綴的文件,用jd-gui工具將.jar文件反編譯為.java文件,最后通過python代碼提取其中的API。
APK文件經(jīng)過工具APKTool(http:∥ibotpeaches.github.io/Apktooll)反編譯可以生成一種smali格式的數(shù)據(jù)包。smali語言是Davlik的寄存器語言,語法上和匯編語言相似。smali文件前三行的通用模式如下:
.class<訪問權(quán)限[修飾關(guān)鍵字]><類名>,用于說明目前的類名;
.super<父類名>,說明目前類的父類名稱;
.source<源文件名>,說明目前類的源文件名稱。
剩下的是類的主體部分,一個類包括多個字段或方法。
整個系統(tǒng)的框架如圖1所示,首先收集各個家族的惡意軟件樣本,通過Android逆向工程技術(shù)提取權(quán)限與API,將提取過后的Android權(quán)限通過權(quán)值分配,對比不同權(quán)值的結(jié)果,選取結(jié)果最優(yōu)的權(quán)限組作為敏感權(quán)限。通過Android官方聲明文檔中對敏感權(quán)限所對應(yīng)的API進(jìn)行提取,并與通過權(quán)值篩選提取的API相結(jié)合,將這些API定義為敏感API,將敏感API與權(quán)限相結(jié)合構(gòu)成特征集,最后通過隨機(jī)森林算法對Android惡意軟件家族進(jìn)行分類。
圖1 惡意軟件家族分類框架圖Figure 1 Malware family classification framework
2.3.1敏感權(quán)限的提取 普通權(quán)限是指那些不會威脅到用戶安全和隱私的權(quán)限,這部分權(quán)限系統(tǒng)會自動進(jìn)行授權(quán),不需要手動操作。敏感權(quán)限則表示那些可能會觸及到用戶安全隱私或者對設(shè)備安全造成影響的權(quán)限,如獲取手機(jī)聯(lián)系人信息等權(quán)限,這些權(quán)限必須由用戶點(diǎn)擊授權(quán)才可以使用,否則程序無法使用相應(yīng)的功能。本文采用APKTool工具對Drebin數(shù)據(jù)集[10]中的APK文件進(jìn)行反編譯。由于反編譯過后的AndroidManifest.xml文件中聲明了所有權(quán)限,要篩選出所需要的敏感權(quán)限,還需要進(jìn)一步處理。因此對20個家族4 664個樣本的權(quán)限信息進(jìn)行提取,并根據(jù)提取結(jié)果與目前官方發(fā)布的151個權(quán)限進(jìn)行對比,采用權(quán)值計(jì)算公式(1)對各家族權(quán)限賦予權(quán)重,
(1)
其中:p(s,f)代表家族f中某個權(quán)限調(diào)用樣本數(shù)s;allnum代表所有家族的總樣本數(shù);totalnum代表家族f的樣本數(shù)。選用w>0.3、w>0.2和w>0.1的三組權(quán)限進(jìn)行對比,最終選取w>0.1的權(quán)限作為本文的敏感權(quán)限,共31個。
2.3.2敏感API的提取 通常,惡意軟件的實(shí)現(xiàn)需要調(diào)用特定API來完成,如惡意計(jì)費(fèi)軟件會調(diào)用發(fā)送短信的API、隱私竊取軟件會調(diào)用訪問通訊錄的API等,此類API被稱為敏感API。本文的敏感API主要分為三個部分。第一部分是通過將Drebin數(shù)據(jù)集中選取的4 664個APK進(jìn)行解壓,對其中的classes.dex文件采用dex2jar和jd-jui工具得到j(luò)ava源碼,從java源碼中提取出API,并進(jìn)行統(tǒng)計(jì)篩選,通過權(quán)值計(jì)算公式(1),選用w>0.2、w>0.1和w>0.05的三組API進(jìn)行對比,最終選取w>0.05的共30個API作為敏感API的一部分。第二部分通過查閱Android5.1.1版本的官方文檔,提取出8個危險(xiǎn)權(quán)限所對應(yīng)的87個API。最后一部分為官方聲明重度敏感的11個敏感API。刪去重復(fù)部分,最后一共提取121個API作為敏感API。將每個APK反編譯過后,從中提取.smali文件與敏感API進(jìn)行匹配。
2.3.3敏感權(quán)限與API特征融合 由于單一特征難以充分地反映惡意軟件的惡意行為,例如權(quán)限雖然可以證明敏感資源的使用情況,但是不能提供可疑應(yīng)用程序意圖的詳細(xì)描述,而與權(quán)限相關(guān)的API更能反映惡意軟件的行為。因此本文將31個敏感權(quán)限與121個敏感API結(jié)合后共152個敏感特征,作為分類器的輸入。
隨機(jī)森林(random forest,RF)是一種常見的機(jī)器學(xué)習(xí)分類算法,通過集成多個決策樹生成分類器,且其輸出的類別是由個別樹輸出的類別的眾數(shù)而定[16]。在樣本訓(xùn)練階段,通過有放回抽樣的方式抽取子樣本集,對每組子樣本集進(jìn)行決策樹建模,由多棵決策樹構(gòu)成隨機(jī)森林。在樣本預(yù)測階段,先統(tǒng)計(jì)每棵決策樹的預(yù)測結(jié)果,再通過投票形式給出最終的分類結(jié)果。
隨機(jī)森林算法有許多優(yōu)點(diǎn),例如,既可以用于回歸也可以用于分類任務(wù),易于查看模型輸入特征的相對重要性等。特別是在處理多種類型數(shù)據(jù)時準(zhǔn)確度較高,且可以平衡不平衡數(shù)據(jù)集的誤差,適用于惡意家族數(shù)據(jù)集的分類。所以,本文實(shí)驗(yàn)選用隨機(jī)森林算法作為分類算法,并與K近鄰(K-nearest neighbor,KNN)、支持向量機(jī)(support vector machine,SVM)、邏輯回歸(logistics regression,LR)、反向傳播(back propagation,BP)、決策樹(decision tree,DT)進(jìn)行對比。
本文的數(shù)據(jù)集來源于Drebin數(shù)據(jù)集,包含5 560個惡意軟件樣本,共179個家族。由于大多數(shù)家族的樣本個數(shù)較少,不具有代表性,因此選擇樣本數(shù)量排名前20的家族作為本實(shí)驗(yàn)的數(shù)據(jù)集,家族分布情況如表1所示。
表1 數(shù)據(jù)集樣本列表Table 1 Dataset list
為了評估該模型對于Android惡意軟件家族分類的效果,主要采用的指標(biāo)為:精確度(precision)、召回率(recall)、F1值及正確率(acc),其中:precision代表預(yù)測正例正確占所有預(yù)測正例的比值;recall代表預(yù)測正例正確占全部實(shí)際為正例的比值;F1是precision和recall加權(quán)調(diào)和平均;acc代表分類器正確分類的樣本數(shù)與總樣本數(shù)之比。以上指標(biāo)計(jì)算為
其中:TP(true positive)為真正例,代表將正例正確預(yù)測為正例的樣本數(shù);FP(false positive)為假正例,代表將負(fù)例錯誤預(yù)測為正例的樣本數(shù);FN(false negative)為假負(fù)例,代表將正例錯誤預(yù)測為負(fù)例的樣本數(shù);TN(true negative)為真負(fù)例,代表將負(fù)例正確預(yù)測為負(fù)例的樣本數(shù)。采用隨機(jī)森林算法得到的實(shí)驗(yàn)結(jié)果如表2所示,除了ExploitLinuxLotoor家族的F1值較低之外,其他家族的平均F1值都高于90%。對惡意軟件家庭分類的平均精確度為98.4%、平均召回率為95.9%、平均F1值為97.1%。表明該方法對于惡意軟件家族分類有較好的效果。
表2 隨機(jī)森林分類算法實(shí)驗(yàn)結(jié)果Table 2 Experimental results of RF classification algorithm
為了證明隨機(jī)森林方法分類的準(zhǔn)確性,本文采用其他5種分類算法進(jìn)行實(shí)驗(yàn)結(jié)果對比分析,如表3所示。實(shí)驗(yàn)結(jié)果表明,隨機(jī)森林算法優(yōu)于其他5種基線算法。
惡意軟件變體數(shù)量的快速增長,為惡意軟件的檢測及分類帶來極大挑戰(zhàn)。為了縮短惡意軟件檢測及分類的時間,將其分類至所在的家族顯得格外重要。本文提出一種基于敏感權(quán)限和API的惡意軟件家族分類方法,利用逆向工程技術(shù)提取Android應(yīng)用程序的權(quán)限和API特征。通過權(quán)重分配,定義并提取敏感權(quán)限和敏感API,同時進(jìn)行特征融合,構(gòu)建出特征庫,最后采用隨機(jī)森林算法進(jìn)行分類。實(shí)驗(yàn)結(jié)果表明,該方法能夠有效地進(jìn)行惡意軟件的家族分類,達(dá)到了較高的精確度。下一步工作,將抽取或挖掘更多特征(如增加intent、opcode、string等特征)對惡意軟件進(jìn)行全面描述,并利用深度學(xué)習(xí)模型研究更多惡意軟件家族的衍變規(guī)律。