基於深度學習的安卓惡意應用檢測----------android manfest.xml + run time opcode, use 深度置信網絡(DBN)

基於深度學習的安卓惡意應用檢測
from:http://www.xml-data.org/JSJYY/2017-6-1650.htm
蘇志達, 祝躍飛, 劉龍    
摘要: 針對傳統安卓惡意程序檢測技術檢測準確率低,對採用了重打包和代碼混淆等技術的安卓惡意程序沒法成功識別等問題,設計並實現了DeepDroid算法。首先,提取安卓應用程序的靜態特徵和動態特徵,結合靜態特徵和動態特徵生成應用程序的特徵向量;而後,使用深度學習算法中的深度置信網絡(DBN)對收集到的訓練集進行訓練,生成深度學習網絡;最後,利用生成的深度學習網絡對待測安卓應用程序進行檢測。實驗結果代表,在使用相同測試集的狀況下,DeepDroid算法的正確率比支持向量機(SVM)算法高出3.96個百分點,比樸素貝葉斯(Naive Bayes)算法高出12.16個百分點,比 K最鄰近( KNN)算法高出13.62個百分點。DeepDroid算法結合了安卓應用程序的靜態特徵和動態特徵,採用了動態檢測和靜態檢測相結合的檢測方法,彌補了靜態檢測代碼覆蓋率不足和動態檢測誤報率高的缺點,在特徵識別的部分採用DBN算法使得網絡訓練速度獲得保證的同時還有很高的檢測正確率。
關鍵詞: 安卓    惡意軟件檢測    惡意代碼分析    深度學習    
Android malware application detection using deep learning
SU Zhida, ZHU Yuefei, LIU Long     
Abstract: The traditional Android malware detection algorithms have low detection accuracy, which can not successfully identify the Android malware by using the technologies of repacking and code obfuscation. In order to solve the problems, the DeepDroid algorithm was proposed. Firstly, the static and dynamic features of Android application were extracted and the Android application features were created by combining static features and dynamic features. Secondly, the Deep Belief Network (DBN) of deep learning algorithm was used to train the collected training set for generating deep learning network. Finally, untrusted Android application was detected by the generated deep learning network. The experimental results show that, when using the same test set, the correct rate of DeepDroid algorithm is 3.96 percentage points higher than that of Support Vector Machine (SVM) algorithm, 12.16 percentage points higher than that of Naive Bayes algorithm, 13.62 percentage points higher than that of K-Nearest Neighbor ( KNN) algorithm. The proposed DeepDroid algorithm has combined the static features and dynamic features of Android application. The DeepDroid algorithm has made up for the disadvantages that code coverage of static detection is not enough and the false positive rate of dynamic detection is high by using the detection method combined dynamic detection and static detection. By using the DBN algorithm in feature recognition, the proposed DeepDroid algorithm has guaranteed high network training speed and high detection accuracy at the same time.
Key words: Android    malware detection    malicious code analysis    deep learning    
0 引言

Android做爲當前最爲流行的移動智能操做系統,設備和用戶數量龐大,應用程序豐富,其安全性受到了普遍關注。並且移動設備與用戶的真實身份密切相關,隨着移動設備的智能化,移動設備中包含的用戶位置信息、社會關係、隱私數據等敏感信息愈來愈多,使其安全問題更顯突出。來自TrustGo公司的分析報告顯示,GooglePlay上有3.15%的應用可能泄露用戶隱私或者存在惡意行爲,而國內知名的91應用市場這一比例則爲19.7%。因我國Android用戶沒法直接從GooglePlay下載和安裝應用,致使了大量管理混亂的第三方應用市場存在,對於Android設備的安全形成了嚴重威脅。php

隨着移動智能終端的高速發展,手機惡意軟件的不斷涌現已經成爲亟待解決的安全問題。2009年11月,Android平臺上發現了首個間諜程序Mobile Spy,該程序能夠記錄用戶的鍵盤輸入信息併發送至攻擊者郵箱,還能夠視頻監控用戶操做。2010年8月,Android平臺出現了首個木馬程序FakePlayer,攻擊者能夠利用該程序控制用戶設備不斷髮送短信開通高額收費服務。2011年12月,出現了首個惡意程序Carrier IQ,該程序可以實時監控用戶設備狀態,記錄用戶位置信息,靜默收集敏感信息,並獲取設備管理員權限[1]。以後,隨着Android設備的普遍普及,Android平臺的惡意程序也出現了爆發式增加。來自360的安全報告顯示,2011年至2015年Android惡意程序樣本數量和受感染人次的發展迅速[2],2011年時惡意程序樣本數量爲0.5萬個,受感染人次爲489萬,而2014年整年監控到的惡意程序樣本已經達326.0萬個,共有3.19億人次被感染,2015年這一數據增加5.7倍,整年截獲樣本數達到1 874.0萬個,累計3.7億人次被感染,惡意應用程序已經成爲Android智能終端的最主要安全威脅。前端

