王 濤 李 劍
(北京郵電大學計算機學院 北京 100876)
隨著科技的發(fā)展,近年來手機已經(jīng)成為人們?nèi)粘I畹谋貍淦?根據(jù)IDC季度手機追蹤報告,在2017年第1季度各大公司全球出貨量達到3.443億部[1].自從2010年8月卡巴斯基首次發(fā)現(xiàn)短信特洛伊木馬程序以來,Android惡意軟件的數(shù)量急劇增加.從那時起,Android惡意軟件不斷發(fā)展,越來越復雜,也不斷地增強措施避免被檢測出來.正如Zhou等人[ 2 ]的研究所揭示的,惡意軟件家族通過增加代碼混淆、隱蔽的命令和控制通信通道等正在不斷加強躲避檢測.這些反分析技術(shù)不僅降低了傳統(tǒng)基于簽名檢測的效果,而且顯著提高了在Android應用程序中發(fā)現(xiàn)惡意行為和代碼的難度.專門針對Android設(shè)備的惡意軟件自2010年以來以驚人的速度增長.
研究表明,由于難以發(fā)現(xiàn)惡意行為,Android惡意軟件可能在3個月內(nèi)被忽視[3].大多數(shù)反病毒檢測能力依賴于更新的惡意軟件簽名庫的存在,因此,一旦發(fā)生未遇到的惡意軟件傳播,用戶就處于危險之中.由于反病毒供應商的響應時間可能在幾個小時到幾天之間,來識別惡意軟件,生成簽名,再更新到其客戶的簽名數(shù)據(jù)庫,黑客有一個實質(zhì)性的機會去攻擊中毒用戶,但是基于簽名的防病毒引擎平均需要48 d才能發(fā)現(xiàn)新的威脅.盡管谷歌推出了“Bouncer”,為其應用程序商店篩選提交惡意行為的應用程序,很多用戶還是處在風險之中.
顯然,我們需要改進檢測方法,考慮到Android惡意軟件的發(fā)展和迫切需要減少出現(xiàn)以前未見過的病毒所帶來的威脅的機會.因此,不同于現(xiàn)有的Android惡意軟件工作,本文提出了一種基于一般深度學習的檢測模型,有效地提高了惡意代碼檢測的性能.
近年來,隨著智能手機市場的不斷增加,基于Android的惡意軟件檢測技術(shù)得到了積極的研究.APK文件是在Android操作系統(tǒng)上的安裝軟件,每個APK必須有一個Manifest文件.該文件提供了關(guān)于Android操作系統(tǒng)應用程序的基本信息.它聲明應用程序必須具有哪些權(quán)限,以便訪問API的受保護部分,并與其他應用程序交互.為了保護Android用戶,應用程序?qū)Y源的訪問受到嚴格的權(quán)限限制.應用程序必須獲得權(quán)限才可以使用,例如藍牙或攝像機之類的敏感資源.Sanz等人[4]通過從應用程序自身提取的權(quán)限組合,開發(fā)了一種基于機器學習檢測的工具.ADROIT項目[5]中通過查看和分析運行時的meta-data去檢測惡意程序,建立一個高精度的分類器.
文獻[6]提出了一個基于機器學習的Android惡意軟件檢測系統(tǒng).基于離線方式的支持向量機(SVM)提取和訓練了權(quán)限和控制流圖(CFG)特征,然而該實驗在實時檢測時仍不能很好地解決問題.文獻[5,7]分析了權(quán)限和其他特性,并應用各種機器學習分類器達到86%的準確率.Zhou等人[2]根據(jù)所請求的權(quán)限和行為方面的相似性,如安裝方法,檢測Android惡意軟件.
研究的另一個方面是對系統(tǒng)調(diào)用的分析.Xiao等人[8]提出了一個新的方案稱為人工神經(jīng)網(wǎng)絡(luò)(ANN)對共生矩陣的機器人(ANNCMDroid),利用共生矩陣挖掘相關(guān)的系統(tǒng)調(diào)用.他們的主要觀察結(jié)果是系統(tǒng)調(diào)用的相關(guān)性在惡意軟件和良性軟件之間是顯著不同的,它們可以用共生矩陣精確地表達.在DroidAPIMiner[9]中,利用良性應用程序和惡意應用程序的不同API調(diào)用頻率進行分析,生成了不同的分類器來識別惡意軟件.
Bartel等人[10]分析了各種應用程序,發(fā)現(xiàn)有些應用程序聲明權(quán)限,但實際上沒有使用.因此,僅通過對權(quán)限的清單文件分析并不能給出準確的結(jié)果.在Android框架中,一旦安裝了應用程序,在運行時就會調(diào)用一組API.每個API調(diào)用都與特定權(quán)限相關(guān)聯(lián).當調(diào)用API時,Android操作系統(tǒng)檢查用戶是否批準了它的相關(guān)權(quán)限.只有當它匹配時,它才能繼續(xù)執(zhí)行某個API調(diào)用.因此API調(diào)用提供了一個信息,一個許可是否被實際使用.
動態(tài)特征指的是應用程序在移動設(shè)備上的安裝行為,包括應用程序在操作系統(tǒng)或網(wǎng)絡(luò)中的行為.應用程序使用系統(tǒng)調(diào)用來執(zhí)行特定的任務,如讀、寫和打開,因為它們不能直接與Android操作系統(tǒng)交互.當在用戶模式下發(fā)出系統(tǒng)調(diào)用時,Android操作系統(tǒng)切換到內(nèi)核模式以執(zhí)行所需的任務.此外,大多數(shù)應用程序需要網(wǎng)絡(luò)連接.在Zhou等人[2]研究中,他們收集的Android惡意軟件樣本中有93%需要網(wǎng)絡(luò)連接,以便與攻擊者連接.
淺層學習無法學習到更全面的Android惡意軟件的安全語義信息;本文基于深度學習研究Android惡意軟件檢測問題,提高了特征對Android軟件的安全語義信息的表達,增加模型對安全語義信息的學習和理解能力.本系統(tǒng)采用基于深度學習的SDA方法研究Android惡意軟件的分類問題.SDA方法是多隱層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),可以逐層分析,優(yōu)化每一層得到的特征向量表示,因此它提取的特征向量可以更準確地表達Android軟件的安全語義信息,提高檢測結(jié)果.
本文設(shè)計并實現(xiàn)了一種基于深度學習算法的Android惡意軟件檢測的系統(tǒng)SDADLDroid(an Andriod malware detection based on SDA deep learning algorithm),該系統(tǒng)通過對爬蟲爬取到的8 000個良性軟件和7 000個惡意軟件進行特征提取,對數(shù)據(jù)進行分析降維后將選擇到的961個特征利用深度學習算法SDA(stacked denoising autoencoder)建立一個3層神經(jīng)網(wǎng)絡(luò)后,經(jīng)過數(shù)據(jù)集交叉驗證,確定該方法的檢測正確率達到95.8%,豐富了Android惡意軟件的檢測方法,提高了檢測效果.
如圖1所示,系統(tǒng)主要分為三大部分,分別是編寫網(wǎng)絡(luò)爬蟲收集數(shù)據(jù)集,收集每個APK的靜態(tài)代碼特征和動態(tài)行為特征,特征降維后進行深度學習并建立良好的神經(jīng)網(wǎng)絡(luò)進行檢測.
圖1 系統(tǒng)設(shè)計圖
根據(jù)研究表明,Google Play上的應用一般被認為是良性的,所以我們編寫了網(wǎng)絡(luò)爬蟲,隨機地在其中選取了8 000個APK作為本次研究的良性應用數(shù)據(jù)集,并且我們已經(jīng)收集了7 000多個惡意應用軟件.因此本次實驗中,所有的實驗數(shù)據(jù)都是現(xiàn)實世界中發(fā)布的已知的良性和惡意應用軟件,實驗數(shù)據(jù)有良好的真實性.
我們對于每一個APK都利用Apktool進行了反匯編,生成了Smail文件和Manifest文件,對其中重要的靜態(tài)代碼特性(例如權(quán)限、IP地址等)進行抽取,然后對于每一個APK都開啟一個虛擬機并使用DroidBox對生成的Log日志中一些敏感的行為信息進行抽取.將這些靜態(tài)代碼特征和動態(tài)行為特征作為特征庫,利用PCA數(shù)據(jù)降維,對于降維后的數(shù)據(jù)集利用SDA算法構(gòu)建神經(jīng)網(wǎng)絡(luò),最后利用BP算法微調(diào)結(jié)果,這樣我們構(gòu)建的神經(jīng)網(wǎng)絡(luò)就可以用于分類任務了.
2.3.1傳統(tǒng)自編碼
對于BP算法在訓練多層神經(jīng)網(wǎng)絡(luò)所出現(xiàn)的各種問題[11],Hinton等人[12-14]提出了自動編碼機(Autodencoder),為深度學習開創(chuàng)了新思路.自動編碼機是一種無監(jiān)督的算法,不需要對樣本進行標注,就可以有效利用樣本信息,提高模型性能.傳統(tǒng)的自動編碼機分為編碼和解碼2部分.編碼階段將d維輸人向量x定性映射到d′維隱層表示y,映射函數(shù)通常選用Sigmoid:
y=f(x;θ)=s(Wx+b),
(1)
其中W∈d′×d,b∈d′×1.式(1)中s是非線性函數(shù),如Sigmoid.W是輸入層到中間層的連接權(quán)值,b為中間層的bias.解碼階段將得到的結(jié)果表示為y,并且定性地映射到d維重構(gòu)向量z:
z=g(y;θ′)=s(W′y+b′),
(2)
其中W′∈d′×d,b′∈d′×1.式(2)中s是非線性函數(shù),如Sigmoid.W′是輸入層到中間層的連接權(quán)值,b′為中間層的bias.這樣,自編碼訓練就在于用給定的N個樣本優(yōu)化重構(gòu)誤差,優(yōu)化目標交叉熵或者均方誤差L為
(3)
2.3.2降噪自編碼
Vincent等人[15]指出,傳統(tǒng)自編碼在不加生成約束的情況下,很容易直接將輸入向量復制到輸出向量,或者只能產(chǎn)生微小的改變,此時模型只能產(chǎn)生較小的重構(gòu)誤差,表現(xiàn)非常差.當測試數(shù)據(jù)和訓練數(shù)據(jù)相差很大,并且也不符合同一分布時,訓練效果也表現(xiàn)得非常差.為此,Vincent等人[15-16]提出了新的自編碼算法,即降噪自編碼(denoising autoencoder, DAE)算法,如圖2所示.該算法將樣本x進行毀壞改造,以一定的概率讓某些輸入層節(jié)點的值置0,從而使原樣本變?yōu)閤′,再用x′訓練隱藏層:
y=f(x′;θ)=s(Wx′+b),
(4)
其余過程采用式(2)(3),與傳統(tǒng)AE相同.
圖2 降噪自編碼(DAE)
2.3.3構(gòu)建分類模型
使用隱層輸出y作為新的輸人特征,多次重復DAE,就構(gòu)成了SDA深度結(jié)構(gòu).Bengio等人[17-18]指出,不同的特征表示能突顯或剔除數(shù)據(jù)的某些解釋因子,從而具有不同的表示能力. 因此,SDA過程的目的在于尋找到一個比原始特征更適合任務要求的特征表示方法.完成深度結(jié)構(gòu)后,添加節(jié)點與類別個數(shù)相同的輸出層,將最后得到的特征表示作為該輸出層的輸入.接下來將保存的訓練得到的各層權(quán)值矩陣、偏置項等作為初始參數(shù),用BP算法微調(diào)整個SDA神經(jīng)網(wǎng)絡(luò),就能用于分類任務.
在本次實驗中,我們使用自己爬取的7 000個良性軟件和6 000個惡意軟件作為訓練數(shù)據(jù),1 000個良性軟件和1 000個惡意軟件作為驗證數(shù)據(jù).
本實驗采用準確率ACC,TPR,FPR,查準率P(precision),查全率R(recall),f-measure作為評價指標來衡量模型的效果.TP(true positive),FN(false negative),TN(true negative),FP(false positive).各個標準的計算公式和含義如下.
TPR:被正確分類的樣本數(shù)目比率;
FPR:被錯誤分類的樣本數(shù)目比率;
查準率:P=提取出的正確信息條數(shù)提取出的信息條數(shù);
查全率:R=提取出的正確信息條數(shù)樣本中的信息條數(shù);
f-measure:準確率和召回率加權(quán)調(diào)和平均.
表1展示了各種算法評價指標:
表1 算法評測指標
本次實驗中采用了10份驗證集和5個分類器,表2顯示了5個分類器中不同的準確率ACC、準確肯定率TPR、錯誤肯定率FPR、查準率P、查全率R以及F測度f-measure.
表2實驗結(jié)果
%
分類器ACCTPRFPRPRf-measureNB65.654.822.569.954.861.4Logistic73.771.223.874.971.273.0RT83.187.521.380.487.583.8MLP88.091.215.285.791.288.3SDA95.895.23.696.395.295.2
從實驗結(jié)果分析可以看出,我們構(gòu)建的3層神經(jīng)網(wǎng)絡(luò)[700,700,700]能夠達到最好的準確率,是一個良好的分類器,對比其他一般機器學習算法,深度學習能夠更好地完成分類任務.深度學習作為一種特征學習方法,可以把原始數(shù)據(jù)通過一些簡單的但是非線性的模型轉(zhuǎn)變成為更高層次的、更加抽象的表達.通過足夠多的轉(zhuǎn)換的組合,非常復雜的函數(shù)也可以被學習.傳統(tǒng)的方法是手工設(shè)計良好的特征提取器,這需要大量的工程技術(shù)和專業(yè)領(lǐng)域知識.但是如果通過使用通用學習過程而得到良好的特征,那么這些都是可以避免的.這就是深度學習的關(guān)鍵優(yōu)勢.而我們的系統(tǒng)恰好就采用深度學習的優(yōu)勢去避免淺層機器學習的劣勢,從而解決Android安全問題.因此,本系統(tǒng)能達到更高的可信度和更好的效率.
通過全面分析Android應用軟件中的安全隱患問題,提出相應的對策和建議.本文提出了基于深度學習的BP算法微調(diào)SDA神經(jīng)網(wǎng)絡(luò)的方法,通過實驗表明,該模型可以調(diào)高檢測精度,提升檢測性能,擁有較高的準確率.
[1]IDC. Smartphone OS market share[EB/OL].[2017-04-27]. https://www.idc.com/promo/smartphone-market-share/os
[2]Zhou Y, Jiang X. Dissecting Android malware: Characteri-zation and evolution[C] //Proc of IEEE Symp on Security and Privacy. Piscataway, NJ: IEEE, 2012: 95-109
[3]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
[4]Sanz B, Santos I, Laorden C, et al. PUMA: Permission usage to detect malware in Android[C] //Proc of Int Joint Conf on CISIS’12-ICEUTE’12-SOCO’12 Special Sessions. Berlin: Springer, 2013: 289-298
[5]Martín A, Calleja A, Menéndez H D, et al. ADROIT: Android malware detection using meta-information[C] //Computational Intelligence. Piscataway, NJ: IEEE, 2017: 1-8
[6]Sahs J, Khan L. A machine learning approach to Android malware detection[C] //Proc of European Intelligence and Security Informatics Conf. Los Alamitos, CA: IEEE Computer Society, 2012: 141-147
[7]Sanz B, Santos I, Laorden C, et al. MAMA: Manifest analysis for Malware Detection in Android[J]. Cybernetics & Systems, 2013, 44(6/7): 469-488
[8]Xiao X, Wang Z, Li Q, et al. ANNs on co-occurrence matrices for mobile malware detection[J]. KSII Trans on Internet & Information Systems, 2015, 9(7): 2736-2754
[9]Aafer Y, Du W, Yin H. DroidAPIMiner: Mining API-level features for robust malware detection in Android[M] //Security and Privacy in Communication Networks. Berlin: Springer, 2013: 86-103
[10]Bartel A, Klein J, Traon Y L, et al. Automatically securing permission-based software by reducing the attack surface: An application to Android[C] // Proc of IEEE/ACM Int Conf on Automated Software Engineering. Piscataway, NJ: IEEE, 2012: 274-277
[11]Bengio Y. Learning deep architectures for AI[J]. Foundations and Trends in Machine Learning, 2009, 2(1): 1-127
[12]Hinton G E, Osindero S, Teh Y W. A fast learning algorithm for deep belief nets[J]. Neural Computation, 2006, 18(7): 1527-1554
[13]Bengio Y, Lamblin P, Popovici D, et al. Greedy layer-wise training of deep networks[C] //Advances in Neural Information Processing Systems 19. Cambridge: MIT Press, 2007: 153-160
[14]Lecun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324
[15]Vincent P, Larochelle H, Lajoie I, et al. Stacked denoising autoencoders: Learning useful representations in a deep network with a local denoising criterion[J]. Journal of Machine Learning Research, 2010, 11(6): 3371-3408
[16]Vincent P, Larochelle H, Bengio Y, et al. Extracting and composing robust features with denoising autoencoders[C] //Proc of the 25th Int Conf on Machine Learning. New York: ACM, 2008: 1096-1103
[17]Bengio Y, Delalleau O. On the expressive power of deep architectures[C] //Proc of Int Conf on Discovery Science. Berlin: Springer, 2011: 18-36
[18]Bengio Y, Courville A, Vincent P. Representation learning: A review and new perspectives[J]. IEEE Trans on Software Engineering, 2013, 35(8): 1798-1828