劉楚舒,王偉平,劉鵬飛
中南大學(xué) 信息科學(xué)與工程學(xué)院,長沙 410083
Android是目前最為流行的移動設(shè)備操作系統(tǒng),這種流行性也為惡意應(yīng)用的滋生提供了土壤。安全公司McAfee的數(shù)據(jù)[1]反映,中國每小時有超過6 000個惡意應(yīng)用被檢測出來,為全世界數(shù)量之首。因此,Android惡意應(yīng)用的檢測是目前安全領(lǐng)域研究中的重點(diǎn)。
目前,研究者針對Android惡意應(yīng)用的檢測提出了多種方法。其中,比較有代表性的是針對代碼的靜態(tài)分析方法,它的一般做法是提取程序代碼特征,并基于正常應(yīng)用和惡意應(yīng)用在代碼特征上的差異性對惡意應(yīng)用進(jìn)行識別。但目前靜態(tài)分析普遍存在的問題是特征選取不夠全面,導(dǎo)致檢測方法只能針對特定的數(shù)據(jù)集才有效。
本文針對相關(guān)研究沒有考慮的圖片及界面元素兩類資源特征進(jìn)行了分析,發(fā)現(xiàn)應(yīng)用圖片和界面元素的數(shù)目在正常應(yīng)用和惡意應(yīng)用中有明顯的差異性,繼而提出了一種結(jié)合上述特征的Android惡意應(yīng)用檢測方法——MalAssassin,并驗證了結(jié)合資源特征的檢測方法在提高了識別準(zhǔn)確性的同時,對不同數(shù)據(jù)集都具有較好的適應(yīng)性。
靜態(tài)分析方法首先對APK解壓,然后從解壓后得到的文件中提取特征,通過提取特征對應(yīng)用的惡意性進(jìn)行判定。
Drebin[2]提取了應(yīng)用的8類特征,分別是硬件申請、權(quán)限申請[3]、實際使用的權(quán)限、組件名稱、Intent-filter、敏感API、可疑API以及硬編碼IP地址,隨后使用SVM[4]分類器對應(yīng)用的惡意性進(jìn)行判定。Wu等人的方法[5]提取了在不同組件中出現(xiàn)的與隱私數(shù)據(jù)相關(guān)的API[6]作為特征,并使用KNNE、KNNM、邏輯回歸、貝葉斯網(wǎng)絡(luò)4種分類器算法對惡意應(yīng)用進(jìn)行檢測。Naser的方法[7]提取了應(yīng)用的權(quán)限申請以及API調(diào)用作為特征,并發(fā)現(xiàn)當(dāng)檢測方法將API和權(quán)限特征結(jié)合使用時,會取得更好的檢測效果。DroidMat[8]提取了應(yīng)用的權(quán)限與API調(diào)用特征,通過K-Means算法增強(qiáng)了檢測方法對惡意應(yīng)用的建模能力,最后通過KNN算法完成了對正常應(yīng)用和惡意應(yīng)用的二分類。Wei等人的方法[9]提取了應(yīng)用的敏感權(quán)限和API等特征,并實現(xiàn)了一個基于隨機(jī)森林分類器的檢測方法,通過對不同特征集進(jìn)行實驗,驗證了在多特征協(xié)同決策的情況下,機(jī)器學(xué)習(xí)方法能夠達(dá)到較高的檢測性能。Kang等人的方法[10]是首先通過惡意應(yīng)用開發(fā)者的簽名證書黑名單對應(yīng)用進(jìn)行初步篩選,對于無法通過黑名單判斷的應(yīng)用則提取其權(quán)限、可疑API、惡意命令作為特征,通過機(jī)器學(xué)習(xí)算法計算待測應(yīng)用在這3種特征上與已知的惡意樣本的相似性,并將相似性較高的應(yīng)用判定為惡意應(yīng)用。Allix[11]分析了多個機(jī)器學(xué)習(xí)方法在不同特征集下的檢測性能,并指出特征選取不夠全面會導(dǎo)致檢測方法在不同樣本集上的測試結(jié)果差距較大。
表1給出了這些研究提取的特征情況。沒有一個研究對這些特征進(jìn)行綜合,并且這些特征只包含了APK解壓后的文件中的部分信息,即AndroidManifest.xml文件、classes.dex文件以及META-INF文件夾中的信息,而resources.arsc文件以及res文件夾中的信息則沒有被作為特征。這些未被考慮的信息主要是圖片和界面元素這兩類資源特征。
表1 相關(guān)研究提取的特征
為了提取的特征更加全面,針對應(yīng)用中的圖片資源和界面元素進(jìn)行了分析和測試,發(fā)現(xiàn)這些元素在正常應(yīng)用與惡意應(yīng)用中存在明顯的差異?;诖?,本文提出了一種惡意應(yīng)用檢測方法——MalAssassin,該方法不僅考慮了相關(guān)研究[3,5,7-11]所提取的特征,還結(jié)合了資源特征。
將Android應(yīng)用的圖片與界面元素統(tǒng)稱為資源特征。對已經(jīng)標(biāo)記好的59 093個應(yīng)用(53 422個正常應(yīng)用和5 671個惡意應(yīng)用)的圖片與界面元素兩類資源特征進(jìn)行了統(tǒng)計分析。
Android應(yīng)用的圖片存放在res文件夾中,其中較常使用到的圖片有4種像素密度,分別為:ldpi(低像素密度,120 dpi)、mdpi(中像素密度,160 dpi)、hdpi(高像素密度,240 dpi)、xhdpi(超高像素密度,320 dpi)。像素密度越高,圖片越清晰。
對這4種像素密度圖片的數(shù)量以及圖片總數(shù)的累計分布進(jìn)行了統(tǒng)計,如圖1~圖5所示。其中橫坐標(biāo)表示圖片數(shù)量,縱坐標(biāo)表示包含圖片數(shù)量小于對應(yīng)橫坐標(biāo)值的應(yīng)用數(shù)目占該種類全部應(yīng)用數(shù)目的百分比。通過這5張累計分布圖,有以下發(fā)現(xiàn):
(1)正常應(yīng)用與惡意應(yīng)用在4種像素密度圖片上的分布存在明顯的差異。
(2)惡意應(yīng)用更多地使用了ldpi和mdpi圖片,正常應(yīng)用更多地使用了hdpi和xhdpi圖片。
(3)惡意應(yīng)用中幾乎不包含xhdpi圖片。
(4)使用超過10張圖片的惡意應(yīng)用占所有惡意應(yīng)用的比例為20%,而使用超過10張圖片的正常應(yīng)用占比為44%。
基于上述發(fā)現(xiàn),ldpi、mdpi、hdpi、xhdpi圖片數(shù)量以及圖片總數(shù)對于區(qū)分正常與惡意應(yīng)用有著重要的作用。
圖1 ldpi圖片數(shù)量對比
圖2 mdpi圖片數(shù)量對比
圖4 xhdpi圖片數(shù)量對比
為此,人工分析了一些惡意樣本,并總結(jié)了出現(xiàn)這種現(xiàn)象的原因:惡意應(yīng)用為了隱藏自己的意圖,會故意使用非常小的圖片,例如:惡意應(yīng)用故意將按鈕的圖片設(shè)置為只有一個像素大小的圖片,用戶看不到應(yīng)用界面中存在的這個按鈕,不小心誤觸該按鈕,從而觸發(fā)應(yīng)用的惡意行為。這就使得惡意應(yīng)用更傾向于使用像素密度較小的圖片,因此ldpi和mdpi圖片的占比很高;而由于大像素的圖片很容易暴露惡意應(yīng)用的意圖,因此hdpi和xhdpi圖片的占比很低。與之相反的是,正常應(yīng)用不需要隱藏自己的意圖,反而由于功能的需要會用到更多高清的圖片,所以其圖片的累計分布與惡意應(yīng)用的累計分布正好相反。此外,由于正常應(yīng)用相對于惡意應(yīng)用會使用到更多的圖片,因此在圖片總數(shù)上也要比惡意應(yīng)用多。
同時考察了應(yīng)用resources.arsc文件中的界面元素特征。應(yīng)用的界面元素指的是一些用戶交互界面(UI)的入口元素,例如按鈕、輸入框、返回鍵等元素,這些元素定義了Android應(yīng)用與用戶交互的方式。
對應(yīng)用的界面元素做了與圖片相同的累計分布統(tǒng)計,統(tǒng)計的對象分別是EditText、Toast、TextView 以及Button這4種界面元素,結(jié)果如圖6~圖9所示。同樣的,橫坐標(biāo)表示界面元素數(shù)量,縱坐標(biāo)表示包含的界面元素數(shù)量小于對應(yīng)橫坐標(biāo)值的應(yīng)用數(shù)目占該種類全部應(yīng)用數(shù)目的百分比。通過這4張累計分布圖,有以下發(fā)現(xiàn):
(1)惡意應(yīng)用幾乎不使用任何EditText和Toast元素,而約40%的正常應(yīng)用擁有EditText元素,約25%的正常應(yīng)用擁有Toast元素。
圖3 hdpi圖片數(shù)量對比
圖5 圖片總數(shù)對比
(2)約25%的惡意應(yīng)用會使用到10個以內(nèi)的Text-View元素,而約57%的正常應(yīng)用至少使用1個TextView元素,且有30%的正常應(yīng)用使用超過10個TextView元素。
(3)正常應(yīng)用和惡意應(yīng)用在Button界面元素數(shù)目上的分布基本一致。
基于上述發(fā)現(xiàn),認(rèn)為EditText、Toast、TextView界面元素數(shù)量對于區(qū)分正常與惡意應(yīng)用有著重要的作用。人工分析并總結(jié)了出現(xiàn)這種現(xiàn)象的原因:Android SDK為開發(fā)者提供了模板應(yīng)用以便開發(fā)者快速上手,而這些模板有著相同的Button元素,如果開發(fā)者需要定義自己的用戶交互界面,就需要自定義。
圖6 EditText數(shù)量對比
圖7 Toast數(shù)量對比
圖8 TextView數(shù)量對比
圖9 Button數(shù)量對比
通常,EditText、Toast以及TextView元素不會事先在開發(fā)模板中給出,需要自定義。而惡意應(yīng)用幾乎不會使用EditText和Toast,同時TextView的數(shù)量也要比正常應(yīng)用少。因為這3類界面元素都屬于提示信息的元素,惡意應(yīng)用傾向于在后臺偷偷地進(jìn)行惡意操作,不給用戶以任何提示。例如:正常應(yīng)用在發(fā)送短信成功后,會通過Toast顯示一段信息,提示用戶短信已發(fā)送;而惡意應(yīng)用則會將提示短信發(fā)送成功的Toast元素刪除以隱藏其發(fā)送短信的行為。因此,惡意應(yīng)用很少使用EditText、Toast、TextView這3種提示信息類型的界面元素;而在Button這類界面元素在Android SDK的模板中事先定義好了,因此正常應(yīng)用與惡意應(yīng)用的使用比率比較相近。
結(jié)合上述發(fā)現(xiàn),提出了一種結(jié)合了資源特征的Android惡意應(yīng)用檢測方法——MalAssassin。MalAssassin的檢測過程主要分為4步:(1)對已知的APK文件進(jìn)行解壓;(2)通過Androguard[12]工具提取應(yīng)用的特征,并將特征映射到向量空間;(3)使用機(jī)器學(xué)習(xí)算法對特征向量進(jìn)行學(xué)習(xí),訓(xùn)練出檢測模型;(4)使用檢測模型對未知Android應(yīng)用進(jìn)行惡意性檢測。具體的檢測過程如圖10所示。
MalAssassin首先對Android APK解壓,得到應(yīng)用的相關(guān)信息,包括AndroidManifest.xml文件、classes.dex文件、resources.arsc文件,以及META-INF和res兩個文件夾。
AndroidManifest.xml文件存放了應(yīng)用的一些配置信息,包括申請的權(quán)限、組件、硬件以及應(yīng)用包名等等;classes.dex文件是應(yīng)用源代碼編譯后形成的文件;resources.arsc文件存放了應(yīng)用的界面元素信息;META-INF文件夾保存了應(yīng)用的簽名信息;res文件夾則存放了應(yīng)用的圖片。
從解壓后得到的文件中,MalAssassin獲取了應(yīng)用的各種信息,并將這些信息提取為特征。
MalAssassin使用Androguard工具從解壓后得到的應(yīng)用信息中提取了8類特征,如表2所示。其中特征1~6為相關(guān)研究提取特征類型,特征7、8為所發(fā)現(xiàn)的資源特征類型,每個特征詳細(xì)介紹如下:
(1)敏感權(quán)限。將正常應(yīng)用使用較少、惡意應(yīng)用使用較多的權(quán)限定義為敏感權(quán)限,統(tǒng)計了所有惡意應(yīng)用和正常應(yīng)用的權(quán)限申請,并選取了其中22個權(quán)限作為敏感權(quán)限。當(dāng)應(yīng)用使用了某項敏感權(quán)限,則該項特征值為1。
(2)組件數(shù)目。Android系統(tǒng)為應(yīng)用開發(fā)者提供了4種實用組件:Activity、Service、BroadcastReceiver以及ContentProvider。惡意應(yīng)用更傾向于在后臺進(jìn)行敏感操作,因此定義的Service、ContentProvider和BroadcastRe-ceiver組件數(shù)量要比正常應(yīng)用多,而Activity組件數(shù)量比正常應(yīng)用少。分別提取這4種組件的數(shù)量作為特征。
圖10 MalAssassin檢測過程
(3)敏感API數(shù)目。將加密方法、動態(tài)加載方法以及Native方法定義為敏感API,惡意應(yīng)用中大量使用到了這些敏感API,因此分別提取這3種敏感API的調(diào)用次數(shù)作為特征。
(4)存在危險命令。Android SDK為開發(fā)者提供了Rumtime接口,開發(fā)者可以通過Runtime接口在代碼中直接調(diào)用linux系統(tǒng)命令。統(tǒng)計了惡意應(yīng)用常用的linux系統(tǒng)命令,并選取了11個系統(tǒng)命令作為危險命令特征,包括chmod、insmod、su、mount、sh、killall、reboot、mkdir、getprop、ln、pa。當(dāng)應(yīng)用的源代碼中出現(xiàn)相應(yīng)的危險命令的調(diào)用時,該危險命令特征值為1。
(5)硬編碼IP地址。惡意應(yīng)用開發(fā)者會將IP地址硬編碼在代碼中,通過與這些IP地址通信,將隱私信息發(fā)送到遠(yuǎn)程服務(wù)器。提取了已知惡意應(yīng)用中包含的11個不同的硬編碼IP地址作為特征。當(dāng)應(yīng)用中的硬編碼IP地址在惡意應(yīng)用中出現(xiàn),則相應(yīng)特征值為1。
(6)存在惡意簽名。Android應(yīng)用在發(fā)布時必須包含一個數(shù)字簽名,以驗證其開發(fā)者的合法性,而這個數(shù)字簽名的公鑰是由應(yīng)用的簽名證書發(fā)放。提取了9個已知惡意應(yīng)用開發(fā)者的簽名證書作為特征。當(dāng)應(yīng)用的簽名證書與之匹配時,則相應(yīng)特征值為1。
(7)圖片數(shù)目。應(yīng)用的圖片分為ldpi、mdpi、hdpi、xhdpi,正常應(yīng)用使用 hdpi、xhdpi圖片較多,使用 ldpi、mdpi較少;而惡意應(yīng)用使用ldpi、mdpi圖片較多,使用hdpi、xhdpi較少。分別提取應(yīng)用在這4種圖片上的數(shù)量以及圖片的總數(shù)作為特征。
(8)界面元素數(shù)目。正常應(yīng)用為了方便與用戶交互,會自定義EditText、Toast以及TextView元素,而惡意應(yīng)用為了隱藏自己的惡意行為,則很少使用EditText、Toast以及TextView元素。分別提取了EditText、Toast、TextView這3種界面元素的數(shù)量作為特征。
將表2中的8類共68個特征映射到向量空間,形成應(yīng)用的特征向量。例如,一個應(yīng)用的特征向量?(x)如下所示:
其中,該應(yīng)用使用了INTERNET權(quán)限,因此INTERNET特征為1;它沒有調(diào)用獲取設(shè)備ID的API,因此該特征為0;另外,該應(yīng)用包含了10張像素密度為mdpi的圖片和15個Toast元素的,因此在這兩維特征上的取值分別為10和15。
表2 MalAssassin提取的特征
將正常應(yīng)用其標(biāo)記為0;惡意應(yīng)用標(biāo)記為1,并通過Weka[13]機(jī)器學(xué)習(xí)工具對數(shù)據(jù)集進(jìn)行訓(xùn)練。在Weka所有的機(jī)器學(xué)習(xí)分類器中,選擇了其中的4種,分別是:邏輯回歸、J48樹、隨機(jī)森林、SVM。這4種機(jī)器學(xué)習(xí)分類器在不同的二分類問題上都取得了不錯的效果,是比較常用的分類算法。分別采用這4種算法構(gòu)建檢測模型,主要是為了對比的全面性,從而驗證資源特征的加入是否能使得MalAssassin對不同數(shù)據(jù)集都具有較好的適應(yīng)性。其中,邏輯回歸是一種回歸模型,它在線性回歸的基礎(chǔ)上,套用了一個邏輯方程,從而將預(yù)測值限定在[0,1]之間。J48樹和隨機(jī)森林都屬于決策樹算法,而決策樹是一個利用像樹一樣的圖形或決策模型的決策支持算法。支持向量機(jī)(SVM)通過將樣本映射到高維向量空間,通過構(gòu)建一個超平面對樣本進(jìn)行劃分。
通過Weka內(nèi)置的邏輯回歸、J48樹、隨機(jī)森林及SVM分類器算法,對映射好的特征向量進(jìn)行了訓(xùn)練,形成檢測模型。每當(dāng)需要檢測新的應(yīng)用,MalAssassin提取該應(yīng)用的8類68個特征,并通過已經(jīng)訓(xùn)練好的檢測模型判斷其惡意性。
主要是通過實驗測試MalAssassin的檢測性能,驗證圖片和界面元素特征對惡意應(yīng)用檢測的有效性,同時與相關(guān)研究進(jìn)行了對比。
數(shù)據(jù)集由3個部分組成,如表3所示。其中正常樣本是從國內(nèi)應(yīng)用市場下載的53 422個正常應(yīng)用,將其標(biāo)記為數(shù)據(jù)集B。
表3 數(shù)據(jù)集來源
惡意樣本數(shù)據(jù)集來源于兩處,分別是從研究Androdumpsys[14]中獲取的4 429個惡意應(yīng)用,該研究的惡意樣本數(shù)據(jù)集采集自2012年—2014年,將其標(biāo)記為數(shù)據(jù)集M1;以及從Malgenome[15]項目中獲取的1 242個惡意應(yīng)用,該惡意樣本數(shù)據(jù)集采集自2011年—2012年,將其標(biāo)記為數(shù)據(jù)集M2。M1和M2互不包含。
實驗使用到了3個數(shù)據(jù)集,如表4所示。數(shù)據(jù)集1由數(shù)據(jù)集B、M1、M2構(gòu)成,用它來測試MalAssassin在整個數(shù)據(jù)集下的性能;數(shù)據(jù)集2由數(shù)據(jù)集B和M1構(gòu)成,數(shù)據(jù)集3由數(shù)據(jù)集B和M2構(gòu)成,這兩個數(shù)據(jù)集的惡意樣本采集自不同的時間段,主要用它來驗證MalAssassin在不同惡意樣本數(shù)據(jù)集下的適應(yīng)性。
表4 數(shù)據(jù)集劃分
為了驗證資源特征對檢測結(jié)果的影響,將MalAssassin中的資源特征去掉,形成了一個不含資源特征的對比方法 MalAssassin(-)。
首先,直接在數(shù)據(jù)集1上測試了MalAssassin與MalAssassin(-)的檢測精確度和召回率。以數(shù)據(jù)集1中67%的應(yīng)用作為訓(xùn)練集,33%的應(yīng)用作為測試集,并通過十折交叉驗證的方式進(jìn)行測試,結(jié)果如表5所示??梢?,在數(shù)據(jù)集1上同時進(jìn)行訓(xùn)練和測試時,MalAssassin與MalAssassin(-)相比平均精確度和召回率都略有提高,分別提高了0.9%和0.8%。
表5 數(shù)據(jù)集1下的精確度和召回率對比%
為了驗證 MalAssassin 和 MalAssassin(-)對不同數(shù)據(jù)集的適應(yīng)性,使用數(shù)據(jù)集3作為訓(xùn)練集,分別對MalAssassin和MalAssassin(-)提取的特征進(jìn)行訓(xùn)練,并用訓(xùn)練得到的檢測模型在數(shù)據(jù)集2上進(jìn)行驗證。來觀察兩種方法對新舊數(shù)據(jù)集是否具有較強(qiáng)的適應(yīng)性。測試結(jié)果如表6所示。
由表6可知,含有資源特征的MalAssassin與不含資源特征的MalAssassin(-)相比,在訓(xùn)練數(shù)據(jù)集與測試數(shù)據(jù)集不同的情況下,可以取得更好的精確度和召回率。在4種不同分類器上的提升都達(dá)到了6%以上。其中邏輯回歸提高了6.9%和6.9%,J48提高了5.9%和6.4%,隨機(jī)森林提高了6.5%和7.2%,SVM提高了6.7%和6.9%。
表6 數(shù)據(jù)集2下的精確度和召回率對比%
這印證了資源特征是惡意應(yīng)用的一項普遍包含的特征,這種特征可以有效地幫助識別,即便應(yīng)用舊的訓(xùn)練模型來檢測新的應(yīng)用,依然能具有較好的適用性。
表7給出了MalAssassin與其他幾種基于特征的機(jī)器學(xué)習(xí)方法的參照對比,由于無法獲取這些相關(guān)方法的源代碼,因此直接引用了其文中使用的數(shù)據(jù)集以及準(zhǔn)確率測試結(jié)果。其中,Drebin[2]以及Kang等人[10]使用了與本文相同的惡意應(yīng)用數(shù)據(jù)集,Naser[7]、Allix[11]使用的惡意應(yīng)用數(shù)據(jù)集來自文獻(xiàn)[15],是MalAssassin惡意應(yīng)用數(shù)據(jù)集的一部分,因此這4個研究的測試結(jié)果同MalAssassin最具可比性;DroidMat[8]的惡意樣本采集自contagio網(wǎng)站,Wu等人[5]和Wei等人[9]的惡意樣本采集自VirusShare網(wǎng)站,由于無法獲取他們的數(shù)據(jù)集,因此將DroidMat、Wu以及Wei文中的性能測試結(jié)果列在表7以供參考。MalAssassin綜合了考慮各個方法所提取的特征,并取得了更好的檢測效果。
表7 不同方法的檢測性能參照對比
最后,測試了MalAssassin的運(yùn)行效率。實驗測試機(jī)器配置為:Intel Core i3-2100 3.10 GHz處理器,Windows 10專業(yè)版操作系統(tǒng),6 GB內(nèi)存。在這樣的環(huán)境下,對1 242個大小從600 KB到16 MB的惡意樣本進(jìn)行測試,結(jié)果如圖11所示。
圖11 MalAssassin運(yùn)行效率
由圖11可知,這1 242個惡意樣本的大小主要集中在6 MB以內(nèi),MalAssassin對這種大小的應(yīng)用分析基本上控制在2~4 s之間,分析時間最多不超過10 s。
本文提出了一種基于靜態(tài)分析和機(jī)器學(xué)習(xí)的Android惡意應(yīng)用檢測和分類方法,該方法綜合了相關(guān)研究所提取的特征,并首次將圖片和界面元素引入作為應(yīng)用的特征。經(jīng)實驗驗證,本文的方法達(dá)到了99.1%的精確度以及召回率。同時,資源特征的引入使得MalAssassin在不同數(shù)據(jù)集上具有較好的適應(yīng)性。