張高峰 鮑旭丹 劉 敬 夏雪晗 鄭利平
1(合肥工業(yè)大學(xué)軟件學(xué)院 安徽 合肥 230601) 2(合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院 安徽 合肥 230601) 3(合肥工業(yè)大學(xué)工業(yè)安全與應(yīng)急技術(shù)安徽省重點(diǎn)實(shí)驗(yàn)室 安徽 合肥 230601)
隨著智能終端的快速發(fā)展,智能手機(jī)已經(jīng)廣泛應(yīng)用于人們的日常生活中。人們可以根據(jù)自身需求定制應(yīng)用與服務(wù),如網(wǎng)上購物、掌上銀行、醫(yī)療、交通等。Android作為一個(gè)基于Linux的自由及開放源碼的操作系統(tǒng),深受應(yīng)用開發(fā)者的青睞。根據(jù)調(diào)研機(jī)構(gòu)IDC統(tǒng)計(jì),Android手機(jī)的市場份額預(yù)計(jì)到2023年將達(dá)到87.1%,約15.19億部[1]。然而,作為移動(dòng)設(shè)備中主流智能系統(tǒng),由于其源碼的開放性并且用戶的需求量逐漸增加,使得Android平臺(tái)成為攻擊者制造惡意軟件的溫床。360互聯(lián)網(wǎng)安全中心的報(bào)告顯示,該平臺(tái)在2018年平均每天新增1.2萬個(gè)移動(dòng)惡意樣本[2]。近年來,Android惡意軟件帶來的安全問題層出不窮,如提權(quán)攻擊、遠(yuǎn)程控制、惡意資費(fèi)等[3],因此,檢測與防范Android惡意軟件的工作變得刻不容緩。
對(duì)于一些使用代碼混淆、包裝等機(jī)制改變了自己的簽名的未知惡意軟件,傳統(tǒng)的基于簽名的惡意檢測方法已經(jīng)不再適用。目前,Android檢測方法主要有動(dòng)態(tài)分析和靜態(tài)分析兩種[4]。動(dòng)態(tài)分析關(guān)注于應(yīng)用程序運(yùn)行時(shí)的行為和狀態(tài),如MADAM[5]根據(jù)監(jiān)控用戶、應(yīng)用程序、內(nèi)核等不同Android級(jí)別的功能來判別惡意軟件。CopperDroid[6]通過分析應(yīng)用程序運(yùn)行時(shí)的系統(tǒng)調(diào)用,構(gòu)建出能夠反映Android惡意行為的語義信息。DroidDolphin[7]通過使用測試框架,收集Android應(yīng)用程序運(yùn)行時(shí)產(chǎn)生的13種類型的活動(dòng)特征來捕獲惡意行為。上述動(dòng)態(tài)分析方法可以用來對(duì)抗混淆和動(dòng)態(tài)加載的代碼,同時(shí)也存在著代碼覆蓋率低和計(jì)算開銷大的問題[8]。因此,高效準(zhǔn)確的靜態(tài)分析在學(xué)術(shù)界和工業(yè)界得到廣泛重視。文獻(xiàn)[9]提出用關(guān)聯(lián)規(guī)則挖掘算法找出具有高置信度的權(quán)限特征,根據(jù)權(quán)限特征構(gòu)建了一個(gè)高效檢測系統(tǒng)。文獻(xiàn)[10]將多類特征嵌入一個(gè)聯(lián)合向量空間中,通過幾何表示使得分類模型更容易識(shí)別出惡意軟件。文獻(xiàn)[11]提出了一個(gè)新穎的靜態(tài)分析方法,利用元路徑來表示應(yīng)用程序和API調(diào)用之間的語義關(guān)聯(lián),從而構(gòu)建出能夠反映惡意應(yīng)用之間關(guān)系的異構(gòu)信息網(wǎng)絡(luò)??傮w而言,靜態(tài)分析通過簡易操作就能獲取到富含語義信息的多種特征,因而比動(dòng)態(tài)分析更具有優(yōu)勢。
本文總結(jié)了現(xiàn)有的靜態(tài)分析方法,創(chuàng)新性地提出了一種基于信息量差加權(quán)集成的Android惡意軟件檢測方法——WEID。首先通過分析Android內(nèi)部組件間通信和權(quán)限機(jī)制以獲取權(quán)限和Intent特征;然后,對(duì)這兩類靜態(tài)特征進(jìn)行組合、疊加等操作構(gòu)建五種不同類型的特征集,采用主成分分析法(PCA)對(duì)上述特征集進(jìn)行降維處理,以達(dá)到去除冗余數(shù)據(jù)的目的;最后,基于Stacking算法的分層策略,將正負(fù)樣本分類正確事件和分類錯(cuò)誤事件的信息量差作為貢獻(xiàn)度量,根據(jù)度量值指導(dǎo)基學(xué)習(xí)器加權(quán)集成,以實(shí)現(xiàn)最佳分類。綜合近年來樣本集上的反復(fù)實(shí)驗(yàn)和性能評(píng)估,本方法保持高檢測準(zhǔn)確率的情況下,相比其他機(jī)器學(xué)習(xí)方法,獲得了更低的誤報(bào)率和漏檢率,在Android惡意軟件的檢測中展現(xiàn)出良好的性能。
多項(xiàng)研究表明,關(guān)于Android應(yīng)用的靜態(tài)特征,主要圍繞權(quán)限機(jī)制和應(yīng)用編程接口(API)調(diào)用兩大方面展開[12]。權(quán)限機(jī)制是Google為Android系統(tǒng)開發(fā)的一種重要的安全機(jī)制,以控制應(yīng)用程序訪問數(shù)據(jù)資源。例如,在訪問相機(jī)之前,Android系統(tǒng)會(huì)檢查請(qǐng)求應(yīng)用程序是否擁有CAMERA權(quán)限。Zhao等[13]提出了將單項(xiàng)權(quán)限視作特征向量構(gòu)建特征集,但沒有考慮到權(quán)限冗余給實(shí)驗(yàn)帶來的誤差。SiGPID[9]為了消除權(quán)限冗余的影響,引入機(jī)器學(xué)習(xí)方法挖掘出能夠區(qū)分良性和惡意軟件的重要權(quán)限。類似地,Wang等[14]利用互信息、T檢驗(yàn)等方法對(duì)權(quán)限級(jí)別排名來挑選出敏感權(quán)限。基于權(quán)限的檢測方法容易實(shí)現(xiàn)并且能夠得到較高的檢測率,但與之相應(yīng)的也會(huì)產(chǎn)生較高的誤報(bào)率。
近年來,越來越多的工作致力于將不同特征進(jìn)行組合用在Android惡意軟件的檢測中[12,15-17]。邵舒迪等[12]采用將權(quán)限和API特征結(jié)合的方式構(gòu)建特征向量。結(jié)果表明,基于特征結(jié)合的檢測效果比基于單一特征的更好。Yerima等[15]將API調(diào)用、權(quán)限和Intent等特征組合起來用作判別未知應(yīng)用的度量。其中,Intent作為Android內(nèi)部協(xié)助組件之間的消息傳遞的一種重要通信機(jī)制,是連接各個(gè)組件的橋梁。通過Intent,應(yīng)用程序可以向Android系統(tǒng)表達(dá)某種意愿或請(qǐng)求(如拍照、撥號(hào)),因此可以用于靜態(tài)分析[18]。在此基礎(chǔ)上,Nezhadkamali等[16]通過細(xì)化Intent、權(quán)限等特征并刪除重疊的特征值,得到一個(gè)高檢測率和高精度的檢測框架。鄭堯等[17]發(fā)現(xiàn)基于Intent和API特征組合比基于權(quán)限和API特征組合的檢測率要高。
總體而言,上述方案解決了單一特征在描述惡意軟件特性上的不足,但同時(shí)也存在著由于特征維度不足給實(shí)驗(yàn)結(jié)果帶來的誤判。因此,本文提出了一個(gè)由權(quán)限和Intent構(gòu)成(包含300個(gè)相互獨(dú)立的特征向量)的龐大特征空間來描述Android應(yīng)用程序的行為,從而準(zhǔn)確有效地檢測出Android惡意軟件。
本文的研究對(duì)象為Android應(yīng)用程序包(APK)文件。APK文件中包括簽名信息、resources、assets、.dex文件(classes.dex)、配置文件(manifest.xml)等。在提取APK文件中特征的基礎(chǔ)上,得到了WEID的整體架構(gòu)如圖1所示,主要由以下三大部分組成。
圖1 WEID整體架構(gòu)
(1) 特征提取。首先將APK文件轉(zhuǎn)換為zip壓縮文件,從壓縮文件中得到manifest.xml文件,再用AXMLPrinter2.jar將xml文件轉(zhuǎn)換成txt文件即可從中提取權(quán)限和Intent特征集。
(2) 特征處理。對(duì)提取到的兩類特征集進(jìn)行組合、疊加操作后得到五種不同的特征集,并采用主成分分析方法對(duì)新的特征集進(jìn)行降維處理,以保留有效成分。
(3) 加權(quán)集成。在降維后的特征集上訓(xùn)練出基學(xué)習(xí)器(logistics()、Random Forest()、Support Vector Machine()),并根據(jù)預(yù)測結(jié)果的信息量差對(duì)上述學(xué)習(xí)器加權(quán)集成,得到綜合學(xué)習(xí)器,輸出檢測結(jié)果。
2.2.1預(yù)處理
本文通過構(gòu)建特征列表項(xiàng)旨在更加全面地反映Android惡意軟件的行為。首先,參照Android官方給出的權(quán)限[19]和常用Intents[20],在此基礎(chǔ)上,添加Yerima等[15]提出的具有較高信息增益比的權(quán)限特征,并引入熱門的Google智能終端開源項(xiàng)目(如消息推送Firebase、二維碼處理zxing等)作為Intents特征,得到權(quán)限和Intents列表項(xiàng)各150項(xiàng)。圖2(a)所示為部分權(quán)限列表項(xiàng),圖2(b)所示為部分Intents列表項(xiàng)。將從APK文件中提取到的兩類特征與上述列表項(xiàng)進(jìn)行匹配,用二進(jìn)制數(shù)0和1表示匹配結(jié)果(0表示未匹配,1表示匹配),由此得到特征向量。本文將權(quán)限特征向量記作[P],Intent特征向量記作[I]。
(a) 權(quán)限列表項(xiàng)(部分) (b) Intents列表項(xiàng)(部分)圖2 特征列表項(xiàng)示意圖
為進(jìn)一步研究特征不同組合方式在Android惡意軟件檢測中的影響,我們考慮了五種不同的特征集:
1) PS(Permission Set)特征集:由特征向量[P]構(gòu)成。
2) IS(Intent Set)特征集:由特征向量[I]構(gòu)成。
3) SS(Intent+Permission Set)特征集:由特征向量[I]+[P]構(gòu)成。
4) PIS(Permission∪Intent Set)特征集:由特征向量[P]∪[I]構(gòu)成。
5) IPS(Intent∪Permission Set)特征集:由特征向量[I]∪[P]構(gòu)成。
2.2.2降 維
在機(jī)器學(xué)習(xí)分類任務(wù)中,通常隨著數(shù)據(jù)維數(shù)的增加,分類模型的計(jì)算量也隨之增加[13]。為了在不影響檢測精度的前提下提高惡意軟件檢測的效率,特征的維數(shù)應(yīng)該盡可能的低。降維旨在找到一個(gè)投影矩陣,將數(shù)據(jù)從高維空間映射到低維空間,具有去除冗余特征、提高預(yù)測精度等優(yōu)點(diǎn)[21]。主成分分析(Principal Component Analysis,PCA)是最常用的降維方法之一,能夠?qū)Ω呔S數(shù)據(jù)進(jìn)行特征提取,保留有效成分,從而提升數(shù)據(jù)處理效率。
PCA旨在通過正交變換,將一組可能具有相關(guān)性的高維向量轉(zhuǎn)換成一組線性無關(guān)的低維向量,轉(zhuǎn)換后的向量被稱為主成分,在一定的信息損失范圍內(nèi),新的低維向量會(huì)盡可能向原始高維數(shù)據(jù)逼近。根據(jù)PCA的基本原理,對(duì)上述提出的五種高維特征集進(jìn)行降維的步驟如下:
輸入:權(quán)限特征向量[P]和Intent特征向量[I],貢獻(xiàn)率q。
輸出:降維后的樣本集Z。
步驟三:對(duì)協(xié)方差矩陣G進(jìn)行特征值分解,得到特征值λ1,λ2,…,λn,(λ1≥λ2≥…≥λn)和相應(yīng)的特征向量μ1,μ2,…,μn,其中μj是一組標(biāo)準(zhǔn)正交基。
步驟五:對(duì)于每個(gè)樣本Ci,轉(zhuǎn)換后新的樣本為Zi=CiU,即經(jīng)過降維得到新的特征數(shù)據(jù)為Z=[Z1,Z2,…,Zm]T。
2.3.1集成學(xué)習(xí)
集成學(xué)習(xí)(Ensemble Learning,EM)是通過某種集成策略對(duì)若干個(gè)基學(xué)習(xí)器進(jìn)行適當(dāng)?shù)慕M合以期望得到性能較強(qiáng)的學(xué)習(xí)器。常見的結(jié)合策略有平均法、投票法和學(xué)習(xí)法。
Stacking算法采用學(xué)習(xí)法結(jié)合策略,對(duì)基學(xué)習(xí)器進(jìn)行異質(zhì)集成,又被稱為Stacked generalization[22]。Stacking算法主要分為2層,第0層輸入原始特征數(shù)據(jù)訓(xùn)練多個(gè)基學(xué)習(xí)器;再將基學(xué)習(xí)器的輸出結(jié)果進(jìn)行加權(quán)平均作為第1層的特征用于訓(xùn)練次級(jí)分類器。
加權(quán)投票是一種常用的集成學(xué)習(xí)方法,它利用基學(xué)習(xí)器間的互補(bǔ)功能來減少單個(gè)學(xué)習(xí)器的誤差,達(dá)到提高預(yù)測性能和分類精度的目的[23]。傳統(tǒng)的加權(quán)投票法將分類模型的正確率當(dāng)作投票的權(quán)重,因此,分類效果好的模型具有更高的投票貢獻(xiàn)率。但在不同場景下,單一的使用正確率不能完全體現(xiàn)模型的泛化性能。
2.3.2信息量差
AdaBoost算法[24]認(rèn)為當(dāng)越不可能發(fā)生的事件發(fā)生時(shí),我們能獲取到的信息量越大,所以信息量和事件發(fā)生的概率密切相關(guān)??紤]到現(xiàn)有的Android惡意軟件研究普遍側(cè)重于提升正確率而忽略漏檢和誤報(bào)情況。WEID從Stacking分層結(jié)構(gòu)出發(fā),創(chuàng)新性地研究基學(xué)習(xí)器的誤報(bào)和漏檢這兩大誤判結(jié)果對(duì)Android惡意軟件檢測的影響。首先,在第0層中對(duì)機(jī)器學(xué)習(xí)中典型的分類模型:邏輯回歸(Logistics Regression,LR)、隨機(jī)森林(Random Forest,RF)和支持向量機(jī)(Support Vector Machine,SVM)進(jìn)行訓(xùn)練得到基學(xué)習(xí)器;其次,在第1層中按照正負(fù)樣本分類正確事件和分類錯(cuò)誤事件的信息量差對(duì)上述基學(xué)習(xí)器加權(quán)集成,得到綜合學(xué)習(xí)器。正樣本分類正確事件和分類錯(cuò)誤事件的信息量差異可用誤報(bào)率表示:
(1)
負(fù)樣本分類正確事件和分類錯(cuò)誤事件的信息量差異可用漏檢率表示:
(2)
得到模型的權(quán)重值:
(3)
對(duì)模型加權(quán)集成得到綜合學(xué)習(xí)器:
(4)
式中:ε為誤報(bào)率;θ為漏檢率。為避免ε或θ接近于0或1的情況,引入調(diào)整因子α對(duì)兩類誤判進(jìn)行約束。WEID加權(quán)集成偽代碼如下:
輸入:訓(xùn)練集T={(xi,yi)|xi∈Rn,yi∈{1,-1}},基學(xué)習(xí)算法LR(),RF(),SVM(),交叉驗(yàn)證子集數(shù)k,調(diào)整因子α。
T1,T2,…,Tk=k_Fold(T,k)
Y={}
FOR EACHTjin {T1,T2,…,Tk}:
LRClf[j],RFClf[j],SVMClf[j]={LR(T-Tj),
RF(T-Tj),SVM(T-Tj)}
FOR EACHxiinTj:
si1,si2,si3={LRClf[j],RFClf[j],SVMClf[j]}.
predict(xi)
ε1,ε2,ε3={error{yi,(si1,si2,si3)}}
θ1,θ2,θ3={undectected{yi,(si1,si2,si3)}}
END FOR
END FOR
FOR EACHwtin {w1,w2,w3}
END FOR
研究顯示,惡意樣本和良性樣本的不同時(shí)間分布會(huì)影響分類器的決策邊界[25],如惡意軟件中采用新的Permission可能會(huì)成為分類器做出決策的一個(gè)重要依據(jù)。為避免由數(shù)據(jù)集單一或數(shù)據(jù)集時(shí)間分布集中對(duì)實(shí)驗(yàn)結(jié)果造成偏差,本文基于1 000個(gè)良性樣本和1 000個(gè)惡意樣本組成的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)。表1列出了數(shù)據(jù)集的來源和時(shí)間軸,其中,惡意樣本分別從經(jīng)典的Drebin[10]樣本庫和Contagio[26]網(wǎng)站上選取500個(gè)惡意軟件,時(shí)間跨度從2010年8月至2018年3月,包含DroidKongFu、Geimini、GoldDream、Trojan等47個(gè)惡意家族;良性樣本分別從國外GooglePlay和國內(nèi)安智市場上選取500個(gè)正常軟件,均為截至2019年7月的最新版本,包含社交、金融、購物、交通、游戲等23個(gè)類別。通過均衡兩類樣本的數(shù)量并保持樣本的時(shí)間分布一致性,有效地降低了實(shí)驗(yàn)偏差,更好地貼合實(shí)際情況。
表1 數(shù)據(jù)集來源和時(shí)間軸
本文采用如下指標(biāo)對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行有效評(píng)估:
式中:TP表示負(fù)樣本被檢測為負(fù)樣本的數(shù)量;TN表示正樣本被檢測為正樣本的數(shù)量;FP表示正樣本被檢測為負(fù)樣本的數(shù)量;FN表示負(fù)樣本被檢測為正樣本的數(shù)量。由于分類過程中的Precision和Recall(1-FNR)是一對(duì)矛盾的指標(biāo),引入F1分值能夠有效地平衡Precision和Recall,F1分值越接近1,模型的性能越好。
3.2.1實(shí)驗(yàn)結(jié)果
為獲得最佳分類效果,對(duì)2.2.1節(jié)中所述的五種特征集(PS、IS、SS、PIS和IPS)進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)按照3 ∶1的比例劃分樣本集得到訓(xùn)練集和測試集,再對(duì)訓(xùn)練集進(jìn)行k折交叉驗(yàn)證得到子樣本集,其中k=7。表2-表6列出了在上述五種特征集上的實(shí)驗(yàn)結(jié)果。
表2 在PS上的實(shí)驗(yàn)結(jié)果
表3 在IS上的實(shí)驗(yàn)結(jié)果
表4 在SS上的實(shí)驗(yàn)結(jié)果
表5 在PIS上的實(shí)驗(yàn)結(jié)果
表6 在IPS上的實(shí)驗(yàn)結(jié)果
上述結(jié)果表明,組合特征集(SS、IPS和PIS)比單一特征集(IS、PS)的正確率和F1分值更高,因而組合特征更能完整地描述未知軟件的整體特性,在組合特征集中,IPS表現(xiàn)最佳。就不同分類器而言,SVM方法對(duì)于高維稀疏數(shù)據(jù)的處理能力比LR和RF更強(qiáng),分類結(jié)果也更為準(zhǔn)確。本文提出的WEID在保持高正確率的前提下,比SVM方法獲得更低的誤報(bào)率和漏檢率,由此可見WEID比其他單個(gè)分類方法更具有分類優(yōu)勢。
3.2.2與其他典型方法的比較
從特征集角度與不同機(jī)器學(xué)習(xí)方法角度分別與其他典型方法進(jìn)行比較,結(jié)果如表7-表8所示。文獻(xiàn)[17]將API和Intent進(jìn)行組合得到的準(zhǔn)確率最高為0.977,但由于其樣本集的不均衡分布導(dǎo)致F1分值較低。文獻(xiàn)[15]通過將權(quán)限和API組合獲得了較高的F1分值,但其漏檢率比較高。由表7可知,本文選取高維度的權(quán)限和Intent作為特征,在分類準(zhǔn)確率和精度上都勝過其他方法。表8給出了WEID與基于Stacking[22]和改進(jìn)RF的加權(quán)投票算法[27]的對(duì)比結(jié)果,可以看出WEID在保持較高檢測準(zhǔn)確率的前提下,誤報(bào)率和漏檢率均比上述方法低。
表7 使用不同特征集的實(shí)驗(yàn)結(jié)果比較
表8 使用不同機(jī)器學(xué)習(xí)方法的實(shí)驗(yàn)結(jié)果比較
3.3.1參 數(shù)
WEID旨在保證正確率的前提下對(duì)兩種誤判結(jié)果(誤報(bào)和漏檢)進(jìn)行研究。由于在不同場景下,分類算法做出的誤報(bào)判斷和漏檢判斷的影響因子是不同的。因此,本文引入調(diào)整因子α對(duì)兩種誤判所占的比例加以約束。為尋找不同特征集下的最優(yōu)α值,設(shè)置α在0~1的范圍內(nèi)自動(dòng)尋優(yōu)以獲得最佳分類正確率,最優(yōu)α的取值如圖3所示。可以看出調(diào)整因子的取值在0.5之前已經(jīng)使得分類效果達(dá)到最優(yōu),這表明在我們的樣本集中,WEID更偏向于對(duì)負(fù)樣本分類結(jié)果的信息量差,因而賦予漏檢判斷的權(quán)重比誤報(bào)判斷的更大。
圖3 不同特征集下的調(diào)整因子α的取值
3.3.2性能評(píng)估
為驗(yàn)證本文方法的有效性,實(shí)驗(yàn)采用綜合指標(biāo)ROC(Receiver Operating Characteristic)曲線和AUC(Area Under Curve)區(qū)域分別對(duì)分類方法和特征集進(jìn)行性能評(píng)估,結(jié)果如圖4-圖5所示。3.2.1節(jié)表明,IPS在特征集中表現(xiàn)最佳,圖4中IPS的AUC值最高,因而有效地驗(yàn)證了IPS比其他特征集更能描述未知軟件的整體情況。類似地,圖5展示出了不同的機(jī)器學(xué)習(xí)方法在特征集IPS上的ROC曲線,其中,WEID獲得最高的AUC值,表明WEID比其他單個(gè)機(jī)器學(xué)習(xí)方法具有更為良好的泛化性能,從而驗(yàn)證了WEID的有效性。
圖4 不同特征集在WEID下的ROC曲線
圖5 不同分類方法在IPS上的ROC曲線
現(xiàn)有的Android惡意軟件檢測方普遍側(cè)重于提升分類的正確率,較少研究分類的誤報(bào)和漏檢情況。本文針對(duì)上述兩類誤判,構(gòu)建基于權(quán)限和Intent的多組特征集,創(chuàng)新性地提出了一種基于信息量差加權(quán)集成的Android惡意軟件檢測方法——WEID。實(shí)驗(yàn)結(jié)果表明,WEID對(duì)未知軟件的檢測正確率高達(dá)0.985的情況下,相比其他機(jī)器學(xué)習(xí)方法,獲得了更低的誤報(bào)率和漏檢率,在Android惡意軟件的檢測中展現(xiàn)出良好的性能。下一步工作將討論特征的粗細(xì)粒度之分,并分析不同特征之間的聯(lián)系以獲得更高層次的語義結(jié)構(gòu),從而更有效地甄別Android惡意軟件。