摘要:針對Android 惡意應用泄露用戶隱私以及造成財產(chǎn)損失等問題,提出了一種基于隨機森林的惡意應用檢測模型。通過批量反向Android 應用,依據(jù)函數(shù)調(diào)用圖獲取其實際使用權(quán)限組合,建立應用特征向量庫,結(jié)合常用的樸素貝葉斯、K- 近鄰以及隨機森林等不同學習方法,建立不同方法的Android 惡意應用檢測模型。實驗結(jié)果表明,基于隨機森林的檢測模型對應用的識別準確性更高,準確率達90% 以上。同已有研究相比,具有代價低、準確性高、普適性好等特點。
0 引言
近年來,智能手機迎來爆發(fā)式的增長,極大方便了人們的生活,成為不可或缺的生活必需品。當前市場主流的智能手機操作系統(tǒng)為iOS 以及Android 系統(tǒng)。據(jù)2017 年年末統(tǒng)計,Android系統(tǒng)的市場占有率為86.1%,而iOS 的市場占有率約13.2%。由于Android 手機操作系統(tǒng)的開放開源特性,吸引了越來越多的應用程序開發(fā)人員,其應用程序種類以及數(shù)量都呈現(xiàn)出爆發(fā)式的增長,但是同時也成為惡意應用的聚集區(qū)。惡意應用程序通過盜取用戶隱私信息或者植入惡意代碼等方式攻擊用戶,造成用戶隱私泄露與財產(chǎn)損失。因此,控制檢測惡意應用的影響意義十分巨大,對Android 惡意應用的檢測方法研究成為當前研究熱點之一。
針對上述問題,本文提出了一種基于隨機森林方法的Android 惡意應用檢測方法模型,通過反向等手段獲取應用程序的實際調(diào)用權(quán)限,并利用上述獲取到的系統(tǒng)權(quán)限及其組合權(quán)限等作為待檢測應用特征,通過使用樸素貝葉斯方法、K- 近鄰方法以及隨機森林方法等算法學習惡意應用的特性,構(gòu)建針對惡意應用的分類器,對比分析不同的方法分類器的優(yōu)劣。
本文剩余部分將按照如下形式組織。第一部分充分調(diào)研當前針對惡意應用檢測的國內(nèi)外研究現(xiàn)狀,第二部分介紹本文采用的關鍵算法與技術(shù),第三部分進行分類器構(gòu)建過程的詳細設計與實驗,第四部分對分類器檢測效果分析對比,并對實驗分類結(jié)果進行系統(tǒng)分析。最后總結(jié)本文并對未來研究方向進行展望。
1 國內(nèi)外研究現(xiàn)狀
當前對Android 惡意代碼的檢測方式主要包括基于特征碼匹配的方式以及基于行為的方式。其中,基于特征碼的檢測方式需要將待測應用的特征碼去匹配惡意應用特征碼庫,根據(jù)匹配的情況來判斷是否是惡意應用。該種方式需要維護一個巨大的特征庫,維護成本高,因此,通常只有360 等安全企業(yè)通過惡意特征庫來鑒別一個應用是否為惡意應用?;谛袨榈臋z測方式又分為靜態(tài)檢測方式與動態(tài)檢測方式,依靠學習惡意應用的靜態(tài)特性與動態(tài)行為來判斷待檢應用是否為惡意應用。這種方式可以檢測未知惡意應用,并且不需要維護特征庫。靜態(tài)檢測方式可以通過解析源碼獲取特征來檢測應用,無需運行應用,效率極高。而動態(tài)檢測則通過檢測應用運行時的行為特征來判斷應用類別,該種方式檢測效率較低且行為特征獲取的難度較大。
雖然該研究領域研究時間不長,但國內(nèi)外已經(jīng)存在眾多針對惡意應用檢測的研究成果。針對惡意代碼的不同特性,Schultz 等人提出使用多種分類算法識別惡意應用的基礎理論,開創(chuàng)了數(shù)據(jù)挖掘技術(shù)用于惡意應用檢測的先河。在此基礎上,Liu 等人提出了一種基于SVM 的Android 惡意應用檢測方法,將應用的Manifest文件分析作為特征,使用SVM 算法對應用進行分類識別,取得了較高的識別準確率,但是對具有組合惡意特征的應用識別率較低;Akanksha Sharma 等人通過分析應用程序的非正常API 調(diào)用,提出了一種基于敏感API 的檢測模型,該方法從敏感API 的角度判斷惡意應用,準確率不高。
國內(nèi)對該領域的研究起步較晚,但是也取得了很多研究成果。楊歡等人提出了一種結(jié)合靜態(tài)分析與動態(tài)特征的多特征的惡意代碼檢測方法,設計了一個三層混合綜合算法分類器來評判Android 應用惡意行為,該方法檢測精度較高,但是由于提取動態(tài)特征時的代價高,且不能識別新惡意特征組合;王菲飛使用惡意代碼特征值匹配的方式實現(xiàn)了Android 惡意應用的檢測,其識別的準確性依賴于特征碼庫的豐富性與多樣性;邵舒迪提出了基于權(quán)限和API 特征結(jié)合的Android 惡意軟件檢測方法,將APK 文件的權(quán)限作為特征,通過決策樹分類法實現(xiàn)了惡意軟件的甄別檢測,針對具有單一惡意特征及敏感API 的應用,檢測準確率達90%;劉智偉等人通過對應用執(zhí)行過程中統(tǒng)計調(diào)用的API 資源進行相應的權(quán)限檢查,通過監(jiān)控應用是否連續(xù)調(diào)用敏感API 來判斷應用是否為惡意應用,該方式檢測速度慢且容易出現(xiàn)誤判的情況。
已有的檢測研究方法大都基于敏感權(quán)限、API 調(diào)用、特征碼等應用特性,通過分類來實現(xiàn)惡意應用檢測研究。但是這些研究具有檢測速度慢、代價高,針對具有單一明顯敏感權(quán)限、API 的惡意應用識別準確率高但對常規(guī)權(quán)限組合產(chǎn)生危險權(quán)限的惡意應用檢測準率不高等問題。因此,本文在上述研究的基礎上,采用易于采集應用權(quán)限及其組合作為特性,通過多種機器學習方法進行學習分類,選擇檢測兼具高精度與快速的機器學習方法,以充分利用應用的靜態(tài)特性來提升檢測判別準確率與速度。
2 惡意應用檢測關鍵算法技術(shù)
獲取惡意應用程序的關鍵特性是判斷程序是否為惡意應用的基礎,而其中對權(quán)限的濫用最能直觀地反應程序是否為惡意應用。本節(jié)將說明如何獲取應用的上述特性以及檢測判別方法。
2.1 基于權(quán)限檢測原理及權(quán)限獲取技術(shù)
通常,Android 系統(tǒng)權(quán)限安全級別分為四級:正常、危險、簽名以及系統(tǒng)。Android 操作系統(tǒng)對上述四種權(quán)限分別采用了不同的認證方式,在應用的Manifest.xml 文件中進行配置聲明?!罢!睓?quán)限只需要在聲明即可使用,“危險”權(quán)限則需要用戶人工確認,“簽名”以及“系統(tǒng)”權(quán)限則需要系統(tǒng)的ROOT 管理員權(quán)限。為了有效保護系統(tǒng)安全以及用戶隱私等,良性應用不會主動申請“危險”“系統(tǒng)”權(quán)限,而惡意應用為達到入侵用戶隱私等目的,則需要上述權(quán)限。因此,可以依據(jù)應用程序所申請的權(quán)限的種類來評估其惡意性。
單個危險權(quán)限:直接申請此類權(quán)限代表應用程序具有非常高的危險性,因此,應用程序基本都不會單獨申請該類權(quán)限。表1 總結(jié)了Android 系統(tǒng)中的單一危險權(quán)限,這類權(quán)限均屬于“危險”“簽名”以及“系統(tǒng)”級別的權(quán)限。
表1 Android 系統(tǒng)的危險權(quán)限表
惡意應用使用此類權(quán)限則極容易被發(fā)現(xiàn),因此,惡意應用為了規(guī)避系統(tǒng)自身檢測很少去直接申請這類敏感危險權(quán)限。因此,惡意應用通過申請大量的常規(guī)權(quán)限,那么通過組合這些常規(guī)權(quán)限,實現(xiàn)惡意操作的可能性就更高,形成對用戶Android 系統(tǒng)的攻擊。通過來自某移動應用安全平臺的數(shù)據(jù),分析了幾組多個權(quán)限危險組合,如下表2 所示。
表2 Android 系統(tǒng)多個權(quán)限的危險組合示例表
表2 中的權(quán)限組合可以實現(xiàn)對Android 系統(tǒng)的攻擊,同系統(tǒng)核心權(quán)限相比,每組危險組合權(quán)限具有常規(guī)的權(quán)限組成,例如接收/ 發(fā)送短信等,具有隱蔽性的特征;但是相比良性應用,惡意應用通常申請更多的敏感權(quán)限。由于Android系統(tǒng)開放開源特性,為了方便程序的開發(fā)與維護,經(jīng)常會出現(xiàn)過度聲明大量權(quán)限的情況,這對于基于權(quán)限的惡意程序檢測造成了一定的難度。因此,在已有的基于權(quán)限的惡意應用判別研究基礎之上,通過對APK 文件進行逆向,以Manifest.xml 文件中聲明的組件為起始搜索點,建立對應的函數(shù)調(diào)用圖,并依據(jù)構(gòu)建的Psout 提供的API- 權(quán)限映射庫,找出應用程序?qū)嶋H使用的權(quán)限組合,有效避免了過度聲明權(quán)限對惡意應用判定產(chǎn)生的影響。
2.2 分類器學習方法
惡意程序的檢測識別屬于數(shù)據(jù)分類問題。問題的解決需要兩步過程:第一步, 建立一個模型,描述預先的數(shù)據(jù)集或概念集。通過分析由屬性描述的樣本(或?qū)嵗?、對象等)來?gòu)造模型,而模型的構(gòu)造需要一定算法來進行學習。目前機器學習方法種類較多,不同的機器學習算法具有不同的特點,因此,本文基于已有研究所采用的方法,分別使用樸素貝葉斯算法、KNN算法以及隨機森林方法對惡意應用的特征進行學習檢測。
2.2.1 樸素貝葉斯算法
樸素貝葉斯方法(Naive Bayesian Model,NBC)是一種構(gòu)建分類器的簡單方法。首先利用訓練數(shù)據(jù)集來構(gòu)造一棵決策樹,一旦樹建立起來,它就可為未知樣本產(chǎn)生一個分類。在分類問題中使用決策樹模型有很多優(yōu)點,決策樹便于使用,而且高效;根據(jù)決策樹可以很容易地構(gòu)造出規(guī)則,而規(guī)則通常易于解釋和理解;決策樹模型的另外一大優(yōu)點就是可以對有許多屬性的數(shù)據(jù)集構(gòu)造決策樹。
構(gòu)建的分類器模型會依據(jù)屬性值判斷測試樣本的類別概率,并給出概率最大的類標簽。樸素貝葉斯的優(yōu)勢在于只需要少量的訓練數(shù)據(jù)便可以估計出必要的參數(shù)。對于一個分類問題,給定樣本的特征向量x,那么在樣本類別屬于y的概率如公式(1) 所示。
2.2.2 KNN 算法
KNN(k-Nearest Neighbor,K 近鄰) 算法是通過測量不同特征值之間距離進行分類。其基本思路是:如果一個樣本在特征空間中的k 個最相似( 即特征空間中最鄰近) 的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別,其中k 通常是不大于20 的整數(shù)。KNN 算法中,所選擇的鄰居都是已經(jīng)正確分類的對象。該方法在定類決策上只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。在KNN 中,通過計算對象間距離來作為各個對象之間的非相似性指標,避免了對象之間的匹配問題,在這里距離一般使用歐氏距離或曼哈頓距離,如公式(3)(4) 所示。
此外,KNN 算法通過依據(jù)k 個對象中占優(yōu)的類別進行決策,而不是單一的對象類別決策。其算法可以描述為:①計算測試數(shù)據(jù)與各個訓練數(shù)據(jù)之間的距離;②按照距離的遞增關系進行排序;③ 選取距離最小的K 個點;④確定前K 個點所在類別的出現(xiàn)頻率;⑤返回前K 個點中出現(xiàn)頻率最高的類別作為測試數(shù)據(jù)的預測分類。
2.2.3 隨機森林算法
隨機森林算法(Random Forest,簡稱RF) 是一種擁有廣泛的應用前景的分類算法,從市場營銷到醫(yī)療保健保險,既可以用來做市場營銷模擬的建模,統(tǒng)計客戶來源,保留和流失,也可用來預測疾病的風險和病患者的易感性。隨機森林分類器構(gòu)建依據(jù)自助法(bootstrap)重采樣技術(shù),通過從原始訓練樣本集S 中隨機有放回的重復選取k 個樣本大小為的子樣本集合,然后根據(jù)上述的自助樣本集合來建立k 棵分類樹,這些分類樹在一起組成具有分類回歸能力的隨機森林。其中,測試樣本的輸出結(jié)果取決于k 棵分類樹每種分類結(jié)果比例的大小。隨機森林回歸本質(zhì)上是決策樹回歸算法的改進,每棵決策樹由一個獨立抽取的樣本子集合建立,并且每棵決策樹具有相同的分布,誤差由所有決策樹的分類回歸能力與它們之間的相關性決定。在分裂節(jié)點時,隨機選擇特征并比較不同特征下的分裂誤差,選擇誤差最小的特征作為節(jié)點分裂特征。一棵決策樹的分類回歸能力有限,但隨機產(chǎn)生大量決策樹后,測試樣本可以通過每一個樹的分類回歸結(jié)果統(tǒng)計后選擇比例最大的結(jié)果作為輸出值。圖1 為一個典型的隨機森林原理圖。
圖1 隨機森林原理圖
3 檢測模型設計與實驗
本文設計的基于應用特征的檢測方法流程如圖2 所示,分類模型的構(gòu)建過程主要分為三步:第一步通過批量對應用程序APK 文件進行逆向工程,建立每個程序的函數(shù)調(diào)用圖,并依據(jù)所構(gòu)建的Psout 提供的API- 權(quán)限映射庫,找出應用程序?qū)嶋H使用的權(quán)限組合,作為應用程序的特征數(shù)據(jù),形成樣本數(shù)據(jù)集合;第二步對獲取的數(shù)據(jù)進行預處理之后,將數(shù)據(jù)集分為訓練集與測試集,將訓練集合使用不同的機器學習方法訓練構(gòu)建分類模型;最后使用測試集合檢驗分類模型的準確性。
圖2 Android 惡意應用檢測器構(gòu)建測試流程圖
3.1 樣本特征集合的構(gòu)建
為了保證應用程序樣本的隨機性與真實性,本文從VirusShare 安全網(wǎng)站惡意應用庫以及360 安全應用商店分別下載惡意應用集合( 包含600 個樣本) 以及良性應用集合( 包含1400個樣本) 作為樣本應用程序。分別對兩組樣本使用反編譯工具apktool[15] 的aapt 命令進行批量反編譯和自寫腳本app_feature_out.py ( 依據(jù)Manifest.xml 建立權(quán)限調(diào)用追蹤圖,并結(jié)合Psout 輸出實際調(diào)用權(quán)限) 輸出應用程序樣本的權(quán)限組合,分別得到惡意樣本特征集合與良性樣本特征集合。
3.2 樣本集合的預處理與分類器學習
在進行分類器的學習之前,需要預先對樣本的特征進行數(shù)據(jù)化形式處理。通常以是否具有某個權(quán)限為基本單位,單個應用樣本特征向量如下所示。
通過隨機工具將良性應用特征集合與惡意應用特征集合隨機混洗,得到一組樣本特征集合。如圖2 所示,在構(gòu)建不同類型的分類器時,使用交叉驗證的方法來驗證分類器的準確性,因此需選擇大約4/5 樣本(1600條) 作為訓練樣本,剩余1/5 樣本(400 條) 作為測試樣本。
3.3 不同方法分類器性能的對比與分析
本文使用分類準確率Accuracy, 真正率TPR以及真負率FPR 來作為分類器的評價指標,公式分別如下(5)~(7) 所示。
其中,TP 是測試樣本中能夠正確分類的良性樣本數(shù)量;TN 是測試樣本中正確分類的惡意樣本的數(shù)量;FN 是測試樣本中誤分類為惡意樣本的良性樣本數(shù)量;FP 是測試樣本中誤被分類為良性樣本的惡意樣本。
將訓練樣本集合(1600 條數(shù)據(jù)) 分別使用樸素貝斯分類算法、KNN 算法以及隨機森林方法進行學習。本文使用Python 以及相關工具包實現(xiàn)了三種算法的學習程序,并使用訓練集合學習構(gòu)建了三種不同的分類器,下表3 及圖3 是樸素貝葉斯、KNN 以及隨機森林訓練方法分類器對訓練集合的分類效果( 即學習擬合的效果)。
表3 不同機器學習方法訓練效果表
圖3 不同學習方法下的訓練效果圖
從圖3 以及表3 可以看出,已有研究采用的樸素貝葉斯方法、K 近鄰算法以及隨機森林算法均具有較好的分類準確率,分類準確率可達80% 以上。而三種分類器中,基于隨機森林的分類器效果最佳,其整體訓練分類準確率、真正率以及真負率指標均高于其他方法構(gòu)建的分類器效果。從表3 可以看出,良性樣本的分類正確率普遍高于惡意樣本的分類正確率,其原因可能有兩點:一是訓練樣本中的良性樣本的數(shù)量遠大于惡意樣本,因此分類器將“偏好”良性樣本;二是某些特殊惡意應用程序樣本能夠“躲避”靜態(tài)特征的檢測,導致惡意樣本的分類正確率偏低。
4 實驗結(jié)果分析
上文中通過多種不同機器學習方法建立了不同的分類模型,其中隨機森林分類器優(yōu)于其他學習方法的分類器。在訓練集合中,其整體分類準確率分別比樸素貝葉斯方法以及KNN 方法高10% 及7%。因此,需要進一步驗證并分析上文建立的隨機森林分類器的準確性與適用性。
4.1 測試集合上分類準確率驗證
為充分驗隨機森林分類模型的準確性,實驗采用5 倍交叉驗證的方法,使用剩余的400 條特征樣本來驗證模型的準確性與適用性。表4 是測試集在隨機森林分類器下的分類結(jié)果統(tǒng)計。
表4 測試樣本集在隨機森林分類器下分類表
從表4 可以看出,在測試樣本集(400 條數(shù)據(jù))下,基于隨機森林的惡意應用分類器的檢測準確率超過90%,略微低于其在訓練集合上的分類效果,說明該分類器可以有效地對應用程序類型進行檢測,進一步驗證了所構(gòu)建的分類器的有效性。造成在測試集合上分類精準度、TPR以及TNR 精度略低于在訓練集分類精度的原因有兩點:一是在訓練樣本集合上會針對訓練樣本不斷反復訓練;二是受限于數(shù)據(jù)規(guī)模集合限制,在有限的數(shù)據(jù)集合下,訓練集合與測試集合的分布可能存在一定的差異,在訓練集合上分類精度通常均比測試樣本分類精度高。
4.2 檢測模型中應用特征重要性分析
由于基于隨機森林方法的分類器是由大量的分類決策樹組合而成,其通過“森林”中的分類樹進行投票選擇進行分類。在本文中的分類器中,主要由以下兩類決策樹組成,如下圖4所示。
圖4 惡意應用檢測分類器中的兩種分類樹:(a) 非系統(tǒng)權(quán)限組合下的判別分類樹 (b) 危險權(quán)限下的判別樹
本文的分類器中大部分的決策樹屬于(a) 類型,即通過對非系統(tǒng)權(quán)限組合的決策來判別應用的類型。實驗結(jié)果表明,表1 中所列舉的系統(tǒng)危險權(quán)限,在所有樣本集合中僅存在8 個應用(0.8%) 擁有直接調(diào)用該類系統(tǒng)的權(quán)限,且均為惡意應用,進一步表明當前的大部分惡意應用的隱蔽性,通過調(diào)用多種非系統(tǒng)權(quán)限的常規(guī)權(quán)限組合來實現(xiàn)惡意攻擊的目的,并且同時保持隱蔽性以防止被常規(guī)檢測方法識別。表5 統(tǒng)計了訓練測試集合中最常用的權(quán)限組合情況下,判斷該應用是否為惡意應用的置信度。
表5 惡意應用常用權(quán)限組合置信度統(tǒng)計
在表5 中的每種非系統(tǒng)權(quán)限組合情況下,若某應用具備該權(quán)限組合,其屬于惡意應用的概率達80% 以上,進一步說明這些權(quán)限組合的危險性。從表5 中看出,INTERNET 權(quán)限幾乎出現(xiàn)在每一項權(quán)限組合中,因此,可以在關聯(lián)分析時將其去除, 突出READ_CONTACTS、SEND_SMS/RECV_SMS 等敏感非系統(tǒng)權(quán)限在檢測過程中的重要性,以提升隨機森林檢測模型的檢測準確度。
同已有研究相比,該方法在已有研究的基礎上,同使用動態(tài)執(zhí)行特征的監(jiān)測方法相比,對惡意應用的檢測準確率沒有降低的情況下,降低了惡意應用檢測代價;同時,與僅利用權(quán)限特征的檢測方法相比,該方法提升了檢測準確率(90%) 且更具普適性( 可檢測常規(guī)權(quán)限組合形成的惡意權(quán)限)。
5 結(jié)語
針對Android 惡意應用造成嚴重隱私泄露與財產(chǎn)損失的普遍問題,在已有研究的基礎之上,本文提出并實現(xiàn)了基于隨機森林的Android 惡意應用檢測模型,可有效地判別應用的類別。該檢測模型基于應用的靜態(tài)特征,以實際使用權(quán)限作為特征,采用隨機森林學習方法,實現(xiàn)對Android 應用快速低成本判別。但是,由于某些惡意應用可規(guī)避靜態(tài)特征檢測,而動態(tài)特征檢測速度慢代價高,因此,未來將探索如何構(gòu)建Android 應用的全面有效的特征向量,以進一步提升檢測模型的準確率與適用性。
(為便于排版,已省去原文注釋)
作者 >>>
孫強強,研究生,工程師,主要研究方向為網(wǎng)絡安全研究與管理。
網(wǎng) 絡 強 國 建 設 的 思 想 庫
—— 安 全 產(chǎn) 業(yè) 發(fā) 展 的 情 報 站 ——
創(chuàng) 新 企 業(yè) 騰 飛 的 動 力 源