歐陽立,蘆天亮
(中國人民公安大學 信息技術與網絡安全學院,北京 100076)
最近十年,互聯網尤其是移動互聯網出現了井噴式發展,智能移動設備的數量急速增長,移動軟件得到了廣泛的推廣和應用。目前已經有多家科技公司推出了自己為移動智能設備開發的操作系統,而Android在各種移動智能設備操作系統中占據了最大份額,是目前用戶量最大且增長速度最快的移動智能設備操作系統[1]。Android操作系統是一種基于Linux的操作系統,由Google公司和開放手機聯盟領導及開發,其源代碼開源,相比于其他智能終端上的操作系統,具有完全的開源性,并且Android應用市場復雜多樣,使得Android惡意軟件的數量快速增長,許多Android惡意軟件帶有惡意代碼,誘導用戶安裝木馬,下載大量新的惡意應用,消耗手機流量,發送扣費短信,造成了嚴重的安全威脅,其中有些本身不攜帶惡意代碼的Android應用軟件,通過申請過多與不當的權限來獲得相關信息,實現其搜集用戶隱私的目的。
Android惡意軟件的檢測技術主要分為靜態檢測和動態檢測[2-3]。靜態檢測是指在不執行應用軟件的情況下,判斷應用軟件中是否含有惡意代碼,靜態檢測通過對應用軟件進行反編譯等方法,快速提取應用軟件的靜態特征并進行檢測,缺點是檢測模式的擴展性差;動態檢測是指在Android應用軟件執行時識別Android惡意代碼,能夠全面監控應用行為,準確率較高,缺點是運行時占用資源較多,效率較低,并且難以檢測出從未出現過的Android應用軟件。由于上述問題的存在,機器學習技術開始在Android惡意軟件檢測領域得到應用,機器學習技術區別于傳統的分析方法,具有預測能力強、擴展性強的特點,避免了傳統分析方法效率低、擴展性差等問題[4-5]。
深度學習(Deep Learning,DL)區別于傳統機器學習方法,通過深層非線性網絡結構,組合低層具體特征來形成高層抽象特征表示,進而發現輸入數據分布式特征表示,具有從樣本集中學習數據的本質特征的強大能力。深度置信網絡(Deep Belief Network,DBN)作為深度學習的深度生成模型之一,得到了廣泛的應用。
本文結合Android應用軟件特征,采用基于深度置信網絡的深度學習模型進行特征分析:首先結合Android應用軟件來獲取全面的應用軟件特征;然后利用深度置信網絡挖掘高層抽象特征,通過基于深度置信網絡的深度學習模型對Android惡意軟件進行檢測。
最初,Android惡意軟件檢測是基于靜態檢測,通過反匯編來實現靜態地檢測Android應用軟件。ENCK W等[6]通過反匯編Android應用軟件,分析其源代碼來發現代碼漏洞,YANG W等[7]提出AppContext靜態檢測框架,AppContext根據觸發安全敏感行為的上下文對應用程序進行分類。動態檢測技術通過在沙箱或者真實環境下應用軟件來獲得信息從而進行檢測。DroidScope[8]可以在受保護的運行環境下動態檢測應用軟件。DINI G等[9]提出動態檢測框架MADAM,能夠在Android內核層和用戶層監控應用軟件。
對于靜態檢測和動態檢測而言,只能人工地生成和更新Android惡意軟件檢測模式,這促使機器學習開始應用于Android惡意軟件檢測問題。DroidAPIMiner[5]通過機器學習算法來分析API級別的Android應用特征。ZHAO K等[10]提出了基于特征頻率的特征選擇算法。在傳統的機器學習算法中,SVM算法被常用于基于特征選擇的Android惡意軟件檢測[11-12]。由于傳統的機器學習算法通常都是淺層架構,無法有效地通過關聯特征對Android軟件進行高層次的表征,因此,研究人員嘗試通過深度學習模型進行Android惡意軟件檢測[13]。
Android應用軟件的特征主要分為靜態特征和動態特征,靜態特征是指在不執行應用軟件的情況下,使用反編譯等方式提取待分析軟件的特征,主要包括權限信息和調用的敏感API信息;動態特征是指Android應用軟件執行時獲取的反映應用軟件行為的特征。
相比于動態分析,靜態分析所需的系統資源小,速度快,適合大規模的特征提取,因此本文采用靜態分析的方法提取特征,并基于靜態特征構造特征集,如圖1所示。提取的特征包括Android應用軟件的所請求的權限和敏感API。

