歐陽立,蘆天亮
(中國人民公安大學(xué) 信息技術(shù)與網(wǎng)絡(luò)安全學(xué)院,北京 100076)
最近十年,互聯(lián)網(wǎng)尤其是移動互聯(lián)網(wǎng)出現(xiàn)了井噴式發(fā)展,智能移動設(shè)備的數(shù)量急速增長,移動軟件得到了廣泛的推廣和應(yīng)用。目前已經(jīng)有多家科技公司推出了自己為移動智能設(shè)備開發(fā)的操作系統(tǒng),而Android在各種移動智能設(shè)備操作系統(tǒng)中占據(jù)了最大份額,是目前用戶量最大且增長速度最快的移動智能設(shè)備操作系統(tǒng)[1]。Android操作系統(tǒng)是一種基于Linux的操作系統(tǒng),由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā),其源代碼開源,相比于其他智能終端上的操作系統(tǒng),具有完全的開源性,并且Android應(yīng)用市場復(fù)雜多樣,使得Android惡意軟件的數(shù)量快速增長,許多Android惡意軟件帶有惡意代碼,誘導(dǎo)用戶安裝木馬,下載大量新的惡意應(yīng)用,消耗手機(jī)流量,發(fā)送扣費(fèi)短信,造成了嚴(yán)重的安全威脅,其中有些本身不攜帶惡意代碼的Android應(yīng)用軟件,通過申請過多與不當(dāng)?shù)臋?quán)限來獲得相關(guān)信息,實(shí)現(xiàn)其搜集用戶隱私的目的。
Android惡意軟件的檢測技術(shù)主要分為靜態(tài)檢測和動態(tài)檢測[2-3]。靜態(tài)檢測是指在不執(zhí)行應(yīng)用軟件的情況下,判斷應(yīng)用軟件中是否含有惡意代碼,靜態(tài)檢測通過對應(yīng)用軟件進(jìn)行反編譯等方法,快速提取應(yīng)用軟件的靜態(tài)特征并進(jìn)行檢測,缺點(diǎn)是檢測模式的擴(kuò)展性差;動態(tài)檢測是指在Android應(yīng)用軟件執(zhí)行時(shí)識別Android惡意代碼,能夠全面監(jiān)控應(yīng)用行為,準(zhǔn)確率較高,缺點(diǎn)是運(yùn)行時(shí)占用資源較多,效率較低,并且難以檢測出從未出現(xiàn)過的Android應(yīng)用軟件。由于上述問題的存在,機(jī)器學(xué)習(xí)技術(shù)開始在Android惡意軟件檢測領(lǐng)域得到應(yīng)用,機(jī)器學(xué)習(xí)技術(shù)區(qū)別于傳統(tǒng)的分析方法,具有預(yù)測能力強(qiáng)、擴(kuò)展性強(qiáng)的特點(diǎn),避免了傳統(tǒng)分析方法效率低、擴(kuò)展性差等問題[4-5]。
深度學(xué)習(xí)(Deep Learning,DL)區(qū)別于傳統(tǒng)機(jī)器學(xué)習(xí)方法,通過深層非線性網(wǎng)絡(luò)結(jié)構(gòu),組合低層具體特征來形成高層抽象特征表示,進(jìn)而發(fā)現(xiàn)輸入數(shù)據(jù)分布式特征表示,具有從樣本集中學(xué)習(xí)數(shù)據(jù)的本質(zhì)特征的強(qiáng)大能力。深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)作為深度學(xué)習(xí)的深度生成模型之一,得到了廣泛的應(yīng)用。
本文結(jié)合Android應(yīng)用軟件特征,采用基于深度置信網(wǎng)絡(luò)的深度學(xué)習(xí)模型進(jìn)行特征分析:首先結(jié)合Android應(yīng)用軟件來獲取全面的應(yīng)用軟件特征;然后利用深度置信網(wǎng)絡(luò)挖掘高層抽象特征,通過基于深度置信網(wǎng)絡(luò)的深度學(xué)習(xí)模型對Android惡意軟件進(jìn)行檢測。
最初,Android惡意軟件檢測是基于靜態(tài)檢測,通過反匯編來實(shí)現(xiàn)靜態(tài)地檢測Android應(yīng)用軟件。ENCK W等[6]通過反匯編Android應(yīng)用軟件,分析其源代碼來發(fā)現(xiàn)代碼漏洞,YANG W等[7]提出AppContext靜態(tài)檢測框架,AppContext根據(jù)觸發(fā)安全敏感行為的上下文對應(yīng)用程序進(jìn)行分類。動態(tài)檢測技術(shù)通過在沙箱或者真實(shí)環(huán)境下應(yīng)用軟件來獲得信息從而進(jìn)行檢測。DroidScope[8]可以在受保護(hù)的運(yùn)行環(huán)境下動態(tài)檢測應(yīng)用軟件。DINI G等[9]提出動態(tài)檢測框架MADAM,能夠在Android內(nèi)核層和用戶層監(jiān)控應(yīng)用軟件。
對于靜態(tài)檢測和動態(tài)檢測而言,只能人工地生成和更新Android惡意軟件檢測模式,這促使機(jī)器學(xué)習(xí)開始應(yīng)用于Android惡意軟件檢測問題。DroidAPIMiner[5]通過機(jī)器學(xué)習(xí)算法來分析API級別的Android應(yīng)用特征。ZHAO K等[10]提出了基于特征頻率的特征選擇算法。在傳統(tǒng)的機(jī)器學(xué)習(xí)算法中,SVM算法被常用于基于特征選擇的Android惡意軟件檢測[11-12]。由于傳統(tǒng)的機(jī)器學(xué)習(xí)算法通常都是淺層架構(gòu),無法有效地通過關(guān)聯(lián)特征對Android軟件進(jìn)行高層次的表征,因此,研究人員嘗試通過深度學(xué)習(xí)模型進(jìn)行Android惡意軟件檢測[13]。
Android應(yīng)用軟件的特征主要分為靜態(tài)特征和動態(tài)特征,靜態(tài)特征是指在不執(zhí)行應(yīng)用軟件的情況下,使用反編譯等方式提取待分析軟件的特征,主要包括權(quán)限信息和調(diào)用的敏感API信息;動態(tài)特征是指Android應(yīng)用軟件執(zhí)行時(shí)獲取的反映應(yīng)用軟件行為的特征。
相比于動態(tài)分析,靜態(tài)分析所需的系統(tǒng)資源小,速度快,適合大規(guī)模的特征提取,因此本文采用靜態(tài)分析的方法提取特征,并基于靜態(tài)特征構(gòu)造特征集,如圖1所示。提取的特征包括Android應(yīng)用軟件的所請求的權(quán)限和敏感API。
圖1 Android應(yīng)用軟件的特征提取
為了得到Android應(yīng)用軟件特征,對其安裝文件(.apk文件)進(jìn)行解壓,獲得兩個重要的文件,分別為AndroidManifest.xml和classes.dex文件。AndroidManifest.xml文件是系統(tǒng)清單文件,定義了應(yīng)用軟件的權(quán)限、組件等信息,對AndroidManifest.xml文件進(jìn)行解析,得到Android應(yīng)用軟件申請的權(quán)限,例如,android.permission.camera是Android應(yīng)用軟件申請使用照相機(jī)權(quán)限。通過解析AndroidManifest.xml文件,得到了Android應(yīng)用軟件總共120個權(quán)限。通過baksmali工具對classes.dex文件進(jìn)行反編譯解析,可以得知哪些API接口被調(diào)用,例如,chmod是用于改變用戶權(quán)限的敏感API。通過解析classes.dex文件,得到了總共59個敏感API。
通過上述過程,構(gòu)建了總共有179個特征的Android應(yīng)用軟件特征集,每個Android應(yīng)用軟件都對應(yīng)著一個179維的特征向量V={0,1,1,0,…},特征向量每一個維度的值都是二值的,當(dāng)該應(yīng)用軟件包含該特征時(shí),則該維度為1,否則,該維度值為0。
本文提出了基于深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)的Android惡意軟件檢測算法,提取了權(quán)限和敏感API等179個特征,使用深度置信網(wǎng)絡(luò)來構(gòu)建深度學(xué)習(xí)模型,并對Android應(yīng)用軟件進(jìn)行檢測。采用權(quán)限類特征和API類特征可以更為全面地描述Android應(yīng)用,采用DBN網(wǎng)絡(luò)學(xué)習(xí)特征的深層結(jié)構(gòu),可以更好地表征和檢測Android惡意軟件。Android惡意軟件檢測框架如圖2所示。
在目前的深度學(xué)習(xí)理論中,深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)是應(yīng)用較為廣泛的一類深度學(xué)習(xí)框架。深度置信網(wǎng)絡(luò)分為兩部分,底層部分由多層受限玻爾茲曼機(jī)(Restricted Boltzmann Machine,RBM)單元堆疊而成,上層部分為有監(jiān)督的網(wǎng)絡(luò)層,用于微調(diào)整體架構(gòu)。相較于其他深度學(xué)習(xí)框架(循環(huán)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等),DBN算法的優(yōu)勢在于,針對Android應(yīng)用軟件的特征向量的學(xué)習(xí)速度更快,性能更好,因此采用基于DBN的深度學(xué)習(xí)框架對Android惡意軟件進(jìn)行檢測[14-18]。
DBN分為兩部分,一部分由若干RBM堆疊而成,一部分為有監(jiān)督的后向傳播(Back Propagation,BP)網(wǎng)絡(luò),結(jié)構(gòu)如圖3所示。在圖3中,V表示可視層的節(jié)點(diǎn)值向量,H表示隱藏層的節(jié)點(diǎn)值向量,在堆疊的RBM中,除了最底層和最頂層,每一層的RBM中的隱藏層即是上一層RBM的可視層。W為權(quán)值矩陣,用于表示可視層和隱藏層之間的映射關(guān)系。兩層相鄰的RBM之間采用貪心算法,使得權(quán)值矩陣W在初始化時(shí)達(dá)到局部最優(yōu)。V0為底層RBM的初始特征向量,在向上的無監(jiān)督轉(zhuǎn)化過程中,從具體的不易分類的特征向量轉(zhuǎn)化為抽象的易于分類的組合特征向量。RBM網(wǎng)絡(luò)通過調(diào)整自身層內(nèi)的權(quán)值矩陣Wi,使得該層特征向量的映射達(dá)到局部最優(yōu)。而BP網(wǎng)絡(luò)通過有監(jiān)督地訓(xùn)練,微調(diào)DBN網(wǎng)絡(luò)。由于DBN網(wǎng)絡(luò)的主要工作在于訓(xùn)練特征向量的權(quán)重表示,仍然需要通過分類算法對Android應(yīng)用軟件進(jìn)行分類,本文采用支持向量機(jī)(Support Vector Machine,SVM)算法作為模型的分類算法。
由圖3可知,深度學(xué)習(xí)模型的構(gòu)建由無監(jiān)督的預(yù)訓(xùn)練階段和有監(jiān)督的后向傳播階段兩個階段組成。在預(yù)訓(xùn)練階段,若干RBM分層堆疊,組成DBN網(wǎng)絡(luò)的基本框架,兩層相鄰的RBM之間采用貪心算法,使得權(quán)值矩陣W在初始化時(shí)達(dá)到局部最優(yōu),通過對比散度(Contrastive Divergence,CD)算法訓(xùn)練每一層的RBM,在后向傳播階段,BP模塊以有監(jiān)督的方式用標(biāo)記的樣本對DBN網(wǎng)絡(luò)進(jìn)行微調(diào),最后,分類模塊對樣本進(jìn)行分類,結(jié)構(gòu)如圖4所示。
圖4 深度學(xué)習(xí)模型的構(gòu)建
限制玻爾茲曼機(jī)(RBM)由HINTON等提出,由可視單元(visible unit)和隱藏單元(hidden unit)構(gòu)成,若干可視單元構(gòu)成可視層,若干隱藏單元構(gòu)成隱藏層,每個可視單元對應(yīng)可視層的節(jié)點(diǎn)值向量中的一維,每個隱藏單元對應(yīng)隱藏層的節(jié)點(diǎn)值向量中的一維,可視層的節(jié)點(diǎn)值向量和隱藏層的節(jié)點(diǎn)值向量都是二元多維向量,每一維的節(jié)點(diǎn)值取0或1,在可視層和隱藏層之間,可視單元與隱藏單元相互連接,可視層和隱藏層內(nèi)部無單元連接。
RBM本質(zhì)上是一個概率生成模型,其訓(xùn)練過程的核心在于求出一個最符合訓(xùn)練樣本的概率分布,而由于概率分布的決定性因素在于權(quán)值矩陣W,所以RBM的訓(xùn)練目的就是尋找最佳權(quán)值矩陣W。假設(shè)在RBM中,可視層包括N個二值可視單元,隱藏層包括M個二值隱藏單元,設(shè)vi表示可視層中第i個可視單元的值,hj表示隱藏層中第j個隱藏單元的值。給定狀態(tài)(V,H)下的能量定義如式(1)所示,wij表示可視層和隱藏層之間的映射關(guān)系的權(quán)值,為了更好地?cái)M合實(shí)際函數(shù),在能量的定義公式中加入偏置,bi表示可視單元的偏置,cj表示隱藏單元的偏置。
(1)
RBM處于狀態(tài)(V,H)的概率為
(2)
由于同一可視層或隱藏層中的單元無連接,由可視層的節(jié)點(diǎn)值可計(jì)算得隱藏層的節(jié)點(diǎn)值:
(3)
RBM是對稱網(wǎng)絡(luò),所以可以由已知的隱藏層的節(jié)點(diǎn)值計(jì)算得到可視節(jié)點(diǎn)的節(jié)點(diǎn)值:
(4)
式(3)和式(4)中σ(x)=1/(1+exp (-x))。
由于對比散度算法(Contrastive Divergence,CD)精度高,計(jì)算速度快,本文采用CD學(xué)習(xí)算法,用于計(jì)算權(quán)值矩陣W。CD算法利用兩個概率分布的“差異性”來迭代更新權(quán)值,最終達(dá)到收斂?;贑D算法的RBM網(wǎng)絡(luò)自訓(xùn)練過程如算法1。
算法1 基于CD算法的RBM網(wǎng)絡(luò)自訓(xùn)練過程
對于樣本量為N的訓(xùn)練集中的一個特征向量xn(0≤n (1)n=0 (2)將xn傳遞到可視層V0,根據(jù)式(3)計(jì)算隱藏層H0: P(h0j=1|V0)=σ(WjV0) (3)根據(jù)式(4)計(jì)算可視層得到V1: P(v1i=1|H0)=σ(WTiH0) (4)根據(jù)式(3)計(jì)算隱藏層H1: (5)P(h1j=1|V1)=σ(WjV1) (6)對于所有節(jié)點(diǎn)j,更新權(quán)值: Wj←Wj+λ(P(h0j=1|V0)VT0)-P(h1j=1|V1)VT1 若n=N-1,結(jié)束,否則n=n+1,轉(zhuǎn)步驟(2)。 后向傳播(Back Propagation,BP)網(wǎng)絡(luò)通過有監(jiān)督的學(xué)習(xí)方式,與已標(biāo)簽的應(yīng)用軟件進(jìn)行結(jié)果對比,微調(diào)整個DBN網(wǎng)絡(luò)。本文采用的是BP網(wǎng)絡(luò)訓(xùn)練方法,節(jié)點(diǎn)求值函數(shù)選取Sigmod函數(shù)。BP網(wǎng)絡(luò)訓(xùn)練過程如算法2。 算法2 BP網(wǎng)絡(luò)的訓(xùn)練過程 (1)隨機(jī)初始化BP網(wǎng)絡(luò)的參數(shù),讀取RBM網(wǎng)絡(luò)的權(quán)值矩陣W,訓(xùn)練步長初始化為N。 (2)前向計(jì)算每一層的單位節(jié)點(diǎn)值,對第l層的j單位節(jié)點(diǎn),節(jié)點(diǎn)值為ylj(n)=∑Wij(n)yl-1i(n),若神經(jīng)元j在輸出層(l=L),令yLj(n)=οj(n),誤差ej(n)=dj(n)-οj(n),dj為已標(biāo)簽的結(jié)果。 (3)計(jì)算δ,將δ后向傳遞,向下依次微調(diào)權(quán)值。 對于輸出單元: δlj(n)=ej(n)οj(n)[1-οj(n)] 對于隱藏單元: δlj(n)=ylj(n)[1-ylj(n)]∑δl+1k(n)Wl+1kj(n) (4)微調(diào)權(quán)值 Wlji(n+1)=Wlji(n)+ηδljyl-1i(n) Wlji(n+1)=Wlji(n)+ηδljyl-1i(n) 其中,η為學(xué)習(xí)速率。 (5)如果n=N,結(jié)束;否則n=n+1,轉(zhuǎn)步驟(2) DBN網(wǎng)絡(luò)的主要功能是訓(xùn)練特征向量的權(quán)重表示,在訓(xùn)練好DBN網(wǎng)絡(luò)之后,與分類模塊相結(jié)合,共同構(gòu)成了基于DBN網(wǎng)絡(luò)的Android應(yīng)用軟件分類模型。 本文分類模塊的分類算法采用支持向量機(jī)(Support Vector Machine,SVM)算法。SVM算法包括兩個階段:訓(xùn)練和測試。給定訓(xùn)練階段中的正常樣本和惡意樣本,SVM找到超平面,該超平面由法線向量ω和垂直距離b指定,該原點(diǎn)將具有最大邊距γ的兩個類別分開,其中Positive為正常樣本,Negative為惡意樣本,如圖5所示。 圖5 SVM算法 在測試階段,SVM預(yù)測模型會將測試集分為兩類,線性SVM的決策函數(shù)f如式(5)所示 f(x)=〈ω,x〉+b (5) x表示樣本集中的代表樣本的特征向量,當(dāng)f(x)>0,將樣本判定為正常樣本,否則,將樣本判斷為惡意樣本。 本文在Google Play Store共下載得到10 000個 應(yīng)用軟件作為正常樣本集。惡意樣本集樣本數(shù)3 938 個,由兩部分組成,一部分來自Genome Project(http://www.malgenomeproject.org/),計(jì)1 260個,一部分來自VirusTotal(https://www.virustotal.com/),計(jì)2 678個,兩部分共計(jì)3 938個惡意樣本。從樣本集中隨機(jī)選取700個正常樣本和700個惡意樣本,然后將其徹底混合,作為一組數(shù)據(jù),總共選取5組數(shù)據(jù)實(shí)驗(yàn)時(shí),從5組數(shù)據(jù)中選取2組分別作為訓(xùn)練集和測試集。 為了得到基于DBN的深度學(xué)習(xí)網(wǎng)絡(luò)的最優(yōu)參數(shù)(RBM層數(shù)、每層RBM的節(jié)點(diǎn)個數(shù)、CD算法的迭代次數(shù)等),通過實(shí)驗(yàn)來進(jìn)行確定。在實(shí)驗(yàn)中,采用準(zhǔn)確率(Precision)、召回率(Recall)和正確率(Accuracy)三個指標(biāo)來評價(jià)對Android惡意軟件檢測的結(jié)果。表1展示了RBM層數(shù)和每層節(jié)點(diǎn)數(shù)對于檢測效果的影響。 表1 不同深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)的檢測結(jié)果 從表1中可以看出,當(dāng)RBM層數(shù)為2層、每層節(jié)點(diǎn)數(shù)為160時(shí)正確率最高,達(dá)到了96.81%,并且在不同深度學(xué)習(xí)模型結(jié)構(gòu)中,正確率都超過了94%。 將基于DBN的深度學(xué)習(xí)模型與傳統(tǒng)的機(jī)器學(xué)習(xí)模型得到的檢測結(jié)果進(jìn)行比較,結(jié)果如表2所示。 表2 不同機(jī)器學(xué)習(xí)算法檢測結(jié)果 對于大多數(shù)傳統(tǒng)的機(jī)器學(xué)習(xí)算法(Na?ve Bayes、Logistic Regression、KNN、SVM),測試了sigmoid kernel、linear kernel等多種常見的核函數(shù),并選取檢測結(jié)果最佳的數(shù)據(jù)作為傳統(tǒng)機(jī)器學(xué)習(xí)算法的實(shí)驗(yàn)結(jié)果。從表2可以看出,在相同測試集下,DBN算法的正確率比SVM高出3.35%,比Na?ve Bayes高出11.83%,比KNN高出12.26%,比Logistic Regression高出14.38%, 由此可見,基于DBN的深度學(xué)習(xí)模型明顯優(yōu)于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型和機(jī)器學(xué)習(xí)模型,并且由表1可知,即使基于DBN的深度學(xué)習(xí)模型沒有采用最合適的隱層結(jié)構(gòu),其最低正確率也高于94%。 本文通過提取Android應(yīng)用軟件特征,使用深度置信網(wǎng)絡(luò)(DBN)對提取的Android應(yīng)用軟件特征進(jìn)行學(xué)習(xí),從而對惡意軟件進(jìn)行表征,設(shè)計(jì)實(shí)現(xiàn)了一種基于深度置信網(wǎng)絡(luò)的Android惡意軟件檢測方法。首先,對應(yīng)用軟件進(jìn)行特征提取,并構(gòu)建特征向量,本文共提取179個高頻靜態(tài)特征來構(gòu)建特征向量;然后,從樣本集中選擇樣本構(gòu)建訓(xùn)練集對DBN網(wǎng)絡(luò)進(jìn)行訓(xùn)練;最終通過基于DBN網(wǎng)絡(luò)的檢測模型對Android惡意軟件進(jìn)行檢測。從實(shí)驗(yàn)結(jié)果可以看出,基于DBN網(wǎng)絡(luò)的深度學(xué)習(xí)模型明顯優(yōu)于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型和機(jī)器學(xué)習(xí)模型。 本文研究仍然存在一些不足,需要在以后的工作中進(jìn)行改進(jìn)和完善。首先,惡意應(yīng)用樣本量相對較少,采用更大的樣本量可以得到更準(zhǔn)確的結(jié)果;其次,本文提取特征為靜態(tài)特征,若在特征集中加入動態(tài)特征,將會使得結(jié)果更為全面準(zhǔn)確。3.3 BP網(wǎng)絡(luò)
3.4 分類算法
4 實(shí)驗(yàn)結(jié)果及分析
4.1 數(shù)據(jù)集
4.2 深度學(xué)習(xí)網(wǎng)絡(luò)的表現(xiàn)
5 結(jié)論