?

基于深度學習的安卓惡意應用檢測

2020-11-02 11:51王亞洲
計算機工程與設計 2020年10期
關鍵詞:安卓卷積向量

王亞洲,王 斌

(中國航天科工集團第二研究院 北京計算機技術及應用研究所,北京 100854)

0 引 言

安卓誕生的數年來憑借其平臺的開放性獲得了巨大的市場滲透率,同時針對安卓的各類惡意應用數量急劇增加。從卡巴斯基首次發現短信特洛伊木馬程序以來,安卓惡意軟件不斷發展,通過增加代碼混淆、隱蔽的命令和控制通信通道等方式來加強躲避檢測的能力[1]。而無論是廣泛使用的簽名和特征碼技術、對于應用內容進行分析的靜態檢測技術,還是沙箱動態檢測技術都有其弊端。

最早出現基于簽名和特征碼技術,優點是檢測速度快、誤報率低,仍被當前安全廠商采用,但是無法檢測短時間爆發的未知惡意應用,并且隨著惡意軟件數量的不斷增長,很難維持龐大的特征庫[2]。并且傳統的基于靜態檢測方法檢測準確率不高,而動態檢測方法需要占用大量的檢測時間,越來越難以適應惡意應用數量快速增長的情況。從以上得出惡意應用的檢測需要更精準的信息提取能力和更好的分類算法。

本文在分析了典型惡意應用檢測方法的基礎上,針對以上方法的問題,提出一種基于深度學習的惡意應用檢測方法。首先構建了一個包含較大樣本量的數據集,將Android應用處理后提取出關鍵信息,采用適用于文本分類的卷積神經網絡,應用深度學習算法相比傳統機器學習算法有更強的學習特征的能力,提高了檢測效果。

1 惡意應用分析

對于安卓惡意應用檢測,最直接接觸到的原始分析素材便是Android應用程序包(Android application package,APK),而對安裝包中文件的靜態分析對本文提出的方法尤其重要。本節將針對安卓應用進行解析,研究典型惡意應用檢測方法。

1.1 安卓應用安裝包解析

安卓應用安裝采用的是后綴名為APK的安裝文件,是一個包含各種數據的壓縮包。

如圖1所示,APK文件中包含工程屬性文件、代碼文件、應用程序資源文件和第三方庫。其中對本文的方法比較重要的是AndroidManifest.xml文件和classes.dex文件。AndroidManifest.xml包含用來描述應用的各個組件,包括構成應用的 Activity、服務、廣播接收器、ContentProvi-der、聲明應用必須具備的權限等,其中權限用來規定應用可以訪問API中受保護的部分,可以作為判定安卓應用是否惡意的一個重要特征。classes.dex(dex:dalvik executable)文件是可以直接在Dalvik VM虛擬機上執行的文件執行格式,該文件含有Java源代碼編譯后的各個類,但是人工很難閱讀,因此需要經過反編譯處理后才能提取其中有用的信息。Dalvik是Google公司在Android4.4版本之前專門為Android操作系統設計的一個基于寄存器的虛擬機,在此之后Google推出ART作為新的虛擬機,但是運行的仍是dex格式的代碼,因此對dex的分析不受影響。

圖1 典型應用安裝包組成

1.2 典型惡意應用檢測方法

現有的安卓惡意代碼檢測技術主要為基于靜態檢測技術和基于沙盒的動態行為檢測技術,或者同時使用兩者的混合檢測技術。

一般的靜態分析內容有簽名信息分析、代碼語義分析、控制流分析、數據流分析等。典型的靜態檢測方法在沒有運行應用或者安裝應用的情況下,通過對應用程序中的代碼內容采用源代碼的靜態分析工具進行檢測分析,然后匯總分析代碼在執行過程中對資源的使用。秦中元等[3]提出一種多級簽名匹配算法,以MD5哈希算法與反編譯生成的smali文件為基礎,生成API簽名、Class簽名、Method簽名、APK簽名和已知惡意應用樣本庫進行對比。王兆國等[4]提出來一種抗混淆的Android應用檢測方法,通過提取不同應用的某些特定文件內容特征,與作為對比標準的正版應用、已知惡意應用進行對比來識別惡意應用。王志強等[5]提出用控制流序列即調用某個類方法的序列和有限長度的API函數調用序列在一定程度上表征安卓應用程序的行為。