圖1 Android應用軟件的特征提取
為了得到Android應用軟件特征,對其安裝文件(.apk文件)進行解壓,獲得兩個重要的文件,分別為AndroidManifest.xml和classes.dex文件。AndroidManifest.xml文件是系統清單文件,定義了應用軟件的權限、組件等信息,對AndroidManifest.xml文件進行解析,得到Android應用軟件申請的權限,例如,android.permission.camera是Android應用軟件申請使用照相機權限。通過解析AndroidManifest.xml文件,得到了Android應用軟件總共120個權限。通過baksmali工具對classes.dex文件進行反編譯解析,可以得知哪些API接口被調用,例如,chmod是用于改變用戶權限的敏感API。通過解析classes.dex文件,得到了總共59個敏感API。
通過上述過程,構建了總共有179個特征的Android應用軟件特征集,每個Android應用軟件都對應著一個179維的特征向量V={0,1,1,0,…},特征向量每一個維度的值都是二值的,當該應用軟件包含該特征時,則該維度為1,否則,該維度值為0。
本文提出了基于深度置信網絡(Deep Belief Network,DBN)的Android惡意軟件檢測算法,提取了權限和敏感API等179個特征,使用深度置信網絡來構建深度學習模型,并對Android應用軟件進行檢測。采用權限類特征和API類特征可以更為全面地描述Android應用,采用DBN網絡學習特征的深層結構,可以更好地表征和檢測Android惡意軟件。Android惡意軟件檢測框架如圖2所示。
在目前的深度學習理論中,深度置信網絡(Deep Belief Network,DBN)是應用較為廣泛的一類深度學習框架。深度置信網絡分為兩部分,底層部分由多層受限玻爾茲曼機(Restricted Boltzmann Machine,RBM)單元堆疊而成,上層部分為有監督的網絡層,用于微調整體架構。相較于其他深度學習框架(循環神經網絡、卷積神經網絡等),DBN算法的優勢在于,針對Android應用軟件的特征向量的學習速度更快,性能更好,因此采用基于DBN的深度學習框架對Android惡意軟件進行檢測[14-18]。
DBN分為兩部分,一部分由若干RBM堆疊而成,一部分為有監督的后向傳播(Back Propagation,BP)網絡,結構如圖3所示。在圖3中,V表示可視層的節點值向量,H表示隱藏層的節點值向量,在堆疊的RBM中,除了最底層和最頂層,每一層的RBM中的隱藏層即是上一層RBM的可視層。W為權值矩陣,用于表示可視層和隱藏層之間的映射關系。兩層相鄰的RBM之間采用貪心算法,使得權值矩陣W在初始化時達到局部最優。V0為底層RBM的初始特征向量,在向上的無監督轉化過程中,從具體的不易分類的特征向量轉化為抽象的易于分類的組合特征向量。RBM網絡通過調整自身層內的權值矩陣Wi,使得該層特征向量的映射達到局部最優。而BP網絡通過有監督地訓練,微調DBN網絡。由于DBN網絡的主要工作在于訓練特征向量的權重表示,仍然需要通過分類算法對Android應用軟件進行分類,本文采用支持向量機(Support Vector Machine,SVM)算法作為模型的分類算法。
由圖3可知,深度學習模型的構建由無監督的預訓練階段和有監督的后向傳播階段兩個階段組成。在預訓練階段,若干RBM分層堆疊,組成DBN網絡的基本框架,兩層相鄰的RBM之間采用貪心算法,使得權值矩陣W在初始化時達到局部最優,通過對比散度(Contrastive Divergence,CD)算法訓練每一層的RBM,在后向傳播階段,BP模塊以有監督的方式用標記的樣本對DBN網絡進行微調,最后,分類模塊對樣本進行分類,結構如圖4所示。