隨着惡意代碼的進化,基於特徵和規則檢測方法的侷限性日益突出。在靜態分析和動態分析的方法中,有研究成果使用了機器學習技術。2009年,Schimidt等[3]使用靜態分析方法獲取函數調用特徵,對Symbian和Android系統的應用程序進行基於分類算法的惡意代碼檢測;Shabtai等[4]提出基於主機的惡意Android應用檢測框架Andromaly,經過從移動端獲取多種特徵和行爲記錄來訓練分類器,以完成對應用程序的分類。Burguera等[5]使用動態方法提取系統調用特徵,應用K-means聚類算法區分基於同一應用程序改寫的惡意代碼和非惡意代碼。android

深度學習(DeepLearning, DL)是近年來出現的機器學習領域方法[6]。深度學習經過學習深層非線性網絡結構,實現複雜函數逼近,表徵輸入數據分佈式表示,展示從樣本集中學習數據集本質特徵的強大能力。深度學習與經典神經網絡的區別在於:1) 強調模型結構的深度, 一般有3層、5層,甚至10多層的隱層節點; 2) 突出特徵學習的重要性,逐層訓練特徵,將樣本在原空間的特徵表示逐層變換到新特徵空間,使分類或預測更加準確。git

DeepLearning的主要思想是把學習結構(learning hierarchy)看做是一個網絡(network),無監督學習用於每一層網絡的pre-train;每次用無監督學習只訓練一層,並將其訓練結果做爲其更高(更抽象)一層的輸入;用有監督學習去調整全部層。最終,構建一個深度有監督學習的分類器,如神經網絡分類器,或構建一個深度生成模型,如深度玻爾茲曼機(Deep Boltzmann Machine, DBM)[7]和深度置信網絡(Deep Belief Network, DBN)。github

深度學習的優點在於它是具備多層非線性映射的深層結構,能夠完成複雜的函數逼近。此外深度學習理論上能夠獲取分佈式表示,便可經過逐層學習算法獲取輸入數據的主要驅動變量[8]。經過深度學習的優點主要表如今非監督預訓練算法中,經過生成性訓練避免因網絡函數表達能力過強而出現的過擬合狀況。因爲單層計算能力有限,深度學習一般採用多層映射單元提取主要的結構信息[9]算法

基於上述緣由, 本文結合動態特徵和靜態特徵,採用深度學習的算法進行安卓代碼特徵分析:一方面結合靜態特徵和動態特徵來獲取完整的應用程序信息;另外一方面利用深度學習的深層學習機制自動挖掘深層特徵,經過這種動靜結合的深度學習系統對安卓應用進行檢測。編程

1 特徵提取

Android應用程序的行爲信息分爲靜態信息和動態行爲。任何針對應用程序的分析手段都依賴於對應用程序行爲信息的獲取。本章從靜態信息和動態行爲兩個方面,分別設計了自動化程序行爲信息提取方法。首先針對靜態信息,綜合優化現有提取手段,給出了標準化提取流程和方法;而後重點闡述了對動態行爲的提取,提出了一種基於虛擬化技術的動態行爲提取技術,實現了對內核指令、系統調用、Dalvik指令等多個層次的程序行爲特徵提取。安全

1.1 靜態特徵提取

Android應用程序靜態信息的獲取是指在不執行應用程序的狀況下,使用逆向工程手段,提取待分析程序的靜態特徵。本文中主要是對其AndroidManifest.xml文件的獲取和解析。AndroidManifest.xml文件定義了多種標籤來聲明應用程序的基本信息、組件、權限等,本文獲取的靜態信息如表 1所示。網絡

表 1 靜態信息列表 Table 1 Static information list

現有靜態信息提取方法主要爲使用APKTool工具或aapt(android asset packaging tool)工具。aapt工具是Android SDK提供的工具之一,不解包APK(AndroidPackage,Android安裝包)文件,能夠對資源文件和APK文件的基本信息進行管理,提取AndroidManifest.xml文件中的信息。aapt工具的執行效率遠高於apktool,故本文以aapt工具爲基礎進行靜態信息的提取。架構

靜態信息的提取流程如圖 1所示。在樣本程序靜態信息的提取過程當中,對其所申請的權限信息進行了預處理,主要是:

圖 1 靜態信息提取流程 Figure 1 Flow chart of static information extraction