動態行為檢測方法運用虛擬機環境(也稱沙箱),將未知待檢測的代碼運行其中,通過檢測相應軟件是否產生惡意行為作為判斷依據來判斷是否是惡意代碼[6]。同時代碼加密和混淆不會輕易影響基于行為的檢測方法,但是需要收集如函數調用、運行行為、文件使用等應用產生的大量相關動態運行信息。該類方法與靜態檢測方法相比,對未知的惡意應用檢測效果方面優于基于特征代碼的檢測方式,可以減少漏報,但是速度較慢,其計算資源和時間是很難承受的,并且有些應用檢測到沙箱運行后會針對性地改變其行為,躲避檢測。

近年有研究人員采用收集應用API序列、調用函數序列,或者操作碼應用樸素貝葉斯[7]、隨機森林等機器學習算法進行檢測,對未知惡意應用的檢測取得了一定的效果。蔣晨等將惡意軟件轉化為灰度圖像,通過深度卷積神經網絡來提取圖像紋理特征,從而檢測惡意軟件[8]。由靜態分析方法速度較快,資源占用少的特點和卷積神經網絡提取特征的能力,本文提出運用應用靜態信息通過卷積神經網絡的訓練來識別其惡意行為邏輯,進而實現惡意應用的檢測。

2 應用關鍵信息選取及卷積神經網絡

由第1節可知對于安卓惡意應用,APK文件中包含可表征安卓應用惡意行為的信息,并可利用深度學習技術自動提取特征的能力檢測惡意應用。下面將闡述所提方法需提取的靜態信息及深度學習中卷積神經網絡的基本結構。

2.1 關鍵特征信息選取

APK文件中有很多可以用于惡意應用靜態檢測方法的特征信息,但是直接將不經處理的應用輸入模型會給神經網絡輸入過多冗余信息,造成模型難以訓練或者擬合效果差。因此需要選擇適當的特征信息輸入網絡以實現較好惡意應用檢測效果:

(1)權限類:Android系統有一個權限控制系統,用戶可在安裝或者使用的過程中對某應用的權限進行合理控制,限定控制權限在用戶手中,并且可在安裝過程中提示用戶從而開啟應用功能所需的權限,在一定程度上可保護用戶的隱私數據并保護系統安全。然而惡意應用會采用各種隱瞞策略誘騙用戶打開超出程序功能所需的權限,通過統計分析發現,大量的惡意應用會使用敏感權限如短信相關權限、監控電話是否進行的權限和安裝應用的權限[9]。大量惡意應用會通過權限漏洞進行惡意行為:安裝其它非授權應用、惡意消耗資費、偷取用戶通訊錄、相冊文件、監控用戶電話活動等等;

(2)API類:現今很多正常應用也會存在過度授權現象,使得僅通過其權限的使用來判斷惡意應用缺乏充分性。需要從另一個角度看應用的行為,Android系統通過系統框架層提供了供應用使用的各種API去調取系統的各種資源,隱私數據也包括在其中。因此可以通過應用API的使用來表征應用的行為,即使惡意應用繞開了權限管理控制。但是傳統的API特征只觀察系統是否調用某個API,用0/1標志出現與否得到特征向量,這樣無法得出應用的整體行為。根據這個思路,本文考慮提取安卓應用API的使用順序API以及它們之間的關聯得到一種重要特征,用來識別應用的敏感操作;

(3)ACTION類:Android系統運行過程中會產生一些事件,應用如需獲取這類消息,則需要在應用的AndroidManifest.xml文件中或應用代碼中注冊ACTION組件,如此應用便可收到其它應用產生的事件或者系統狀態改變的事件從而監控它們的運行狀態。而惡意應用常常為了實現某些隱藏功能而注冊一些ACTION組件,比如檢測到電池狀態低的時候掛起程序以免引起懷疑的情形。

以往用到權限特征的方法只是簡單地提取了權限特征,利用機器學習方法來檢測應用程序[10]。本方法綜合采用權限信息、API類和ACTION類,可以一定程度避免輸入冗余信息,降低模型運算量,同時不丟失區分惡意應用和正常應用的重要參考信息。

2.2 深度卷積神經網絡

本文提出的方法將應用靜態信息表示為文本形式,輸入深度卷積網絡模型即可從特征信息序列中學到指示惡意軟件的功能[11],從而使文本分類神經網絡適于本方法。深度學習模型一旦經過訓練,就可以有效地在GPU上執行,迅速的大量掃描檢測應用。

深度學習算法的最大優勢在于其逐層從數據中學習特征的特點,網絡越深,學到的特征越抽象,即可以自動學到表征惡意應用的特征,這消除了大量的領域專業知識和手工特征提取的需要。神經網絡模型通常采用反向傳播(back propagation,BP)進行訓練。BP算法是“誤差反向傳播”的簡稱,為一種使用梯度下降法監督學習人工神經網絡的方法。對于給定的人工神經網絡和一個誤差函數,該算法根據輸出與標簽計算出誤差函數的值,之后計算誤差相對于神經網絡中每個權重的梯度,根據該梯度更新各個權重的值。通過算法可快速更新權重,即更新神經網絡,經過大量數據訓練后生成可快速檢測惡意應用的模型。同時模型還具有可更新性,通過不斷“投喂”新的惡意應用可實現對新型惡意應用變種的檢測能力。

