張福良,梁意文,譚成予
武漢大學 計算機學院,武漢 430072
隨著智能手機的普及,智能手機不僅被用來通信,還可以被用來購物、支付、聊天、導航等。手機存儲著人們的重要隱私,如聯(lián)系人、短信、聊天記錄、銀行卡信息、閱讀習慣、實時定位等。而Android 以其開源政策和開放性的原則,市場份額在2018 年達到85.1%。Android軟件安全問題日益凸顯,惡意軟件的數(shù)量與種類不斷增加[1]。在360 互聯(lián)網(wǎng)安全中心發(fā)布《2018 年中國手機安全狀況報告》顯示[2],2018 年,Android 新增惡意程序樣本約434.2萬個,累計惡意程序感染量約為1.1億次。惡意軟件通過重打包、代碼混淆或以其他方式轉(zhuǎn)換惡意應用程序的可執(zhí)行代碼,以規(guī)避移動安全應用程序,進行惡意吸費、隱私竊取、遠程控制、誘導下載等惡意行為,導致用戶信息丟失,甚至造成財產(chǎn)損失。由此可見,對Android惡意軟件檢測技術(shù)的研究仍具有重要意義。
目前針對Android惡意軟件檢測研究已經(jīng)取得一些進展,主要可分為靜態(tài)分析檢測、動態(tài)分析檢測以及動靜態(tài)分析結(jié)合的檢測方法。靜態(tài)分析檢測方法多使用軟件的靜態(tài)特征,無需運行程序,通過反編譯技術(shù)對程序進行源代碼級解析,如數(shù)字簽名、權(quán)限申請[3]、API 調(diào)用、APK 組件使用統(tǒng)計等,特點是操作簡單、運行速度快。然而靜態(tài)分析方法對新型惡意軟件識別能力不強,容易受到代碼混淆和字符串加密等影響,所以誤報率較高。動態(tài)分析檢測方法[4],通過觀察程序動態(tài)運行特征[5],如CPU使用率、內(nèi)存占用、動態(tài)API調(diào)用[6]、數(shù)據(jù)流等,從行為上對軟件進行判斷,準確率較高,缺點是操作復雜,必要時需修改Android 源碼,當軟件惡意行為不明顯的檢測效果不佳[1]。動靜態(tài)分析結(jié)合的方法同時利用靜態(tài)與動態(tài)特征,具備了以上兩種檢測方法的優(yōu)點,成為近年來研究的方向。
同時越來越多的研究者采用機器學習相關(guān)方法對惡意軟件進行檢測。如SVM[7]、K-means、邏輯回歸、樸素貝葉斯方法等。大多數(shù)機器學習方法要想達到滿意的準確率,往往需要大量訓練計算,對數(shù)據(jù)集依賴度較高。
因此,上述方法中存在特征分析單一和固定化、對未知和潛伏性強的惡意軟件檢測能力弱等問題。本文通過對人工免疫相關(guān)理論進行研究,提出一種Android惡意軟件的人工NK 細胞檢測模型。模型利用人工免疫理論中的人工NK細胞模型和DCA,采用動靜態(tài)分析結(jié)合的方法,提取Android 軟件的靜態(tài)權(quán)限申請?zhí)卣骱蛣討B(tài)API 調(diào)用特征,通過人工NK 細胞處理輸出刺激因子(AV),并與輸入信號融合提高信號顯著性,最后DC細胞對軟件進行判定,實現(xiàn)惡意軟件檢測,實驗證明該模型有良好的適應性、輕量化、無需訓練,有效地提高了檢測準確率、降低誤報率。
靜態(tài)分析檢測方法使用程序靜態(tài)特征,如權(quán)限申請、數(shù)字簽名、靜態(tài)API調(diào)用等特征,是對源代碼級的特征分析。李劍等人[8]通過靜態(tài)提取權(quán)限特征,采用KMeans 和隨機森林等機器學習算法對應用程序進行分類檢測。DREBIN[9]是一個靜態(tài)分析工具,通過收集應用程序權(quán)限和API 調(diào)用等特性,構(gòu)成聯(lián)合向量空間,并實現(xiàn)自動識別惡意軟件。朱月俊[3]使用反編譯技術(shù)提取AndroidManifest.xml 文件中的靜態(tài)權(quán)限特征,采用改進的隨機森林算法對惡意軟件家族進行分類檢測。
動態(tài)分析檢測方法通過觀察程序動態(tài)運行特征,如運行期間資源使用情況、網(wǎng)絡(luò)情況、動態(tài)API 調(diào)用[10]情況、資費損耗參數(shù)等,或者在Android中加入監(jiān)視器監(jiān)控數(shù)據(jù)流向來分析軟件的惡意行為。陶婷婷[11]通過動態(tài)從系統(tǒng)trace文件中獲取程序API調(diào)用信息,采用高階馬爾可夫降價模型等機器學習算法進行惡意軟件檢測。文獻[12]提出了一種基于動態(tài)分析的沙盒技術(shù),并結(jié)合移動端和云端的惡意軟件檢測方法對惡意軟件進行檢測。LeakSemantic[13]是一個可以自動定位異常敏感網(wǎng)絡(luò)傳輸?shù)目蚣?。該框架利用每次傳輸?shù)木W(wǎng)絡(luò)流量等運行時數(shù)據(jù),構(gòu)建了機器學習分類器來預測應用的類型。
靜動態(tài)分析結(jié)合的方法則同時利用了以上兩種方法的特點。黃浩華等人[14]通過提取程序的靜態(tài)API 調(diào)用和權(quán)限申請信息來判定程序是否為疑似惡意應用,再通過動態(tài)UI控件調(diào)用,來判定其是否為惡意軟件。
危險理論與傳統(tǒng)免疫算法中的“自我”“非我”不同,它認為是機體細胞行為表現(xiàn)出的危險性引起免疫應答,其中DCA 成為危險理論最具有代表性的算法[15]。Greensmith 等人[16]在2005 年首次提出樹突狀細胞算法(DCA),DCA基于樹突狀細胞生物學的抽象模型,對輸入抗原抽象出危險信號,經(jīng)計算后得到輸出信號,來判斷抗原的危險程度。該算法具有簡單快速、無需大量訓練樣本的優(yōu)點。常被應用于網(wǎng)絡(luò)入侵檢測、端口掃描檢測、僵尸網(wǎng)絡(luò)檢測等。與傳統(tǒng)檢測技術(shù)相比,DCA在準確率和誤報率方面更有優(yōu)勢[15]。但該算法也存在一定局限性,當抗原信號顯著性下降、信號定義偏差較大時,準確率和誤報率會下降[17]。傅軍[18]在2011 年首次提出人工NK(Natural Killer)細胞模型,并將其運用于間諜軟件檢測。該模型利用人工NK 細胞識別抗原表面釋放MHC-I 分子濃度來確定該細胞是否被感染的原理,通過輸入激活信號與抑制信號值對抗原進行判定,可有效解決信號顯著性降低的問題。文獻[19]將NK細胞模型與反向選擇算法相結(jié)合,應用于入侵檢測,并取得較好效果。
惡意軟件具有某些靜態(tài)特征,如權(quán)限申請、源代碼等,現(xiàn)有的研究已經(jīng)能夠證明惡意軟件靜態(tài)特征使其能夠被識別,但是僅憑這些靜態(tài)特征來識別它們有一定的局限性[10]。近年來惡意軟件變得越來越隱蔽,例如權(quán)限概述了應用程序試圖訪問的資源,但它們并沒有提供關(guān)于如何以及何時使用這些資源的詳細信息,所以權(quán)限特征代表軟件的行為趨勢,這與人工NK細胞模型的抗?jié)摲匦圆恢\而合。而應用程序運行時都會產(chǎn)生行為上的變化,無論是API 調(diào)用、內(nèi)存消耗還是網(wǎng)絡(luò)流量的使用趨勢發(fā)生變化,這些變化可以表現(xiàn)軟件行為是否是危險的,DCA就是這樣一類基于動態(tài)變化特征的、自適應的異常檢測分類算法[16],故本文提取靜態(tài)和動態(tài)特征,構(gòu)建一個人工NK 細胞模型和DCA 結(jié)合的檢測模型應用于Android惡意軟件檢測。
本文構(gòu)建的人工NK細胞檢測模型基于人工NK細胞模型與 DCA 結(jié)合,利用動靜態(tài)分析檢測方法,將軟件靜態(tài)權(quán)限申請?zhí)卣髯鳛槿斯K細胞的輸入信號,經(jīng)處理后釋放刺激因子(AV),并與軟件動態(tài)API 調(diào)用特征一同作為DCA的輸入信號對軟件進檢測。該模型提高了信號顯著性,有較高準確率、較低的誤報率。
本文構(gòu)建的Android惡意軟件的人工NK細胞檢測模型如圖1 所示。該模型由三部分組成:特征提取、人工NK 細胞模型和樹突狀細胞算法識別。其工作原理如下:
(1)信號預處理模塊采集靜態(tài)權(quán)限申請?zhí)卣髋c動態(tài)API調(diào)用特征數(shù)據(jù),編碼為特征向量。經(jīng)數(shù)據(jù)預處理后成為人工NK細胞和DCA的輸入信號。
(2)人工NK 細胞群體根據(jù)輸入的抑制信號(IR)和激活信號(AR)對輸入的抗原進行判定,處理后向DC細胞輸出刺激因子(AV)。
(3)DC 群體根據(jù)輸入信號(PAMP,SS,DS)和刺激因子對含有抗原的程序檢測是否為惡意軟件。
圖1 人工NK細胞檢測模型
在Android系統(tǒng)中,權(quán)限機制是一種安全機制,程序通過申請相關(guān)權(quán)限,獲得相關(guān)資源的訪問權(quán)與控制權(quán)。大部分惡意軟件在進行惡意活動時會申請相關(guān)權(quán)限[20],但也存在惡意軟件執(zhí)行惡意行為但沒有申請任何相關(guān)權(quán)限[21]。這就使得單一的權(quán)限特征無法保證檢測方法的適應性與覆蓋性,但惡意軟件會調(diào)用Android 系統(tǒng)架構(gòu)層的API 來完成惡意行為。所以本文將靜態(tài)權(quán)限申請和動態(tài)API調(diào)用作為兩大類提取特征。
2.2.1 靜態(tài)權(quán)限申請?zhí)卣?/p>
借鑒文獻[20]的研究成果,本文對表1 中的權(quán)限申請進行采集與分析,APK 的權(quán)限申請信息存儲在AndroidManifast.xml 文件中,使用apktool 工具反編譯APK文件得到AndroidManifast.xml來提取相關(guān)權(quán)限。
表1權(quán)限包含讀取或?qū)懭腚[私數(shù)據(jù)、讀取或?qū)懭肫渌麘贸绦虻奈募⒕W(wǎng)絡(luò)訪問、喚醒與休眠設(shè)備等權(quán)限,是惡意軟件申請頻率最高的敏感權(quán)限[20]。權(quán)限的權(quán)值根據(jù)惡意樣本與良性樣本申請使用頻率差異和權(quán)限級別給出,差異越大,申請該權(quán)限被判定為惡意樣本的可能性越高,權(quán)值越大,反之亦然。
2.2.2 動態(tài)API調(diào)用特征
惡意軟件與良性軟件在運行時都會調(diào)用系統(tǒng)API,對比良性軟件與惡意軟件在運行時API調(diào)用的差異[22],惡意軟件運行時會更頻繁調(diào)用與文件資源、系統(tǒng)架構(gòu)層、短信和電話等相關(guān)API,通過DroidBox 等工具獲取表2運行時API調(diào)用信息進行分析。
表3給出API所屬類的簡稱和類的權(quán)值。API類名權(quán)值根據(jù)惡意樣本與良性樣本API 調(diào)用頻率差異和危險程度人工給出,差異越大,調(diào)用該類API 被判定為惡意樣本的可能性越高,權(quán)值越大,反之亦然。
2.3.1 數(shù)據(jù)預處理
每個抗原(即每個應用程序)都表示為一個實值向量A={s1,s2,…,si,…,sm,u1,u2,…,ui,…,un},其中向量中的每個屬性都表示某一類特征,si表示表1中的權(quán)限類型,ui表示表2中的動態(tài)API調(diào)用類型。當不需區(qū)分特征屬于權(quán)限與API 哪一類時,每個屬性項均用vi表示,即A={v1,v2,…,vi,…,vn+m}。
默認情況下vi均為0,當且僅當抗原申請該權(quán)限(或調(diào)用該API)時,vi等于其自身權(quán)值。
為了體現(xiàn)抗原每個屬性對抗原判定的正反饋和負反饋作用,需要進行數(shù)據(jù)預處理。對于抗原Ak={v1k,v2k,…,vik,…,v(n+m)k}的屬性vik:
其中,表示所有樣本集中vi屬性的均值,數(shù)據(jù)預處理后,當vik >0 時,表示正反饋,有助于將樣本判定為惡意。反之,則不利于將樣本判定為惡意。
表1 靜態(tài)權(quán)限特征及權(quán)值
表2 動態(tài)API調(diào)用特征名稱及描述
表3 API分類及權(quán)值
2.3.2 人工NK細胞輸入信號與輸出信號
將抗原中的權(quán)限特征輸入人工NK 細胞模型,當si >0 為激活信號(AR),當si≤0 時為抑制信號(IR)。經(jīng)人工NK細胞處理后輸出刺激因子(AV)。
其中,人工NKR 為人工NK 細胞識別特異性信號的受體,NKRmatch_affinity為NK 細胞匹配si受體的親和度,被賦值為該抗原si的值。
2.3.3 病原體相關(guān)分子模式/安全信號(PAMP/SS)
在人工NK 細胞模型中,PAMP 信號表示軟件惡意活動的可能性極高,對系統(tǒng)危害大,SS信號則表示軟件行為相對安全。當軟件產(chǎn)生惡意行為時,常伴隨調(diào)用系統(tǒng)資源、操作隱私數(shù)據(jù)等相關(guān)API。人工NK 細胞釋放的刺激因子(AV)也包含在集合中,PAMP/SS 集合C={CR1,CR2,CT1,CT2,CT3,SM1,TM1,TM2,TM3,DL1,RS1,RS2,AV}。其中對信號的映射分類為:
集合C是抗原向量A的特征子集,當C中屬性a的值ca >0 時,屬性a被映射為PAMP,當ca≤0 時,屬性a被映射為SS,也就是說,對于不同的抗原的特征子集C中的任意屬性,可能被映射為PAMP 信號,也可能被映射為SS 信號,這體現(xiàn)了免疫系統(tǒng)的動態(tài)性。例如在軟件運行時調(diào)用Runtime.getRuntime.exec(),則表示為惡意軟件的可能性較大,若不調(diào)用該函數(shù),則表示為惡意軟件的可能性較小。
2.3.4 危險信號(DS)
危險信號表示惡意軟件即將進行惡意活動。其危險程度比PAMP 要低,比SS 危險程度高。DS 集合D={TI1,TI2,NI1,IN1,IN2,AM1,AM2}其信號值計算為:
危險信號均有正反饋作用,對于集合D中屬性b來說,某一抗原的信號值db等于db減去所有抗原屬性b中的最小值min(b)。
特征向量經(jīng)算法處理后,得到共刺激分子信號(CSM)、半成熟信號(smDC)和成熟信號(mDC)三個累積輸出信號值。其中使用信號處理方程和表4 給出的權(quán)值矩陣計算這些累積輸出信號值,權(quán)值矩陣的取值取自經(jīng)典DCA算法[16]。為了計算中間輸出信號,采用C=
其中,WPAMP、WSS、WDS為各類信號的權(quán)值,IS為促炎性因子,取值為0.5。
表4 經(jīng)典DCA權(quán)值矩陣
本文使用的算法流程如下所述。
算法1人工NK細胞生成AV信號
輸入:抗原信號集S
輸出:人工NK細胞狀態(tài)和刺激因子AV
for S do //遍歷所有信號集
for NK_cells do
NKR.affinity=0;
b=getCurrentSigna(lS); //獲取當前信號b
//找到所有能識別s的人工NKR;
NKRs_matched=findMatchedNKRs(b);
for NKRs_matched do
//人工NKR與信號的親和力與信號值相同
NKR.affinity=b.value;
end
cacluateAV(); //計算人工NK細胞的激活度AV;
i(fAV>AV_threshold &&(!NK_cell.isAlive()))
then
NK_cell.status=true; //人工NK細胞轉(zhuǎn)為激活態(tài)
end
end
end
在算法1中,NK細胞在采集抗原及其信號后,通過尋找匹配的NKR親和度,經(jīng)累積計算后輸出NK細胞的狀態(tài)和刺激因子AV。
算法2人工NK細胞模型檢測抗原
輸入:所有抗原及信號集
輸出:抗原檢測結(jié)果
Initialize-NK() //初始化參數(shù);
for DC_Cells do
while CSM<CSM_threshold do
getAntign(); //獲取抗原
getSignals(); //獲取PAMP、DS、SS、AV
av=getNKmatchAV();
//計算輸出信號CSM、smDC、mDC
caluSignals();
//更新累計信號值CSM,smDC,mDC
updateSignals();
end while
If(smDC>mDC)then
angtienContext=0;//標記為正常
else
antignContext=1;//標記為異常
end
for All_antigns do
calucateMCAV(antign);//計算MCAV的值
If(MCAV>MCAV_threshold)
antign=malware;
else
antign=begin;
end
算法2是人工NK細胞模型的整個工作過程。在初始化參數(shù)后,在DC 細胞池中選取一個DC 細胞,該DC細胞隨機從抗原細胞池中選取抗原和對應的三類信號,然后調(diào)用算法1完成抗原刺激因子的輸出,完成信號融合。累積計算 DC 細胞的 CSM、Semi、Mat 的值。當細胞達到CSM遷移閾值后,對DC環(huán)境進行判斷,若DC環(huán)境被判定為異常后,則將其提出的所有抗原標記為異常,否則標記為正常。最后,對細胞種群所提出的每個抗原,計算MCAV,對抗原進行最終判定。
本文實驗使用3 臺相同物理主機,操作系統(tǒng)為Ubuntu18.04,處理器為Intel 酷睿 i7-4790 四核處理器,主頻為3.60 GHz,內(nèi)存容量為8 GB,磁盤容量為256 GB固態(tài)硬盤,運行SDK 自帶模擬器,版本為Android4.4。實驗中涉及的開源工具軟件為apktool、DroidBox。實驗模型及檢測方法全部使用Python語言實現(xiàn)。
本文設(shè)計了人工NK細胞檢測模型Android惡意軟件的模擬實驗。實驗目的是檢測人工NK 細胞模型檢測Android惡意軟件可靠性及與主流檢測方法相比下的有效性。
3.2.1 數(shù)據(jù)集
為保證實驗的可靠性和全面性,實驗分別從VirusTotal和CICInvesAndMal2019數(shù)據(jù)集中選取部分數(shù)據(jù)樣本組成實驗數(shù)據(jù)集。VirusTotal 是世界兩大查毒網(wǎng)站之一,其樣本集數(shù)量龐大,并且被眾多知名殺毒軟件所判定,具有權(quán)威性。CICInvesAndMal2019是Han團隊于2019年發(fā)布的數(shù)據(jù)集,惡意軟件數(shù)量多且種類嶄新,能體現(xiàn)近年惡意軟件發(fā)展的趨勢[6]。選取惡意樣本1 150個,包括短信木馬、勒索軟件、廣告軟件、間諜軟件等多個種類,良性樣本1 093個。詳情見表5。
表5 樣本選取數(shù)量
3.2.2 實驗步驟
(1)使用反編譯軟件apktool 對樣本反編譯獲取其AndroidManifast.xml文件。根據(jù)表1列表對軟件使用權(quán)限進行提取。若樣本申請權(quán)限包含表1權(quán)限,則該特征賦值為相關(guān)權(quán)值weighta,否則賦值為0。
(2)使用DroidBox 工具對樣本進行動態(tài)監(jiān)控獲取其運行期間API 調(diào)用情況。三臺主機同時運行改進過的droidbox.sh腳本對表2中的API進行監(jiān)控。每個樣本監(jiān)控時間為5 min。若樣本API 調(diào)用包含表2 的API 調(diào)用。則該特征賦值為相關(guān)權(quán)值weightb,否則賦值為0。
(3)對收集的原始信號數(shù)據(jù)進行預處理,形成算法數(shù)據(jù)集。
(4)對算法相關(guān)參數(shù)進行設(shè)置。實驗選取的人工NK細胞種群的數(shù)量為200;DC細胞生命周期為100,當DC 細胞采集100 個抗原仍無法達到CSM 遷移閾值時,則該DC 細胞重新初始化;抗原判定閾值為15 次;成熟環(huán)境抗原值MCAV 異常閾值設(shè)置為0.75。CSM 遷移閾值設(shè)置為350 到400 之間的隨機數(shù),每次從抗原池中隨機采集一個抗原進行檢測,以保證算法的隨機性。
(5)向模型輸入數(shù)據(jù)集,執(zhí)行檢測方法,得出實驗結(jié)果。
本文從準確率(TAR)、誤報率(FPR)、漏報率(FNR)三個維度評價模型效果。
FPR 表示所有正常樣本中錯誤分類為惡意軟件的百分比。
由于本文模型算法的隨機性,CSM 遷移閾值取值由隨機數(shù)產(chǎn)生,抗原和DC細胞均隨機選取,每次檢測結(jié)果均存在差異。為了保證檢測結(jié)果的準確性與客觀性,在相同實驗環(huán)境下采用相同數(shù)據(jù)集分別重復實驗10次、30次、50次。然后對實驗結(jié)果進行統(tǒng)計分析如表6。
表6 實驗結(jié)果 %
表7顯示了人工NK細胞檢測模型與DCA、K-means隨機森林算法在相同評估指標下的效果對比。
在時間復雜度方面,人工NK 細胞模型、DCA、K-means 均為O(n),而隨機森林為O(nlbn)。與DCA 相比,人工NK細胞模型增加了刺激因子的計算與融合步驟,因此運行檢測時間較DCA有一定增長;與K-means相比基本接近,但K-means 需要將數(shù)據(jù)加載到內(nèi)存計算,而本文方法是線性方法,內(nèi)存消耗穩(wěn)定,因此在內(nèi)存方面更具優(yōu)勢;與隨機森林算法相比檢測時間則降低64.0%,這是因為本文方法時間復雜度明顯好于隨機森林算法。
表7 不同檢測方法效果對比
在準確率等指標方面,人工NK細胞檢測模型較其他幾種算法有更高的準確率和更低的誤報率。這是因為安卓惡意軟件與正常軟件越來越相似,惡意特征越來越不明顯。而人工NK 細胞模型以輸出刺激因子的方式,能夠增加惡意軟件的危險信號特征顯著性,有效提高了模型中DCA 的檢測能力,降低誤報的風險。當檢測更多潛伏能力強、惡意特征不明顯的樣本時,本文方法會有更明顯的優(yōu)勢。綜合考慮之下,人工NK細胞檢測模型是更合適的算法。
本文通過分析Android軟件的靜態(tài)權(quán)限特征和動態(tài)API 調(diào)用特征,利用NK 細胞模型“抗?jié)摲钡奶攸c結(jié)合DCA,構(gòu)建了Android 惡意軟件的人工NK 細胞檢測模型。實驗證明該模型與DCA和K-means等機器學習方法相比下有更高的準確率和更低的誤報率。
本文構(gòu)建的Android 惡意軟件檢測模型,在權(quán)限和API調(diào)用特征的關(guān)聯(lián)性上還有待加強,如何通過找到權(quán)限申請與API 調(diào)用之間的關(guān)聯(lián)關(guān)系來提高具體信號顯著性是下一步工作的方向。與此同時,本文中的眾多閾值參數(shù)需要人工經(jīng)驗設(shè)置,如何根據(jù)輸入的樣本特征來確定算法相關(guān)閾值,實現(xiàn)參數(shù)自適應,也是本文下一步的工作。