1) 去除自定義的權限信息。Android容許程序自定義權限,以對其餘應用可否訪問該應用的組件進行管理。自定義權限與Android應用程序編程接口(Application Programming Interface, API)以及系統資源的保護無關,故本文只關注應用程序申請的Android系統所定義的權限。

2) 爲全部權限賦予惟一標識。AndroidManifest.xml文件中的權限信息爲字符串,系統在運行程序時纔會對其進行解析並識別爲對應ID。爲了以後分析工做的便利,在提取過程當中,爲每一種新提取到的權限信息賦予其全局惟一的整數型ID。經過此操做,簡化了數據處理和運算過程。

1.2 動態特徵提取

因爲Android的多層次體系架構,程序語義在執行中也會有多層次的展示。對於惡意程序包含的惡意代碼,也會在多個層面上表現出惡意行爲。越處於底層的惡意行爲,在系統中隱蔽性越高,反之則越明顯。多層次的惡意代碼展示也爲惡意行爲的監控提供了多個層次選擇,部署於不一樣層次的監控方法,所可以獲取的語義層次也不一樣。圖 2給出了Android系統各個層次所對應的程序行爲,及其可能存在的攻擊行爲。理論上,下層的監控方法能夠捕獲或還原上層的惡意行爲,而上層的監控方法對下層的語義執行信息沒法獲知。

圖 2 動態行爲監控層次 Figure 2 Dynamic behavior monitoring levels

快速模擬器(Quick Emulator, QEMU)是採用了動態二進制翻譯技術的高效CPU模擬器,本文使用QEMU模擬器分別獲取了內核指令、系統調用、Dalvik指令的信息,從這些信息中提取應用程序動態行爲特徵。總體結構如圖 3所示。

圖 3 動態監控系統架構 Figure 3 Dynamic monitoring system architecture

1) 內核指令。

要對客戶機內的Android系統進行監控,首先要獲取到每一個翻譯好的宿主機基本指令塊(X86指令)以及其對應的原始客戶機指令塊(進階指令機(Advanced Risc Machine, ARM)指令)。在微代碼引擎(Tiny Code Generator, TCG)翻譯階段插裝代碼,讀取原始代碼塊以及翻譯後代碼塊的起始地址和大小,在每一個代碼段執行以前,再根據所記錄的位置和大小,將翻譯前和翻譯後的指令記錄到本地文件,將X86指令還原到ARM指令。

2) 系統調用。

在X86架構中,從指令層面來看系統調用的流程爲:1) int 0x80指令來進入特權模式;2) 經過eax寄存器傳遞要執行的系統調用編號;3) 內核執行相應系統調用。ARM架構中使用swi #0來執行系統調用,系統調用編號存儲於R7寄存器之中。在獲取原始指令塊的模塊中加入一個監控模塊,當發現模擬器動態翻譯的指令塊中有swi #0指令時,在swi #0指令後插裝額外的TCG指令,執行一個回調函數來收集內存和寄存器中關於這次調用的信息,首先取得R7寄存器中的這次系統調用編號,再根據內存中的系統調用表查找到該編號對應的系統調用名稱及地址,從而獲取到進程信息、系統調用的參數以及返回值等。通過插裝的代碼被翻譯執行時,咱們插入的回調函數也將被調用,從而得到系統調用信息。

3) Dalvik指令。

Dalvik字節碼經過Dalvik虛擬機翻譯爲相應的可執行的本地指令並執行,採用解釋執行(Interpretation)和實時編譯(Just-In-Time compilation, JIT)兩種方式來完成這一過程。

Dalvik的解釋器模塊名爲mterp,採用偏移尋址方式將Dalvik操做碼(opcode, 指令編號)映射到機器碼。每條操做碼都有64 B的內存用於存儲其相應模擬解釋的本地代碼,對於模擬解釋代碼不足64 B的操做碼,會進行填充,使其存儲滿64 B。mterp計算偏移地址公式:

NativeAddress=BaseAddress+opcode64
  (1)

其中:NativeAddress爲該操做碼對應的本地代碼;BaseAddress爲整個存儲操做碼對應的本地代碼的內存塊的起始地址;Dalvik虛擬機能夠經過此式計算獲得每一個操做碼對應的本地代碼。根據Dalvik指令的完整還原過程,本文對mterp和JIT分別進行處理。

對於mterp解釋執行的指令,Dalvik虛擬機中程序計數器(Program Counter, PC)的值存儲於R15寄存器中,經過監控R15,能夠獲知mterp的行爲,由式(1),其執行的opcode爲:

opcode=(R15BaseAddress)/64
  (2)

經過式(2) 得到mterp執行的opcode,因爲每一個opcode對應惟一的一個指令,從而獲得當前執行的指令。

