桑 振,李坤明,莊海燕
(鐵道警察學院,河南 鄭州 450000)
隨著互聯網的飛速發展,智能手機和平板等終端設備廣泛普及,Android操作系統憑借其開放性和良好的體驗感成為現在智能終端市場的主流系統。Strategy Analytics公布的2021年第一季度全球手機出貨量顯示,當季全球智能手機出貨3.4億部,同比增加24%。操作系統為Android系統的三星、華為、小米、OPPO和VIVO占據市場上60%的份額,在移動智能終端市場上有著重要地位。
惡意軟件是故意設計的對系統正常運行造成嚴重破壞性的軟件的統稱,它是互聯網上最嚴重的威脅之一,各種移動終端設備給人們的生活提供了便利,同時也存在著很大的風險。Android手機市場占有率的不斷上升,催生了Android應用程序的迸發式增長,進而也滋生很多惡意軟件,惡意軟件介于正規軟件和病毒軟件之間,既具備正常的下載、媒體播放功能,同時也有彈廣告、開后門等惡意行為,對于用戶的個人信息和財產造成很大威脅,這將導致用戶知情權和選擇權遭受侵犯。Android惡意軟件種類繁多,常見的有廣告軟件、后門程序、文件感染程序、勒索軟件、恐嚇軟件等。據統計,2020年360安全大腦系統在移動端共截獲惡意程序454.6萬個,相較于2019年增長了151.3%,因此對于移動終端惡意軟件的檢測至關重要。
近些年,將可視化技術和卷積神經網絡相結合的Android惡意軟件檢測方法層出不窮,NATARAJ等[1]首次將惡意軟件轉化為灰度圖像,開辟了卷積神經網絡在惡意軟件分類中的新篇章。ZHANG等[2]直接提取惡意軟件的操作碼序列,使用直方圖歸一化方法,擴張和侵蝕處理惡意軟件圖像,使用卷積神經網絡來對操作碼圖像進行分類。NI等[3]將反匯編的惡意軟件代碼轉換為基于SimHash的灰度圖像,然后通過卷積神經網絡識別惡意軟件所屬家族。郗桐等[4]將可執行文件的匯編操作碼序列映射為矩陣,然后使用卷積神經網絡作為檢測模型。張晨斌等[5]將惡意軟件以字節為單位生成一個像素值,以固定像素寬度將惡意軟件轉換為灰度圖,然后使用包括CNN等多個分類器進行檢測。張景蓮等[6]利用B2M算法將惡意代碼轉換為灰度圖,并采用單通道的卷積神經網絡學習灰度圖像的紋理特征,通過SoftMax實現惡意代碼家族分類。夏曉玲等[7]把Apk文件解壓后的二進制文件以灰度圖的形式展現,再結合融合模型的高階卷積神經網絡來提高檢測的準確率。李媛媛等[8]提取Android安裝包中的dex可執行文件,將其轉化為灰度數值向量并進行歸一化處理,采用深度神經網絡搭建惡意軟件二分類系統。
深度神經網絡隨著層數的增多,對訓練硬件配置要求更加苛刻,訓練過程往往更加耗時。已有研究多專注于提升惡意代碼檢測的準確率,對于Android惡意代碼的檢測速度還有待提高,通過在深度神經網絡中引入輕量化結構,可以在保持對目標檢測精度的同時大幅提升檢測速度,并且其部署相對簡單、易于實現,多用于移動和嵌入式設備中。本文引入提取 Android 應用程序特征圖像的思想,通過輕量化的卷積神經網絡來完成惡意代碼的檢測工作。
惡意程序的檢測,可分為靜態分析與動態分析。靜態分析不運行待檢測代碼,而是通過直接對程序(如反匯編后的代碼)進行統計分析得到數據特征,而動態分析則在虛擬機或沙箱中執行程序,獲取程序執行過程中所產生的數據(如行為特征、網絡特征),進行檢測和判斷。常用的靜態特征包括程序的二進制文件、從使用IDA Pro等工具進行反匯編得到的匯編代碼中提取的匯編指令、函數調用等信息,另外,基于字符串和基于API調用序列的特征也是比較常見的。
Android軟件在手機上的數據安裝格式為APK安裝包,Android應用程序從編譯到打包為APK安裝包一般會經過三個步驟,如圖1所示。首先,在編譯階段,編譯器將應用模型的應用模塊和相關依賴編譯為dex文件,該文件可以在Dalvik虛擬機上執行;然后,將第一步生成的dex文件和一些已經編譯過的資源打包為APK文件;最后,對APK進行簽名,保證其在Android設備上正常安裝,如圖1所示。

圖1 APK的編譯與打包
本文分析了Android軟件的APK安裝包的編譯過程,提取其中具有代表性的可執行文件classes.dex,它是整個APK文件的核心,可確保文件在Dalvik VM上的正常運行。可執行文件在計算機中是以二進制形式存儲的,通過讀取二進制形式的dex文件,將其輸出為二進制表示的矩陣形式,取8位的二進制碼為一個單元,將其轉化為十進制,每個十進制數映射為灰度圖像中的每一個灰階值,進而實現可執行文件向灰度特征圖的轉換過程(圖2)。