圖4 深度學習模型的構建
限制玻爾茲曼機(RBM)由HINTON等提出,由可視單元(visible unit)和隱藏單元(hidden unit)構成,若干可視單元構成可視層,若干隱藏單元構成隱藏層,每個可視單元對應可視層的節點值向量中的一維,每個隱藏單元對應隱藏層的節點值向量中的一維,可視層的節點值向量和隱藏層的節點值向量都是二元多維向量,每一維的節點值取0或1,在可視層和隱藏層之間,可視單元與隱藏單元相互連接,可視層和隱藏層內部無單元連接。
RBM本質上是一個概率生成模型,其訓練過程的核心在于求出一個最符合訓練樣本的概率分布,而由于概率分布的決定性因素在于權值矩陣W,所以RBM的訓練目的就是尋找最佳權值矩陣W。假設在RBM中,可視層包括N個二值可視單元,隱藏層包括M個二值隱藏單元,設vi表示可視層中第i個可視單元的值,hj表示隱藏層中第j個隱藏單元的值。給定狀態(V,H)下的能量定義如式(1)所示,wij表示可視層和隱藏層之間的映射關系的權值,為了更好地擬合實際函數,在能量的定義公式中加入偏置,bi表示可視單元的偏置,cj表示隱藏單元的偏置。
(1)
RBM處于狀態(V,H)的概率為
(2)
由于同一可視層或隱藏層中的單元無連接,由可視層的節點值可計算得隱藏層的節點值:
(3)
RBM是對稱網絡,所以可以由已知的隱藏層的節點值計算得到可視節點的節點值:
(4)
式(3)和式(4)中σ(x)=1/(1+exp (-x))。
由于對比散度算法(Contrastive Divergence,CD)精度高,計算速度快,本文采用CD學習算法,用于計算權值矩陣W。CD算法利用兩個概率分布的“差異性”來迭代更新權值,最終達到收斂。基于CD算法的RBM網絡自訓練過程如算法1。
算法1 基于CD算法的RBM網絡自訓練過程
對于樣本量為N的訓練集中的一個特征向量xn(0≤n (1)n=0 (2)將xn傳遞到可視層V0,根據式(3)計算隱藏層H0: P(h0j=1|V0)=σ(WjV0) (3)根據式(4)計算可視層得到V1: P(v1i=1|H0)=σ(WTiH0) (4)根據式(3)計算隱藏層H1: (5)P(h1j=1|V1)=σ(WjV1) (6)對于所有節點j,更新權值: Wj←Wj+λ(P(h0j=1|V0)VT0)-P(h1j=1|V1)VT1 若n=N-1,結束,否則n=n+1,轉步驟(2)。 后向傳播(Back Propagation,BP)網絡通過有監督的學習方式,與已標簽的應用軟件進行結果對比,微調整個DBN網絡。本文采用的是BP網絡訓練方法,節點求值函數選取Sigmod函數。BP網絡訓練過程如算法2。 算法2 BP網絡的訓練過程 (1)隨機初始化BP網絡的參數,讀取RBM網絡的權值矩陣W,訓練步長初始化為N。 (2)前向計算每一層的單位節點值,對第l層的j單位節點,節點值為ylj(n)=∑Wij(n)yl-1i(n),若神經元j在輸出層(l=L),令yLj(n)=οj(n),誤差ej(n)=dj(n)-οj(n),dj為已標簽的結果。 (3)計算δ,將δ后向傳遞,向下依次微調權值。 對于輸出單元: δlj(n)=ej(n)οj(n)[1-οj(n)] 對于隱藏單元: δlj(n)=ylj(n)[1-ylj(n)]∑δl+1k(n)Wl+1kj(n) (4)微調權值 Wlji(n+1)=Wlji(n)+ηδljyl-1i(n) Wlji(n+1)=Wlji(n)+ηδljyl-1i(n) 其中,η為學習速率。 (5)如果n=N,結束;否則n=n+1,轉步驟(2) DBN網絡的主要功能是訓練特征向量的權重表示,在訓練好DBN網絡之后,與分類模塊相結合,共同構成了基于DBN網絡的Android應用軟件分類模型。 本文分類模塊的分類算法采用支持向量機(Support Vector Machine,SVM)算法。SVM算法包括兩個階段:訓練和測試。給定訓練階段中的正常樣本和惡意樣本,SVM找到超平面,該超平面由法線向量ω和垂直距離b指定,該原點將具有最大邊距γ的兩個類別分開,其中Positive為正常樣本,Negative為惡意樣本,如圖5所示。 圖5 SVM算法 在測試階段,SVM預測模型會將測試集分為兩類,線性SVM的決策函數f如式(5)所示 f(x)=〈ω,x〉+b (5) x表示樣本集中的代表樣本的特征向量,當f(x)>0,將樣本判定為正常樣本,否則,將樣本判斷為惡意樣本。 本文在Google Play Store共下載得到10 000個 應用軟件作為正常樣本集。惡意樣本集樣本數3 938 個,由兩部分組成,一部分來自Genome Project(http://www.malgenomeproject.org/),計1 260個,一部分來自VirusTotal(https://www.virustotal.com/),計2 678個,兩部分共計3 938個惡意樣本。從樣本集中隨機選取700個正常樣本和700個惡意樣本,然后將其徹底混合,作為一組數據,總共選取5組數據實驗時,從5組數據中選取2組分別作為訓練集和測試集。 為了得到基于DBN的深度學習網絡的最優參數(RBM層數、每層RBM的節點個數、CD算法的迭代次數等),通過實驗來進行確定。在實驗中,采用準確率(Precision)、召回率(Recall)和正確率(Accuracy)三個指標來評價對Android惡意軟件檢測的結果。表1展示了RBM層數和每層節點數對于檢測效果的影響。 表1 不同深度學習網絡結構的檢測結果 從表1中可以看出,當RBM層數為2層、每層節點數為160時正確率最高,達到了96.81%,并且在不同深度學習模型結構中,正確率都超過了94%。 將基于DBN的深度學習模型與傳統的機器學習模型得到的檢測結果進行比較,結果如表2所示。 表2 不同機器學習算法檢測結果 對于大多數傳統的機器學習算法(Na?ve Bayes、Logistic Regression、KNN、SVM),測試了sigmoid kernel、linear kernel等多種常見的核函數,并選取檢測結果最佳的數據作為傳統機器學習算法的實驗結果。從表2可以看出,在相同測試集下,DBN算法的正確率比SVM高出3.35%,比Na?ve Bayes高出11.83%,比KNN高出12.26%,比Logistic Regression高出14.38%, 由此可見,基于DBN的深度學習模型明顯優于傳統的神經網絡模型和機器學習模型,并且由表1可知,即使基于DBN的深度學習模型沒有采用最合適的隱層結構,其最低正確率也高于94%。 本文通過提取Android應用軟件特征,使用深度置信網絡(DBN)對提取的Android應用軟件特征進行學習,從而對惡意軟件進行表征,設計實現了一種基于深度置信網絡的Android惡意軟件檢測方法。首先,對應用軟件進行特征提取,并構建特征向量,本文共提取179個高頻靜態特征來構建特征向量;然后,從樣本集中選擇樣本構建訓練集對DBN網絡進行訓練;最終通過基于DBN網絡的檢測模型對Android惡意軟件進行檢測。從實驗結果可以看出,基于DBN網絡的深度學習模型明顯優于傳統的神經網絡模型和機器學習模型。 本文研究仍然存在一些不足,需要在以后的工作中進行改進和完善。首先,惡意應用樣本量相對較少,采用更大的樣本量可以得到更準確的結果;其次,本文提取特征為靜態特征,若在特征集中加入動態特征,將會使得結果更為全面準確。3.3 BP網絡
3.4 分類算法

4 實驗結果及分析
4.1 數據集
4.2 深度學習網絡的表現


5 結論