如圖2所示,為本文所用的卷積神經網絡結構。

圖2 卷積神經網絡組成

(1)輸入層:模型的輸入層由每個應用提取的特征信息的詞向量組成的矩陣組成,輸入矩陣大小為N*K,其中K為詞向量的長度,N為序列的長度。

(2)卷積層:在輸入層的基礎上,使用卷積核進行卷積操作得到特征圖。實驗中使用的3種大小的卷積核,分別是3*K,4*K,5*K,K表示詞向量的長度。其中每種類型大小的卷積核有100個含有不同值的Filter。每一個過濾器都能從輸入的矩陣中抽取出一個特征圖,在自然語言處理中稱為文本特征。

(3)池化層:對特征進行進一步提取,實驗中對特征圖的池化操作方式是取最大值池化的方式,即將每個特征圖向量中最大的一個值抽取出來,組成一個一維向量。

(4)全連接層:該層的輸入為池化操作后形成的一維向量,經過激活函數輸出,再加上Dropout層防止過擬合。最后,將所得向量f傳遞到多層感知器(MLP,包括完全連接的隱藏層和全連接的輸出層)。帶有隱藏層的MLP提取的特征之間的高階關系可以被檢測從而用于分類。

(5)輸出分類結果:softmax層會使正確的分類獲得更大的概率,使錯誤的分類得到更小的概率,輸出當前樣本二分類結果。然后和樣本標簽做對比,通過BP算法進行誤差反向傳播調整神經網絡的參數。

卷積神經網絡不僅在圖像領域有優異的效果,在文本分類上表現同樣優異。對于文本卷積網絡,和圖像中的處理稍不同的是卷積核通常是對圖像的一小塊區域進行計算,卷積核的寬度不與輸入矩陣相同,而在輸入矩陣中每一行代表一個詞的詞向量,構成一句話的詞向量作為輸入。因此在處理文本時,每個卷積核就會覆蓋連續的幾個詞,此時卷積核的寬度需與矩陣的詞向量長度相同。通過這樣的方式,卷積神經網絡便可捕捉連續出現的多個詞之間的特征,然后利用池化層減小表示空間的大小,以減少網絡中的參數和計算量,最終通過全連接層實現對APK的分類。

3 基于深度學習的安卓惡意應用檢測系統架構設計

根據上述思路,本文設計了安卓惡意應用檢測系統框架,實現提出的深度卷積神經網絡的安卓惡意應用檢測方法,可驗證提出的檢測方法的有效性。

如圖3所示,數據集獲取模塊獲取檢測系統所需的應用素材,安卓應用特征提取及預處理模塊對應用進行提取信息和加工,深度卷積神經網絡訓練模塊將加工完成的序列信息輸入網絡進行訓練,輸出優化后的模型,最后采用生成的模型進行惡意應用檢測驗證效果。主要模塊如下。

圖3 基于深度學習的惡意應用檢測系統

3.1 數據集生成及預處理

利用爬蟲方法從公開的市場獲取良性應用樣本,惡意應用樣本則來自VirusShare平臺的2018年度樣本集,并隨機劃分80%的樣本為訓練數據集,20%為驗證集。之后對APK文件反編譯,得到AndroidManifest.xml和smali文件,如圖4從AndroidManifest.xml中提取出權限類、ACTION類,從smali文件中提取API序列。將提取到的原始特征信息經過詞向量編碼后形成特征序列。

圖4 安卓應用特征提取

經過統計良性、惡意應用數據集中的安卓系統共有135種權限可以供應用申請,應用API經過統計分析共有8432個,然而惡意應用和良性應用數據集中的API按頻率統計卻有不同的情況。例如良性應用和惡意應用API頻率統計中排名靠前的重合項很多,這是因為大多數應用都需要用到一些系統API,如字符串類函數、文件類函數,但是這類API不具有較強的區分能力,因此本文的方法,采用在良性應用和惡意應用中頻率差較高前1500個API作為所需的特征。

特征信息轉化為序列的方式本文采用隨機化初始化的詞向量嵌入方法。在詞嵌入之前往往采用 1-of-N Encoding(獨熱編碼)的方法,這種編碼方法會使得碼字很長,若一共有2000個單詞,就需要一個長度為2000的串進行編碼,對計算資源是一種浪費。所以在本方法使用的特征信息不超過2000種的情況下,采用隨機初始化為詞向量的編碼方式生成特征信息對應為詞向量的詞典,每類信息編碼長度僅為11位。

