馮 垚,王金雙,張雪濤
(陸軍工程大學(xué) 指揮控制工程學(xué)院,江蘇 南京 210001)
機(jī)器學(xué)習(xí)在Android 惡意軟件檢測(cè)中得到廣泛應(yīng)用,特征工程是基于機(jī)器學(xué)習(xí)的Android 惡意軟件檢測(cè)的關(guān)鍵環(huán)節(jié)。目前使用的特征主要包括靜態(tài)特征和動(dòng)態(tài)特征。但特征工程的過(guò)程嚴(yán)重依賴(lài)于專(zhuān)家經(jīng)驗(yàn),反復(fù)試驗(yàn)調(diào)優(yōu)才能確定候選特征集合。
針對(duì)傳統(tǒng)特征工程需要大量專(zhuān)家經(jīng)驗(yàn)和人力的不足,本文提出了基于特征生成方法的Android惡意軟件檢測(cè)方法。該方法提取了多類(lèi)特征,基于UC Berkeley 的 ExploreKit[1]方法進(jìn)行自動(dòng)化特征生成計(jì)算,篩選得到能夠提升模型性能的新特征,得到了良好的檢測(cè)性能。
特征工程是使用專(zhuān)業(yè)知識(shí)、背景知識(shí)和技巧處理數(shù)據(jù),使得特征在機(jī)器學(xué)習(xí)算法上發(fā)揮更好的作用的過(guò)程。特征工程主要包括特征提取、特征選擇和特征構(gòu)建三個(gè)方面。
Android 惡意軟件檢測(cè)中的特征提取方法可以分為靜態(tài)分析方法和動(dòng)態(tài)分析方法。
靜態(tài)分析方法是指在不執(zhí)行Android 應(yīng)用的前提下獲得 APK(Android 應(yīng)用程序包,Android Application Package)文件的靜態(tài)特征,可以實(shí)現(xiàn)對(duì)大規(guī)模Android 樣本的特征的快速提取。例如,可以從APK中的AndroidManifest.xml 文件中提取權(quán)限、組件等特征,從 Dex 文件中提取二進(jìn)制特征。常見(jiàn)的靜態(tài)分析工具有 Androguard、Apktool。但是靜態(tài)分析存在易受混淆技術(shù)影響的問(wèn)題。
動(dòng)態(tài)分析方法是指通過(guò)設(shè)置可控環(huán)境,安裝并運(yùn)行APK,盡可能觸發(fā)樣本的行為,提取其執(zhí)行的動(dòng)作信息。文獻(xiàn)[2]提出了 IntelliDroid,該工具能夠?yàn)閻阂廛浖?dòng)態(tài)分析工具提供輸入數(shù)據(jù),觸發(fā)惡意行為。動(dòng)態(tài)分析的方法需要在運(yùn)行環(huán)境下監(jiān)控Android 軟件的運(yùn)行,并通過(guò)不斷輸入觸發(fā)其惡意行為,甚至可能需要人工進(jìn)行輔助操作,存在資源消耗大、實(shí)現(xiàn)困難等問(wèn)題。
特征選擇是指從特征集合中選出最具統(tǒng)計(jì)意義的特征子集,以達(dá)到減少特征個(gè)數(shù)、提高模型精度、減小運(yùn)行時(shí)間的目的。已有的惡意軟件檢測(cè)方法主要基于研究者經(jīng)驗(yàn)或特征貢獻(xiàn)度選出所用特征。特征貢獻(xiàn)度是指某個(gè)特征在分類(lèi)任務(wù)中的貢獻(xiàn)程度,常用的評(píng)價(jià)方法有卡方檢驗(yàn)法、信息增益法、粒子群優(yōu)化算法等[3]。
已有研究中,文獻(xiàn)[4]通過(guò)研究良性樣本和惡意樣本的區(qū)別,選擇意圖和權(quán)限作為特征。文獻(xiàn)[5]根據(jù)信息增益從開(kāi)發(fā)者信息、組件、權(quán)限和動(dòng)態(tài)分析結(jié)果等特征中進(jìn)行選擇,通過(guò)非監(jiān)督學(xué)習(xí)算法進(jìn)一步提升性能。文獻(xiàn)[6]將APK 中的特征劃分為基于語(yǔ)法和基于資源的特征,使用Extra Tree 對(duì)特征進(jìn)行排序,篩選出不受混淆技術(shù)影響的特征。文獻(xiàn)[7]使用opcode 序列作為特征,利用 n-gram 從簡(jiǎn)化的 opcode序列中提取特征,根據(jù)信息增益對(duì)特征進(jìn)行選擇,使用AP 聚類(lèi)算法壓縮樣本的數(shù)量。文獻(xiàn)[8]通過(guò)對(duì)比某個(gè)特征在良性樣本和惡意樣本中出現(xiàn)的數(shù)量,選出基于方法調(diào)用和組件間通信的動(dòng)態(tài)特征。
特征生成是指從原始數(shù)據(jù)中通過(guò)構(gòu)造新的特征,挖掘原始特征中的有效信息,用于訓(xùn)練機(jī)器學(xué)習(xí)模型。已有的惡意軟件檢測(cè)方法主要是基于研究者經(jīng)驗(yàn)設(shè)計(jì)新特征。
文獻(xiàn)[9]提取了 545 000 個(gè)特征,根據(jù)種類(lèi)將其劃分為8 個(gè)特征向量集合,統(tǒng)計(jì)每個(gè)特征向量集合中相關(guān)特征的數(shù)量以作為特征。文獻(xiàn)[10]通過(guò)構(gòu)建API 調(diào)用的加權(quán)有向圖作為特征,使用信息增益篩選特征。文獻(xiàn)[11]使用由應(yīng)用組件和 API 構(gòu)成的行為模式圖作為特征。文獻(xiàn)[12]通過(guò)將 Dex 文件轉(zhuǎn)化為 RGB 圖像,并將圖像作為特征。文獻(xiàn)[13]使用抽象的API 調(diào)用序列構(gòu)建馬爾科夫鏈行為模型作為特征。
特征生成方法對(duì)已有的特征進(jìn)行組合、計(jì)算以進(jìn)一步提升機(jī)器學(xué)習(xí)模型的分類(lèi)性能。常用的生成新特征的方法有離散化、歸一化、四則運(yùn)算、聚合運(yùn)算等。但是如何運(yùn)用以上方法對(duì)特征進(jìn)行處理以獲得性能更好的新特征依賴(lài)于研究者的專(zhuān)家經(jīng)驗(yàn)和大量的實(shí)驗(yàn)驗(yàn)證。如何快速有效地對(duì)已有特征進(jìn)行處理,得到性能表現(xiàn)更好的新特征,是一個(gè)亟需解決的問(wèn)題。
本文基于 UC Berkeley 的 ExploreKit[1]自動(dòng)特征生成框架進(jìn)行研究。如圖1 所示,該框架集成了離散化、歸一化、四則運(yùn)算等生成新特征的方法,將各類(lèi)數(shù)據(jù)集輸入到該框架中,通過(guò)以上方法生成大量的候選新特征。該框架使用一種基于機(jī)器學(xué)習(xí)的新特征性能評(píng)估方法以預(yù)測(cè)新特征的性能表現(xiàn),從而有效篩選出性能表現(xiàn)更好的特征。在根據(jù)候選特征排序模型評(píng)分對(duì)候選特征進(jìn)行評(píng)分后,該框架使用貪心算法按序評(píng)估候選特征在目標(biāo)分類(lèi)模型上的性能表現(xiàn),并根據(jù)用戶(hù)需要從中選擇提升目標(biāo)分類(lèi)模型性能的新特征。ExploreKit 將本次特征生成的初始特征和選出的表現(xiàn)最優(yōu)的新特征進(jìn)行組合,作為下一次迭代的輸入,從而不斷挖掘有效的新特征。ExploreKit 在 25 組大小、分布等差異較大的數(shù)據(jù)集上,平均減少了20%的錯(cuò)誤率。
圖1 ExploreKit 特征生成框架
本文將ExploreKit 特征生成框架應(yīng)用于基于機(jī)器學(xué)習(xí)的Android 惡意軟件檢測(cè)中,但是已有的特征生成方法存在生成候選特征過(guò)多的問(wèn)題。假設(shè)輸入框架的特征數(shù)量為n,生成新特征的數(shù)量級(jí)為O(n3)。該框架需要對(duì)新生成的大量特征進(jìn)行評(píng)估排序,使得特征生成時(shí)間過(guò)長(zhǎng)。
表1 特征生成方式
本文基于ExploreKit 特征生成框架,提出了基于特征生成的Android 惡意軟件檢測(cè)方法,如圖2 所示。
特征生成所用時(shí)間會(huì)隨著輸入特征的數(shù)量的增加而快速增加, 而 ExploreKit 特征生成框架中沒(méi)有對(duì)輸入的特征進(jìn)行篩選,即使輸入的特征不具有任何信息, 也會(huì)對(duì)其進(jìn)行計(jì)算生成大量新特征,從而導(dǎo)致時(shí)間的浪費(fèi)。采用信息增益對(duì)輸入的特征進(jìn)行篩選,過(guò)濾掉信息增益過(guò)低的特征。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),聚合過(guò)多個(gè)特征生成的新特征幾乎不會(huì)被選作新特征,通過(guò)對(duì)聚合特征的數(shù)量進(jìn)行限制,從而將新生成特征的數(shù)量降低到了 O(n2)。表 1 給出了本實(shí)驗(yàn)中用到的特征生成方式。
在該框架中,選取了如下特征用于Android 惡意軟件檢測(cè):
(1)Manifest 中涉及的特征,包括聲明的權(quán)限、組件信息、顯式意圖與意圖過(guò)濾器等。Android 惡意軟件制作者經(jīng)常利用重打包技術(shù),將惡意負(fù)載捆綁到市場(chǎng)上的正常APK 中,因此本文選取了與重打包有關(guān)的特征,如證書(shū)與簽名的時(shí)間相距較近,說(shuō)明該 APK 可能為重打包 APK。
(2)Dex 中涉及的特征,包括敏感 API、使用的權(quán)限、隱式意圖與廣播意圖過(guò)濾器等。動(dòng)態(tài)代碼加載、反射、加密函數(shù)等常被惡意軟件用于隱藏其惡意行為,從 Dex 中提取了與之相關(guān)的特征。對(duì) Dex 中包名進(jìn)行了統(tǒng)計(jì),獲得其信息熵,以判斷是否使用混淆技術(shù)對(duì)包名進(jìn)行處理。
(3)其他文件中涉及的特征,包括 APK 中文件的數(shù)量、ELF 文件信息、文件格式與后綴名不匹配出現(xiàn)的次數(shù)等,并對(duì)APK 中文件進(jìn)行掃描,以發(fā)現(xiàn)APK 文件中的隱匿APK,并對(duì)其特征進(jìn)行提取。
在特征提取后,根據(jù)信息增益對(duì)得到的特征進(jìn)行排序和篩選,從而減小輸入框架內(nèi)特征數(shù)量。使用過(guò)濾法對(duì)特征進(jìn)行選擇,設(shè)置閾值,從排序后的特征中選取高于閾值的特征輸入到特征生成框架。將得到的特征輸入到 ExploreKit 特征生成框架[1],得到能夠提升目標(biāo)分類(lèi)模型的新特征。新特征與原始特征進(jìn)行組合,用于訓(xùn)練目標(biāo)分類(lèi)器并得到惡意軟件檢測(cè)模型。
Android 惡意軟件檢測(cè)中常用的檢測(cè)指標(biāo)有準(zhǔn)確 率 (Accuracy)、精 確 率 (Precision)、 召 回 率 (Recall)、AUC 等。定義如下:
圖2 基于特征生成方法的Android 惡意軟件檢測(cè)方法框架
其中,TP 為將正樣本判定為正類(lèi)的概率,即真陽(yáng)率;FP 表示將負(fù)樣本判定為正類(lèi)的概率,即假陽(yáng)率;TN為將負(fù)樣本判定為負(fù)類(lèi)的概率,即真陰率;FN 表示將正樣本判定為負(fù)類(lèi)的概率,即假陰率。接收者運(yùn)行特征(Receiver Operating Characteristic,ROC)曲線顯示了給定模型的 TP 和 FP 之間的比較評(píng)定。曲線下面積(Area Under Curve,AUC)是指 ROC 曲線下方的面積,用于度量模型的準(zhǔn)確率。AUC 的取值范圍為0.5 ~1,AUC 越接近 1,則模型的準(zhǔn)確率越高。
本文使用AUC 和錯(cuò)誤減少率(Error Rate Reduction,ERR) 作為模型性能提升的評(píng)價(jià)指標(biāo)。使用Accuracy、Precision、Recall、F 值 和 AUC 作 為 模 型 性能的評(píng)價(jià)指標(biāo)。錯(cuò)誤減少率定義如下:
其中,AUCi和 AUCf分別代表經(jīng)過(guò) ExploreKit 特征生成方法處理前后分類(lèi)模型對(duì)應(yīng)的AUC。
實(shí)驗(yàn)采取 10-fold 交叉驗(yàn)證法。C4.5、SVM、隨機(jī)森林分類(lèi)模型使用Weka 3.7 中的默認(rèn)配置。特征生成過(guò)程迭代搜索。實(shí)驗(yàn)環(huán)境如表2 所示。
表2 實(shí)驗(yàn)環(huán)境
圖3 信息增益分布
實(shí)驗(yàn)所用數(shù)據(jù)中,良性樣本由 CICAAGM[14]數(shù)據(jù)集和從安智市場(chǎng)獲得的 APK 組成,共計(jì)10 000 個(gè);惡意樣本由 Drebin[9]數(shù)據(jù)集、CICAAGM 數(shù)據(jù)集和從VirusShare 獲得的惡意樣本組成,共計(jì) 10 000 個(gè),如表 3 所示。
表3 實(shí)驗(yàn)所用數(shù)據(jù)集
4.4.1 特征選擇
對(duì)實(shí)驗(yàn)所用數(shù)據(jù)集進(jìn)行特征提取,提取了35 138組特征,大多數(shù)特征的信息增益都很小,圖3 給出了所有信息增益大于0.001 的分布,在所提取的特征中,僅有 199 組特征的信息增益大于 0.001,有54 組特征的信息增益大于 0.005。從曲線上發(fā)現(xiàn),信息增益小于0.005 的曲線趨于平緩,故設(shè)置閾值為0.005。采用過(guò)濾法,從中提取出 54 組特征,得到的部分特征及其信息增益如表4 所示。
4.4.2 特征生成
圖4 給出了由特征生成方法得到的新特征示例。在該示例中,使用了 StandardScoreUnaryOperator()和 Add() 兩 類(lèi) 算 子 。將 初 始 特 征 A1:File 與 A2:URLConection 進(jìn)行標(biāo)準(zhǔn)化后得到 B1和 B2,B1和 B2相加得到特征C1,再對(duì) C1進(jìn)行標(biāo)準(zhǔn)化得到輸出結(jié)果 Output。File 指與文件操作有關(guān)的 API 的數(shù)量,URLConection 指與網(wǎng)絡(luò)連接有關(guān)的 API 的數(shù)量,二者特征組合得到新特征,該特征可能描述了通過(guò)接收外部信息對(duì)本地文件進(jìn)行操作的惡意行為。
表4 部分特征及其信息增益
圖4 新生成特征示例
表5 實(shí)驗(yàn)結(jié)果
表6 符號(hào)及其含義
本文選取C4.5、SVM 和隨機(jī)森林作為目標(biāo)分類(lèi)模型。將提取的特征輸入到改進(jìn)后 ExploreKit 特征生成框架中得到實(shí)驗(yàn)提升結(jié)果,如表5 所示。
根據(jù)ExploreKit 特征生成結(jié)果,獲得了新生成的特征,圖5 給出了目標(biāo)分類(lèi)模型為隨機(jī)森林的新特征生成過(guò)程。涉及的符號(hào)如表6 所示。
該特征生成過(guò)程在三次迭代后結(jié)束,將生成的特征與原始特征組合,對(duì)目標(biāo)分類(lèi)模型進(jìn)行訓(xùn)練得到的檢測(cè)模型性能如表7 所示。
表7 檢測(cè)器性能
針對(duì)C4.5、SVM 和隨機(jī)森林三種分類(lèi)模型,在實(shí)驗(yàn)所用數(shù)據(jù)集上,特征生成所用時(shí)間分別為6 599 s、9 126 s 和 21 116 s。圖 6 給出了針對(duì)不同規(guī)模的APK 提取特征所用時(shí)間。
本文研究了基于特征生成的Android 惡意軟件檢測(cè)方法,該方法使用ExploreKit 生成并篩選出能夠提高分類(lèi)模型性能的新特征,緩解了傳統(tǒng)特征工程需要專(zhuān)家經(jīng)驗(yàn)和大量人工篩選的困難。
圖5 新特征生成過(guò)程
圖6 不同規(guī)模APK 特征提取時(shí)間
ExploreKit 在應(yīng)對(duì)大規(guī)模的 Android 數(shù)據(jù)集時(shí)的時(shí)間耗費(fèi)較大,因此,需要繼續(xù)改進(jìn) ExploreKit 以降低其時(shí)間耗費(fèi)。在未來(lái)工作中,考慮到 Android 樣本特征類(lèi)型的特點(diǎn),將Android 特征按照特定順序組合來(lái)引入新的算子,并根據(jù)Android 樣本選出更有效的算子組合方案,來(lái)提高候選特征的平均質(zhì)量,進(jìn)一步降低特征評(píng)估所用時(shí)間。