楊宏宇,徐 晉
(中國民航大學 計算機科學與技術學院,天津300300)
隨著智能手機的不斷發(fā)展,Android系統(tǒng)逐漸占據(jù)了全球手機操作系統(tǒng)大部分的市場份額。然而,Android系統(tǒng)的盛行也使它成為了惡意軟件最大的發(fā)展平臺。360公司發(fā)布的《2016年中國手機安全狀況報告》[1]顯示,360互聯(lián)網(wǎng)安全中心2016年全年共截獲Android平臺新增惡意軟件1403.3萬個,平均每天新增惡意軟件達3.8萬個。Android惡意軟件的泛濫給用戶帶來了眾多危害,使得Android安全成為信息安全研究的熱點之一,所以研究Android惡意軟件分類檢測方法迫在眉睫。
靜態(tài)檢測是Android惡意軟件檢測中常用的檢測方法。文獻[2]提出一種基于權限相關性的Android惡意軟件檢測方案,實現(xiàn)了對惡意軟件的初步快速檢測。文獻[3]使用Android權限信息作為特征并進行優(yōu)化選擇,創(chuàng)建基于改進樸素貝葉斯的惡意應用分類器并取得較好的分類效果。文獻[4]提出一種基于支持向量機的Android惡意軟件檢測方案,利用危險權限組合和脆弱性API調(diào)用作為特征屬性并建立分類器,自動區(qū)分惡意軟件和良性軟件。文獻[5]提出一種基于對比權限模式的惡意軟件檢測方法,利用關聯(lián)規(guī)則挖掘算法對應用程序進行頻繁項集挖掘,提取出惡意軟件與正常軟件在權限模式使用上的區(qū)別規(guī)則,并在此基礎上建立組合分類器用于Android惡意軟件檢測。其中,文獻[2,3]只針對Android應用的權限信息進行檢測分析,檢測范圍不夠全面;文獻[4,5]檢測精度都不夠高。綜上所述,目前的檢測研究成果在檢測精度和檢測效率方面還存在諸多不足。
本文提出一種Android惡意軟件靜態(tài)檢測模型,對Android應用程序安裝包文件進行逆向處理,提取Android Manifest.xml文件中的三種標簽項的屬性值作為特征屬性,采用信息增益算法(Information gain,IG)[6,7]對特征屬性進行優(yōu)化選擇,建立分類器對Android應用進行檢測分類。實驗結果表明,本文方法可有效提高Android惡意軟件檢測效率。
Android Manifest.xml文件(以下簡稱Manifest文件)是每一個Android應用程序中必不可少的組成部分,必須在該文件中聲明應用程序的名稱、應用程序運行時所需申請的權限和各類組件的信息等,上述信息相當于應用程序的配置信息。Manifest文件中有許多標簽項,例如<uses-sdk>、<permission>、<application>等,Manifest文件通過給各標簽項添加相應屬性值實現(xiàn)對應用程序的配置。表1列出了5組Manifest文件中常用于惡意軟件靜態(tài)檢測的標簽項。
表1 靜態(tài)檢測常用標簽項Table 1 Labels often used in static detection
表1中,前3個信息項的標簽屬性為文本類型,后兩個信息項的屬性為數(shù)值型。為了便于提取屬性值,本文選取前3個信息項作為屬性集合,即<uses-permission>、<intent-filter><action>和<intent-filter><category>。其中,程序在運行時會使用各種權限,這些權限需要提前在Manifest文件的<uses-permission>中進行配置;Intent組件是Android應用間通信的一個關鍵組件,<intent-filter>用于描述Intent組件的各種屬性,如動作(action)、類型(category)等,分別對應于<intent-filter>標簽項中的<action>和<category>標簽。這兩類標簽項中配置的屬性值顯示了應用程序在運行中所申請的權限信息以及與其他應用程序或系統(tǒng)資源間的交互信息。上述3個標簽項的屬性值能夠有效反映出應用程序在運行過程中可能進行的操作,因此本文選取這3個標簽項中的屬性值作為特征屬性。
靜態(tài)檢測模型結構如圖1所示。該模型主要包括逆向處理、特征提取、生成特征向量、特征屬性優(yōu)化和檢測分類等過程。模型處理過程設計如下:
(1)反編譯樣本集中的Android安裝包文件,生成對應Android Manifest.xml文件。
(2)分別對Android Manifest.xml文件中的標簽項<uses-permission>、<intent-filter><action>和<intent-filter><category>進行屬性值提取,并根據(jù)所提取出的屬性值統(tǒng)計每個屬性值出現(xiàn)的次數(shù)并排序,將使用頻率高的屬性值組合成為特征集合。
(3)根據(jù)特征集合對比與每個Android安裝包文件提取出的屬性值,生成相應特征向量集合。
(4)使用屬性特征優(yōu)化算法對特征屬性進行優(yōu)化選擇,對生成的特征向量集合進行特征屬性優(yōu)化排序,根據(jù)排序結果選取更具有代表性的特征屬性并生成優(yōu)化特征向量集合。
(5)將經(jīng)過優(yōu)化的特征向量集合分為訓練集和測試集,使用機器學習分類算法對訓練集進行訓練,并對測試集進行檢測分類。
圖1 靜態(tài)檢測模型Fig.1 Static detection model
檢測模型對惡意軟件檢測分類過程如下:
(1)使用Apktool[8,9]對應用安裝包樣本集進行反編譯處理,生成包含Manifest文件的文件夾。然后使用Python[10]的xml.dom模塊和IO模塊對Manifest文件進行解析。抽取3個標簽項的屬性值,完成樣本集中應用安裝包文件的特征屬性提取。
(2)計算特征屬性數(shù)量并對其進行排序,將結果由高到低分別輸出。根據(jù)排序結果,分別將Android平臺下良性應用和惡意應用中使用頻率較高的特征屬性組合為3個良性應用屬性集合和3個惡意應用屬性集合,然后采用并集運算,將6個屬性集合組合成特征集合FS。
(3)使用匹配算法計算樣本集中每個應用的Manifest文件是否含有集合FS中對應的元素,生成相應特征向量并組合成特征向量集合FVS。采用信息增益算法對FVS的特征屬性進行優(yōu)化排序,并根據(jù)排序結果重新組合形成優(yōu)化特征向量集合OFVS。
(4)將OFVS劃分為訓練集TRS和測試集TES。將TRS和TES轉換為Waikato知識分析環(huán)境(Waikato environment for knowledge analysis,WEKA)的數(shù)據(jù)輸入格式.arff,使用WEKA集成的機器學習分類算法對TRS進行訓練并對TES進行檢測分類。
為了驗證本文模型的有效性,對1934個Android應用安裝包文件進行檢測分類實驗。其中,良性應用安裝包來源于谷歌官方應用市場和國內(nèi)第三方應用市場,從上述應用市場下載良性應用安裝包674個,共計15.4 GB;惡意應用安裝包文件來源于北卡羅來納州立大學創(chuàng)建的Android惡意應用基因組項目(Android malware genome project)公布的Android惡意應用樣本集合資源[11],本文從該集合中提取1260個惡意應用安裝包,共計1.53 GB。將上述兩類Android應用安裝包集合組合成實驗樣本集合,共計1934個Android應用安裝包文件樣本。本實驗的軟硬件環(huán)境配置如表2所示。
表2 實驗環(huán)境配置Table 2 Experimental environment configuration
將樣本集中的Android應用安裝包文件分別放到指定目錄下,按照前文所述模型詳細步驟,首先對Android安裝包文件進行批量反編譯,如圖2所示。
圖2 批量反編譯Fig.2 Batch decompile
然后,對反編譯得到的Manifest文件進行解析并統(tǒng)計解析結果,分別得到良性應用和惡意應用的Manifest文件標簽項<uses-permission>,<intent-filter><action>和<intent-filter><category>中使用頻率較高的屬性值信息,并對屬性值進行排序,部分標簽屬性的排序結果如圖3所示。
根據(jù)上述屬性排序結果,選取使用頻率較高的屬性,本文選取了<uses-permission>標簽項中的31個屬性值、<intent-filter><action>標簽項中的16個屬性值和<intent-filter><category>標簽項中的16個屬性值,共計63個屬性值作為特征屬性。然后根據(jù)WEKA的輸入數(shù)據(jù)格式生成對應的特征向量集合FVS.arff,如圖4所示。
圖3 Android應用常用屬性統(tǒng)計Fig.3 Android application common attributes statistics
圖4 特征向量集合FVS.arffFig.4 Feature vector set FVS.arff
為了選取具有更高區(qū)分度并消除盡可能多無關和冗余的特征屬性,作者采用IG算法對特征屬性進行優(yōu)化排序。將FVS.arff輸入到WEKA中,使用IG算法對其中的特征屬性進行排序,排序結果如圖5所示,排序后的部分結果如表3所示。
根據(jù)表3的排序結果,分別生成特征屬性數(shù)量為10、20和30的優(yōu)化特征向量集合OFVS_10.arff,OFVS_20.arff和OFVS_30.arff。
圖5 WEKA特征優(yōu)化結果Fig.5 Feature optimization results in WEKA
表3 特征屬性排序結果Table 3 Attributes sorting result
為有效度量檢測分類性能,定義下列概念:
正確:將惡意應用檢測分類為惡意。
誤報:將良性應用檢測分類為惡意。
識別:將良性應用檢測分類為良性。
漏報:將惡意應用檢測分類為良性。
正確率:被檢測分類出的惡意應用數(shù)量與實際惡意應用數(shù)量之比,正確率=正確/(正確+漏報)。
誤報率:被檢測分類出的惡意應用數(shù)量與實際良性應用數(shù)量之比,誤報率=誤報/(誤報+識別)。
檢測率:檢測分類的準確度,檢測率=(正確+識別)/(正確+識別+誤報+漏報)。
將3.2節(jié)生成的特征屬性長度分別為10、20和30的優(yōu)化特征向量集合OFVS_10.arff,OFVS_20.arff和OFVS_30.arff輸入WEKA,同時使用WEKA中集成的4種機器學習算法:樸素貝葉斯(Naive Bayes,NB)[12],序列最小優(yōu)化(Sequence minimum optimization,SMO)[13],Bagging[14]和隨機樹(Random tree,RT),采用10折交叉驗證的方法對特征向量集合進行檢測分類。
將特征向量集合分成10份,輪流將其中9份作為訓練集,剩余1份作為測試集,并對10次實驗結果取均值,實驗過程如圖6所示。圖6中分類輸出結果窗口顯示的是使用Random Tree算法和特征屬性長度為30的特征向量集合的結果,應用4種算法的檢測結果如表4所示。
圖6 WEKA檢測分類結果Fig.6 Detection classification results in WEKA
表4 不同分類器的分類效果對比Table 4 Comparison of classification results of different classifiers
由表4可見,本文所提出的靜態(tài)檢測模型分類效果較好,在4種機器學習算法上都有較好的檢測率,在特征屬性數(shù)量達到20時有較高的檢測率,在特征屬性數(shù)量為30時的檢測率比20時的檢測率普遍提高,檢測率度均大于94%,高于文獻[3]的改進樸素貝葉斯分類器的檢測精度92.5%。
針對Android平臺惡意軟件泛濫以及現(xiàn)有檢測算法檢測精度還不夠高等問題,提出一種Android惡意軟件靜態(tài)檢測模型。模型選取Android Manifest.xml文件中3個典型標簽項中的屬性值作為特征屬性,并使用IG算法對特征屬性進行優(yōu)化選擇。通過檢測實驗表明,該靜態(tài)檢測分類模型擁有較高的檢測率。
[1]安全客.2016年Android惡意軟件專題報告[EB/OL].[2016-02-27].http:∥bobao.#/learning/detail/3539.html.
[2]張銳,楊吉云.基于權限相關性的Android惡意軟件檢測[J].計算機應用,2014,34(5):1322-1325.Zhang Rui,Yang Ji-yun.Android malware detection based on permission correlation[J].Journal of Computer Applications,2014,34(5):1322-1325.
[3]許艷萍,伍淳華,侯美佳,等.基于改進樸素貝葉斯的Android惡意應用檢測技術[J].北京郵電大學學報,2016,39(2):43-47.Xu Yan-ping,Wu Chun-hua,Hou Mei-jia,et al.Android malware detection technology based on improved naive Bayesian[J].Journal of Beijing University of Posts and Telecommunications,2016,39(2):43-47.
[4]Li Wen-jia,Ge Ji-gang,Dai Gu-qian.Detecting malware for Android platform:an SVM-based approach[C]∥IEEE International Conference on Cyber Security and Cloud Computing.Piscataway,New Jersey,USA:IEEE,2015:464-469.
[5]張樂峰,肖茹玥,張雨峰,等.基于對比權限模式的惡意軟件檢測方法[J].微電子學與計算機,2015,44(7):112-115.Zhang Le-feng,Xiao Ru-yue,Zhang Yu-feng,et al.A malware detection method based on contrasting permission patterns[J].Microelectronics&Computer,2015,44(7):112-115.
[6]Feizollah A,Anuar N B,Salleh R,et al.A review on feature selection in mobile malware detection[J].Digital Investigation,2015,6(13):22-37.
[7]Sharma A,Dash S K.Mining API Calls and Permissions for Android Malware Detection[M].Berlin,Germany:Springer,2014:191-205.
[8]豐生強.Android軟件安全與逆向分析[M].北京:人民郵電出版社,2013.
[9]Apk Tool[EB/OL].[2017-02-15].http:∥www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/Apk Tool.shtml.
[10]python[EB/OL].[2017-02-15].https:∥www.python.org/.
[11]Zhou Ya-jin,Jiang Xu-xian.Dissecting Android malware:characterization and evolution[C]∥IEEE Symposium on Security&Privacy.Piscataway,New Jersey,USA:IEEE,2012:95-109.
[12]李航.統(tǒng)計學習方法[M].北京:清華大學出版社,2012:47-52.
[13]劉曉瑩,楊寶華.一種改進的SMO分類算法[J].滁州學院學報,2016,35(2):30-32.Liu Xiao-ying,Yang Bao-hua.An improved SMO classification algorithm[J].Journal of Chuzhou University,2016,35(2):30-32.
[14]Roger Wong.Classifier-meta-Bagging algorithm source code analysis in Weka[EB/OL].[2017-03-11].http:∥blog.csdn.net/ROger_wonG/article/details/39271181.