羅世奇,田生偉,禹 龍,于 炯,孫 華
(1.新疆大學 軟件學院,烏魯木齊 830008; 2.新疆大學 網(wǎng)絡(luò)中心,烏魯木齊 830046)(*通信作者電子郵箱yul_xju@163.com)
隨著安卓市場規(guī)模的擴大,大量的移動終端廣泛被人們使用。因此,安卓智能終端出現(xiàn)了諸多的信息安全攻擊與防護問題,很多用戶的隱私被惡意代碼(惡意代碼是一些惡意的軟件,即廣義的病毒)獲取。2017年5月,一種名為WannaCry(永恒之藍)的電腦勒索病毒正在全球蔓延,已超過100個國家受到病毒感染。最嚴重的地區(qū)集中在美國、歐洲、澳洲等地區(qū),同時也由國外進入中國,而國內(nèi)受影響最嚴重的主要集中在高校,并蔓延至機場、海關(guān)、公安網(wǎng)等大型公共服務區(qū)域。在移動終端領(lǐng)域,Android平臺已經(jīng)成為了一個非常流行的手機操作系統(tǒng)平臺,并且占據(jù)了世界上超過一半的手機操作系統(tǒng)市場份額。隨著Android智能手機與Android平板電腦的大熱與普及,Android手機病毒也發(fā)展迅猛[1]。如何對Android惡意代碼進行檢測就顯得尤為關(guān)鍵,因此,惡意代碼的特征提取、識別預測是當前網(wǎng)絡(luò)空間安全領(lǐng)域研究的熱點。
目前,國內(nèi)基于安卓平臺的各類應用程序還處在快速發(fā)展中。其惡意代碼還沒有引起計算機用戶足夠的重視,針對基于安卓平臺惡意代碼的分析手段還處在探索階段。就惡意代碼分析與檢測領(lǐng)域,代表性的研究如下:
李挺等[2]提出了一種基于Dalvik指令的Android惡意代碼特征形式化描述和分析方法,能夠在無需反編譯應用程序的基礎(chǔ)上,快速檢測樣本的惡意特征。該方法首先依照DEX文件格式對Android應用程序進行切分,得到以方法為單位的指令塊,通過對塊中Dalvik指令進行形式化描述以實現(xiàn)程序特征的簡化和提取,之后綜合使用改進的軟件相似度度量算法和閔可夫斯基距離算法計算提取特征與已知惡意特征的相似度,并根據(jù)相似度比對結(jié)果來判定當前待測軟件是否含有惡意代碼。陳鐵明等[3]提出了一個Android惡意代碼的靜態(tài)檢測系統(tǒng)Maldetect,首先采用逆向工程將DEX文件轉(zhuǎn)化為Dalvik指令并對其進行簡化抽象,再將抽象后的指令序列進行N-Gram編碼作為樣本訓練,最后利用機器學習算法創(chuàng)建分類檢測模型,并通過對分類算法與N-Gram序列的組合分析,提出了基于3-Gram和隨機森林的優(yōu)選檢測方法。胡文君等[4]綜合靜態(tài)和動態(tài)分析技術(shù),設(shè)計實現(xiàn)了Android惡意代碼檢測系統(tǒng)。在靜態(tài)分析部分,提取Android程序中的權(quán)限、程序編程接口(Application Programming Interface, API)調(diào)用序列、組件、資源以及APK結(jié)構(gòu)構(gòu)建特征向量,應用相似性度量算法,檢測已知惡意代碼家族的惡意代碼樣本,在動態(tài)分析部分,通過修改Android源碼、重新編譯成內(nèi)核鏡像,使用該鏡像文件加載模擬器,實時監(jiān)控Android程序的文件讀寫、網(wǎng)絡(luò)連接、短信發(fā)送以及電話撥打等行為,基于行為的統(tǒng)計分析檢測未知惡意代碼。Arp等[5]利用支持向量機(Support Vector Machine, SVM)對安卓惡意代碼進行檢測。本文作者已探索利用深度學習方法對Microsoft惡意代碼進行檢測,并且取得了不錯的效果[6-7]。
綜上所述,目前的惡意代碼研究可以劃分為:基于靜態(tài)分析的方法[8]、基于動態(tài)分析的方法[9]和基于動靜態(tài)融合分析的方法(基于特征碼+基于行為分析的技術(shù))[10]。
這些研究雖然取得了不錯的進展,但是仍然存在以下不足:
1)傳統(tǒng)的方法(基于簽名、特征匹配、特征碼)對于指數(shù)級增長的惡意代碼,不能達到很好的識別和分類效果,并且單純依賴人工作業(yè)制定規(guī)則,不能夠全面地抽取并篩選出惡意代碼的特征。
2)惡意代碼靜態(tài)分析方法不能檢測到運行中釋放的惡意代碼。惡意代碼動態(tài)分析無法處理的靜態(tài)的應用程序,基于動態(tài)分析方法在程序運行時執(zhí)行,全面監(jiān)視惡意代碼的執(zhí)行過程,但是分析過程相當耗時,對實時性要求較高,必須確保在惡意程序?qū)ο到y(tǒng)產(chǎn)生危害之前檢測出威脅。并且,目前動態(tài)分析方法在系統(tǒng)應用層對系統(tǒng)函數(shù)進行監(jiān)控,缺乏對內(nèi)存和寄存器方面的檢測,很難對內(nèi)核級惡意代碼進行檢測,從而很難確保惡意代碼分析的完整性。
本文在利用惡意代碼紋理指紋與惡意代碼活動向量空間相結(jié)合的基礎(chǔ)之上,利用棧式自編碼模型對安卓惡意代碼進行檢測,主要工作如下:
本文探索惡意代碼紋理指紋與惡意代碼活動向量空間的基礎(chǔ)之上,利用棧式自編碼模型對安卓惡意代碼進行檢測,主要工作如下:
1)利用惡意代碼紋理指紋體現(xiàn)二進制塊的相似性,表示惡意代碼的靜態(tài)特征;利用惡意代碼活動向量空間代表惡意代碼的動態(tài)特征。利用動態(tài)特征和靜態(tài)特征相的結(jié)合的方式來分析惡意代碼。
2)采用深度學習機制,模擬人腦對惡意代碼數(shù)據(jù)進行特征抽取、篩選,從而達到良好的分類與檢測效果。
Android惡意代碼分析檢測技術(shù),采用深度學習中常見的神經(jīng)網(wǎng)絡(luò)模型棧式自編碼。棧式自編碼屬于分層模型,第一層為可視層,也叫輸入層,頂層一般為分類器層,中間層均稱為隱藏層,網(wǎng)絡(luò)中的節(jié)點稱為神經(jīng)元。
棧式自編碼神經(jīng)網(wǎng)絡(luò)是一個由多層自編碼器(Auto Encoder, AE)組成的神經(jīng)網(wǎng)絡(luò),其前一層自編碼器的輸出作為其后一層自編碼器的輸入。通過逐層貪婪訓練法依次訓練網(wǎng)絡(luò)的每一層,進而預訓練整個深度神經(jīng)網(wǎng)絡(luò)。
AE是一種三層神經(jīng)網(wǎng)絡(luò)模型,包含了數(shù)據(jù)輸入層、隱藏層、輸出重構(gòu)層,同時它是一種無監(jiān)督學習模型。它嘗試學習一個和原數(shù)據(jù)相近的近似函數(shù)h(x)≈x,這也是它屬于無監(jiān)督神經(jīng)網(wǎng)絡(luò)的原因。自編碼網(wǎng)絡(luò)包含兩個過程:
1)從輸入層到隱藏層,即原始數(shù)據(jù)x的編碼過程:
h=gθ1(x)=f(W1x+b)
(1)
2)從隱藏層到輸出層,即數(shù)據(jù)的解碼過程:
(2)
其中:x表示原始數(shù)據(jù)輸入;h(x)表示學習一個和原數(shù)據(jù)相近的近似函數(shù);神經(jīng)元的激活函數(shù)f(z)指Sigmoid函數(shù),即f(z)=1/(1+exp(-z))。
圖1 自編碼結(jié)構(gòu)
圖1中,“+1”表示偏置項(截距項)的系數(shù),xi表示輸入層的神經(jīng)元單元,ai表示隱藏層的神經(jīng)元單元,yi表示輸出層的神經(jīng)元單元。
為了學習到輸入數(shù)據(jù)的高層特征并壓縮數(shù)據(jù),隱藏層神經(jīng)元數(shù)小于可視層神經(jīng)元數(shù),它的輸出向量即為原始數(shù)據(jù)的抽象表示,隱藏層的輸出可以表示如下:
hW,b(x)=sigmoid(Wx+b)
(3)
其中:W為權(quán)重參數(shù)矩陣;b為偏執(zhí)項;x為輸入向量。整個網(wǎng)絡(luò)的代價可表示如下:
(4)
棧式自編碼(Stacked AE, SAE)[11]是自編碼器(AE)的深度形式,含有多個隱藏層。相對于AE,它能提取更抽象的特征。SAE如圖2所示。圖2中,“+1”表示偏置項(截距項)的系數(shù),xi表示輸入層的神經(jīng)元單元,ai表示隱藏層的神經(jīng)元單元,bi表示隱藏層的神經(jīng)元單元,yi表示輸出層的神經(jīng)元單元,神經(jīng)元的激活函數(shù)采用Sigmoid函數(shù)。
最后,整個模型通過Softmax分類器進行微調(diào)。Softmax回歸是邏輯回歸的擴展形式,通過估算樣本所屬類別的概率對多個類別的樣本進行分類。其基本思想是設(shè)訓練樣本及標簽數(shù)據(jù)為{(x1,y1),(x2,y2),…,(xn,yn)},xi為訓練樣本,yi∈{1,2,…,n}為xi對應的標簽,則估計樣本xi在Softmax函數(shù)中所對應的類別標簽k的概率為:
(5)
圖2 棧式自編碼結(jié)構(gòu)
實驗數(shù)據(jù)來源于Drebin安卓惡意代碼數(shù)據(jù)集,其樣本收集了2010年8月—2012年10月。GooglePlay Store等大型Android應用市場的AndroidPackage文件,可以通過http://user.cs.uni-goettingen.de/~darp/drebin獲取數(shù)據(jù)集。在Drebin數(shù)據(jù)中共有129 013個數(shù)據(jù)集樣本,其中Android惡意代碼有5 560個,良性Android代碼樣本有123 453個。
圖5 基于SAE的Android惡意代碼指紋特征篩選
將帶標簽的安卓惡意代碼進行預處理,具體步驟如圖3所示:
1)對Android應用進行分析,利用Android軟件開發(fā)工具(Software Development Kit,SDK)中自帶的安卓資產(chǎn)打包工具(Android Assert Packaging Tool, AAPT)對每個安卓應用(即APK)進行解壓縮,得到Android Manifest.xml文件、lib庫等文件。
2)通過APK tool工具和shell腳本提取Android惡意程序樣本的權(quán)限。
3)使用Android原生軟件開發(fā)工具包NDK(Native Development Kit)中的arm-linux-Androideabi-readelf.exe提取native代碼,編譯鏈接后生成ELF文件的函數(shù)調(diào)用序列。
圖3 Android惡意代碼預處理
Android惡意代碼檢測與分析技術(shù)研究中,特征提取的好壞直接影響了分類與檢測的準確率。因此,實驗中首先對數(shù)據(jù)進行預處理,然后提取惡意代碼紋理和惡意代碼向量空間特征。
2.3.1 惡意代碼紋理指紋特征
根據(jù)同一類型的惡意代碼在紋理指紋上具有一定的相似性,本文提出了一種基于紋理指紋的惡意代碼特征提取及檢測方法。通過結(jié)合圖像處理技術(shù)與惡意代碼檢測技術(shù),將惡意代碼映射為無壓縮的灰階圖片[12-16]。本文在借鑒前人的研究之上,探索利用惡意代碼紋理指紋特征對惡意代碼進行分類,與以往利用紋理指紋就行惡代碼變種檢測方法[15]不同的是,本文是利用紋理特征對惡意代碼進行特征提取與分類。
圖4 惡意代碼紋理指紋分析
基于棧式自編碼的Android惡意代碼紋理指紋特征篩選策略,將特征提取、描述后的Android惡意代碼特征以灰度的方式展示出來,采用棧式自編碼無監(jiān)督學習算法構(gòu)建深度網(wǎng)絡(luò)模型,利用經(jīng)過預處理的惡意代碼數(shù)據(jù)逐級無監(jiān)督訓練每層網(wǎng)絡(luò),并最終利用Softmax分類器進行調(diào)整,對Android惡意代碼紋理指紋進行特征篩選,如圖5所示。
2.3.2 惡意代碼活動向量空間特征
Android惡意代碼API調(diào)用通常反映特定的模式軟件的動態(tài)活動,例如惡意代碼發(fā)送短信會調(diào)用SEND_SMS作為許可,使用撥號功能會調(diào)用android.hardware.telephony作為許可。類比自然語言處理中詞向量的概念,本文提出了惡意代碼活動向量空間,將惡意代碼映射到向量空間。
本文利用集合S,定義一個|S|維的特征特征向量空間,如果對于一個Android惡意代碼樣本APKi,若調(diào)用SEND_SMS等活動則向量空間映射為1(多次調(diào)用則為次數(shù)n),反之為0。向量空間的構(gòu)建如下所示:
Android系統(tǒng)具有嚴格的權(quán)限管理機制,很多與用戶體驗和數(shù)據(jù)相關(guān)的功能都設(shè)定了各自的使用權(quán)限,因此在實現(xiàn)其惡意行為時,需要相應的權(quán)限。例如,選取的惡意代碼活動包括敏感權(quán)限(SEND_SMS、SendSMS)、入口點和惡意模塊(Activity、 permission)。本文選取33類惡意代碼活動,選取的具有代表性的惡意代碼活動。
1) android.hardware.telephony
2) android.permission.INTERNET
3) android.permission.READ_PHONE_STATE
4) android.permission.ACCESS_CACHE_FILESYSTEM
5) android.permission.READ_LOGS
6) android.hardware.screen.portrait
7) android.hardware.screen.landscape
8) SEND_SMS
9) SendSMS
10) android.hardware.wifi
11) android.intent.action.MAIN
12) android.hardware.camera
13) android.intent.category.LAUNCHER
14) android.permission.WAKE_LOCK
15) android.permission.VIBRATE
16) android.hardware.location.network
17) getSystemService
18) getSubscriberId
19) android.permission.RECEIVE_BOOT_COMPLETED
20) android.permission.ACCESS_NETWORK_STATE
21) DELETE_PACKAGES
22) WebView
23) ru.alpha.AlphaReceiver
24) android/telephony/TelephonyManager
25) BootReceiver
26) Obfuscation
27) android/content/Context
28) RestartAppTrigger
29) android.hardware.location.gps
30) android/media/AudioManager
31) android.permission.CALL_PHONE
32) HttpPost
33) android/location/LocationManager
2.3.3 特征融合
為確保分析與檢測準確率的提高,融合本文提出惡意代碼紋理指紋和惡意代碼活動向量空間。
1) subtrainLabel= pd.read_csv(′label.csv′)
2) subtrainfeature1= pd.read_csv("imgfeature.csv")
3) subtrainfeature2= pd.read_csv("call.csv")
4) subtrain= pd.merge(subtrainfeature1,subtrainfeature2,on=′Id′)
5) subtrain= pd.merge(subtrain,subtrainLabel,on=′Id′)
6) labels=subtrain.Class
7) subtrain.drop(["Class","Id"], axis=1, inplace=True)
8) subtrain=subtrain.as_matrix()
融合上述兩類特征之后,訓練自編碼器和Softmax分類器,如圖6所示。
圖6 基于SAE的Android惡意代碼分析檢測模型
實驗環(huán)境如表1所示,實驗所需python模塊如表2所示。
表1 實驗環(huán)境
表2 實驗需要的python模塊
本文實驗選取了不同的數(shù)據(jù)樣本來確定可變參數(shù)(特征數(shù)目、網(wǎng)絡(luò)層數(shù)等),分別有1 550、2 620、5 825、6 956條實驗數(shù)據(jù),其中60%的樣本數(shù)據(jù)為訓練數(shù)據(jù),其他為測試數(shù)據(jù);同時使用統(tǒng)一的統(tǒng)計指標來評價模型的性能,準確率(Accuracy, A)由式(6)來衡量:
A=(TP+TN)/(TP+TN+FP+FN)
(6)
其中:TP代表真陽性的個數(shù);FP代表假陽性的個數(shù);TN代表真陰性的個數(shù);FN代表假陰性的個數(shù)。
表3 基于混淆矩陣的 TP、TN、FP、FN
實驗中的可變參數(shù)包括特征數(shù)目、網(wǎng)絡(luò)層數(shù)等,為使實驗結(jié)果達到最優(yōu),在相同的數(shù)據(jù)集上,對可變參數(shù)進行調(diào)試,選出最優(yōu)參數(shù)。實驗結(jié)果如圖7所示。
圖7 紋理指紋特征數(shù)目對于準確率的影響
從圖7可看出,當紋理指紋特征數(shù)目為2 000時準確率最高,表明當紋理指紋特征為2 000時能夠很好地代表惡意代碼的特征,達到很好的分類效果。
從圖8可看出,當SAE網(wǎng)絡(luò)層數(shù)為4層時準確率最高。因此后續(xù)實驗中模型的參數(shù)的設(shè)定如表4所示。
圖8 SAE網(wǎng)絡(luò)層數(shù)對于準確率的影響
為驗證紋理指紋特征對于實驗結(jié)果有著重要的影響,在上述參數(shù)模型的基礎(chǔ)上對使用紋理指紋特征融合惡意代碼活動向量空間和只采用惡意代碼活動向量空間進行對比實驗,結(jié)果如圖9所示。
圖9 紋理指紋特征對于準確率的影響
紋理指紋特征對于準確率有著重要的影響。從圖9可看出,加入紋理指紋特征后分類準確率明顯上升。
根據(jù)上述實驗結(jié)果,使用棧式自編碼模型融合惡意代碼活動向量空間和惡意代碼紋理指紋特征,與經(jīng)典傳統(tǒng)算法支持向量機SVM進行對比實驗。實驗結(jié)果如圖10所示。
圖10 同支持向量機模型對比
從圖10可以看出,與SVM相比,棧式自編碼模型結(jié)合惡意代碼紋理指紋和惡意代碼活動向量空間特征,能夠有效地識別出惡意代碼。
本文與在利用Android惡意代碼活動向量空間特征的基礎(chǔ)之上,提出了惡意代碼紋理指紋特征;并探索利用棧式自編碼模型來提取惡意代碼紋理指紋和惡意代碼活動向量空間特征。實驗結(jié)果表明,提出的棧式自編碼的Android惡意代碼分析檢測模型,平均分類準確率可達94.9%,比SVM提高1.1個百分點。
參考文獻(References)
[1] TAM K, FEIZOLLAH A, ANUAR N B, et al. The evolution of Android malware and Android analysis techniques[J]. ACM Computing Surveys, 2017, 49(4): 76.
[2] 李挺, 董航, 袁春陽, 等. 基于Dalvik指令的Android惡意代碼特征描述及驗證[J]. 計算機研究與發(fā)展, 2014, 51(7): 1458-1466.(LI T, DONG H, YUAN C Y, et al. Description of Android malware feature based on dalvik instructions[J]. Journal of Computer Research and Development, 2014, 51(7): 1458-1466.)
[3] 陳鐵明, 楊益敏, 陳波. Maldetect: 基于Dalvik指令抽象的Android惡意代碼檢測系統(tǒng)[J]. 計算機研究與發(fā)展, 2016, 53(10): 2299-2306.(CHEN T M, YANG Y M, CHEN B. Maldetect: an Android malware detection system based on abstraction of dalvik instructions[J]. Journal of Computer Research and Development, 2016, 53(10): 2299-2306.)
[4] 胡文君, 趙雙, 陶敬, 等. 一種針對Android平臺惡意代碼的檢測方法及系統(tǒng)實現(xiàn)[J]. 西安交通大學學報, 2013, 47(10): 37-43.(HU W J, ZHAO S, TAO J, et al. A detection method and system implementation for Android malware[J]. Journal of Xi’an Jiaotong University, 2013, 47(10): 37-43.)
[5] ARP D, SPREITZENBARTH M, HüBNER M, et al. DREBIN: effective and explainable detection of Android malware in your pocket[EB/OL]. [2017- 05- 10]. https: //www.tu-braunschweig.de/Medien-DB/sec/pubs/2014-ndss.pdf.
[6] 羅世奇, 田生偉, 孫華, 等. 深度信念網(wǎng)絡(luò)的惡意代碼分類策略研究[J]. 小型微型計算機系統(tǒng), 2017, 38(11): 2465-2470.(LUO S Q, TIAN S W, SUN H, 等. Research strategy of classify malicious code into families on the method of deep belief networks[J]. Journal of Chinese Computer Systems, 2017, 38(11): 2465-2470.)
[7] 羅世奇, 田生偉, 孫華, 等. 棧式自編碼的惡意代碼分類算法研究[J]. 計算機應用研究, 2018, 35(1): 261-265.(LUO S Q, TIAN S W, SUN H, et al. Research on malicious code classification algorithm of stacked auto encoder[J]. Application Research of Computers, 2018, 35(1): 261-265.)
[8] SESHAGIRI P, VAZHAYIL A, SRIRAM P. AMA: static code analysis of Web page for the detection of malicious scripts [J]. Procedia Computer Science, 2016, 93: 768-773.
[9] SHIBAHARA T, YAGI T, AKIYAMA M, et al. Efficient dynamic malware analysis based on network behavior using deep learning[C]// Proceedings of the 2016 IEEE Global Communications Conference. Piscataway, NJ: IEEE, 2017: 1-7.
[10] MOSER A, KRUEGEL C, KIRDA E. Limits of static analysis for malware detection[C]// Proceedings of the Twenty-Third Annual Computer Security Applications Conference. Piscataway, NJ: IEEE, 2007: 421-430.
[11] CAO S, YANG N, LIU Z. Online news recommender based on stacked auto-encoder[C]// Proceedings of the 2017 IEEE/ACIS 16th International Conference on Computer and Information Science. Piscataway, NJ: IEEE, 2017: 721-726.
[12] NATARAJ L, KARTHIKEYAN S, JACOB G, et al. Malware images: visualization and automatic classification[C]// VizSec 2011: Proceedings of the 8th International Symposium on Visualization for Cyber Security. New York: ACM, 2011: Article No. 4.
[13] SHAID S Z M, MAAROF M A. Malware behavior image for malware variant identification[C]// Proceedings of the 2014 International Symposium on Biometrics and Security Technologies. Piscataway, NJ: IEEE, 2015: 238-243.
[14] KANCHERLA K, MUKKAMALA S. Image visualization based malware detection[C]// Proceedings of the 2013 IEEE Symposium on Computational Intelligence in Cyber Security. Piscataway, NJ: IEEE, 2013: 40-44.
[15] 韓曉光, 曲武, 姚宣霞, 等. 基于紋理指紋的惡意代碼變種檢測方法研究[J]. 通信學報, 2014, 35(8): 125-136.(HAN X G, QU W, YAO X X, et al. Research on malicious code variants detection based on texture fingerprint[J]. Journal on Communications, 2014, 35(8): 125-136.)
[16] 韓曉光, 姚宣霞, 曲武, 等. 基于圖像紋理聚類的惡意代碼家族標注方法[J]. 解放軍理工大學學報(自然科學版), 2014(5): 440-449.(HAN X G, YAO X X, QU W, et al. Malicious code family tagging based on image texture clustering technology[J]. Journal of PLA University of Science and Technology (Natural Science Edition), 2014(5): 440-449.)
This work is partially supported by the Scientific Research Innovation Project of Education Innovation Plan for Graduate Students in Xinjiang Uygur Autonomous Region (XJGRI2017007), the Science and Technology Talent Training Project of Xinjiang Uygur Autonomous Region (QN2016YX0051), the Cernet Next Generation Internet Technology Innovation Project (NGII20170420).