黃嘯晨 封化民 劉 飚 王子曄 魚海洋 葛 鴿
1(西安電子科技大學(xué)通信工程學(xué)院 陜西 西安 710071) 2(北京電子科技學(xué)院 北京 100070)
Android平臺(tái)自2007年發(fā)布以來(lái),憑借其開(kāi)源、免費(fèi)的優(yōu)勢(shì),迅速成為目前市場(chǎng)占有量最大的智能終端平臺(tái)。截至2019年10月,Android平臺(tái)在全球移動(dòng)市場(chǎng)的占有率已經(jīng)高達(dá)76.67%[1],也因此成為惡意犯罪者的首選目標(biāo)。據(jù)360互聯(lián)網(wǎng)安全中心統(tǒng)計(jì),2019年上半年Android平臺(tái)新增惡意軟件樣本約92.0萬(wàn)個(gè),平均每天截獲新增手機(jī)惡意軟件樣本約0.5萬(wàn)個(gè)[2]。面對(duì)Android平臺(tái)日益嚴(yán)重的安全問(wèn)題,研究如何快速高效檢測(cè)Android惡意軟件具有重要意義。
近年來(lái),許多研究者嘗試通過(guò)機(jī)器學(xué)習(xí)的方法,分析軟件的靜態(tài)或動(dòng)態(tài)行為特征,對(duì)Android惡意軟件進(jìn)行檢測(cè)[3]。相比之下,靜態(tài)行為特征的獲取時(shí)間開(kāi)銷較低、代碼覆蓋率較高、易于統(tǒng)計(jì)分析,成為目前國(guó)內(nèi)外學(xué)者的主要研究方法。
靜態(tài)行為特征主要通過(guò)對(duì)Android軟件安裝包(APK)進(jìn)行逆向處理,獲得如權(quán)限、應(yīng)用程序編程接口(API)、意圖信息、網(wǎng)絡(luò)地址、硬件組件等靜態(tài)特征。文獻(xiàn)[4]提出一種基于權(quán)限的檢測(cè)框架,使用主成分分析(PCA)選擇突出特征并應(yīng)用SVM進(jìn)行分類。文獻(xiàn)[5]利用BNS(Bi-normal Separation)文本分類技術(shù)和MI(Mutual Information)互信息技術(shù)進(jìn)行權(quán)限特征提取,借助數(shù)據(jù)挖掘工具WEKA進(jìn)行分類。但是單一的權(quán)限特征無(wú)法全面反映Android軟件的行為特征,檢測(cè)精度不高。文獻(xiàn)[6]使用權(quán)限和API作為特征,分別使用卡方校驗(yàn)(CHI)和信息增益(IG)對(duì)特征進(jìn)行選擇。文獻(xiàn)[7]通過(guò)提取權(quán)限、意圖、API、組件等8類特征,結(jié)合SVM算法設(shè)計(jì)了Android惡意軟件檢測(cè)工具Drebin。然而該工具使用的行為特征數(shù)量龐大,導(dǎo)致在檢測(cè)過(guò)程中時(shí)間、計(jì)算開(kāi)銷較高。
針對(duì)Android軟件靜態(tài)行為特征數(shù)量龐大、冗余信息較多,文獻(xiàn)[8]對(duì)Drebin軟件樣本集分別采用粒子群算法(PSO)和進(jìn)化算法(EC)優(yōu)化選擇分類特征,并采用AdaBoost算法構(gòu)建Android惡意軟件檢測(cè)模型,該研究?jī)H提取了單一的權(quán)限特征進(jìn)行分析,檢測(cè)精度較低。文獻(xiàn)[9]對(duì)權(quán)限和組件特征利用遺傳算法(GA)獲得最優(yōu)特征子集,使用SVM和神經(jīng)網(wǎng)絡(luò)進(jìn)行分類,降低了分類器的訓(xùn)練時(shí)間復(fù)雜度,然而GA參數(shù)較多,嚴(yán)重影響了最優(yōu)解的品質(zhì)。文獻(xiàn)[10]提出基于鄰域粗糙集與PSO的PSORS-FS方法,使用粗糙集概念作為特征之間依賴性的度量,并利用兩個(gè)Android軟件樣本集對(duì)該方法進(jìn)行評(píng)估,該方法使用屬性依賴度和特征子集長(zhǎng)度構(gòu)成適應(yīng)度函數(shù),而未考慮分類器的準(zhǔn)確率,降低了計(jì)算開(kāi)銷,但最終檢測(cè)精度不高。文獻(xiàn)[11]使用L1正則化與改進(jìn)的粒子群算法(SVBPSO)進(jìn)行混合式特征優(yōu)化選擇,提高了Android惡意軟件檢測(cè)精度,但L1選擇的特征數(shù)量、SV最佳組合、局部搜索間隔對(duì)優(yōu)化算法影響較大,計(jì)算復(fù)雜度較高。
本文在已有的研究基礎(chǔ)上,提出一種基于BWOA進(jìn)行特征優(yōu)化的Android惡意軟件檢測(cè)方法,主要工作如下:
(1) 提取Android軟件的權(quán)限、組件、API作為靜態(tài)行為特征,以便于全面準(zhǔn)確地描述Android軟件。
(2) 提出融合信息增益(IG)和離散二進(jìn)制鯨魚優(yōu)化算法(BWOA)的混合特征選擇算法,將無(wú)關(guān)和冗余特征去除,提高分類器的效率和性能。
(3) 將WOA與SVM分類模型相結(jié)合,設(shè)計(jì)了一種基于分類準(zhǔn)確率、特征子集長(zhǎng)度、支持向量個(gè)數(shù)的新適應(yīng)度函數(shù),利用WOA在最優(yōu)特征子集選擇的同時(shí),同步優(yōu)化SVM的關(guān)鍵參數(shù)。
信息增益算法[12]通過(guò)計(jì)算每個(gè)特征對(duì)數(shù)據(jù)集的信息增益,過(guò)濾選擇出具有更強(qiáng)分類能力的特征。設(shè)Android軟件數(shù)據(jù)集為D,特征A對(duì)D的信息增益為IG(D,A),其計(jì)算公式如下:
IG(D,A)=H(D)-H(D|A)
(1)
根據(jù)信息論中信息熵的概念,H(D)與H(D|A)的計(jì)算公式如下:
(2)
(3)
式中:E為類別集合,|E|為類別數(shù);P(ci)表示ci類在Android軟件數(shù)據(jù)集D中出現(xiàn)的概率;P(A)為特征A在D中出現(xiàn)的概率,P(A)為未出現(xiàn)的概率;P(ci|A)為Android樣本包含特征A時(shí)屬于ci的概率,P(ci|A)為不包含A時(shí)屬于ci的概率。
IG(D,A)表示由于特征A而對(duì)Android軟件數(shù)據(jù)集D的分類的不確定性減少的程度。當(dāng)Android軟件數(shù)據(jù)集中的某個(gè)特征的信息增益越大,說(shuō)明這個(gè)特征越重要,對(duì)分類影響越大。反之,信息增益很小的特征對(duì)分類影響較小,甚至?xí)绊懛诸惥?,增加?jì)算開(kāi)銷[13]。
WOA是文獻(xiàn)[14]于2016年提出的一種新型群體智能優(yōu)化算法。由以下三個(gè)階段構(gòu)成:
(1) 收縮包圍。鯨魚可以識(shí)別獵物位置并將其包圍,其數(shù)學(xué)模型如下:
D=|H·X*(t)-X(t)|
(4)
X(t+1)=X*(t)-A·D
(5)
式中:t為迭代次數(shù),X*(t)目前為止最優(yōu)鯨魚個(gè)體位置向量,X(t)為當(dāng)前鯨魚個(gè)體位置向量。A和H由以下公式得出:
A=2a·r1-a
(6)
H=2r2
(7)
式中:r1和r2為[0,1]之間隨機(jī)數(shù),a的值從2到0線性遞減。
(2) 螺旋更新。鯨魚會(huì)針對(duì)獵物位置以螺旋軌跡更新位置,其數(shù)學(xué)模型如下:
D′=|X*(t)-X(t)|
(8)
X(t+1)=D′·ebl·cos(2πl(wèi))+X*(t)
(9)
式中:b是定義螺旋形狀的常數(shù),l是[-1,1]的隨機(jī)數(shù)。
(3) 隨機(jī)搜索。當(dāng)|A|>1時(shí),鯨魚個(gè)體根據(jù)彼此位置進(jìn)行隨機(jī)搜索,其數(shù)學(xué)模型如下:
D=|H·Xrand(t)-X(t)|
(10)
X(t+1)=Xrand(t)-A·D
(11)
式中:Xrand(t)為隨機(jī)選擇的鯨魚個(gè)體位置向量。
在WOA中,鯨魚粒子的搜索空間為連續(xù)空間。然而在特征選擇問(wèn)題中,解向量是一條只包含0和1的數(shù)值向量,其中每一維的值代表是否選擇該特征。為了解決特征選擇問(wèn)題,必須將連續(xù)空間的值轉(zhuǎn)換為相應(yīng)的二進(jìn)制值。因此提出離散二進(jìn)制鯨魚優(yōu)化算法。
為保證鯨魚粒子位置向量的每一維只能取值0或1,引入sigmoid映射函數(shù)將連續(xù)空間的值轉(zhuǎn)換到離散空間:
(12)
(13)
適應(yīng)度函數(shù)用于評(píng)估WOA中鯨魚粒子的優(yōu)劣。在以往的特征選擇問(wèn)題研究中,研究者通常使用分類器的準(zhǔn)確率和選取特征的數(shù)量來(lái)定義適應(yīng)度函數(shù),用于評(píng)估每個(gè)特征子集[15]。
在使用群體智能優(yōu)化算法進(jìn)行特征選擇時(shí),最常使用的是SVM分類器[16]。因支持向量(Support Vector)的個(gè)數(shù)對(duì)模型的泛化能力有重要影響,故在適應(yīng)度函數(shù)上增加了模型支持向量個(gè)數(shù)項(xiàng)。新的適應(yīng)度函數(shù)如下:
(14)
式中:Acc是模型準(zhǔn)確率;α是其權(quán)重;L是特征總數(shù);R是所選特征子集長(zhǎng)度;β是特征數(shù)量的權(quán)重;M是Android樣本總數(shù);Vi表示第i個(gè)樣本是否為支持向量,若是取值為1,反之取值為0;ω是支持向量個(gè)數(shù)項(xiàng)的權(quán)重。
本文提出的基于BWOA-SVM的Android惡意軟件檢測(cè)方法的框架如圖1所示。整個(gè)過(guò)程主要包括三個(gè)部分:
(1) 逆向分析Android樣本文件,提取權(quán)限、組件、API靜態(tài)行為特征構(gòu)造特征向量集合。
(2) 利用信息增益和BWOA算法進(jìn)行特征選擇,同時(shí)對(duì)SVM參數(shù)組合(C,γ)同步優(yōu)化。
(3) 根據(jù)最優(yōu)特征子集和最佳參數(shù)組合(C,γ)對(duì)Android軟件進(jìn)行分類檢測(cè)。
圖1 Android惡意軟件檢測(cè)方法框架
特征提取部分運(yùn)用Androguard工具[17]對(duì)樣本進(jìn)行逆向處理,提取權(quán)限、組件、API作為特征,通過(guò)量化特征構(gòu)建特征向量并合并為數(shù)據(jù)集。具體過(guò)程如下:
(1) 逆向處理Android軟件樣本,獲取AndroidManifest.xml和smali文件。
(2) 解析AndroidManifest.xml,統(tǒng)計(jì)權(quán)限、組件信息;解析smali文件,獲取API信息。
(3) 對(duì)提取的特征進(jìn)行去重處理,去除重復(fù)特征,構(gòu)建特征集合FS。
(4) 將特征的有無(wú)量化為“1”或“0”,并在特征向量末尾添加標(biāo)志位“mal”或“ben”,其中“mal”表示惡意軟件,“ben”表示良性軟件。
Android軟件靜態(tài)行為特征數(shù)量龐大,屬性之間相關(guān)性強(qiáng),冗余信息較多。大量的不相干、冗余特征會(huì)降低分類器的精度和分類算法運(yùn)行效率。本節(jié)利用信息增益和BWOA進(jìn)行特征選擇。首先通過(guò)信息增益算法過(guò)濾掉對(duì)分類沒(méi)有影響或分類影響不大的特征,以減少后續(xù)BWOA的搜索空間,提高BWOA的搜索效率;然后運(yùn)用BWOA尋找最優(yōu)特征子集,并對(duì)SVM分類模型的關(guān)鍵參數(shù)(懲罰因子C,核函數(shù)參數(shù)γ)進(jìn)行同步優(yōu)化。
3.3.1粒子編碼方案
種群中每個(gè)粒子的位置向量由兩部分組成。粒子的第一部分前n位采用離散編碼,對(duì)應(yīng)特征選擇的一個(gè)特征子集,n為數(shù)據(jù)集特征總數(shù)。如果第i位為1,則表示第i個(gè)特征被選中;如果為0,則未被選中。粒子的第二部分后2位采用連續(xù)編碼,對(duì)應(yīng)SVM分類模型的關(guān)鍵參數(shù)(C,γ)。粒子編碼方案如圖2所示。
圖2 粒子編碼方案
3.3.2算法流程
基于BWOA-SVM的同步優(yōu)化算法首先將原始數(shù)據(jù)集輸入,去掉信息增益小于給定閾值的特征,然后運(yùn)用BWOA和連續(xù)WOA分別對(duì)所選特征和參數(shù)進(jìn)行編碼,以SVM模型的準(zhǔn)確率、特征子集長(zhǎng)度、支持向量個(gè)數(shù)三種指標(biāo)作為評(píng)價(jià)標(biāo)準(zhǔn),輸出得到使適應(yīng)度函數(shù)最高時(shí)的特征子集和SVM參數(shù)組合。算法實(shí)現(xiàn)過(guò)程如下:
輸入:原始數(shù)據(jù)集D,鯨魚種群規(guī)模N,最大迭代次數(shù)T。
輸出:最優(yōu)特征子集M,最優(yōu)參數(shù)組合(C,γ)。
1) 采用式(1)計(jì)算數(shù)據(jù)集D中每個(gè)特征的信息增益,去除低于閾值的特征,得到初選特征子集D′。
2) 初始化鯨魚種群,設(shè)定相關(guān)參數(shù),包括種群規(guī)模N、最大迭代次數(shù)T、粒子維度n+2(其中n為D′特征數(shù)量)。
3) 利用式(14)計(jì)算每個(gè)鯨魚個(gè)體的適應(yīng)度值,記錄最優(yōu)個(gè)體位置向量X*。
4) 當(dāng)t≤T時(shí),更新a、A、H、l、p的值。
5) 當(dāng)p<0.5時(shí),若|A|<1,根據(jù)式(5)更新個(gè)體位置向量;若|A|≥1,根據(jù)式(11)更新個(gè)體位置向量。
6) 當(dāng)p≥0.5時(shí),根據(jù)式(9)更新個(gè)體位置向量。
7) 利用式(13)對(duì)個(gè)體前n維進(jìn)行離散二進(jìn)制化。
8) 利用式(14)計(jì)算新的種群中每個(gè)個(gè)體的適應(yīng)度值,更新最優(yōu)個(gè)體位置向量X*。
9) 判斷是否達(dá)到最大迭代次數(shù)T,若未達(dá)到T,使得t=t+1,重復(fù)步驟4)至步驟8)。若已達(dá)到T,輸出最優(yōu)特征子集M和最優(yōu)參數(shù)組合(C,γ)。
本文實(shí)驗(yàn)所用的Android惡意樣本來(lái)源于virusshare[18],良性樣本借助爬蟲從Google Play抓取,去除其中無(wú)法逆向分析的無(wú)效樣本后,共收集惡意、良性樣本各1 000個(gè)。
為評(píng)判檢測(cè)方案效果,作如下定義:TP表示惡意樣本判為惡意的數(shù)量,F(xiàn)P表示良性樣本誤判為惡意的數(shù)量,TN表示良性樣本判為良性的數(shù)量,F(xiàn)N表示惡意樣本誤判為良性的數(shù)量。由此構(gòu)成評(píng)判Android檢測(cè)方案的4個(gè)常用指標(biāo)[3]:
檢測(cè)率:TPR=TP/(TP+FN),表示惡意樣本中正確分類為惡意軟件的比例。
誤報(bào)率:FPR=FP/(FP+TN),表示良性樣本中錯(cuò)誤分類為惡意軟件的比例。
漏報(bào)率:FNR=FN/(TP+FN),表示惡意樣本中錯(cuò)誤分類為良性軟件的比例。
準(zhǔn)確率:ACC=(TP+TN)/(TP+FP+FN+TN),表示所有樣本中正確分類的比例。
本文提出的BWOA-SVM方法是用Python 3.7語(yǔ)言編程設(shè)計(jì)實(shí)現(xiàn)的,SVM為Sklearn庫(kù)[19]中集成,并以徑向基函數(shù)(RBF)為核函數(shù),采用十折交叉驗(yàn)證法對(duì)SVM分類器進(jìn)行評(píng)價(jià)。BWOA-SVM方法的參數(shù)設(shè)置如表1所示。
表1 參數(shù)設(shè)置
為了驗(yàn)證本文方法的有效性,本文實(shí)現(xiàn)了基于GA、BPSO的同步優(yōu)化方法,并與本文方法進(jìn)行比較和分析。GA、BPSO、BWOA三種同步優(yōu)化算法的適應(yīng)度函數(shù)值迭代曲線如圖3-圖5所示。圖中X軸表示迭代次數(shù),Y軸表示適應(yīng)度函數(shù)值,兩條曲線分別代表最優(yōu)適應(yīng)度值和平均適應(yīng)度值。其中最優(yōu)適應(yīng)度值為截止到第t代時(shí)最優(yōu)個(gè)體的適應(yīng)度函數(shù)值,平均適應(yīng)度值為第t代中所有個(gè)體的適應(yīng)度函數(shù)的平均值。各算法在Android軟件樣本集上最優(yōu)適應(yīng)度值迭代曲線如圖6所示。
圖3 GA-SVM算法適應(yīng)度函數(shù)值迭代曲線
圖4 BPSO-SVM算法適應(yīng)度函數(shù)值迭代曲線
圖5 BWOA-SVM算法適應(yīng)度函數(shù)值迭代曲線
圖6 各算法最優(yōu)適應(yīng)度函數(shù)值迭代曲線
可以看出,本文提出的BWOA-SVM方法在尋優(yōu)過(guò)程中全局搜索能力更強(qiáng),相對(duì)于GA、BPSO兩種優(yōu)化算法可以很好地避免陷入局部最優(yōu)的困境,并且本文算法的收斂速度也明顯快于其他兩種算法,在第16次迭代時(shí)便已趨于穩(wěn)定,趨于穩(wěn)定之后的適應(yīng)度函數(shù)值高于GA、BPSO優(yōu)化算法,特征參數(shù)同步優(yōu)化性能較好。
由于Android軟件樣本集多為研究者各自收集整理的樣本集,因此本文通過(guò)復(fù)現(xiàn)文獻(xiàn)[9]、文獻(xiàn)[10]、文獻(xiàn)[11]的方法進(jìn)行對(duì)比分析。文獻(xiàn)[9]利用遺傳算法將特征數(shù)量減少到原始特征集的不到一半,以減少SVM分類器的復(fù)雜度,同時(shí)保持分類的準(zhǔn)確率。文獻(xiàn)[10]提出基于鄰域粗糙集與粒子群算法的PSORS-FS方法,獲得了很好的分類性能。文獻(xiàn)[11]通過(guò)改進(jìn)BPSO算法,使用SVBPSO算法進(jìn)行特征選擇后的檢測(cè)性能得到提高。為使實(shí)驗(yàn)結(jié)果更具有說(shuō)服力,在對(duì)比實(shí)驗(yàn)中采用雙層交叉驗(yàn)證方法進(jìn)行驗(yàn)證,首先通過(guò)五折交叉驗(yàn)證法確定最優(yōu)特征子集以及SVM參數(shù),然后對(duì)特征參數(shù)同步優(yōu)化結(jié)果通過(guò)十折交叉驗(yàn)證法評(píng)價(jià)SVM分類器性能,取5次實(shí)驗(yàn)的平均結(jié)果。各方法的分類結(jié)果如表2所示。
表2 不同方法實(shí)驗(yàn)結(jié)果比較
可以看出,文獻(xiàn)[9]僅使用GA進(jìn)行特征選擇,該算法參數(shù)較多,且初始種群對(duì)算法的尋優(yōu)能力影響較大,易陷入局部最優(yōu),因此檢測(cè)能力較差。文獻(xiàn)[10]提出的PSORS-FS方法使用粗糙集概念中屬性依賴度和特征子集長(zhǎng)度構(gòu)成適應(yīng)度函數(shù),而未考慮將分類器的準(zhǔn)確率作為評(píng)判指標(biāo),雖然相比于GA的性能得到改善,但仍擁有較高的漏報(bào)率。文獻(xiàn)[11]針對(duì)BPSO進(jìn)行改進(jìn),在使用S型函數(shù)進(jìn)行離散二進(jìn)制化的過(guò)程中,每隔一定的迭代次數(shù)使用V型函數(shù)進(jìn)行離散二進(jìn)制化,一定程度上改善了BPSO的易早熟收斂的缺點(diǎn)。
本文提出的BWOA-SVM算法實(shí)現(xiàn)簡(jiǎn)單,相比于傳統(tǒng)的基于梯度的優(yōu)化算法而言可以通過(guò)粒子二進(jìn)制編碼有效解決特征選擇這類離散優(yōu)化問(wèn)題,完成特征與參數(shù)的同步優(yōu)化,擁有較好的自適應(yīng)性,而且群體內(nèi)個(gè)體的故障不影響整體優(yōu)化問(wèn)題的求解,保證了較好的魯棒性。BWOA需要設(shè)置的參數(shù)較少,僅需要設(shè)置種群規(guī)模和最大迭代次數(shù)便可進(jìn)行尋優(yōu),而且三個(gè)尋優(yōu)階段使得該算法相比于其他優(yōu)化算法全局搜索能力更強(qiáng),保證了種群的多樣性,對(duì)隨機(jī)生成的初始種群依賴度較低,更易找到最優(yōu)解,避免陷入局部最優(yōu)解。將SVM分類器的準(zhǔn)確率、特征子集長(zhǎng)度、支持向量個(gè)數(shù)作為適應(yīng)度函數(shù),保證在最小的特征數(shù)量、最少的支持向量個(gè)數(shù)的同時(shí),獲得最高的準(zhǔn)確率,降低了計(jì)算開(kāi)銷,避免過(guò)擬合,提高了模型的泛化能力。通過(guò)實(shí)驗(yàn)表明,對(duì)Android軟件數(shù)據(jù)集的檢測(cè)準(zhǔn)確率和檢測(cè)率分別達(dá)到97.88%和97.85%,相對(duì)于其他方法有明顯的提高,誤報(bào)率和漏報(bào)率也有一定程度的降低,證明了本文提出方法的可行性和有效性。
面對(duì)日益嚴(yán)重的Android惡意軟件泛濫問(wèn)題,本文提出了一種基于生物啟發(fā)BWOA進(jìn)行特征優(yōu)化的Android惡意軟件檢測(cè)方法。該方法提取權(quán)限、組件、API等作為特征屬性,利用BWOA實(shí)現(xiàn)在選擇最優(yōu)特征子集的同時(shí),同步優(yōu)化SVM關(guān)鍵參數(shù),其中適應(yīng)度函數(shù)采用分類準(zhǔn)確率、特征子集長(zhǎng)度、支持向量個(gè)數(shù)作為評(píng)判標(biāo)準(zhǔn)。實(shí)驗(yàn)結(jié)果表明,該方法能夠達(dá)到97.88%的準(zhǔn)確率,擁有很好的自適應(yīng)性,在Android惡意軟件檢測(cè)方面具有較好的性能。