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