最后將每個應用的權限類、API類、ACTION類信息根據統一隨機初始化為詞向量的編碼方式進行編碼,以此種編碼方式將應用特征信息表示為二值化序列,從而便于輸入神經網絡進行訓練。權限類、ACTION類信息放到最前面,API類信息在其后3種,3種信息用英文句號分隔,然后每個smali文件都是同一個類的,將每個smali文件中的API放到用句號結尾,即每一類文件可作為一句話。如圖5所示為某APK經過預處理后的APK文本的樣式。

圖5 經過預處理后的APK文本

每一個樣本的特征信息經過提取后按照權限信息、ACTION信息和API信息的順序進行排列,形成一個n*m大小的矩陣序列。

3.2 惡意應用檢測模型優化

最后是卷積網絡訓練過程。由于預處理我們從中把含有權限信息和API類,ACTION類序列的所有類連接在一起,用單個序列代表整個應用程序的特征信息。卷積神經網絡的輸入序列長度一般是固定的,然而不同的應用生成的序列長度是不一致的,此時需將較短的序列后面補充零值詞向量。

卷積網絡訓練之前需要進行參數初始化,初始設置見表1。

其中學習率是對權值修改的幅度,值越大對各層網絡的權值的修改幅度越大,網絡收斂速度越快。之后將應用特征信息形成的序列輸入文本卷積神經網絡,通過誤差反向傳播算法自動更新網絡權重,對網絡進行微調,自動學習特征,生成分類模型。

表1 卷積網絡參數初始化設置

3.3 惡意應用檢測系統驗證

把經過參數優化的模型用驗證集進行檢測、記錄、分析檢測結果,并和傳統機器學習方法對比。

相比于現有的惡意軟件檢測方法,所提方法可以克服動態檢測方法時間長、依賴于特定工具的缺點。本方法只需要少量的數據預處理工作,即可自動學習數據的特征表示,相比于傳統機器學習方法可以在更大的數據集上使用,并且通過向系統輸入標記過的新樣本,還可自動更新檢測系統。

4 實驗結果及分析

本文所用的數據集分別來自360應用市場和VirusShare平臺,良性樣本和惡意樣本分別為2160個和1342個,分別隨機劃分其中的80%作為訓練集,20%作為驗證集。實驗平臺配置見表2。

表2 實驗平臺配置

本文中的良性、惡意應用數據集,根據樣例的真實類別與深度神經網絡預測類別的組合劃分為真正類(TP)、假正類(FP)、真反類(TN)、假反類(FN)4種情形。分類結果見表3。

表3 分類結果混淆矩陣

TP:真正類,惡意應用被預測為惡意應用

FN:假負類,惡意應用被預測成良性應用

FP:假正類,良性應用被預測成惡意應用

TN:真負類,良性應用被預測成良性應用

根據以上分類情形,便于評價檢測效果的準確率,漏報率和誤報率的定義如下所示

本文的數據預處理中的反編譯工具為Apktool,深度學習框架為Tensorflow,編程語言為Python。經過深度學習模型訓練后,采用數據集的20%進行檢測,得到實驗結果見表4。

表4 同基于隨機森林算法的方法的比較

本實驗結果和采用機器學習的隨機森林算法[12]的結果對比來看,本方法的精確度略高于隨機森林算法,這是因為本方法將權限、API類、ACTION類等信息合理運用,采用適宜的特征信息向量化方式,運用深度學習可獲得應用深層特征的能力,實現了較好檢測的效果。

5 結束語

本文提出了一種基于深度學習的安卓惡意應用檢測方法,創建了一個較大的包含惡意、良性應用的數據集,通過提取應用較少的靜態信息,運用深度學習算法的能力表征應用的行為,實現了高效迅速的檢測未知惡意應用。本文的方法相比于動態檢測方法也可節省較多的時間,但是漏報率較高,下一步將研究在更大的數據集上進行實驗,不同良性、惡意應用樣本的比例下,降低漏報率,進一步提高檢測效果。

猜你喜歡
安卓卷積向量
iPhone不卡的秘密曝光:安卓也能享受
向量的分解
基于3D-Winograd的快速卷積算法設計及FPGA實現
聚焦“向量與三角”創新題
卷積神經網絡的分析與設計
文物表情包
從濾波器理解卷積
基于傅里葉域卷積表示的目標跟蹤算法
一種基于安卓系統的手機側抓包分析方法
向量垂直在解析幾何中的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合