盧文清,何加銘,2,曾興斌,2,樊玲慧
(1.寧波大學通信技術(shù)研究所,浙江寧波315211;2.浙江省移動網(wǎng)應用技術(shù)重點實驗室,浙江寧波315211;3.寧波新然電子信息科技發(fā)展有限公司,浙江寧波315211)
惡意軟件作用一般分為搜集用戶信息、竊取信用卡信息、組建僵尸網(wǎng)絡和獲取root權(quán)限等。趨勢科技的監(jiān)測數(shù)據(jù)顯示,截止到2012年底,Android系統(tǒng)中的惡意應用已經(jīng)達到35萬個。而在2013年,這一數(shù)字很有可能增長4倍,躍升至140萬個,對信息安全構(gòu)成嚴重挑戰(zhàn)[1]。
SVM是在高維特征空間使用線性函數(shù)假設空間的學習系統(tǒng),它是由一個來自最優(yōu)化理論的學習算法訓練,該算法實現(xiàn)了一個由統(tǒng)計學理論導出的學習偏置。它在文本分類、生物信息、語音識別、圖像分類[2]、故障識別和預測以及信息安全等諸多領(lǐng)域有了成功的應用。因此,將支持向量機引入手機惡意檢測是一種非常有效的方法。手機惡意檢測方法分為靜態(tài)檢測和動態(tài)檢測。文獻[3]是基于行為的惡意檢測,需要模擬應用運行環(huán)境,監(jiān)控系統(tǒng)變化,屬于動態(tài)檢測。本文的方法是在Android應用包上做靜態(tài)分析,導出分類器所需的向量集,屬于靜態(tài)檢測。
對于Android惡意檢測,靜態(tài)分析有很多有利條件。不用模擬手機軟件運行環(huán)境,耗用資源少、快速且有較高的檢測準確率。像Android Leaks[4]和文獻[5]提到的組件都屬于靜態(tài)檢測工具,但是都集中在檢測信息泄露的方面。文獻[6]應用機器學習方法對Android應用進行分類,其研究對象為工具類應用和游戲類應用。文獻[7]通過抽取DEX文件的類與函數(shù)名應用信息,作為程序的行為特征,應用機器學習算法對樣本進行分類,但分類精度不高。文獻[8]采用用戶級和內(nèi)核級的特征向量,應用機器學習算法對惡意軟件分類,也是沒有考慮到權(quán)限方面的影響。文獻[9]特征集來源靜態(tài)鏈接庫和應用程序接口,未涉及到Android權(quán)限和命令行的調(diào)用,文獻[10]則使用的是單類支持向量機。
綜上所述,提出了基于混合特征的Android惡意軟件靜態(tài)檢測方案,利用危險API調(diào)用、命令行和權(quán)限集結(jié)合組成的混合特征集,然后采用主成分分析(PCA)方法和支持向量機(SVM)結(jié)合構(gòu)造分類器,對Android樣本進行惡意檢測?;旌咸卣鞲苋矫娴乇憩F(xiàn) Android惡意軟件的特征,且采用PCA方法能夠去除一些冗余特征,提高分類精度。
Android應用大部分都是運用Java語言開發(fā)的。Android SDK工具編譯源代碼,將數(shù)據(jù)和資源打包成一個以.a(chǎn)pk結(jié)尾的包文件。編譯生成的apk文件都可以看做一個在Android上運行的應用。
Android應用程序由4個組件組成:活動(Activities)、服務(Services)、廣播接收(Broadcast Receivers)和內(nèi)容提供者(Content Providers)。每一個應用程序必須在程序工程根目錄下的manifest文件中聲明自己的組件。在Android系統(tǒng)運行一個程序組件前,系統(tǒng)必須讀取應用程序的manifest文件來確定有多少組件存在。這個文件還聲明了應用需要的權(quán)限,例如網(wǎng)絡訪問權(quán)限和通訊錄訪問權(quán)限等。
Android應用程序apk文件是由一系列的文件壓縮而成,這些文件主要包括:AndroidManifest.xml,classes.dex(一個完整的字節(jié)碼文件,由Dalvik VM解釋),其他二進制或XML等資源文件都保存在res/和assets/目錄下。
本文的檢測方法是利用Android應用依賴的平臺API和它的權(quán)限列表、系統(tǒng)調(diào)用等屬性來作為應用程序可疑行為的指示器,例如信息泄露、運行時實時下載惡意軟件或嵌入額外的程序。這些屬性作為分類器的樣本數(shù)據(jù),可以用來決定Android應用程序是正常的還是惡意的。
VirusTotal是一個免費的病毒、蠕蟲、木馬和各種惡意軟件分析服務,可以針對可疑文件和網(wǎng)址進行快速檢測。在第3方應用市場下載多款Android應用,這些軟件覆蓋多種不同類型,包括娛樂、工具、體育、健康衛(wèi)生、新聞和雜志、財經(jīng)、音樂、商貿(mào)、教育以及游戲等。使用VirusTotal對這些應用進行檢測分析,確認是否為惡意軟件。為了試驗中正、負樣本的平衡,經(jīng)過人工整理,整理出450款惡意軟件和450款正常軟件。分析過程中發(fā)現(xiàn),經(jīng)過官方發(fā)布的軟件,含有較少的威脅,而非官方的軟件,則包含較多的惡意行為。
惡意軟件和正常軟件都為apk文件,為了獲得建立分類器模型的樣本數(shù)據(jù),采用開源工具apktool,將apk文件解壓成mainifest文件、資源文件、簽名文件和dex文件,然后利用工具dex2jar將dex文件反編譯成.jar文件,最后利用Java Decompiler生成java源文件。然后在代碼源文件和mainifest文件中提取所需要的混合特征,具體過程如圖1所示。

