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