潘建文,張志華,林高毅,崔展齊
北京信息科技大學(xué) 計(jì)算機(jī)學(xué)院,北京 100101
隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,社交通訊、金融證券、游戲娛樂(lè)和電子商務(wù)等應(yīng)用逐漸從PC 端轉(zhuǎn)向移動(dòng)端,使得移動(dòng)設(shè)備數(shù)量呈現(xiàn)指數(shù)型的增長(zhǎng),成為了人們生活不可或缺的一部分。其中,Android 系統(tǒng)由于其開(kāi)放性和應(yīng)用分發(fā)平臺(tái)的多樣性受到人們的青睞。據(jù)國(guó)際數(shù)據(jù)公司(IDC)調(diào)查報(bào)告[1],2021年Android手機(jī)占84%的市場(chǎng)份額,iPhone僅占16%。
雖然Android 系統(tǒng)廣泛應(yīng)用,但是由于Android 的開(kāi)源特性和缺乏有效審核的第三方Android 應(yīng)用市場(chǎng),使得Android 惡意應(yīng)用廣泛傳播。據(jù)《2020 年中國(guó)互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報(bào)告》[2],2015—2020年,移動(dòng)互聯(lián)網(wǎng)中惡意應(yīng)用樣本數(shù)量持續(xù)高速增長(zhǎng),僅2020年就新增移動(dòng)惡意應(yīng)用樣本約303萬(wàn)個(gè),同比增長(zhǎng)8.5%,運(yùn)行于Android平臺(tái)的惡意應(yīng)用占100.00%。這些惡意應(yīng)用使用戶的隱私數(shù)據(jù)和經(jīng)濟(jì)利益受到嚴(yán)重侵害。為此,針對(duì)惡意Android應(yīng)用的檢測(cè)技術(shù)引起了學(xué)術(shù)界和工業(yè)界廣泛關(guān)注。
根據(jù)是否運(yùn)行Android 應(yīng)用程序,可將現(xiàn)有的惡意Android 應(yīng)用檢測(cè)技術(shù)分為動(dòng)態(tài)檢測(cè)和靜態(tài)檢測(cè)。其中,動(dòng)態(tài)檢測(cè)[3-4]需要在模擬器或真實(shí)設(shè)備中運(yùn)行應(yīng)用,并編寫測(cè)試腳本模擬用戶操作,并根據(jù)應(yīng)用運(yùn)行中的交互、資源訪問(wèn)、系統(tǒng)調(diào)研和網(wǎng)絡(luò)流量等行為特征判斷是否為惡意應(yīng)用。動(dòng)態(tài)檢測(cè)的優(yōu)點(diǎn)是可以有效檢測(cè)使用了代碼混淆、加密和反編譯對(duì)抗等代碼保護(hù)技術(shù)或代碼熱更新技術(shù)的惡意應(yīng)用[5],缺點(diǎn)是測(cè)試腳本難以覆蓋應(yīng)用的全部功能,全面收集應(yīng)用運(yùn)行的行為信息也較為困難,導(dǎo)致動(dòng)態(tài)檢測(cè)耗時(shí)較長(zhǎng)、漏報(bào)率較高。靜態(tài)檢測(cè)的優(yōu)點(diǎn)是代碼覆蓋率高、效率高、不依賴于運(yùn)行環(huán)境、適用范圍較廣,缺點(diǎn)是難以準(zhǔn)確提取采用了代碼保護(hù)技術(shù)或代碼熱更新技術(shù)的惡意Android應(yīng)用特征。本文主要關(guān)注靜態(tài)惡意Android應(yīng)用檢測(cè)方法。靜態(tài)檢測(cè)通常使用靜態(tài)分析技術(shù)提取Android應(yīng)用的權(quán)限(permission)、應(yīng)用編程接口(application programming interface,API)、意圖(Intent)和四大組件等特征,采用隨機(jī)森林(random forest)、K 近鄰(K-nearest neighbor,KNN)、支持向量機(jī)(support vector machine,SVM)和決策樹(shù)等機(jī)器學(xué)習(xí)算法進(jìn)行檢測(cè)惡意應(yīng)用。然而,Android 10 版本(API 等級(jí)29)中Android API(Android developer documentation.https://developer.android.com/reference)特征共計(jì)33 587個(gè),且隨著Android版本的升級(jí),API和權(quán)限的數(shù)量還在不斷增加。這些數(shù)以萬(wàn)計(jì)的靜態(tài)特征直接用在機(jī)器學(xué)習(xí)算法中,可能會(huì)導(dǎo)致“維度災(zāi)難”、模型復(fù)雜程度增加、準(zhǔn)確率下降和模型訓(xùn)練時(shí)間長(zhǎng)等問(wèn)題[6-7]。
針對(duì)上述問(wèn)題,本文提出一種基于特征選擇的惡意Android應(yīng)用檢測(cè)方法Droid-TF-IDF:首先,通過(guò)靜態(tài)分析分別提取權(quán)限、API 和操作碼3 類特征,形成特征集;然后,根據(jù)良性應(yīng)用和惡意應(yīng)用每個(gè)特征的TF-IDF 值計(jì)算其Droid-TF-IDF值,并進(jìn)行排名;最后,根據(jù)Droid-TF-IDF值進(jìn)行特征選擇,構(gòu)建惡意Android應(yīng)用檢測(cè)模型,以提升檢測(cè)性能和效率。權(quán)限、API 和操作碼是靜態(tài)惡意Android應(yīng)用檢測(cè)方法中較為常用的特征[8],這3類特征有較大的差異性,可從不同的角度表征Android應(yīng)用。因此,Droid-TF-IDF分別使用權(quán)限、API和操作碼來(lái)驗(yàn)證所提出基于特征選擇的惡意Android應(yīng)用檢測(cè)方法的有效性。在來(lái)自Google Play 和VirusShare 的數(shù)據(jù)集上進(jìn)行的實(shí)驗(yàn)結(jié)果表明,使用Droid-TF-IDF 對(duì)權(quán)限、API和操作碼3類特征進(jìn)行選擇,在分別減少60%、80%和30%的特征時(shí)F1值最高。
本文的主要貢獻(xiàn)總結(jié)如下:
(1)提出了一種基于特征選擇的惡意Android 應(yīng)用檢測(cè)方法Droid-TF-IDF,分別選擇在良性應(yīng)用數(shù)據(jù)集和惡意應(yīng)用數(shù)據(jù)集中TF-IDF差值最大的權(quán)限、API和操作碼3類特征。
(2)基于Droid-TF-IDF實(shí)現(xiàn)了原型工具,并在3 006個(gè)應(yīng)用樣本上進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明,本文所提出的方法可以有效減少所需的特征維度,提升惡意Android應(yīng)用檢測(cè)的性能和效率。
根據(jù)所使用特征的不同,可將常見(jiàn)的Android 惡意應(yīng)用靜態(tài)檢測(cè)方法分為:基于權(quán)限、基于API 和基于操作碼的檢測(cè)方法。
基于權(quán)限的惡意Android應(yīng)用檢測(cè)方法。惡意應(yīng)用經(jīng)常使用危險(xiǎn)的權(quán)限組合執(zhí)行惡意行為,為此,Arora等人[9]提出了基于權(quán)限對(duì)的惡意Android 應(yīng)用檢測(cè)方PermPair,提取惡意數(shù)據(jù)集和良性應(yīng)用集中的權(quán)限對(duì)構(gòu)建權(quán)限對(duì)圖,并設(shè)計(jì)了權(quán)限對(duì)圖比較算法檢測(cè)惡意應(yīng)用。Amer[10]提出了基于權(quán)限特征的集成學(xué)習(xí)投票方法,收集良性應(yīng)用和惡意應(yīng)用常使用的特征組合,集成隨機(jī)森林、多層感知機(jī)、AdaBoost、SVM和決策樹(shù)分類模型,采用多數(shù)投票的方法檢測(cè)惡意應(yīng)用。Ilham等人[11]使用所有權(quán)限作為特征,采用決策樹(shù)、SVM和隨機(jī)森林模型進(jìn)行比較,并使用特征子集評(píng)估器、信息增益比率和信息增益特征選擇算法選擇特征子集,實(shí)驗(yàn)結(jié)果表明該特征選擇方法并沒(méi)有提升檢測(cè)準(zhǔn)確率。
基于API 的惡意Android 應(yīng)用檢測(cè)方法。Scalas 等人[12]提出了基于包、類和函數(shù)3種粒度的API檢測(cè)方法,可有效檢測(cè)勒索應(yīng)用及其他惡意應(yīng)用,其中,使用類和函數(shù)粒度的API檢測(cè)惡意應(yīng)用準(zhǔn)確率更高,并對(duì)字符串加密等混淆策略具有更強(qiáng)的魯棒性。邵舒迪等人[13]提取敏感權(quán)限和敏感API,并構(gòu)建支持向量機(jī)和KNN模型進(jìn)行惡意Android應(yīng)用檢測(cè)。該方法所提取的敏感特征只有30個(gè),特征數(shù)量偏少,存在遺漏其他重要特征的可能性,影響檢測(cè)準(zhǔn)確率。Zhang 等人[14]提出構(gòu)建API 關(guān)系圖的方法APIGraph,關(guān)系圖中的節(jié)點(diǎn)代表API,邊代表API間的調(diào)用關(guān)系,使用API嵌入和圖聚類檢測(cè)惡意應(yīng)用,該方法實(shí)現(xiàn)較為復(fù)雜且耗時(shí)較長(zhǎng)。Xu 等人[15]提出了基于API 語(yǔ)義距離減少模型老化的方法SDAC,首先FlowDroid 提取API 調(diào)用路徑,通過(guò)API 上下文滑動(dòng)窗口生成語(yǔ)義距離,并聚類形成API 簇特征集,然后在檢測(cè)階段識(shí)別新的API 語(yǔ)義距離,聚類擴(kuò)展特征集,最后采用新的特征集和模型檢測(cè)惡意Android 應(yīng)用,實(shí)驗(yàn)表明該方法可長(zhǎng)時(shí)間保持較高的檢測(cè)性能。徐開(kāi)勇等人[16]采用人工蜂群算法對(duì)Android靜態(tài)和動(dòng)態(tài)特征進(jìn)行選擇,得到了最優(yōu)的特征序列,實(shí)驗(yàn)表明該方法在惡意Android應(yīng)用檢測(cè)方面能夠有效減少特征維數(shù)并提升檢測(cè)效率和準(zhǔn)確率。Peynirci 等人[17]提出基于IDF 值的特征選擇方法,計(jì)算良性應(yīng)用和惡意應(yīng)用權(quán)限、API 和字符串(String)3 類特征的逆文檔頻率(inverse document frequency,IDF)差值,該方法與本文工作相似,但是只計(jì)算了特征的IDF 值,而沒(méi)有考慮到這3類特征在應(yīng)用中出現(xiàn)的頻率,由于缺少特征的詞頻(term frequency,TF)值,該算法無(wú)法有效選出最優(yōu)的特征子集。
基于操作碼的惡意Android 應(yīng)用檢測(cè)方法。McLaughlin等人[18]通過(guò)靜態(tài)分析提取操作碼序列,并構(gòu)建操作碼嵌入層、卷積層和分類層3層架構(gòu)的卷積神經(jīng)網(wǎng)絡(luò)算法(convolutional neural networks,CNN)檢測(cè)惡意應(yīng)用。Xiao[19]以十六進(jìn)制格式提取操作碼序列,范圍從00 到FF,對(duì)應(yīng)著十進(jìn)制格式的0~255,將連續(xù)的3 個(gè)操作碼映射成為單個(gè)圖片RGB 數(shù)值,操作碼序列映射成圖片顏色矩陣,再構(gòu)造卷積神經(jīng)網(wǎng)絡(luò)模型檢測(cè)惡意Android應(yīng)用。Yuan等人[20]將字節(jié)碼序列轉(zhuǎn)換為馬爾可夫圖像,并使用深度卷積神經(jīng)網(wǎng)絡(luò)檢測(cè)惡意應(yīng)用?,F(xiàn)有單類型特征表征惡意應(yīng)用的能力有限,Qiu 等人[21]在操作碼特征序列基礎(chǔ)上,結(jié)合了人工先驗(yàn)知識(shí)篩選下的部分權(quán)限和API 調(diào)用特征,共計(jì)149 維,通過(guò)深度神經(jīng)網(wǎng)絡(luò)對(duì)已知惡意應(yīng)用家族的學(xué)習(xí),以識(shí)別具有相同功能的惡意Android 應(yīng)用,其方法在特征選擇方面有可提升的空間。
上述惡意Android 應(yīng)用檢測(cè)工作中可以看出,特征提取和選擇是惡意Android 應(yīng)用檢測(cè)的重要步驟,通過(guò)覆蓋較多的特征或通過(guò)Android應(yīng)用的先驗(yàn)知識(shí)篩選特征,可取得較好的檢測(cè)性能,但是存在部分冗余或遺漏重要特征的情況,可能會(huì)影響模型性能。所以有必要對(duì)特征進(jìn)行降維,保留相關(guān)性強(qiáng)且具有代表性的特征,以提升模型檢測(cè)性能并降低時(shí)間消耗。為此本文提出基于特征選擇的惡意Android 應(yīng)用檢測(cè)方法Droid-TFIDF,對(duì)Android 應(yīng)用中提取的權(quán)限、API 和操作碼3 類特征進(jìn)行選擇,以提升對(duì)惡意Android 應(yīng)用檢測(cè)性能和檢測(cè)效率。
本文提出一種基于特征選擇的Android應(yīng)用檢測(cè)方法Droid-TF-IDF,方法流程如圖1所示,主要由3部分組成:特征提取、特征選擇和惡意應(yīng)用檢測(cè)。首先通過(guò)靜態(tài)分析分別提取權(quán)限、API和操作碼3種類型的特征,形成特征集;然后分別計(jì)算每種類型中每個(gè)特征的Droid-TF-IDF值,并進(jìn)行排名;最后根據(jù)Droid-TF-IDF值排名選出前k%的特征,用來(lái)構(gòu)造隨機(jī)森林、SVM和CNN等模型進(jìn)行惡意應(yīng)用檢測(cè)。
圖1 基于特征選擇的惡意Android應(yīng)用檢測(cè)方法Fig.1 Android malware detection method based on feature selection
本文使用Apktool工具(Apktool,https://ibotpeaches.github.io/Apktool/documentation)反編譯Android 可執(zhí)行文件APK,反編譯后的結(jié)構(gòu)如圖2 所示。反編譯后可以得到AndroidManifest.xml 文件和Smali 等文件,在AndroidManifest.xml 文件中提取權(quán)限特征,在Smali 文件集中提取AndroidAPI 和操作碼序列,并保存提取后的權(quán)限、API和操作碼特征。
圖2 APK反編譯結(jié)構(gòu)Fig.2 APK decompile structure
對(duì)采用了加固技術(shù)的Android 應(yīng)用,可使用應(yīng)用脫殼等技術(shù)提取加固的應(yīng)用特征;對(duì)采用代碼熱更新技術(shù)的惡意應(yīng)用,熱更新的部分特征無(wú)法提取,會(huì)影響到熱更新部分的API特征提取,但對(duì)權(quán)限和操作碼特征影響較小。
(1)權(quán)限。Android利用權(quán)限機(jī)制保護(hù)用戶的隱私,開(kāi)發(fā)人員在AndroidManifest.xml 文件中根據(jù)應(yīng)用的功能向用戶申請(qǐng)權(quán)限。在權(quán)限提取過(guò)程中,可以根據(jù)文件中的
(2)API。申請(qǐng)并獲取Android 權(quán)限后,惡意應(yīng)用通過(guò)調(diào)用API 來(lái)危害用戶的隱私利益。良性應(yīng)用和惡意應(yīng)用在API 數(shù)量和調(diào)用頻率方面有著明顯差異,這為Droid-TF-IDF 特征選擇方法檢測(cè)惡意應(yīng)用提供了依據(jù)。Smali文件是反匯編語(yǔ)言對(duì)虛擬機(jī)字節(jié)碼的一種解釋,每個(gè)Smali文件代表一個(gè)Java類,里面包含了應(yīng)用程序的API調(diào)用和操作碼。如圖3所示,本文提取包名、類名和方法名為一個(gè)API,不考慮方法參數(shù)和返回值類型。圖4 為撥打電話惡意應(yīng)用APK 反編譯后的部分smali 代碼示例,以invoke 開(kāi)頭的操作碼表示API 調(diào)用,從中提取的API 集合為{android.net.Uri.parse,android.content.Intent.setData}。
圖3 API提取示例Fig.3 Example of API extraction
圖4 部分Smali代碼示例Fig.4 Snippet of Smali code example
(3)操作碼。Android APK 運(yùn)行在Android Runtime虛擬機(jī)(前身是Dalvik)中。虛擬機(jī)中存在指令集,如數(shù)據(jù)操作指令、跳轉(zhuǎn)指令和計(jì)算指令等,這些指令就是操作碼,用來(lái)操作虛擬機(jī)中的寄存器。除棄用的操作碼外,經(jīng)統(tǒng)計(jì),共計(jì)218 類,本文采用文獻(xiàn)[18]中所提到的操作碼和數(shù)字之間的映射關(guān)系,提取過(guò)程中,將操作碼序列轉(zhuǎn)為由0到255的16進(jìn)制數(shù)字序列,以供之后將映射后的數(shù)字序列輸入到深度卷積神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練。以圖4為例,提取后的操作碼集合為{new-instance,
const-string,invoke-static,move-result-object,invoke-virtual,move-object,return-void},操作碼集合映射后的數(shù)字序列為{22,1a,71,0c,6e,07,0e}。
在提取權(quán)限、API和操作碼3類特征后,計(jì)算每種類型中每個(gè)特征的Droid-TF-IDF值,并進(jìn)行排名形成特征集合,根據(jù)排名選出Droid-TF-IDF值前k%的特征。
2.2.1 TF-IDF
TF-IDF是一種詞頻(term frequency)和逆文檔頻率(inverse document frequency)相結(jié)合的統(tǒng)計(jì)方法,主要思想是,假設(shè)Android 應(yīng)用數(shù)據(jù)集包含多個(gè)Android 應(yīng)用,這個(gè)數(shù)據(jù)集中某個(gè)應(yīng)用的某個(gè)特征在當(dāng)前應(yīng)用出現(xiàn)多次,而在其他應(yīng)用出現(xiàn)的比較少,則該特征是比較重要的。
TF-IDF 值為TF和IDF的乘積,如果一個(gè)特征在整個(gè)應(yīng)用數(shù)據(jù)集中有較低的頻率,但是在一個(gè)應(yīng)用中,有較高的頻率,那么這個(gè)特征有較高的TF-IDF值,可用于評(píng)估各類特征的重要性,應(yīng)用di的特征ti,j在數(shù)據(jù)集D中的TF-IDF值如計(jì)算公式(3)所示:
2.2.2 Droid-TF-IDF
與傳統(tǒng)的TF-IDF 方法不同,本文選擇在良性應(yīng)用和惡意應(yīng)用中TF-IDF 值相差最大的特征,即良性應(yīng)用出現(xiàn)頻率最高/低而惡意應(yīng)用出現(xiàn)頻率最低/高的特征。由于單個(gè)特征在每個(gè)應(yīng)用中TF-IDF 值可能不同,所以首先計(jì)算單個(gè)特征在良性應(yīng)用和惡意應(yīng)用中的TF-IDF平均值,然后對(duì)其做差,由于部分特征在惡意應(yīng)用中的TF-IDF 平均值大于良性應(yīng)用的TF-IDF 平均值,這部分特征的差值為負(fù)數(shù),需對(duì)負(fù)數(shù)取絕對(duì)值,最終的結(jié)果就是這個(gè)特征的Droid-TF-IDF值。
良性應(yīng)用數(shù)據(jù)集Db={ }db,1,db,2,…,db,i,… 和惡意應(yīng)用數(shù)據(jù)集Dm={ }dm,1,dm,2,…,dm,i,… 中,特征t在良性應(yīng)用集中的TF-IDF平均值為:
分別對(duì)權(quán)限、API 和操作碼3 類中的每個(gè)特征計(jì)算Droid-TF-IDF 值并進(jìn)行排名,然后選擇前排名k%的特征作為特征子集輸入到模型中。
本文進(jìn)行特征選擇過(guò)程分為:首先計(jì)算特征集合中每個(gè)特征在良性應(yīng)用和惡意應(yīng)用中的TF-IDF 值;然后通過(guò)特征在數(shù)據(jù)集中的平均TF-IDF 值計(jì)算Droid-TFIDF 值;最后根據(jù)Droid-TF-IDF 值排名并選擇排名前k%的特征。Droid-TF-IDF特征選擇過(guò)程如算法1所示,具體解釋如下:
(1)計(jì)算TF-IDF 值。第1 行,初始化存放特征及對(duì)應(yīng)Droid-TF-IDF 值的MapDTS;第3 行和第7 行,分別遍歷良性應(yīng)用集合Db和惡意應(yīng)用集合Dm;第4 行和第8行,分別用公式(3)計(jì)算特征t在單個(gè)良性應(yīng)用和惡意應(yīng)用中的TF-IDF值。
(2)計(jì)算Droid-TF-IDF 值。第6 行和第10 行,分別計(jì)算特征t在良性應(yīng)用集Db和惡意應(yīng)用集Dm中的TF-IDF平均值;第11行和第12行,使用公式(4)計(jì)算特征t的Droid-TF-IDF值,并加入DTS。
(3)特征選擇。第14 行,將DTS中的特征根據(jù)Droid-TF-IDF 值進(jìn)行降序排序,選擇排名前k%的特征作為特征子集T′并返回,用于訓(xùn)練惡意應(yīng)用檢測(cè)模型。
本文進(jìn)行特征選擇過(guò)程分為:計(jì)算特征集合中每個(gè)特征在良性應(yīng)用和惡意應(yīng)用數(shù)據(jù)集中的TF-IDF 平均值;然后計(jì)算每個(gè)特征的Droid-TF-IDF 值;最后根據(jù)Droid-TF-IDF 值排名并選擇排名前k%的特征,具體如算法1所示:
算法1 Droid-TF-IDF特征選擇算法
為了驗(yàn)證Droid-TF-IDF 特征選擇方法檢測(cè)惡意Android應(yīng)用的能力,考慮樣本數(shù)據(jù)類別不平衡的問(wèn)題,本文參照文獻(xiàn)[22]中實(shí)驗(yàn)數(shù)據(jù)集的數(shù)量和比例,實(shí)驗(yàn)選取了2 004個(gè)良性應(yīng)用和1 002個(gè)惡意應(yīng)用作為數(shù)據(jù)集。惡意應(yīng)用來(lái)自惡意軟件樣本庫(kù)VirusShare(Virushare.https://virusshare.com.)中的惡意Android 應(yīng)用,隨機(jī)選擇其中的1 002 個(gè)用于實(shí)驗(yàn);良性應(yīng)用通過(guò)編寫Python爬蟲(chóng),爬取Google Play 應(yīng)用市場(chǎng)上多種類別中的Top 200 應(yīng)用,共計(jì)3 958 個(gè)良性應(yīng)用,除去采用應(yīng)用加固代碼保護(hù)技術(shù)的應(yīng)用后還剩3 914個(gè),從其中隨機(jī)選擇2 004個(gè)用于實(shí)驗(yàn)。
在實(shí)驗(yàn)中,分別計(jì)算權(quán)限、API和操作碼3類特征的Droid-TF-IDF值,選擇前k%的特征作為特征集(k值以10 為步長(zhǎng)增長(zhǎng)),并使用不同的模型進(jìn)行惡意應(yīng)用檢測(cè)。鑒于文獻(xiàn)[11,13,16]隨機(jī)森林算法和SVM 算法在權(quán)限和API 上有較好的效果,所以在本文的權(quán)限和API實(shí)驗(yàn)中使用Python 中Scikit-learn 工具包下的隨機(jī)森林算法和支持向量機(jī)算法進(jìn)行10 折交叉驗(yàn)證評(píng)估;操作碼實(shí)驗(yàn)采用文獻(xiàn)[18]中的CNN實(shí)驗(yàn)參數(shù)配置構(gòu)建模型,CNN模型分為6層:分別是Embedding層、卷積層、卷積層、池化層、全聯(lián)接層和Softmax層,采用10折交叉驗(yàn)證評(píng)估。
實(shí)驗(yàn)的硬件環(huán)境為Intel?Core? i7-9750H CPU 2.6 GHz,16 GB RAM;軟件環(huán)境為MacOS Catalina,Python3.7.4。
3.2 評(píng)估指標(biāo)
本文的評(píng)價(jià)指標(biāo)從準(zhǔn)確率(Accuracy)、精確率(Precision)、召回率(Recall)和F1值(F1-measure)、模型的檢測(cè)時(shí)間、特征選擇時(shí)間和總時(shí)間7個(gè)方面進(jìn)行評(píng)價(jià)。前4 個(gè)評(píng)價(jià)指標(biāo)可以通過(guò)混淆矩陣得到,混淆矩陣如表1所示。
表1 混淆矩陣Table 1 Confusion matrix
準(zhǔn)確率(Accuracy)代表的是系統(tǒng)對(duì)整個(gè)樣本的檢測(cè)能力,即將惡意應(yīng)用檢測(cè)為惡意應(yīng)用,將良性應(yīng)用檢測(cè)為良性應(yīng)用的能力,如計(jì)算公式(5)所示:
精確率(Precision)代表的是實(shí)際為惡意應(yīng)用個(gè)數(shù)占檢測(cè)為惡意應(yīng)用個(gè)數(shù)的比例,如計(jì)算公式(6)所示:
召回率(Recall)代表的是被正確識(shí)別出來(lái)的惡意應(yīng)用個(gè)數(shù)與測(cè)試集中所有惡意應(yīng)用個(gè)數(shù)的比值,如計(jì)算公式(7)所示:
F1-measure是精確率和召回率的調(diào)和平均值,更為平衡地反應(yīng)算法的精確度,如計(jì)算公式(8)所示:
模型的檢測(cè)時(shí)間是構(gòu)建模型對(duì)特征選擇后不同比例的特征進(jìn)行驗(yàn)證評(píng)估的時(shí)間;特征選擇時(shí)間是計(jì)算各個(gè)特征的Droid-TF-IDF 值,并進(jìn)行排名所消耗的時(shí)間;總時(shí)間是模型檢測(cè)時(shí)間和特征選擇時(shí)間之和。
實(shí)驗(yàn)提取并計(jì)算權(quán)限、API和操作碼中每個(gè)特征的Droid-TF-IDF值,根據(jù)Droid-TF-IDF值采用不同比例的特征子集,并構(gòu)建隨機(jī)森林、SVM和CNN模型,進(jìn)行基于權(quán)限特征和基于API 特征和基于操作碼特征的惡意Android應(yīng)用檢測(cè)。
表2 統(tǒng)計(jì)了Android 10 版本中的各類特征與實(shí)驗(yàn)中提取到的特征對(duì)比情況??梢钥吹?,實(shí)驗(yàn)中權(quán)限特征為125 種,占權(quán)限特征總數(shù)的80.6%;API 特征為17 752種,占API 特征總數(shù)的52.4%;操作碼特征為212 種,占操作碼特征總數(shù)的97.2%。
表2 Android 10版本各類特征與實(shí)驗(yàn)中提取的特征對(duì)比Table 2 Comparison of features in Android 10 version and experimental subjects
提取權(quán)限、API 和操作碼特征后,分別計(jì)算每類特征的Droid-TF-IDF 值,并進(jìn)行排名,其中表3 為Droid-TF-IDF 值最高的10 項(xiàng)權(quán)限、API 和操作碼。權(quán)限與文獻(xiàn)[13]中的高危權(quán)限有5 項(xiàng)重合,分別是SEND_SMS、RECEIVE_SMS、READ_SMS、READ_PHONE_STATE和WAKE_LOCK,前3 項(xiàng)是跟短信有關(guān)的權(quán)限,這是由于短信權(quán)限被惡意應(yīng)用廣泛使用;API 特征中android.content.Context.getPackageName 和android.app.Application.onCreate 是獲取應(yīng)用包名和應(yīng)用初始化配置,這兩個(gè)特征更多使用在良性應(yīng)用中,而android.content.Context.getAssets、android.content.res.AssetManager.open 和android.content.Context.getFilesDir特征與文件和資源相關(guān),常常出現(xiàn)在惡意應(yīng)用中;操作碼則很難通過(guò)單一的特征判斷某一應(yīng)用是否是惡意應(yīng)用。
表3 Droid-TF-IDF值最高的10項(xiàng)權(quán)限、API和操作碼Table 3 Top 10 permissions,APIs and opcodes in terms of Droid-TF-IDF
在基于權(quán)限特征對(duì)惡意Android 應(yīng)用檢測(cè)實(shí)驗(yàn)中,提取權(quán)限特征,計(jì)算其Droid-TF-IDF 值并進(jìn)行排名后,分別用隨機(jī)森林和SVM 模型進(jìn)行檢測(cè),實(shí)驗(yàn)結(jié)果如表4、表5 所示,黑色加粗文本表示單項(xiàng)結(jié)果取得最高值。實(shí)驗(yàn)選擇100%的特征時(shí),無(wú)需進(jìn)行特征選擇,所以特征選擇時(shí)間消耗為0。在隨機(jī)森林模型檢測(cè)中,前40%的權(quán)限子集在準(zhǔn)確率、精確率、召回率和F1值中均達(dá)到最高,并且總時(shí)間比不進(jìn)行特征選擇時(shí)間減少14.8%;在SVM 模型中,選擇前40%和前80%的權(quán)限準(zhǔn)確率和F1值達(dá)到最高,并高于隨機(jī)森林模型。采用排名前40%的權(quán)限時(shí),檢測(cè)總時(shí)間消耗降低了33.7%。在基于權(quán)限的惡意應(yīng)用檢測(cè)實(shí)驗(yàn)中,SVM 模型各項(xiàng)評(píng)估指標(biāo)略優(yōu)于隨機(jī)森林模型,對(duì)檢測(cè)惡意應(yīng)用有更好的效果。
表4 基于權(quán)限特征的隨機(jī)森林模型檢測(cè)結(jié)果Table 4 Detection results of random forest model based on permission
表5 基于權(quán)限特征的SVM模型檢測(cè)結(jié)果Table 5 Detection results of SVM model based on permission
在基于API 特征檢測(cè)惡意Android 應(yīng)用的實(shí)驗(yàn)中,表6、表7 為隨機(jī)森林和SVM 模型進(jìn)行檢測(cè)的實(shí)驗(yàn)結(jié)果,隨機(jī)森林模型中選取前20%時(shí)精確率和F1值最高;SVM 模型檢測(cè)結(jié)果中,可以看到該方法僅選擇前10%時(shí),準(zhǔn)確率、精確率、召回率和F1值均達(dá)到最高,和不進(jìn)行特征選擇相比,模型取得同樣性能的前提下,節(jié)省了90.4%的時(shí)間消耗。在選擇前10%的API 時(shí)召回率最高,僅需10%的特征和更少的時(shí)間即可在測(cè)試集中檢測(cè)出最多的惡意應(yīng)用。在選擇100%的特征時(shí)(17 752 個(gè)特征),采用隨機(jī)森林模型的時(shí)間比SVM 模型時(shí)間少76.554 s。因此在特征數(shù)量龐大的情況下,隨機(jī)森林模型檢測(cè)效率更高。
表6 基于API特征的隨機(jī)森林模型檢測(cè)結(jié)果Table 6 Detection results of random forest model based on API
表7 基于API特征的SVM模型檢測(cè)結(jié)果Table 7 Detection results of SVM model based on API
基于操作碼的惡意應(yīng)用檢測(cè)實(shí)驗(yàn)參照文獻(xiàn)[18]的方法和參數(shù)配置構(gòu)建CNN模型。在檢測(cè)前,對(duì)前8 192個(gè)操作碼進(jìn)行特征選擇,將特征選擇后的操作碼輸入到CNN 模型中的Embedding 層中,最后通過(guò)Softmax 層輸出檢測(cè)結(jié)果,表8展示了基于操作碼的惡意應(yīng)用檢測(cè)結(jié)果。操作碼特征選取前70%四項(xiàng)評(píng)估指標(biāo)均達(dá)到最高,準(zhǔn)確率和召回率95.7%,精確率和F1 值95.8%,時(shí)間開(kāi)銷比未進(jìn)行特征選擇的時(shí)間開(kāi)銷多7.5%,這是由于在CNN 模型中,無(wú)論是否進(jìn)行特征選擇都需要遍歷前8 192個(gè)特征。
表8 基于操作碼特征的CNN模型檢測(cè)結(jié)果Table 8 Detection results of CNN model based on opcode
表9 展示了基于權(quán)限、API 和操作碼的惡意應(yīng)用檢測(cè)實(shí)驗(yàn)得到最高F1值時(shí),F(xiàn)1值、檢測(cè)時(shí)間和特征數(shù)量的對(duì)比結(jié)果。在權(quán)限、API 和操作碼分別選取前40%(SVM 模型)、20%(隨機(jī)森林模型)和70%(CNN 模型)的特征時(shí)F1 值最高;其中使用API 特征的最高F1 值為98.6%,分別比權(quán)限和操作碼特征高3.8和2.8個(gè)百分點(diǎn);特征數(shù)量分別是62、3 550 和149 個(gè);從檢測(cè)時(shí)間上看,權(quán)限特征的檢測(cè)時(shí)間最短,API 的檢測(cè)時(shí)間次之,操作碼的檢測(cè)時(shí)間最長(zhǎng)。綜合上述實(shí)驗(yàn)結(jié)果,本文的特征選擇方法與傳統(tǒng)方法相比,權(quán)限和API特征可以在特征維度降低前提下,有效地提升惡意Android 應(yīng)用檢測(cè)模型的檢測(cè)性能,并降低時(shí)間消耗;操作碼經(jīng)過(guò)特征選擇后,在CNN 模型中各項(xiàng)評(píng)估指標(biāo)都有所提升,僅時(shí)間開(kāi)銷略微增大,本文的方法可以更有效地檢測(cè)出惡意Android應(yīng)用。
表9 基于權(quán)限、API和操作碼特征的檢測(cè)結(jié)果Table 9 Detection results of permission,API and opcode
本文提出了基于特征選擇的惡意Android應(yīng)用檢測(cè)方法Droid-TF-IDF,可對(duì)權(quán)限、API和操作碼3類靜態(tài)特征進(jìn)行特征選擇,并基于選擇出的特征子集構(gòu)建隨機(jī)森林、SVM 和CNN 模型檢測(cè)惡意Android 應(yīng)用。實(shí)驗(yàn)結(jié)果表明,該方法可以有效提升模型的檢測(cè)性能和降低時(shí)間消耗。在本文研究的基礎(chǔ)上,下一步將探索結(jié)合多類特征進(jìn)行更加有效的特征選擇,并與動(dòng)態(tài)檢測(cè)方法結(jié)合,以進(jìn)一步提升惡意應(yīng)用檢測(cè)的性能和效率。