JIT編譯時一個代碼段中包含多個基本的代碼塊,難以和指令一一對應,所以禁用JIT,僅使用mterp解釋執行。

1.3 特徵向量

根據1.1節和1.2節提取的靜態信息和動態信息能夠構築特徵向量。靜態信息部分,本文對在Google Play Store獲得的12 170個非惡意樣本和在VirusTotal上獲得的2 678個惡意應用進行了靜態信息提取,從全部權限中採用了41個使用頻率比較高的權限做爲靜態特徵。若應用程序被檢測到上述權限就會在應用程序的特徵向量中被標記爲1,不然爲0。

動態信息部分,本文從Android系統中選擇了129個關鍵動態特徵來對Android應用程序的行爲進行刻畫,覆蓋了進程控制、文件操做、文件系統操做、系統控制、網絡管理、socket控制、用戶控制和進程間通訊8種類別。應用程序的動態分析中若檢測到相應的動態特徵則在特徵向量中標記爲1,不然爲0。

根據提取的41個靜態特徵和129個動態特徵,本文構建一個包含170個特徵的特徵向量,其中前41個是表明靜態信息的靜態特徵,後129個是表明動態信息的動態特徵,每個特徵在向量中的取值只有0和1,當應用程序中檢測到相應特徵時,特徵值爲1,沒有檢測到時特徵值爲0。

2 深度學習算法

目前基於DL理論的應用系統中,深度置信網絡(DBN)是應用比較普遍的一類學習結構, 它由多層受限波爾茲曼機(Restricted Boltzmann Machine, RBM)單元和一層有監督網絡層組成。陳宇等採用DBN算法對中文實體關係進行了分析,取得了很好的結果,本文參照其中的DBN網絡結構設計了DBN分類網絡,利用DBN對提取的應用程序特徵向量進行分類。與其餘深度學習網絡(深度玻爾茲曼機、卷積神經網絡等)相比,DBN算法對一維特徵向量的分類能力更強且訓練速度更快,所以本文采用DBN算法對惡意應用進行分類。本文所採用的DBN是由若干層自底向上的RBM和一層有監督的反向傳播(Back Propagation, BP)網絡組成的深層神經網絡。

2.1 深度置信網絡

深度置信網絡(DBN)是由若干層自底向上的RBM和一層有監督的BP網絡組成的深層神經網絡[6],其結構如圖 4所示。圖 4中,VH分別表示可視層和隱含層內的節點值, W表示可視層與隱含層之間的權值。底層的神經網絡接收原始的特徵向量,在自底向上的傳遞過程當中, 從具體的特徵向量逐漸轉化爲抽象的特徵向量,在頂層的神經網絡造成更易於分類的組合特徵向量。爲確保每一層的聯合機率分佈p(V, H)最大,必須使當前層RBM網絡調整自身層內的權值以對該層特徵向量映射達到最優;但僅依靠RBM層並不能對整個DBN的特徵向量映射達到最優。所以,BP網絡還擔負着微調功能:BP網絡將錯誤信息自頂向下傳播至每一層RBM,能夠達到微調整個DBN的做用。

圖 4 DBN網絡結構 Figure 4 DBN network architecture

在訓練模型的過程當中,DBN主要分爲兩步:1) 分別單獨無監督地訓練每一層RBM網絡,確保特徵向量映射到不一樣特徵空間時,都儘量多地保留特徵信息;2) 在DBN的最後一層設置BP網絡,接收RBM的輸出特徵向量做爲它的輸入特徵向量,有監督地訓練實體關係分類器。將特徵向量X做爲第一層RBM的輸入V0,計算第一層的輸出H0並修改權值W0,在計算H0時採用Sigmoid函數進行標準化,Sigmoid函數的結果做爲特徵節點開啓(結果爲1) 的機率值p,將p與一個從(0, 1) 均勻分佈中抽取的隨機值u比較,若p>u則該節點開啓,其值取1,不然值取0,所以H0的每一個特徵取值均爲0或1。當第一層訓練完成後,將第一層的輸出H0做爲第二層的輸入V1,一樣計算H1並修改權值W1,以此類推充分訓練每層RBM。當全部RBM層都單獨充分訓練完成後,將最後一層RBM的輸出Hn-1(n爲RBM隱藏層層數)做爲BP層的輸入Vn,BP網絡算法有監督地訓練分類器,並自頂向下反向微調整個DBN。DBN訓練過程實現步驟如算法1所示。

算法1 DBN訓練算法。

對於層數爲N的DBN算法,n(0 < nN)爲當前RBM層數。

1) 充分訓練第一層RBM,n=1。

2) 固定當前RBM的權重和偏移量,將當前RBM的輸出做爲下一個RBM的輸入向量。