圖1 Android逆向工程過程
經(jīng)過Android應用的逆向工程后,得到應用源代碼和manifest文件,采用匹配算法,探測程序中出現(xiàn)的API調(diào)用、命令行和權(quán)限列表,并計算它們出現(xiàn)的次數(shù)作為這個應用的特征。
API調(diào)用是應用程序與手機相互作用的紐帶,API調(diào)用可以獲取手機的subscriber ID、phone ID和其他類似個人隱秘信息。同樣,可以發(fā)送/接收SMS、調(diào)用手機號碼、獲取手機信息和下載其他應用程序等。而Android惡意行為包括竊取用戶隱私、遠程控制、私自下載和惡意扣費等行為,這些行為涉及的API如表1所示,利用匹配算法,計算出每個應用中對應API的數(shù)目,形成API特征向量[FAPI]1×14。

表1 惡意軟件涉及的API列表
因為Android是基于Linux系統(tǒng)的,因而Linux系統(tǒng)命令可以在Android上運行。這些命令包括‘chmod’、‘mount’、‘remount’和‘chown’等。其他包括Java Realtime.exec命令,它可以運行子進程來下載惡意軟件。分析450款惡意軟件,統(tǒng)計其中使用頻率較高的系統(tǒng)命令如表2所示,利用匹配算法,計算出每個應用中對應系統(tǒng)命令行的數(shù)目,形成命令行特征向量[FCMD]1×10。

表2 命令行列表
每個 apk文件都包含一個 mainifest文件,Android系統(tǒng)可以在這個文件中獲得應用所需要的權(quán)限的詳細信息。這些權(quán)限包括各種硬件訪問權(quán)限(GPS、照相機等)和敏感信息(通訊錄、短信等),還有訪問其他應用的權(quán)限。例如,權(quán)限“android.permission.INTERNET”允許應用連接網(wǎng)絡;權(quán)限“android.permission.READ_CONTACTS”允許應用訪問手機通訊錄。450個惡意軟件中使用頻率較高的權(quán)限列表如表3所示,利用匹配算法,計算出每個應用中對應權(quán)限的數(shù)目,形成權(quán)限特征向量[FPER]1×20。

