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