3) 充分訓練下一個RBM後,堆疊在當前RBM的上方,nn+1。

4) 若n=N,轉步驟5);不然,轉步驟2)。

5) 使用BP網絡有監督地訓練分類器, 並自頂向下反向微調整個DBN網絡。

6) 訓練結束。

2.2 限制玻爾茲曼機

受限玻爾茲曼機(RBM)由Hinton等[11]提出,該網絡由可見單元(visible unit,對應可見變量,亦即數據樣本)和隱藏單元(hidden unit,對應隱藏變量)構成,可見變量和隱藏變量都是二元變量,其狀態取{0, 1}。整個網絡是一個二部圖,可見單元和隱藏單元之間鏈接,可見單元之間以及隱藏單元之間都不鏈接。

RBM的訓練過程,其實是求出一個最能產生訓練樣本的機率分佈。也就是說,要求一個分佈,在這個分佈裏,訓練樣本的機率最大。因爲這個分佈的決定性因素在於權值W,因此本文訓練RBM的目標就是尋找最佳的權值。

對於包含N個二值可見單元和M個二值隱單元的RBM,設定vi表示第i個可見單元的狀態,hj表示第j個隱單元狀態.那麼,給定狀態(VH)所具有的能量定義如式(3):

E(V,H)=i=1Nvibij=1Mhjcji=1Nj=1Mwijvihj
  (3)

式中:wij表示可視層與隱藏層之間的權值;bi表示可視單元的偏置;cj表示隱單元的偏置。RBM處於狀態(VH)的機率如式(4) 所示:

P(V,H)=exp(E(V,H))V,Hexp(E(V,H))
  (4)

因爲層間單元是無鏈接的,由可視層的節點值獲得隱含層的節點值計算式[12]如式(5):

P(hj=1|V)=σ(i=1NWijvi+cj)
  (5)

RBM是對稱網絡, 同理, 利用式(6) 能夠由已知的隱含層的節點值獲得可視層的節點值:

P(vi=1|H)=σ(j=1MWijhj+bi)
  (6)

式(5)~(6) 中,σ(x)=1/(1+exp(-x))。

一般應該採用馬爾可夫鏈的方法計算權值W,可是馬爾可夫鏈的計算複雜且收斂速度難以保證,所以本文采用對比散度(Contrastive Divergence, CD)的學習算法[13],CD準則計算速度快且保持精度,本文利用這個算法計算權值W。CD準則利用Kullback-Leibler距離衡量兩個機率分佈的「差別性」,表示爲KL(PP′),如式(7) 所示:

CDn=KL(p0p)KL(pnp)
  (7)

其中:p0爲RBM網絡初始狀態的聯合機率分佈;pn爲通過n步馬爾可夫鏈以後的RBM網絡的聯合機率分佈;p爲馬爾可夫鏈末端的RBM網絡的聯合機率分佈。因此,CDn能夠看做是pn衡量介於p0p之間的位置。不斷地將pn賦值給p0,獲得新的p0pn。因爲n取1時就能夠獲得很好的結果[14],所以本文中n=1。RBM的訓練過程實現步驟如算法2所示。

算法2 基於CD準則的RBM網絡自訓練過程。

對於容量爲N的訓練集中的一個特徵向量xn (0≤n < N)

1) n=0。

2) 將xn附給顯層V0,根據式(5) 計算隱藏層H0

P(h0j=1|V0)=σ(WjV0)
 

3) 根據式(6) 重構顯層獲得V1

P(v1i=1|H0)=σ(WTiH0)
 

4) 再次根據式(5) 計算隱藏層H1

P(h1j=1|V1)=σ(WjV1)
 

5) 對於全部的節點j,按下式更新權重:

WjWj+λ(P(h0j=1|V0)VT0P(h1j=1|V1)VT1)
 

n=N-1,結束;不然n=n+1,轉步驟2)。

2.3 BP網絡

BP網絡是有監督分類器,在DBN的最後一層對前端提取的特徵向量進行分類,並與正確結果比對,進而微調整個DBN。本文采用BP網絡訓練方法[14],利用Sigmod函數做爲BP網絡節點的求值函數。其訓練過程如算法3所示。

算法3 BP網絡的訓練過程。

1) 隨機初始化頂層反向傳播網絡的參數,設定訓練步長爲N

2) 進行前向計算,對第l層的j單元節點,值爲yjl(n)=∑Wij(n)yil-1(n),若神經元j屬於輸出層(l=L),則令yjL(n)=oj(n),偏差ej(n)=dj(n)-oj(n),dj爲正確結果。

3) 計算δ,將δ反向傳遞自頂向下修正權值,對於輸出單元:

δIj(n)=ej(n)oj(n)[1oj(n)]
 

對於隱藏單元:

δIj(n)=ylj(n)[1ylj(n)]δl+1k(n)Wl+1kj(n)
 

4) 修改權值:

Wlji(n+1)=Wlji(n)+ηδljyl1i(n)
 

η爲學習速率。

5) 若是n=N,訓練結束;不然n=n+1,轉步驟2)。

3 基於深度學習的安卓應用檢測

本文設計了DeepDroid算法,提取並結合了安卓應用的動態特徵和靜態特徵,使用深度學習算法中的DBN算法對安卓應用進行分析。靜態特徵和動態特徵的結合使得特徵向量對安卓應用的描述更加全面,同時採用DBN算法能夠學習特徵的深層結構,使安卓應用的檢測更加精確。DeepDroid算法的結構如圖 5所示。

圖 5 DeepDroid算法結構 Figure 5 Structure diagram of DeepDroid algorithm
3.1 提取特徵向量

特徵向量由靜態特徵和動態特徵共170種特徵組成,其中前41種特徵爲靜態特徵,後129種特徵爲動態特徵,針對每一個安卓應用分別檢測它是否含有相應的靜態特徵和動態特徵行爲,並根據檢測結果獲得該安卓應用的特徵向量。對於特徵向量中的每個特徵值,若檢測到相應的特徵則標記爲1,不然標記爲0。

3.2 深度學習網絡訓練

DBN由多層RBM組成,最後一層採用BP網絡。DBN的訓練分爲兩步:1) 分別單獨無監督地訓練每一層RBM網絡,確保特徵向量映射到不一樣特徵空間時,都儘量多地保留特徵信息;2) 在DBN的最後一層設置BP網絡,接收RBM的輸出特徵向量做爲它的輸入特徵向量,有監督地訓練實體關係分類器。每一層RBM網絡只能確保自身層內的權值對該層特徵向量映射達到最優,並非對整個DBN的特徵向量映射達到最優,因此反向傳播網絡還將錯誤信息自頂向下傳播至每一層RBM,微調整個DBN。與傳統的神經網絡全部層同時訓練不一樣,深度學習算法每層隱層都單獨充分訓練後再訓練下一層。將3.1節中獲得的特徵向量集X做爲第一層RBM的輸入V0,經過算法2計算修改權值W0。當第一層訓練完成後,將第一層的輸出H0做爲第二層的輸入V1,一樣經過算法2計算修改權值W1,以此類推充分訓練每層RBM。當全部RBM層都單獨充分訓練完成後,將最後一層RBM的輸出Hn-1(n爲RBM隱藏層層數)做爲BP層的輸入Vn,經過2.3節中的BP網絡算法有監督地訓練分類器,並自頂向下反向微調整個DBN。

3.3 惡意應用檢測

經過3.2節訓練獲得的深度置信網絡,就能夠對安卓應用進行安全檢測,將安卓應用的特徵向量輸入到網絡中就能夠對其進行檢測。實驗部分將會使用測試集對DeepDroid算法的準確率進行驗證。

4 實驗結果與分析

