劉易,葉凱
(1.四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都610065;2.棕北中學(xué),成都610041)
隨著Android手機(jī)用戶大幅增長,移動終端出現(xiàn)大量Android惡意軟件。根據(jù)2019年Android惡意軟件專題報(bào)告顯示,360安全中心全年截獲移動端新增惡意樣本為180.9萬個,平均每天截獲惡意程序樣本0.5萬個[1]。Android惡意軟件通常采用消耗手機(jī)資費(fèi)、竊取手機(jī)隱私、遠(yuǎn)程控制手機(jī)等攻擊行為,這使得移動智能終端安全受到嚴(yán)重威脅。現(xiàn)有Android惡意軟件檢測方法能有效識別已知樣本,但不能有效檢測改造升級后的新版本Android惡意軟件,也不利于對新型惡意軟件進(jìn)行溯源。
當(dāng)前Android惡意軟件特征提取技術(shù)主要為動態(tài)分析和靜態(tài)分析,通過獲取Android應(yīng)用程序權(quán)限、API以及字節(jié)碼等信息作為特征。William等人[2]提出污點(diǎn)分析系統(tǒng)TaintDroid,用于檢測Android應(yīng)用中敏感數(shù)據(jù)泄露。通過修改Android虛擬機(jī)解釋器,TaintDroid實(shí)現(xiàn)系統(tǒng)級別污點(diǎn)追蹤,發(fā)現(xiàn)大量應(yīng)用存在地理位置、設(shè)備ID、電話號碼等數(shù)據(jù)的泄露。Chen等人[3]監(jiān)控運(yùn)行狀態(tài)下API調(diào)用,結(jié)合半監(jiān)督機(jī)器學(xué)習(xí),準(zhǔn)確識別惡意軟件。動態(tài)分析技術(shù)能夠應(yīng)對混淆、加殼等問題;需要的特征體量相對較少,無需頻繁更新特征。但是動態(tài)分析需要在監(jiān)控下進(jìn)行真機(jī)的運(yùn)行[4],耗時、占用過多系統(tǒng)資源特性難以應(yīng)對大量惡意軟件識別。靜態(tài)分析通過逆向工程分析Android應(yīng)用信息,這種方式不需要在真機(jī)實(shí)時運(yùn)行,能夠快速分析大量應(yīng)用軟件。Schmidt等人[5]基于Opcode對惡意樣本進(jìn)行分類,與此類似的有Zhou等人[6]提出了DroidMoss,將Android應(yīng)用軟件的DEX文件反編譯為Dalvik字節(jié)碼,并通過Opcode來計(jì)算應(yīng)用軟件的模散列值,結(jié)合應(yīng)用軟件的作者信息作為應(yīng)用軟件的“指紋”判定Android應(yīng)用是否被重打包,以此判定Android應(yīng)用的惡意性。此類方法能夠較為精準(zhǔn)地判定Android惡意樣本。Fan[7]、Zhang[8]、Yang[9]等人通過頻繁調(diào)用子圖來關(guān)聯(lián)惡意An?droid應(yīng)用。
Suarez-Tangil等人[10]提出基于文本挖掘方法,計(jì)算代碼結(jié)構(gòu)相似性進(jìn)行分類。Massarelli等人[11],基于Drebin數(shù)據(jù)集,采用動態(tài)分析、SVM對惡意軟件進(jìn)行家族分類,準(zhǔn)確率達(dá)到82%。Kim等人[12],基于BitDe?fender標(biāo)記的8個家族中682個樣本,采用動態(tài)分析和靜態(tài)分析進(jìn)行特征提取,通過計(jì)算相似性對惡意代碼進(jìn)行聚類,準(zhǔn)確率達(dá)到97%。Fan等人[13],從功能調(diào)用圖中提取頻繁調(diào)用子圖,通過計(jì)算子圖相似性實(shí)現(xiàn)惡意軟件分類,準(zhǔn)確率達(dá)到94.2%。Fasano等人[14]基于靜態(tài)分析,對12個惡意軟件家族進(jìn)行家族分類,平均準(zhǔn)確率達(dá)到96.1%。Canfora等人[15],分析在編譯源代碼時生成的Java字節(jié)碼,并識別每個惡意軟件家族的惡意行為,準(zhǔn)確率達(dá)到97%。Chakraborty等人[16],提出一種既能對樣本數(shù)量規(guī)模大和樣本數(shù)量規(guī)模小的家族進(jìn)行分類,有效實(shí)現(xiàn)分類和聚類。雖然現(xiàn)有的方法在家族分類上取得很好的效果,但是在特征提取的粒度還有待提高,以取得良好的兼容性和可用性。為解決這些問題,本文提出基于拓?fù)渑判虻臄?shù)據(jù)預(yù)處理過程,使得API調(diào)用具有節(jié)點(diǎn)依賴的特性,并結(jié)合CNN深度學(xué)習(xí)框架進(jìn)行分類的方法。
本文采用Androguard分析Android應(yīng)用,得到API調(diào)用圖,基于創(chuàng)建的API數(shù)據(jù)集對API調(diào)用圖進(jìn)行剪枝與標(biāo)記;再將調(diào)用圖轉(zhuǎn)換為RGB三通道圖像;采用本文提出的CallN作為卷積神經(jīng)網(wǎng)絡(luò)分類器原型框架;最后根據(jù)實(shí)際傳入圖像特征以及分類的需求,對深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行微調(diào),以此實(shí)現(xiàn)對Android惡意軟件分類。將Android應(yīng)用轉(zhuǎn)換而成的RGB圖像與API調(diào)用序列的拓?fù)渑判虺蓪?yīng)關(guān)系。隨機(jī)提取的特征是一組滿足調(diào)用順序的特征序列,使得特征同時滿足隨機(jī)性和有效性。分類器與樣本集是相互獨(dú)立的,這樣有效避免分類方法只針對某些樣本集有效的情況。
本文的主要工作和貢獻(xiàn)如下:
(1)本文提出一種基于API調(diào)用圖的特征選擇方法,基于拓?fù)渑判騼?yōu)化了惡意軟件的行為特征提取的隨機(jī)性、有效性。
(2)基于Res2Net殘差連接思想,結(jié)合Android惡意軟件特征圖規(guī)模小的特性,本文提出CallN模型以更細(xì)粒度提取惡意軟件的特征,能有效提高惡意家族分類的準(zhǔn)確率。
(3)實(shí)現(xiàn)原型系統(tǒng),在Drebin數(shù)據(jù)集上對本文提出的模型進(jìn)行驗(yàn)證,達(dá)到99.93%分類準(zhǔn)確率,能夠有效對Android惡意家族進(jìn)行準(zhǔn)確分類。
本文提出的方法主要分為Android惡意軟件特征圖轉(zhuǎn)換、卷積神經(jīng)網(wǎng)絡(luò)兩部分。Android惡意軟件特征圖轉(zhuǎn)換過程包括API數(shù)據(jù)集構(gòu)建、靜態(tài)特征分析、對API調(diào)用圖進(jìn)行處理并轉(zhuǎn)換為RGB圖像。卷積神經(jīng)網(wǎng)絡(luò)部分輸入Android惡意軟件轉(zhuǎn)換而成的RGB圖像,該圖像是長為M寬為N的三通道圖像。由于CNN卷積神經(jīng)網(wǎng)絡(luò)要求輸入圖像的尺度相同,輸入神經(jīng)網(wǎng)絡(luò)之前需要對不同大小的圖像進(jìn)行插值式采樣轉(zhuǎn)化成一樣大小的圖像。利用輸入圖像訓(xùn)練分類模型,網(wǎng)絡(luò)輸出是對各個Android惡意軟件類的家族類別的預(yù)測。技術(shù)架構(gòu)如圖1所示。
圖1分類技術(shù)架構(gòu)
圖1 表示本文提出的方法技術(shù)架構(gòu)。Android惡意軟件特征圖轉(zhuǎn)換:將惡意軟件進(jìn)行解壓獲得Dex文件;利用Androguard分析惡意軟件得到API調(diào)用圖;利用API數(shù)據(jù)集對API調(diào)用圖進(jìn)行剪枝、標(biāo)記得到用數(shù)字標(biāo)記的API調(diào)用圖;對標(biāo)記API調(diào)用圖進(jìn)行拓?fù)渑判虻玫揭粋€由數(shù)字組成的隊(duì)列;將數(shù)字隊(duì)列轉(zhuǎn)換為矩陣從而轉(zhuǎn)換為RGB圖像。卷積神經(jīng)網(wǎng)絡(luò):通過轉(zhuǎn)換的圖片作為輸入,通過卷積計(jì)算、提取特征、訓(xùn)練分類器,利用分類器對圖像信息進(jìn)行預(yù)測。
Android應(yīng)用程序由資源文件、配置文件、簽名文件等所有內(nèi)容組成的APK文件。因此DEX文件代表一個Android應(yīng)用的軟件的主要特征。本文將DEX文件作為分析對象,利用Androguard分析惡意軟件得到API調(diào)用圖。Android程序軟件的API調(diào)用圖能夠表現(xiàn)出程序的主要特征,將API調(diào)用圖轉(zhuǎn)換為一個圖像,可以追蹤應(yīng)用軟件的特征。
本文建立一個API數(shù)據(jù)集,基于此數(shù)據(jù)集對調(diào)用圖進(jìn)行剪枝并且標(biāo)記。API數(shù)據(jù)集規(guī)則:基于安卓開發(fā)者網(wǎng)站官方提供的API1-API29的所有API數(shù)據(jù),作為官方提供的API,設(shè)置為激活狀態(tài);非官方提供的API設(shè)置為休眠狀態(tài)即不使用該API,當(dāng)處于休眠狀態(tài)的API在不同的惡意軟件中出現(xiàn),將該API由休眠狀態(tài)改為激活狀態(tài)。轉(zhuǎn)換過程如圖2所示。
圖2 APK轉(zhuǎn)換過程
在圖2中,表示一個完整的APK轉(zhuǎn)換為RGB圖像的過程,通過靜態(tài)分析獲取調(diào)用圖,利用API數(shù)據(jù)集中已標(biāo)記好的API將API序列轉(zhuǎn)換為一個由數(shù)字組成的向量,并且根據(jù)API數(shù)據(jù)集中提供的激活狀態(tài)API數(shù)據(jù)進(jìn)行剪枝。得到的特征序列進(jìn)行拓?fù)渑判虿⑤敵鲆粋€數(shù)值向量,將向量中每一個數(shù)字轉(zhuǎn)換為24位的2進(jìn)制的數(shù)據(jù),得到的2進(jìn)制向量重構(gòu)為(n,m,3)的矩陣。選擇二維矩陣的寬度和高度(即圖像的空間分辨率)主要取決于API序列的長度。矩陣寬度和高度轉(zhuǎn)化過程如表1所示。
表1 矩陣轉(zhuǎn)換規(guī)則
圖3中表示剪枝過程,基于API數(shù)據(jù)集將API調(diào)用圖中處于休眠狀態(tài)的API刪除,將休眠狀態(tài)的API刪除生成新的依賴連接。圖3表示刪除節(jié)點(diǎn)的流程,API B處于休眠狀態(tài)的API,因此將B刪除,使A指向C、D。
圖3 API序列剪枝
API調(diào)用圖是一個有向圖,保存的形式為點(diǎn)(Node)、邊(Edge)。因此API調(diào)用圖的剪枝過程就是對點(diǎn)和邊進(jìn)行操作。
剪枝算法的偽代碼描述如算法1。
算法1:剪枝算法
本文采用卷積神經(jīng)網(wǎng)絡(luò)對Android惡意軟件進(jìn)行分析,基于Res2Net[17]殘差連接思想對惡意軟件進(jìn)行特征提取。Res2Net用3×3過濾器組,將不同的過濾器組以層級殘差式風(fēng)格連接,可以得到不同數(shù)量以及不同感受野大小的輸出。例如y2得到3×3的感受野,那么y3就得到5×5的感受野,y4同樣會得到更大尺寸如7×7的感受野。最后將這四個輸出進(jìn)行融合并經(jīng)過一個1×1的卷積。這種先拆分后融合的策略能夠使卷積可以更高效更細(xì)粒度的處理特征。
基于Res2Net能夠高效提取細(xì)粒度的特征,同時Android惡意軟件的特征圖的規(guī)格小于普通圖像,對Res2Net進(jìn)行改進(jìn)。本文實(shí)現(xiàn)Res2Net模型以及對Res2Net進(jìn)行改進(jìn),將改進(jìn)的部分模型命名為CallN,CallN將3×3過濾器改為2×2與3×3的交叉過濾器組提取特征。
CallN輸入是由Android惡意軟件轉(zhuǎn)換而成的圖像,長度和寬度設(shè)定為固定大小的圖像,采用填充的方法對輸入圖像的尺寸進(jìn)行處理。圖5為本文提出模型CallN,首先輸入t張?zhí)卣鲌D,對圖像進(jìn)行1×1卷積分為{Xi|0
圖5 CallN模型
當(dāng)一組過濾器對一組特征圖提取特征之后,自上一組特征圖提取的特征傳遞到下一組特征圖中與下一組的特征圖進(jìn)行特征提取,直至最后一組。得到特征{yi|0
圖4 Res2Net模型
為驗(yàn)證本文提出的惡意軟件分類方法是否能夠有效檢測惡意軟件家族。本文基于Drebin[18]數(shù)據(jù)集,選擇Drebin數(shù)據(jù)集中家族規(guī)模前20的惡意軟件家族進(jìn)行分類實(shí)驗(yàn),卷積神經(jīng)網(wǎng)絡(luò)部分采用本文提出的CallN模型以及Res2Net模型。
Drebin作為Android惡意軟件家族分類模型的樣本集,Drebin數(shù)據(jù)集包含來自179個Android惡意軟件家族的5560個樣本。實(shí)驗(yàn)選擇家族規(guī)模前20的惡意軟件家族共計(jì)4728個惡意軟件,訓(xùn)練集、驗(yàn)證集和測試集的比例為8:1:1。
本次實(shí)驗(yàn)是在64位Windows10環(huán)境下進(jìn)行,實(shí)驗(yàn)配置如表2所示。
表2 實(shí)驗(yàn)環(huán)境
在圖5中表示基于CallN模型對20個家族分類訓(xùn)練結(jié)果,在圖5(a)表示訓(xùn)練分類準(zhǔn)確率,以及驗(yàn)證分類準(zhǔn)確率,其中紅色曲線為訓(xùn)練集準(zhǔn)確率,藍(lán)色曲線為驗(yàn)證集準(zhǔn)確率。圖5(b)表示訓(xùn)練集損失值和驗(yàn)證集損失值。在圖5(a)第一時期(epoch)訓(xùn)練集準(zhǔn)確率為68.81%,驗(yàn)證集準(zhǔn)確率為69.35%。在前150時期中,batch_size設(shè)置過低導(dǎo)致訓(xùn)練結(jié)果呈現(xiàn)輕微震蕩,在本實(shí)驗(yàn)中設(shè)置batch_size為8。隨著訓(xùn)練時期的增加,隨后的訓(xùn)練中曲線較為平滑并且呈收斂趨勢。根據(jù)圖6的數(shù)據(jù)表明,隨著訓(xùn)練時期增加,準(zhǔn)確率呈上升趨勢,損失呈減少趨勢。通過300時期的訓(xùn)練,分類模型的訓(xùn)練準(zhǔn)確率達(dá)到99.99%,驗(yàn)證準(zhǔn)確率達(dá)到99.93%。
圖6 20個惡意家族分類實(shí)驗(yàn)結(jié)果
為驗(yàn)證CallN的有效性,本文采用預(yù)先劃分并且未參與訓(xùn)練的457個惡意軟件對建立的模型進(jìn)行交叉驗(yàn)證。圖7為分類結(jié)果的混淆矩陣,預(yù)測結(jié)果表明所有的家族樣本能夠被準(zhǔn)確分類。
圖7 分類結(jié)果熱力圖
在表3中計(jì)算20個惡意家族的精確率、召回率、F1-score。其中能夠?qū)?8個惡意家族進(jìn)行準(zhǔn)確分類,F(xiàn)akeRun中一個惡意軟件被分為GinMaster。
表3 20個惡意家族分類結(jié)果
在與已有相關(guān)工作對比過程中,本文采用Drebin中20個惡意家族的惡意樣本進(jìn)行分類實(shí)驗(yàn),與Drebin方法以及Jiang Jianguo等人的研究進(jìn)行對比。如表4所示。
表4 其他工作對比
結(jié)果表明,本文提出的CallN對惡意家族的分類準(zhǔn)確率是優(yōu)于現(xiàn)有的方法,達(dá)到99.93%。對比Res2Net結(jié)合本文的數(shù)據(jù)預(yù)處理方法的分類效果,CallN針對Android惡意軟件特征圖的分類效果更為理想。
本文提出一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的An?droid惡意軟件檢測與分類的方法。首先將Android惡意軟件樣本轉(zhuǎn)換成RGB圖像,然后訓(xùn)練一個分類模型對RGB圖像進(jìn)行分類,以此實(shí)現(xiàn)對Android惡意軟件的分類。本文在Drebin樣本集上進(jìn)行分類,在20個惡意家族進(jìn)行分類實(shí)驗(yàn),取得99.93%的分類準(zhǔn)確率。后續(xù)會尋找更多的數(shù)據(jù)集進(jìn)行測試,取得更多的實(shí)驗(yàn)數(shù)據(jù),提升本方法的實(shí)用性。