表3 惡意軟件使用頻率較高的權(quán)限列表
有多種方法可以評價基于機器學習方法的分類器性能。在本文中引用以下提到的公式來評價分類器性能。以下公式中,nnor→nor代表正常應用軟件被分類器正確分類的數(shù)目;nnor→sus代表正常應用軟件被分類器錯誤分類的數(shù)目;nsus→sus代表惡意軟件被分類器正確分類的數(shù)目;nsus→nor代表惡意軟件被分類器錯誤分類的數(shù)目。準確率Acc和錯誤率Err分別為:

式中,Acc代表所有被正確分類的應用占所有測試應用的比例,包括正常軟件和惡意軟件;Err代表所有被錯誤分類的應用占測試應用的比例。其中,Err=1-Acc。還定義了 FPR、FNR、TPR、TNR 和精度P:

FPR代表正常應用被分類器錯誤分類的數(shù)目占所有測試正常應用中的比例。TNR測量的是正常應用被分類器正確分類的數(shù)目占所有測試正常應用中的比例。TPR和檢測率意義相同,因為它測量的是惡意應用被分類器正確分類的數(shù)目占所有測試惡意應用中的比例,它同樣代表著分類器檢測未知惡意軟件的能力。FNR代表惡意應用被分類器錯誤分類的數(shù)目占所有測試惡意應用中的比例,是檢測率的補充。預測率反映整個惡意檢測模型預測惡意軟件的預測能力。
實驗所用均來自Android第3方應用市場,經(jīng)過VirusTotal分析檢測,最終整理得到450款正常軟件和450款惡意軟件,經(jīng)過圖1所示的方法,將每個apk文件轉(zhuǎn)化為對應的[FAPI,F(xiàn)CMD,RPER]1 ×44 的特征向量,隨機選擇正常軟件和惡意軟件的70%作為訓練集,剩余作為測試集。
所有實驗在Intel(R)Core(TM)i5、內(nèi)存4G的計算機上運行,算法在matlap 2010a上實現(xiàn),SVM實現(xiàn)采用libsvm3-17,實驗中所有參數(shù)都采用默認參數(shù)。式(1)和式(2)對應,式(4)和式(5)對應,式(3)和式(6)對應,因而實驗結(jié)果只記錄 Acc、FPR、TPR 和P。
首先分別提取應用放入 API特征[FAPI]1×14、系統(tǒng)命令行調(diào)用特征[FCMD]1×10和權(quán)限特征[FPER]1×20這3個特征;然后采用SVM對Android應用進行分類,2類應用在不同的單一特征下的運行10次后平均分類結(jié)果如表4示。

表4 單一特征對應的分類結(jié)果
從表4以看出,無論使用哪種單一特征對惡意軟件的分類,其分類的結(jié)果都不高。其中權(quán)限特征的分類結(jié)果要明顯低于其他兩種特征,檢測準確率Acc只有0.725 9,其原因是在于正常軟件與惡意軟件大體上都擁有相似的權(quán)限,區(qū)分度不高。系統(tǒng)命令行特征分類結(jié)果Acc為0.833 3,低于API特征分類結(jié)果的0.870 4,可以看出API特征在3種特征中對Andriod惡意軟件的檢測能力最高。而基于系統(tǒng)命令行特征分類結(jié)果在于有些惡意軟件不調(diào)用系統(tǒng)命令行,也能達到其惡意攻擊用戶手機的目的。同樣,有些惡意軟件只在代碼中調(diào)用危險的API,也能攻擊用戶手機,因此可以看出,單一特征不能為Android惡意軟件檢測提供高精度的檢測率。
首先對實驗1中所提取的3種特征進行合并,從而得到 Android應用的混合特征[FAPI,F(xiàn)CMD,RPER]1×44。然后利用PCA方法對混合特征進行降維處理,去除冗余信息,最后利用libsvm對Android應用進行分類,記為PCA-SVM算法。同樣,為了對比實驗,不對混合特征做處理,利用libsvm對Android應用進行分類,記為SVM算法。10次運行后平均分類結(jié)果如表5所示。