本文在Google Play Store共下載獲得近13 000個應用程序(https://github.com/Akdeniz/google-play-crawler),去除掉不可解包的應用後共獲得12 170個非惡意樣本。惡意樣原本自VirusTotal(https://www.virustotal.com/),共計2 678個惡意應用。訓練集和測試集均由1 300個非惡意程序以及1 300個惡意程序組成。

爲了驗證本文所提方法的有效性,將本文方法與其餘傳統方法進行比較,設計了3組實驗。第1組實驗採用不一樣RBM層數和隱藏層節點數,肯定檢測準確率最高的深層網絡結構; 第2組實驗採用不一樣的特徵向量, 驗證動靜態特徵結合對惡意程序檢測的有效性; 第3組實驗採用不一樣的機器學習算法, 驗證了本文采用的DBN算法比傳統的機器學習算法更加有效。在實驗中,採用準確率(Precision)、召回率(Recall)、F係數(F-Measure)和正確率(accuracy)來評價對惡意行爲檢測的結果。深度學習網絡的隱藏層數越多,隱藏層節點數越多其學習能力越強,可是因爲樣本集數量的關係,過多的層數不但致使效率低下,還可能只是干擾層反而影響學習結果。因爲目前關於深度網絡結構的選取尚未完善的理論依據,本文經過實驗的方法來肯定最優的網絡結構。

本文測試了多種網絡結構,首先採用單隱藏層,DBN網絡結構爲[170,140,2],輸入層節點數爲170,隱藏層節點數爲140,輸出層節點數爲2,學習速率設置爲0.05,採用單隱藏層的結構時收斂速度較快,檢測的正確率爲95.96%。採用雙層隱藏層時,DBN網絡結構爲[170,140,140,2],輸入層節點數爲170,隱藏層節點數爲140,輸出層節點數爲2,學習速率設置爲0.05,檢測的準確率爲97.08%,收斂速度變慢。採用三層隱藏層時,DBN網絡結構爲[170,140,140,140,2],輸入層節點數爲170,隱藏層節點數爲140,輸出層節點數爲2,學習速率設置爲0.05,檢測的準確率爲96.73%,雖然隱藏層層數增長了,可是正確率卻略微降低。採用四層隱藏層時,DBN網絡結構爲[170,140,140,140,140,2],輸入層節點數爲170,隱藏層節點數爲140,輸出層節點數爲2,學習速率設置爲0.05,檢測的準確率爲94.92%,收斂速度很是慢。除了隱藏層層數,隱藏層節點數也會對網絡的效率有必定的影響,修改前面實驗中四個網絡的隱藏層節點數爲160,獲得四個新的網絡,分別爲單隱藏層網絡[170,160,2]、雙隱藏層網絡[170,160,160,2]、三隱藏層網絡[170,160,160,160,2]、四隱藏層網絡[170,160,160,160,160,2],其正確率分別爲96.54%、96.58%、94.54%、94.54%。一樣將隱藏層數爲2、3、四的三個網絡隱藏層節點數修改成120,獲得三個新的網絡,分別爲雙隱藏層網絡[170,120,120,2]、三隱藏層網絡[170,120,120,120,2]、四隱藏層網絡[170,120,120,120,120,2],其正確率分別爲96.35%、96.08%、94.35%。當採用兩層隱藏層,隱藏層節點數爲140,網絡結構爲[170,140,140,2]時檢測的正確率最高爲97.08%。實驗1的結果如表 2所示。

表 2 不一樣深度學習網絡結構檢測結果% Table 2 Detection results of different deep learning network structures %

爲了驗證結合靜態特徵和動態特徵做爲特徵向量比單獨採用某種特徵向量有更好的性能,在實驗2中,分別使用態靜態特徵、動態特徵、動靜態結合特徵做爲輸入特徵向量進行惡意行爲檢測,結果如表 3所示。從表 3的結果中能夠看出:採用靜態特徵能夠更加準確地檢測惡意應用,而非惡意應用的準確率低說明有不少誤報;採用動態特徵時,惡意應用的準確率較低,非惡意應用的準確率與採用靜態特徵的結果相比更高;當結合了動態和靜態特徵時,惡意應用和非惡意應用的準確率都比較高,與單獨使用一種特徵相比性能有很大提高。

表 3 不一樣特徵向量檢測結果% Table 3 Detection results of different feature vectors %

在實驗3中,比較與傳統的機器學習模型和深度學習模型,結果如表 4所示。對於文中的其餘機器學習算法(SVM、Naive Bayes、KNN),測試了linear kernel、polynomial kernel、sigmoid kernel等多種核函數,並選取性能最好的做爲實驗結果。從表 4中能夠清楚地看到,在使用相同測試集的狀況下,DBN算法的正確率比SVM算法高出3.96個百分點,比Naive Bayes算法高出12.16個百分點,比KNN算法高出13.62個百分點,深度學習的模型明顯優於其餘惡意軟件檢測模型。

表 4 不一樣機器學習算法檢測結果% Table 4 Detection results of different machine learning algorithms %

實驗結果代表,深度學習算法與其餘傳統機器學習算法相比有更好的性能。當深度學習網絡結構在當前數據集下達到最高性能時,深度學習算法有很高的準確率。從表 2中能夠看到,即便深度學習網絡沒有采用性能最佳的2隱層結構,其最低正確率也達到94.35%。

5 結語

本文經過靜態特徵和動態特徵結合的檢測方法,使用深度置信網絡(DBN)對提取的安卓應用程序特徵進行分析識別,實現了DeepDroid安卓惡意軟件檢測算法。本文實驗中在Google Play Store獲得12 170個非惡意樣本,在VirusTotal上獲得2 678個惡意應用,並經過這些樣本構建實驗集。實驗中, 首先對應用程序進行了特徵提取,並將提取到的靜態特徵和動態特徵整合到同一個特徵向量中; 而後, 從數據集中選取部分非惡意應用和部分惡意應用,使用這些應用程序的特徵向量訓練DBN; 最終, 經過訓練好的DBN對安卓惡意應用程序進行識別。深度學習是機器學習研究的一個新領域,與傳統機器學習方法相比,深度學習能夠學習到數據中更深層的特徵,從而提升檢測性能。本文中共提取了170個特徵,其中包含41個常見惡意靜態特徵和129個高危動態特徵,動態特徵包含內核指令、系統調用以及Dalvik指令。根據提取到的170個特徵將數據集經過深度學習算法對特徵向量進行分類。從實驗結果能夠看出,雖然訓練集不一樣,深度學習網絡的性能可能會略有不一樣,可是與傳統機器學習算法相比,深度學習算法依然有更高的準確率。

本文研究依然存在一些不足和能夠改進的地方:因爲惡意應用收集比較困難,本文收集了2 678個惡意應用,所以數據集相對較小,若是採用更大的數據集則能夠獲得更準確的結果。此外特徵向量的值能夠採用離散值來增長其信息量,採用二進制(0,1) 只能表示檢測到了某種惡意行爲,而採用離散值能夠增長其含義。好比相同的惡意行爲出現了兩次,能夠標記爲2,有些高危特徵能夠加權來突出其危險性。

參考文獻
[1] 楊歡. 協議漏洞挖掘及Android平臺惡意應用檢測技術研究[D]. 西安: 西安電子科技大學, 2014: 2-3. ( YANG H. Research on protocols vulnerability discovery and Android malware detection[D]. Xi'an:Xidian University, 2014:2-3. )
[2] 360互聯網安全中心. 2015年中國手機安全情況報告[R/OL]. [2016-09-15]. http://zt.360.cn/1101061855.php?dtid=1101061451&did=1101593997. ( 360 Internet Security Center. China mobile security status report 2015[R/OL].[2016-09-15]. http://zt.360.cn/1101061855.php?dtid=1101061451&did=1101593997. )
[3] SCHMIDT A D, BYE R, SCHMIDT H G, et al. Static analysis of executables for collaborative malware detection on Android[C]//Proceedings of the 2009 IEEE International Conference on Communications. Piscataway, NJ:IEEE, 2009:631-635.
[4] SHABTAI A, KANONOV U, ELOVICI Y, et al. "Andromaly":a behavioral malware detection framework for android devices[J]. Journal of Intelligent Information Systems, 2012, 38(1): 161-190. doi: 10.1007/s10844-010-0148-x
[5] BURGUERA I, ZURUTUZA U, NADJM-TEHRANI S. Crowdroid:behavior-based malware detection system for Android[C]//SPSM'11:Proceedings of the 1st ACM Workshop on Security and Privacy in Smartphones and Mobile Devices. New York:ACM, 2011:15-26.
[6] HINTON G E, OSINDERO S, TEH Y W. A fast learning algorithm for deep belief nets[J]. Neural Computation, 2006, 18(7): 1527-1554. doi: 10.1162/neco.2006.18.7.1527
[7] SALAKHUTDINOV R, HINTON G E. Deep Boltzmann machines[C]//Proceedings of the 12th International Conference on Artificial Intelligence and Statistics.[S.l.]:AISTATS, 2009:448-455.
[8] 孫志軍, 薛磊, 許陽明, 等. 深度學習研究綜述[J]. 計算機應用研究, 2012, 29(8): 2806-2810. ( SUN Z J, XUE L, XU Y M, et al. Overview of deep learning[J]. Application Research of Computers, 2012, 29(8): 2806-2810. )
[9] YUAN Z L, LU Y Q, XUE Y B. DroidDetector:Android malware characterization and detection using deep learning[J]. Tsinghua Science and Technology, 2016, 21(1): 114-123. doi: 10.1109/TST.2016.7399288
[10] 陳宇, 鄭德權, 趙鐵軍. 基於Deep Belief Nets的中文名實體關係抽取[J]. 軟件學報, 2012, 23(10): 2572-2585. ( CHEN Y, ZHENG D Q, ZHAO T J. Chinese relation extraction based on deep belief nets[J]. Journal of Software, 2012, 23(10): 2572-2585. )
[11] HINTON G E, SEJNOWSKI T J. Learning and relearning in Boltzmann machines[M]//Parallel Distributed Processing:Explorations in the Microstructure of Cognition. Cambridge, MA:MIT Press, 1986:282-317.
[12] HINTON G E. A practical guide to training restricted Boltzmann machines[R]. Toronto:University of Toronto, Machine Learning Group, 2010.
[13] HINTON G E. Training products of experts by minimizing contrastive divergence[J]. Neural Computation, 2002, 14(8): 1771-1800. doi: 10.1162/089976602760128018
[14] CARREIRA-PERPINAN M A, HINTON G E. On contrastive divergence learning[C]//Proceedings of the 2005 Tenth International Conference on Artificial Intelligence and Statistics.[S.l.]:AISTATS, 2005:33-40.
相關文章
相關標籤/搜索