圖2 特征可視化過程
隨著卷積神經網絡在人工智能領域的廣泛應用,對其性能的要求逐漸提高。網絡的不斷加深、數據量的增多以及網絡學習任務的加重使得網絡訓練的效率問題日益突出,主要包含以下兩個問題:(1)網絡層數的不斷增加,會帶來大量的參數,而大量的參數則需要高性能的儲存設備;(2)在真實的應用場景中,檢測任務經常需要是毫秒級別的,即具備很高的實時性,這樣就需要高性能的處理器或是通過優化網絡結構減少計算量。
輕量化模型通過設計高效的網絡計算方式,大幅減小網絡的計算復雜度,同時保持與原先網絡相當的性能。MobileNet-V1模型是為了適應移動端和嵌入式系統的視覺應用而設計的輕量級卷積神經網絡模型[9],如圖3所示,采用深度可分離卷積結構,將標準的卷積結構分解成一個深度卷積和一個點卷積,3×3深度卷積將每個卷積核應用到每一個通道,而1×1點卷積用來組合每個通道的輸出[10],采用深度可分離卷積結構很大程度上減少模型參數數量,提升模型的速度,同時具有較高的分類準確率,可以在保持很高的檢測精度的同時具有很好的檢測速度。本文模型采用深度可分離卷積結構對深度神經網絡進行改造,將其設計為適用于移動智能設備上的檢測任務,可以保證移動設備上檢測的準確性和快速性。

圖3 標準卷積和深度可分離卷積
深度可分離卷積結構將標準的卷積分成兩個部分:DWConv和PWConv。DWConv指對每個輸入通道單獨使用一個3×3的卷積核,PWConv是指1×1的點卷積,用于組合DWConv卷積的輸出,表1為MobileNet-V1網絡具體結構。

表1 MobileNet-V1結構

續表


(1)
因此,深度可分離卷積計算量是標準卷積計算量的1/N,可以很大程度上減少網絡的計算復雜度。
本模型選擇輕量化的卷積神經網絡作為一個分類器,將Android軟件分為良性軟件和惡意軟件。主要有以下步驟:(1)數據采集與預處理;(2)模型設計;(3)模型訓練與評估。
一般深度學習都是直接將原數據作為輸入,但是由于有些Android應用軟件比較大,對于其特點的學習效率過低,一般都是從源數據中提取一些可以描述應用的特征。本文數據集包含良性軟件和惡意軟件兩種類型,其中良性軟件下載自Google play市場,惡意軟件來自加拿大安全研究所提供的公共數據集[11],選擇其中良性軟件和惡意軟件安裝包各1 481個,提取其中的classes.dex可執行文件,將其轉化為二進制表達的矩陣形式。本文采用卷積神經網絡來訓練,考慮將圖像作為輸入,即實現惡意軟件的可視化,將處理后的二進制數據轉化生成對應的灰度圖像,將構造的數據特征轉換成適用于卷積神經網絡輸入的數據類型,圖4為可執行文件轉化后生成的灰度特征圖像。

(a)良性軟件 (b)惡意軟件圖4 良性軟件和惡意軟件灰度圖像
本文模型主要分為兩個部分,首先提取Android軟件APK壓縮包中的可執行文件,采用可視化方法將二進制文件轉換成灰度圖像。然后搭建輕量化的卷積神經網絡,進行檢測模型的訓練與調參。在Windows環境下,基于Tensorflow框架搭建卷積神經網絡檢測模型,并對模型進行輕量化改造,將第一步預處理后的數據作為輸入,輸入搭建好的輕量化卷積神經網絡,通過網絡的迭代訓練來學習惡意軟件樣本數據的全局泛化特征,實時監控訓練損失變化,并根據模型檢測的精度和速度不斷調節訓練參數,模型結構設計如圖5所示。

圖5 本文模型結構
本文基于Windows10系統,顯卡為NVIDIA GTX1050Ti,在主流的Tensorflow學習框架上搭建本文模型,并引入傳統的VGG16網絡作為對比,將預處理后的灰度圖片按照訓練集、測試集為7∶3的比例隨機抽取并轉換為tfrecord文件,設置Batch size為32,迭代學習10萬步,通過Tensorboard實時監控訓練過程中損失變化,圖6為迭代過程中的總損失值變化。

圖6 總損失值變化
為了便于訓練模型的定量測試,使用準確率、圖片檢測速度和參數量三個指標來評估本文模型分類的效果,其中,準確率定義為
(2)
其中,TP表示被正確分類為惡意樣本的數量,TN表示被正確分類為良性軟件的數量,P表示總體的惡意軟件樣本數,N表示總體的良性軟件樣本數。
將傳統VGG16模型和本文模型準確率、圖片檢測速度和參數量三個指標進行對比,如表2所示。

表2 模型評估參數對比
根據評估結果可以看出,本文搭建的輕量化的卷積神經網絡較傳統方法,可以在保持較高準確率的同時,很大程度上減少網絡的參數量,提高圖片檢測速度,滿足對移動端惡意軟件快速且準確分類的要求。
本文將特征可視化與卷積神經網絡相結合,設計了一種輕量化卷積神經網絡的惡意軟件分類模型,首先通過分析惡意軟件的靜態特征,對惡意軟件安裝包中可執行文件進行特征可視化,將其轉化為對應的灰度圖像,然后引入卷積神經網絡用于惡意軟件的識別。模型可以很好地學習惡意軟件的深層次特征,具有很高的魯棒性。同時,對于標準卷積在特征學習過程中計算復雜度較大的問題,對卷積神經網絡進行輕量化改造,大幅減少卷積神經網絡的訓練參數,能夠兼顧準確性與實時性的要求,適用于移動設備上端到端的實時分類任務。