熊 健,覃仁超,何夢乙,劉建蘭,唐風(fēng)揚(yáng)
西南科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,四川 綿陽621000
近年來智能手機(jī)已迅速成為極為流行的計(jì)算平臺,使用智能手機(jī)的人群日益龐大。其中Android操作系統(tǒng)在智能手機(jī)操作系統(tǒng)市場占領(lǐng)絕對優(yōu)勢,成為使用量最多的移動端操作系統(tǒng)。此外,其開源性和開放性也使得它成為了越來越多黑客的攻擊對象?!?018 年中國手機(jī)安全狀況報(bào)告》[1]顯示,360互聯(lián)網(wǎng)安全中心在當(dāng)年共截獲約434.2萬個(gè)新增Android惡意應(yīng)用樣本,平均每天新增約1.2 萬個(gè)。為減少Android 惡意應(yīng)用給用戶帶來的危害和損失,Android 惡意軟件的檢測成為近年來一項(xiàng)熱門的研究。
國內(nèi)外針對Android惡意應(yīng)用檢測方法做出了許多研究。目前分析Android應(yīng)用的技術(shù)主要包括靜態(tài)檢測和動態(tài)檢測技術(shù)。靜態(tài)檢測技術(shù)就是在不執(zhí)行應(yīng)用的條件下,利用反匯編分析的技術(shù)。由于其具有不需執(zhí)行應(yīng)用、檢測開銷低等優(yōu)點(diǎn)成為了眾多學(xué)者采用的方法[2]。?ahin等人[3]對權(quán)限進(jìn)行了系統(tǒng)地分析并提出了給權(quán)限分配權(quán)重的方法,采用k近鄰(KNN)和樸素貝葉斯(NB)方法與已有的研究進(jìn)行比較;Westyarian 等人[4]提出了利用API 類來檢測Android 惡意軟件,并使用機(jī)器學(xué)習(xí)來區(qū)分惡意應(yīng)用,使用交叉驗(yàn)證和百分比分割測試來驗(yàn)證分類的準(zhǔn)確性;Ju[5]提出一種靜態(tài)檢測的方法,該方法利用程序的權(quán)限和包;Yuan等人[6]提出了一種基于貝葉斯分類的Android 應(yīng)用程序自動分類的有效方法,從應(yīng)用程序本身和Android market 中提取出應(yīng)用的權(quán)限和字符串作為分類特征;Li等[7]提出一種基于靜態(tài)分析的方法,通過提取權(quán)限和API 調(diào)用函數(shù)作為特征來訓(xùn)練支持向量機(jī)(SVM)算法;Arp[8]提出一個(gè)靜態(tài)分析Android 應(yīng)用框架,從AndroidManifest 文件中提取一組功能,并通過反匯編代碼生成特征向量,將SVM應(yīng)用于數(shù)據(jù)集來識別惡意應(yīng)用;基于靜態(tài)分析的DROIDMAT[9]分析AndroidManifest 文件,提取應(yīng)用程序的不同功能,例如權(quán)限和意圖消息,然后標(biāo)記了應(yīng)用程序組件、活動、服務(wù)和接收者作為初始點(diǎn)來跟蹤和權(quán)限有關(guān)聯(lián)的API調(diào)用,并應(yīng)用K-means 算法對惡意應(yīng)用進(jìn)行分類檢測;Chan 等人[10]提出了一個(gè)包含Android 惡意軟件靜態(tài)檢測權(quán)限和API 調(diào)用的特征集。其中,文獻(xiàn)[3]只選取了Android 軟件的權(quán)限作為特征,特征選取過于單一;文獻(xiàn)[4]選擇了Android 軟件的API 函數(shù)作為特征,選擇范圍比較片面;文獻(xiàn)[5-10]雖然采用了多種特征結(jié)合,并運(yùn)用相應(yīng)機(jī)器學(xué)習(xí)技術(shù)進(jìn)行檢測,但檢測精度都不夠高。綜上所述,目前Android 惡意軟件檢測的研究成果在檢測效率和精度等方面還有待進(jìn)一步提高。
本文提出的Android 惡意軟件靜態(tài)檢測模型,采用基于行為的靜態(tài)分析技術(shù),提取權(quán)限、四大組件、API調(diào)用以及程序的關(guān)鍵信息如動態(tài)代碼、反射代碼、本機(jī)代碼、密碼代碼和應(yīng)用程序數(shù)據(jù)庫等11 個(gè)類別作為特征屬性,并對屬性使用信息增益算法(Information Gain,IG)進(jìn)行優(yōu)化選擇,通過對比共選取65 個(gè)分類特征,先采用有監(jiān)督的機(jī)器學(xué)習(xí)算法對Android程序進(jìn)行檢測分類并比較它們之間的精確度,通過對比選擇精確度最高的隨機(jī)森林(Random Forest)算法,采用加權(quán)投票機(jī)制對其進(jìn)行改進(jìn),并將其應(yīng)用于本模型的惡意軟件檢測分類當(dāng)中。通過實(shí)驗(yàn)證明,本文提出的模型在有效提高Android惡意軟件檢測效率上具有一定的可行性。
Android 操作系統(tǒng)基于Lniux 內(nèi)核,主要由Linux 內(nèi)核、Android 中間件和應(yīng)用層三部分構(gòu)成,如圖1 所示。Linux 內(nèi)核層位于最下面一層,是系統(tǒng)庫層與硬件之間的橋梁,提供一系列的核心系統(tǒng)服務(wù),負(fù)責(zé)硬件抽象和驅(qū)動程序等;Android中間件層包括應(yīng)用架構(gòu)層、Android運(yùn)行時(shí)和系統(tǒng)庫。該層為上層的應(yīng)用提供了必要的運(yùn)行環(huán)境,為Android系統(tǒng)提供了核心功能;應(yīng)用層提供了許多API,方便開發(fā)人員使用來開發(fā)應(yīng)用程序。
圖1 Android操作系統(tǒng)框架
Android應(yīng)用程序有四個(gè)基本組件:活動(Activity)、廣播接收器(Broadcast Receiver)、內(nèi)容提供商(Content Provider)和服務(wù)(Service)。其中活動組件用于聲明一個(gè)實(shí)現(xiàn)應(yīng)用的部分可視化用戶界面;廣播接收器是接收廣播通知的組件,用于實(shí)現(xiàn)消息的發(fā)布與訂閱;內(nèi)容提供商用于實(shí)現(xiàn)數(shù)據(jù)共享,為程序間的數(shù)據(jù)訪問提供接口;服務(wù)長期運(yùn)行在后臺,提供一系列系統(tǒng)服務(wù)。
Android 應(yīng)用程序APK 文件是由JAVA 語言編寫的壓縮安裝包文件,它包含了程序的所有內(nèi)容。APK文件的主要組成有:META-INF 目錄、assets 目錄、res 目錄、AndroidManifest.xml文件、classes.dex文件、resources.arsc文件。其中META-INF 目錄主要存放校驗(yàn)文件;assets目錄存放在封裝到APK文件中時(shí)要保持原始文件形式的文件;res 目錄主要用來存儲與圖形界面有關(guān)的資源文件;AndroidManifest.xml 文件是存儲Android 應(yīng)用配置的文件,包含如包名、權(quán)限列表及組件聲明等信息;classes.dex文件擁有程序的全部邏輯實(shí)現(xiàn);resources.arsc文件是一個(gè)已被編譯過的索引文件,用來記錄ID 與資源文件之間的關(guān)系。
隨機(jī)森林(RF)算法是由Breiman和Adele開發(fā)的一種集成學(xué)習(xí)算法[11-12],該算法對Bagging 算法進(jìn)行了擴(kuò)展,結(jié)合了Bagging和隨機(jī)子空間方法,可以用來處理分類問題和回歸問題等。在Bagging 中,通過使用輸入數(shù)據(jù)的bootstrap 樣本單獨(dú)構(gòu)建每個(gè)分類器。在常規(guī)決策樹分類器中,劃分屬性是選擇當(dāng)前結(jié)點(diǎn)屬性集合的一個(gè)最優(yōu)解。而在RF 中,首先在結(jié)點(diǎn)的屬性集合中隨機(jī)選擇一個(gè)子集,該子集包含m個(gè)屬性,然后再從這個(gè)子集中選擇一個(gè)最優(yōu)屬性。這種對于特征的隨機(jī)選擇不僅可以在每個(gè)特征向量包含許多特征的情況下,使用RF很好進(jìn)行縮放,而且還可以減少特征屬性之間的相互依賴性(相關(guān)性),從而更不容易受到特征內(nèi)在噪音的影響。RF 算法的流程如圖2 所示,隨機(jī)森林算法偽代碼如下。
輸入:樣本集N
For b=1←B
1. 從原始數(shù)據(jù)N中有放回地抽取bootstrap樣本記為Z
2. 對bootstrap 樣本進(jìn)行建模并生成決策樹T,生成過程遵循下述原則:
1.1 從所有樣本N中隨機(jī)選取M個(gè)屬性
1.2 從這M個(gè)屬性中選擇最佳分割屬性作為分裂點(diǎn)
1.3 重復(fù)以上兩個(gè)步驟建立k棵決策樹
end for 輸出:決策樹集合組成隨機(jī)森林
圖2 RF算法流程示意圖
3. 使用上述的隨機(jī)森林對樣本進(jìn)行分類檢測,采用簡單投票原則算出最終的分類結(jié)果
RF算法簡單易實(shí)現(xiàn)、計(jì)算開銷小,并且因?yàn)槠湓诂F(xiàn)實(shí)任務(wù)中展現(xiàn)出來的強(qiáng)大性能,被譽(yù)為“代表集成學(xué)習(xí)技術(shù)水平的方法”。RF 中基學(xué)習(xí)器的多樣性不僅來自于樣本擾動,還來自屬性擾動,這就使得該算法比單個(gè)分類器具有更好的泛化能力和分類效果。通過平均決策樹,具有抗過擬合能力。RF非常穩(wěn)定,即使數(shù)據(jù)集中出現(xiàn)了一個(gè)新的數(shù)據(jù)點(diǎn),整個(gè)算法也不會受到過多影響,它只會影響到一棵決策樹,很難對所有決策樹產(chǎn)生影響。但是,RF算法在投票選舉的時(shí)候無法區(qū)分強(qiáng)、弱分類器之間的差距也存在著可以改進(jìn)的地方,下面將對其進(jìn)行改進(jìn)。
對于分類任務(wù)來說,最常見的預(yù)測策略是使用投票法。RF算法采取的是簡單投票原則即將同樣的權(quán)值賦值到每棵決策樹上,從而忽略了不同分類器之間強(qiáng)弱的差異,無法增強(qiáng)隨機(jī)森林中分類性能優(yōu)秀和削弱分類性能欠佳的決策樹對分類結(jié)果的影響。因此,本文采用加權(quán)投票原則對RF 算法進(jìn)行改進(jìn),形成改進(jìn)的隨機(jī)森林(Improved Random Forest,IRF)分類器。具體步驟如下。
(1)首先使用Bagging算法從原始數(shù)據(jù)集(記為N)中有放回地抽取樣本,形成一個(gè)樣本集。因此,會存在一些未被抽取到的樣本,這一部分樣本稱為OOB(Out-Of-Bag)數(shù)據(jù),OOB數(shù)據(jù)中每個(gè)樣本沒有被抽到的概率為那么N→∞時(shí)p≈0.368,表明沒有被抽中的樣本的概率有36.8%。設(shè)X為測試樣本集,x為它的一個(gè)樣本;T為訓(xùn)練完成的決策樹分類器集合,t為當(dāng)前的決策樹;C為分類結(jié)果集合,其中c是C中的一個(gè)分類。
(2)將OOB數(shù)據(jù)輸入到T中,得到每棵決策樹對OOB數(shù)據(jù)正確分類的比率CRt,作為相應(yīng)決策樹的權(quán)重。
(3)對樣本x使用RF進(jìn)行檢測分類并加權(quán)統(tǒng)計(jì),屬于Malware類的總得票數(shù)記為S,則:
(4)選出得票最多的類別C作為樣本x的最終類別,即:
如果按照傳統(tǒng)隨機(jī)森林算法采取的簡單投票原則對最終分類結(jié)果進(jìn)行決定,這樣會導(dǎo)致分類性能優(yōu)秀的決策樹和分類性能欠佳的決策樹擁有相同的權(quán)重,從而導(dǎo)致分類性能優(yōu)秀決策樹的能力得不到充分發(fā)揮,而分類性能欠佳的決策樹又對最終分類結(jié)果帶來一定的負(fù)面影響,從而導(dǎo)致最終的分類結(jié)果存在偏差。本文采用改進(jìn)的隨機(jī)森林算法能夠避免上述情況對隨機(jī)森林的分類能力帶來的負(fù)面影響,增強(qiáng)了森林中分類性能優(yōu)秀的決策樹在投票中所占的比重,同時(shí)削弱了分類性能欠佳的決策樹在投票中所占的比重,對比傳統(tǒng)的隨機(jī)森林算法在分類性能上具有一定的優(yōu)勢。
圖3為本文所提出的Android惡意軟件靜態(tài)檢測模型結(jié)構(gòu),共包括5個(gè)模塊:反編譯模塊、特征提取模塊、生成特征向量模塊、特征屬性優(yōu)化模塊和檢測分類模塊。
圖3 Android惡意代碼靜態(tài)檢測模型
模型處理過程設(shè)計(jì)如下:
(1)使用AndroGuard 工具反編譯樣本集中的APK文件,生成對應(yīng)的AndroidManifest.xml文件和smali文件。
(2)使用Python 模塊分別對permission、activity、provider、receiver和service、API調(diào)用、動態(tài)代碼、反射代碼、本機(jī)代碼、密碼代碼和應(yīng)用程序數(shù)據(jù)庫進(jìn)行屬性值提取,將提取的屬性值保存為文本文件格式,以便后續(xù)將其向量化。
(3)在獲得幾大類特征集合后,就要將其映射到向量空間中。運(yùn)用Python 模塊實(shí)現(xiàn)將特征文本文件轉(zhuǎn)化為特征向量,生成相應(yīng)的特征向量集合。
(4)使用IG 算法對處理后的特征向量集合進(jìn)行優(yōu)化,選取IG值更高更有代表性的65項(xiàng)特征屬性,生成特征優(yōu)化向量集合。
(5)使用機(jī)器學(xué)習(xí)分類算法對上述優(yōu)化后的向量集合進(jìn)行分類檢測,同時(shí)檢驗(yàn)分類的準(zhǔn)確性。
Android安裝包(以下簡稱APK 文件)是Android軟件通過打包過后生成的一個(gè)相當(dāng)于壓縮包的文件,但是無法閱讀其直接解壓后里面包含的內(nèi)容,因此需通過反編譯APK文件獲取其中的信息。為了獲取應(yīng)用的特征用于機(jī)器學(xué)習(xí)分類算法進(jìn)行分類檢測,本文采用Andro-Guard工具(https://github.com/androguard/androguard)對APK 文件進(jìn)行反編譯分析,將應(yīng)用程序APK 文件以AndroidManifest.xml 和Java 類的形式反編譯為其源代碼,使用Python 模塊從源代碼中解析所需的特征,表1顯示了部分所需的特征。AndroGuard 是用于第三方Android 應(yīng)用程序的靜態(tài)分析工具,該工具可分解應(yīng)用程序并使用其API訪問其組件。
表1 提取的Android移動應(yīng)用程序部分特征
為了保證安全性,Android 系統(tǒng)會通過權(quán)限機(jī)制來限制應(yīng)用程序能夠訪問的資源,應(yīng)用程序必須通過用戶授權(quán)才能使用某種權(quán)限。雖然權(quán)限機(jī)制在一定程度上增強(qiáng)了系統(tǒng)的安全性,但是用戶最終的權(quán)限授予選擇取決于他對權(quán)限的關(guān)注和理解程度。調(diào)查發(fā)現(xiàn),用戶很可能因?yàn)槠惹行枰褂媚承?yīng)用而忽視權(quán)限帶來的風(fēng)險(xiǎn),從而有可能被惡意軟件利用權(quán)限來實(shí)現(xiàn)其惡意目的,并有多種方式來執(zhí)行此操作。因此,權(quán)限可以作為反映該應(yīng)用是否可能存在惡意行為的特征;應(yīng)用程序通過四大應(yīng)用組件可以實(shí)現(xiàn)相應(yīng)的功能,四大應(yīng)用組件在另一方面又可以顯示應(yīng)用程序在運(yùn)行中與其他應(yīng)用程序或系統(tǒng)資源間的交互情況,從而能夠有效反映出應(yīng)用程序在運(yùn)行過程中可能進(jìn)行的操作。因此,本文也選取了四大組件作為特征屬性;Android框架提供了大量的API,這些API的組合調(diào)用不僅可以用于良性軟件的開發(fā),還可用來實(shí)現(xiàn)惡意的行為:訪問用戶隱私信息、發(fā)送惡意扣費(fèi)短信等。調(diào)查發(fā)現(xiàn),惡意軟件對一些高危API的調(diào)用次數(shù)遠(yuǎn)遠(yuǎn)高于正常的應(yīng)用,這在一定程度上可以真實(shí)地反映一個(gè)應(yīng)用程序的行為特點(diǎn),根據(jù)這些行為特點(diǎn)可以判別該應(yīng)用是否存在著惡意行為。因此,本文將一些API調(diào)用作為一個(gè)識別惡意應(yīng)用的特征依據(jù);加密代碼可以反映APK 文件是否采取了加密措施,如果在應(yīng)用程序中檢測到與密碼代碼相關(guān)的代碼,則在二進(jìn)制向量生成階段將is_crypto_code 字段設(shè)置為1,否則為0;is_dynamic_code 字段表示檢測類的動態(tài)加載,如果在應(yīng)用程序中檢測到dexClassLoader 方法,則在二進(jìn)制向量生成階段將字段值設(shè)置為1,否則為0;is_native_code字段值表示使用本機(jī)庫的應(yīng)用程序。Native 庫包含本機(jī)代碼,這些本機(jī)代碼被編譯為二進(jìn)制代碼并直接在操作系統(tǒng)上運(yùn)行。通過在應(yīng)用程序中檢測LoadLibrary方法可以檢測是否使用了本機(jī)代碼;is_reflection_code 字段表示應(yīng)用程序使用反射來動態(tài)調(diào)用方法,如果在應(yīng)用程序中檢測到Reflection 方法,則在二進(jìn)制向量生成階段將字段值設(shè)置為1,否則為0;如果在程序中檢測到與數(shù)據(jù)庫連接,在二進(jìn)制向量生成階段將字段值設(shè)置為1,否則為0。以上字段能在基于傳統(tǒng)特征的基礎(chǔ)上在一定程度上反映應(yīng)用程序的行為特點(diǎn),從而可以判斷該應(yīng)用是否存在著惡意行為。通過實(shí)驗(yàn)發(fā)現(xiàn),采用上述多特征結(jié)合相比只采用傳統(tǒng)特征,提高了識別惡意應(yīng)用的精確度。因此,本文也選取了程序的關(guān)鍵信息作為特征屬性。
使用集合S表示包含所有特征屬性的并集,如公式(3)所示:
其中集合S1~S11分別表示Android 應(yīng)用程序中的系統(tǒng)權(quán)限、四大組件、API調(diào)用和程序關(guān)鍵信息的屬性集合,并且通過Python 模塊保證集合中元素的唯一性。利用并集S,定義一個(gè)|S|維的向量空間φ,其中的元素要么是0要么是1。
因此,提取某一特征屬性類別X(比如系統(tǒng)權(quán)限)下所有Android應(yīng)用程序的特征屬性并映射到向量空間φ中可由公式(4)表示:
其中,當(dāng)函數(shù)I(x,s)=1 時(shí)表示當(dāng)前應(yīng)用程序x包含特征s,當(dāng)函數(shù)I(x,s)=0 時(shí)表示當(dāng)前應(yīng)用程序x不包含特征s。
本文中每個(gè)特征屬性類別所包含的APK應(yīng)用數(shù)量不止一個(gè),如表2所示,當(dāng)APK應(yīng)用數(shù)量較多時(shí),同一類別下的每一個(gè)APK的特征描述都必須在同一向量空間中表示出來。
表2 向量空間存儲格式
其中,第一行表示當(dāng)前功能類別(如系統(tǒng)權(quán)限)的所有屬性特征,Class屬性為標(biāo)記,其余每一行表示對一個(gè)APK 應(yīng)用的特征描述,1 表示當(dāng)前APK 包含對應(yīng)的屬性,0 表示不包含,true 標(biāo)記當(dāng)前APK 應(yīng)用為正常軟件,false標(biāo)記當(dāng)前APK應(yīng)用為惡意軟件。
本文選取了
特征優(yōu)化是對于數(shù)據(jù)進(jìn)行預(yù)處理中的關(guān)鍵一步,它的目的是為了消除特征冗余的同時(shí)選取相關(guān)度比較大的特征,為后續(xù)的分類檢測提高其精度以及效率。具體設(shè)計(jì)如圖4所示。
圖4 特征屬性優(yōu)化模塊
4.3.1 信息熵
假設(shè)X是一個(gè)離散型隨機(jī)變量,即它擁有有限范圍的取值范圍R={x1,x2,…,xm},其中xi出現(xiàn)的概率為Pi,設(shè)Pi=P{X=xi},則X的信息熵定義如公式(5)所示:
本文使用信息熵來描述分類事件中出現(xiàn)的不確定性,即分類事件X可能擁有的信息量,那么信息熵越大,獲得的信息量就越多。如果某事件X已經(jīng)確定一定發(fā)生或者不發(fā)生,那么得到的信息量為0,當(dāng)事件X發(fā)生的概率為0.5 時(shí),將會得到最大的信息熵。因此對于本文中的分類情況來說,只有當(dāng)正常和惡意樣本數(shù)量所占比例均為0.5時(shí),才能取得最大的信息熵,從而獲取更多的信息量。因此,為了保證獲取最大的信息量,本文采集APK 應(yīng)用時(shí),始終保持正常應(yīng)用與惡意應(yīng)用的數(shù)量保持均勻分布。
4.3.2 信息增益
本文通過計(jì)算特征集中的每一個(gè)特征下分類事件的信息熵來確定每一個(gè)特征對于分類事件的不確定性和影響大小,即條件熵。如公式(6)所示:
設(shè)X、f是兩個(gè)離散隨機(jī)變量,隨機(jī)變量X條件下f的條件熵H(X|f)表示隨機(jī)變量f在已知隨機(jī)變量X的條件下發(fā)生的不確定性。其中離散變量X的取值可能為{true|false}。
當(dāng)且僅當(dāng)H(X|f)=H(X)時(shí),表示在包含特征f的條件下對事件X的判斷無任何影響。否則,只要H(X|f)≥0,特征f對于事件X的判斷就會產(chǎn)生不同程度的影響。
本文采用信息增益來進(jìn)行特征的選擇優(yōu)化,即增加了特征f之前與之后,事件X的信息熵之差,如公式(7)所示:
使用IG(X,f1)表示在包含特征f1的情況下判斷成正常應(yīng)用的信息量IG(X=true,f1),或者在不包含的情況下判斷成惡意應(yīng)用的信息量IG(X=false,f1)。同理,可以使用IG(X,f2)來衡量在包含或不包含特征f2的情況下其對于分類任務(wù)的貢獻(xiàn)價(jià)值。依次類推,分別計(jì)算出特征集合中每個(gè)特征對于分類任務(wù)的可用價(jià)值,信息增益越大,代表該特征的可用價(jià)值越高,隨后對所有特征的信息增益值進(jìn)行排序,選擇值更大的特征作為優(yōu)化后的特征,即可完成特征選擇過程。
4.3.3 特征屬性優(yōu)化
根據(jù)上述IG算法對已提取的特征集合進(jìn)行優(yōu)化選擇。根據(jù)排序結(jié)果,生成對應(yīng)的優(yōu)化特征向量集合OFVS.arff。表3 展示了特征屬性數(shù)量分別為55、65、75的時(shí)候采用隨機(jī)森林算法進(jìn)行分類檢測時(shí)的效果對比。
表3 選取不同數(shù)量特征屬性采用RF算法分類效果對比
通過表3 可以看到,當(dāng)特征屬性數(shù)量為65、75 的時(shí)候效果最好,但特征屬性數(shù)量為75 時(shí)比特征屬性數(shù)量為65 時(shí)占用了更多的系統(tǒng)開銷,所以通過信息增益算法選擇65個(gè)特征屬性來進(jìn)行分類檢測。
將優(yōu)化后的特征向量集合OFVS.arff分為測試集和訓(xùn)練集兩類作為輸入,對訓(xùn)練集采用機(jī)器學(xué)習(xí)分類算法進(jìn)行訓(xùn)練同時(shí)對測試集進(jìn)行檢測分類。首先,采用樸素貝葉斯(Naive Bayes,NB)、K最近鄰(K-Nearest Neighbor,K-NN)、Bagging、決策樹(J48)、隨機(jī)樹(Random Tree,RT)、隨機(jī)森林(Random Forest,RF)分類器對模型進(jìn)行訓(xùn)練,并采用現(xiàn)目前流行的十倍交叉驗(yàn)證技術(shù)(K-fold Cross Validation)[13]來評估分類器的性能。即將訓(xùn)練集劃分為10 個(gè)相等并且沒有交集的子集,在每次訓(xùn)練中將1 個(gè)子集作為測試集,剩余的9 個(gè)子集用作訓(xùn)練集,最后以10 次訓(xùn)練結(jié)果平均值作為檢測分類器最后的分類性能。接著使用改進(jìn)的隨機(jī)森林(IRF)分類器對特征優(yōu)化向量進(jìn)行分類并檢測。最后對比其分類性能。
為了證明本文提出方法的有效性,本文共選取了12 000 個(gè)Android 應(yīng)用文件作為數(shù)據(jù)集進(jìn)行分類檢測實(shí)驗(yàn)。其中,6 000 個(gè)良性APK 應(yīng)用來自于國內(nèi)第三方Android 應(yīng)用市場;6 000 個(gè)惡意APK 應(yīng)用來自于VirusShare.com提供的惡意軟件樣本集。本文進(jìn)行實(shí)驗(yàn)的軟件和硬件配置如表4所示。
表4 實(shí)驗(yàn)環(huán)境配置
假設(shè)TP(True Positive)表示將正常應(yīng)用樣本正確識別的數(shù)量,TN(True Negative)表示將惡意應(yīng)用樣本正確識別的數(shù)量,F(xiàn)P(False Positive)表示將惡意應(yīng)用樣本誤判為良性的數(shù)量,F(xiàn)N(False Negative)表示將正常應(yīng)用樣本誤判為惡意的數(shù)量。即可得到如下分類器評估指標(biāo)參數(shù):
(1)真陽率(TP Rate,TPR),表示被正確分類的正常應(yīng)用與數(shù)據(jù)集中所有正常應(yīng)用數(shù)量的比值。
(2)真陰率(TN Rate,TNR),表示被正確分類的惡意應(yīng)用與數(shù)據(jù)集中所有惡意應(yīng)用數(shù)量的比值。
(3)假陽率(FP Rate,F(xiàn)PR),表示被誤判的惡意應(yīng)用與數(shù)據(jù)集中所有惡意應(yīng)用數(shù)量的比值。
(4)假陰率(FN Rate,F(xiàn)NR),表示被誤判的正常應(yīng)用與數(shù)據(jù)集中所有正常應(yīng)用數(shù)量的比值。
(5)準(zhǔn)確率(Accuracy),表示分類器的分類性能。
為了評估所提出模型的性能,使用Weka中集成的6種數(shù)據(jù)挖掘算法:樸素貝葉斯(NB)、K近鄰(K-NN)、Bagging、決策樹(J48)、隨機(jī)樹(RT)和隨機(jī)森林(RF)算法,采用10 折交叉驗(yàn)證方法對4.3.3 小節(jié)中生成的優(yōu)化特征向量集合進(jìn)行分類檢測。實(shí)驗(yàn)以測量指標(biāo)的形式促進(jìn)了對各種機(jī)器學(xué)習(xí)分類器的分類性能的更好了解,這些指標(biāo)包括真陽率(TPR)、假陽率(FPR)、準(zhǔn)確度(Accuracy)、召回率(Recall)、F 值(F-Measure)和ROC曲線(ROC Area)。
將特征向量集合分為均等的10份,輪流將其中的1份用作測試集,剩下的9 份用作訓(xùn)練集,并且對10 次的實(shí)驗(yàn)結(jié)果求平均值。通過實(shí)驗(yàn),可以得出RF 算法的檢測效率最高,接著對RF算法進(jìn)行改進(jìn),將IRF算法集成到Weka 中,對數(shù)據(jù)集進(jìn)行分類檢測。幾種機(jī)器學(xué)習(xí)分類算法的檢測結(jié)果如表5所示。
表5 不同分類器的分類效果對比
從表5 可以看出,使用6 種機(jī)器學(xué)習(xí)分類算法進(jìn)行分類檢測都有較好的準(zhǔn)確率,其中對于惡意軟件檢測能力最弱即TPR值最低的是NB分類器,其針對惡意軟件的檢測率僅為89.1%,而IRF 算法對于惡意軟件的檢測效果最好,檢測精度達(dá)到了98.1%。因此,鑒于本文選擇機(jī)器學(xué)習(xí)分類器的應(yīng)用開銷均相對較低,通過實(shí)驗(yàn)結(jié)果可以表明本文所提出的Android惡意軟件檢測模型是切實(shí)可行的方案,能夠有效提高Android 惡意軟件檢測的有效性和準(zhǔn)確性。
提出的方法在經(jīng)過實(shí)驗(yàn)論證后,與以往的研究方法相比主要有以下幾方面的特點(diǎn):
(1)對比以往對Android 惡意代碼檢測技術(shù)采用的傳統(tǒng)特征,本文在傳統(tǒng)特征的基礎(chǔ)上增加了程序的關(guān)鍵信息等特征,能夠充分發(fā)揮多特征在Android 惡意代碼檢測中所起的作用,提高了對惡意應(yīng)用的識別率。
(2)通過對比幾種常見分類器的分類效果,選取分類效果更好的隨機(jī)森林算法,對其采用加權(quán)投票機(jī)制進(jìn)行改進(jìn),能夠更大程度上提高檢測的精確度。
(3)實(shí)驗(yàn)使用了大量的真實(shí)樣本,使得實(shí)驗(yàn)結(jié)果更有說服力。
(4)通過使用Androguard 中相應(yīng)的函數(shù)以及編寫Python代碼,縮短了樣本特征的提取及向量化時(shí)間。
本文針對目前移動設(shè)備的惡意應(yīng)用不斷增長,給人們帶來了巨大的危害,比如經(jīng)濟(jì)損失或泄露隱私等情況,提出一種利用多特征、基于改進(jìn)隨機(jī)森林算法的Android惡意軟件靜態(tài)檢測模型。模型采用基于行為的靜態(tài)分析技術(shù),提取權(quán)限、四大組件、API調(diào)用以及程序的關(guān)鍵信息如動態(tài)代碼、反射代碼、本機(jī)代碼、密碼代碼和應(yīng)用程序數(shù)據(jù)庫等11 個(gè)類別作為特征屬性,并對屬性采用IG 算法進(jìn)行優(yōu)化選擇,通過對比共選取65個(gè)分類特征,最后先采用有監(jiān)督的機(jī)器學(xué)習(xí)算法對Android程序進(jìn)行檢測分類并比較它們之間的精確度,通過對比選擇精確度最高的RF 算法采用加權(quán)投票機(jī)制進(jìn)行改進(jìn),并將其應(yīng)用于本模型的惡意軟件檢測分類當(dāng)中。通過實(shí)驗(yàn)表明,本文提出的模型相比目前Android 惡意軟件檢測技術(shù)具有較好的檢測效果。
本文提出的Android惡意軟件檢測模型還存在著一些需要改進(jìn)的地方:(1)本文研究采用了權(quán)限、組件、API調(diào)用信息和程序的關(guān)鍵信息作為特征,在下一步工作中將會考慮更多的特征比如敏感函數(shù)對等信息;(2)本文只收集了12 000 個(gè)Android 應(yīng)用程序安裝包,如果能夠收集到更大的數(shù)據(jù)集可以得到更為精確的檢測結(jié)果;(3)下一步考慮結(jié)合動態(tài)檢測技術(shù)來減少惡意軟件的識別率與誤報(bào)率;(4)在分類檢測方面考慮采用深度學(xué)習(xí)等技術(shù)進(jìn)一步提高準(zhǔn)確率。下一步工作將會針對以上不足進(jìn)行研究分析。