表5 2種算法的圖像分類結(jié)果比較
從表4和表5可以看出,單一特征的Android惡意軟件檢測都要低于混合特征的Android惡意檢測。實驗結(jié)果表明,混合特征在Android惡意檢測方面有更佳的檢測能力。從PCA-SVM算法和SVM算法的比較結(jié)果上可以看出,PCA-SVM算法在去除混合特征中冗余特征后,分類結(jié)果更優(yōu)。
綜上所述,Android靜態(tài)惡意檢測中,混合特征惡意檢測準確率要高于單一特征的惡意檢測準確率,Android惡意軟件實現(xiàn)手段的多樣化,使得單一特征不足以表現(xiàn)Android惡意軟件的特征。而混合特征可以多方面地表現(xiàn) Android惡意軟件,基于PCA的SVM分類器對Android惡意靜態(tài)檢測有很高的準確率。
通過多款惡意軟件,從中分析出惡意軟件中的危險API調(diào)用、危險系統(tǒng)命令行和權(quán)限集,并以這些特征建立Andriod惡意靜態(tài)檢測模型。通過對450款惡意軟件和450款正常軟件進行惡意檢測仿真實驗,實驗結(jié)果表明,基于混合特征的Android靜態(tài)檢測方法能夠有效地提高Andriod惡意檢測的檢測精度和惡意檢測模型的泛化能力。
[1] 趨勢科技.2013信息安全關(guān)鍵十大預測報告[J].計算機安全,2013(2):75-76.
[2] 李釗,李建軍,李智生,等.基于生物視覺特征的SVM目標分類算法[J].無線電工程,2012,42(10):58-60.
[3] BURGUERA I,ZURUTUZA U,NADJM-TEHRANI S.Crowdroid:Behavior-based Malware Detection System for Android[C]∥ Proc.First ACM Workshop on Security and Privacy in Smartphones and Mobile devices(SPSM’11),New York,NY,USA,2011:15 -26.
[4] GIBLER C,CRUSSELL J,ERICKSON J,et al.Android Leaks:Automatically Detecting Potential Privacy Leaks in Android Applications on a Large Scale[C]∥ Proc.Fifth Int.Conf.Trust and Trustworthy Computing(TRUST 2012),Vienna,Austria,2012:291 -307.
[5] MANN C,STAROSTIN A.A Framework for Static Detection of Privacy Leaks in Android Applications[C]∥Proc.27thAnnualACM Symp.AppliedComputing(SAC’12),Trento,Italy,2012:1457 -1462.
[6] SHABTAI A,F(xiàn)LEDEL Y,ELOVICI Y.Automated Static Code Analysis for Classifying Android Applications Using Machine Learning[C]∥ in Proceedings of the 2010 International Conf.on Computational Intelligence and Security,2010:329 -333.
[7] 房鑫鑫.Android惡意軟件實現(xiàn)及檢測研究[D].南京:南京郵電大學,2013:36-46.
[8] DINI G,MARTINELLI F,SARACINO A,et al.A Multilevel Anomaly Detector for Android Malware[J].In:Kotenko,I.,Skormin,V.(eds.)MMM-ACNS 2012.LNCS,2012(7531):240-253.
[9] WANG T Y,WU C H,HSIEH C C.A Virus Prevention Model Based on Static Analysis and Data Mining Methods[C]∥ Proc.IEEE Eighth Int.Conf.Computer and Information Technology Workshops,Sydney,2008:288 -293.
[10] SAHS J,KHAN L.A Machine Learning Approach to Android Malware Detection[C]∥ European Intelligence and Security Informatics Conf.,Odense,Denmark,2012:141-147.