趙旭康,劉曉鋒+,徐 潔
(1.西華師范大學(xué) 計算機學(xué)院,四川 南充 637009;2.西華師范大學(xué) 電子信息工程學(xué)院,四川 南充 637009)
傳統(tǒng)的惡意軟件檢測依賴惡意軟件庫的建立來進行檢測工作,但是無法有效應(yīng)對惡意軟件的變種[1]。伴隨人工智能的興起,機器學(xué)習(xí)等技術(shù)逐漸被應(yīng)用至惡意軟件檢測領(lǐng)域并取得較好的成果[2],主要通過特征工程將移動應(yīng)用轉(zhuǎn)換為向量進行表示。在特征選擇方面,文獻(xiàn)[3]選擇卡方檢驗(chi-square test,Chi)作為特征選擇方法,與基尼不純度增量相結(jié)合來尋找數(shù)據(jù)集中包含的關(guān)鍵特征;文獻(xiàn)[4]提出一種基于信息增益(information gain,IG)的惡意軟件特征選擇方法,在減少特征數(shù)量的同時取得了較好的實驗效果。然而IG算法借助熵的概念去判斷某個特征對于整個數(shù)據(jù)集的重要性,并未體現(xiàn)出不同類別中特征的差異性;Chi算法通過辨別實際與理論在數(shù)值上的差距來確定特征的地位,只記錄數(shù)據(jù)集中該特征是否出現(xiàn),從而忽略此特征的頻率。
為此,本文提出一種特征重要性評分算法(feature importance scoring algorithm,F(xiàn)IS),改進詞頻-逆文檔頻率(term frequency-inverse document frequency,TF-IDF)算法對于常見特征權(quán)重下降的不足,突出類間頻度和特征在不同類別之間表現(xiàn)的分布差異的重要性。選取權(quán)限、意圖和接口3種特征,將FIS算法分別與傳統(tǒng)的特征選擇算法和其它的主流檢測工具在數(shù)據(jù)集上做對比實驗。實驗結(jié)果表明,F(xiàn)IS在準(zhǔn)確率等性能評價指標(biāo)上相比其它算法,有著一定提升。
本文對于惡意軟件特征的提取工作主要集中于靜態(tài)分析方面。其中接口(application program interface,API)、權(quán)限和意圖等在應(yīng)用程序包(Android application package,APK)中包含的特性通常會被為判斷應(yīng)用程序是否具有惡意行為的依據(jù)。靜態(tài)分析的優(yōu)點在于速度快和能耗低,可以幫助分析人員快速了解一個應(yīng)用的大致行為。文獻(xiàn)[5]提出一種基于權(quán)限的貝葉斯分類檢測系統(tǒng),其最佳準(zhǔn)確率為91.1%;文獻(xiàn)[6]專注于Android應(yīng)用程序的調(diào)用資源,將API作為特征并選擇支持向量機來檢測惡意程序。同時,更多的研究傾向于選擇多特征結(jié)合的方案來提升最終效果。文獻(xiàn)[7]結(jié)合權(quán)限和API調(diào)用來建立分類模型,并通過3種不同的分組策略來篩選最有價值的特征;文獻(xiàn)[8]提出包含權(quán)限和意圖特征的Android惡意軟件檢測,將主成分分析PCA和t-SNE相結(jié)合,最終達(dá)到91.7%的準(zhǔn)確率。
從上述文獻(xiàn)可看出,接口、意圖以及權(quán)限組合一起可用來表征一個應(yīng)用的具體行為,同時具備檢測速度快的優(yōu)點。采用多特征與機器學(xué)習(xí)技術(shù)進行惡意軟件檢測是現(xiàn)在研究的趨勢,因此本文選擇靜態(tài)分析的方式提取應(yīng)用特征,同時結(jié)合機器學(xué)習(xí)模型彌補準(zhǔn)確率不足的問題,進一步提升檢測的效果。
如圖1所示,本文提出的基于FIS算法的Android惡意軟件檢測方法的關(guān)鍵步驟為:通過分析不同類別之間特征分布的差異性與在多類別中出現(xiàn)的頻繁程度,計算出特征的差異指數(shù)和頻度以淘汰重要性較低的冗余特征,最后將篩選出的最優(yōu)特征子集交給分類器。
圖1 惡意軟件檢測的總體框架
數(shù)據(jù)預(yù)處理與FIS算法模塊是該方法的核心。在預(yù)處理過程中,需要對原始數(shù)據(jù)做詳細(xì)的掃描來提取出原始特征集,同時對集合里的特征進行逐一分析,剔除一些異常的數(shù)據(jù)保證之后特征選擇工作的順利進行。
在特征選擇模塊中,對預(yù)處理之后的特征集運用FIS算法,計算出每個特征的頻度和分布差異指數(shù),通過最終的重要性評分來評選出最優(yōu)特征子集。
在數(shù)據(jù)預(yù)處理步驟中使用Androguard開源工具對安卓樣本集進行逆向分析。通過批處理的形式從反編譯后的AndroidManifest.xml文件中提取Intent意圖和Permission權(quán)限的特征信息,從smali字節(jié)碼文件中獲取API接口的特征,將三者一并組合成原始特征集。
FIS算法借鑒TF-IDF中重視頻度的思想,在其基礎(chǔ)上加以改進,引入類間特征分布的差異指數(shù),以此來篩選出更有代表性的關(guān)鍵特征從而改善實際的分類效果。
2.2.1 FIS算法的定義
TF-IDF在數(shù)據(jù)挖掘中普遍用來評價一個單詞對于文件的重要程度。該方法認(rèn)為,一個單詞的重要性與它在本文件中重復(fù)的次數(shù)成正比,和在語料庫中出現(xiàn)的頻率成反比。其中,TF認(rèn)為某個特征的重要性與它在總體樣本集上出現(xiàn)的次數(shù)有關(guān),卻沒考慮到多類別的具體情況。IDF在削弱常見特征同時,會導(dǎo)致部分有區(qū)分度且數(shù)量不少的特征重要性下滑。因此需要對上述問題進行重新設(shè)計,達(dá)到特征選擇的要求。
FIS算法從特征在不同類別中表現(xiàn)出的多樣頻率和其在類間分布的差異性兩個角度對每個特征進行評分,為之后的特征篩選提供依據(jù)。一般而言,區(qū)分度較高的特征具有如下兩種特點:①代表性:該特征至少在一種類別的樣本集中具有較高的出現(xiàn)頻率;②差異性:該特征在某個類別的樣本集中具有普遍性,同時在另一類別的樣本集中保持一定的低占比。
FIS算法以某個特征的分布差異為基準(zhǔn),輔以該特征在不同類別中表現(xiàn)出的多樣頻率作為衡量此特征重要性評分的標(biāo)準(zhǔn)。其相關(guān)定義如下:
定義1 特征多樣頻度:特征i的頻率反應(yīng)出在樣本集中出現(xiàn)的頻繁程度。若頻率越高,特征i總體出現(xiàn)的次數(shù)越多;相反若頻率越低,i出現(xiàn)的次數(shù)越低。記作FEi,計算公式如式(1)所示
(1)
其中,Nmal表示惡意樣本集中軟件的總數(shù)量,Nben表示良性樣本集中軟件的總數(shù)量,Ei,j代表應(yīng)用j中是否包含特征i,若存在,則Ei,j=1, 否則為0。 P(Xi=1) 表示包含特征i的應(yīng)用程序的出現(xiàn)概率。與TF-IDF中詞頻TF相比,F(xiàn)Ei增加對于具體類別的分布情況,而不是僅從整體樣本集上計算。
定義2 特征分布差異:特征i差異指數(shù)的數(shù)值與其在類間分布的差異性呈正比關(guān)系,用DNi表示,其計算的公式如式(2)所示
|P(C=mal)-P(C=ben)+1|
(2)
其中,P(C=mal) 表示在樣本集中應(yīng)用為惡意的概率,P(C=ben) 代表應(yīng)用為良性的概率,并在末尾添加1用來預(yù)防出現(xiàn)在均衡樣本集中出現(xiàn)兩種概率相等的情況。DNi改進TF-IDF中僅關(guān)注單一類別的局限性問題,量化出不同類別表現(xiàn)出的實際差異,更好應(yīng)對不同樣本數(shù)量不均等的問題。
定義3 特征重要性指數(shù):表示特征i的重要程度。如果重要性指數(shù)越高,代表該特征i的重要程度越高,記作Si,評價公式如式(3)所示
Si=FEi×DNi
(3)
Si綜合考慮某個特征的頻度與分布差異兩種因素來計算出某個特征具體的重要性評分。在之后的特征篩選過程中,并不設(shè)置具體的閾值來判斷某個特征是否具備區(qū)分度。本文認(rèn)為區(qū)分度并不是只有是否存在兩種可能性,應(yīng)該由Si來量化其重要程度,最后根據(jù)分?jǐn)?shù)的高低從大到小依次選擇。
2.2.2 FIS算法的過程
本文涉及到的特征選擇分為特征評分與篩選兩個部分。其核心步驟如下:
(1)計算多樣頻度。在第(7)行中,根據(jù)某特征在全部應(yīng)用出現(xiàn)的次數(shù)與總應(yīng)用的數(shù)量的占比計算出包含該特征的應(yīng)用程序的出現(xiàn)概率,再按照公式(1)將其與在不同類別的出現(xiàn)的頻率相乘得到多樣頻度。
(2)計算分布差異。第(8)行,計算出某特征在不同類別中出現(xiàn)的頻率差值,根據(jù)式(2)分別計算出不同類別樣本集的數(shù)量差距與特征出現(xiàn)的頻率差值相乘得到特征的分布差異。
(3)構(gòu)建特征評分集合。第(9)行中,將之前計算出的多樣頻度與分布差異結(jié)合式(3)得到每個特征的重要性評分,將其添加評分集合中作為特征篩選的唯一依據(jù)。
在算法1的描述中,第(2)、第(3)行均是統(tǒng)計出相關(guān)應(yīng)用的數(shù)量,僅需執(zhí)行一次。算法主要的時間損耗發(fā)生在第(4)~第(11)行對特征集進行遍歷的過程。遍歷特征集的循環(huán)次數(shù)為集合中含有的特征個數(shù),其余環(huán)節(jié)均不涉及重復(fù)執(zhí)行。
算法1:特征重要性評分算法
輸入:惡意應(yīng)用特征個數(shù)映射函數(shù)Lmal,良性應(yīng)用特征個數(shù)映射函數(shù)Lben,全部特征集D1
輸出:特征重要性評分映射集合List_Score
(1)List_Score=null; //全部特征的FIS評分集
(2)M=惡意應(yīng)用的全部數(shù)量;
(3)B=良性應(yīng)用的全部數(shù)量;
(4)forfiinD1do
(5)NMi=Lmal(fi); //fi在全部惡意應(yīng)用中出現(xiàn)次數(shù)
(6)NBi=Lben(fi); //fi在全部良性應(yīng)用中出現(xiàn)次數(shù)
(7)FEi=(NMi/M+NBi/B)*(NMi+NBi)/(M+B);
(8)DNi=|NMi/M-NBi/B|*|M/(M+B)-B/(M+B)+1|;
(9)Si=FEi*DNi; // 得到單個特征的評分
(10) Add (Si,fi) inList_Score;
(11)end for
相比于TF-IDF 算法,F(xiàn)IS在輸入時加入包含特征個數(shù)的映射,能夠大大減少時間消耗,其時間復(fù)雜度為O(n),在時間消耗方面的代價相比TF-IDF更低。
本文共進行以下實驗評估FIS算法的特征選擇效果:
實驗1:圍繞分類器模型和特征的數(shù)量與類型展開,印證FIS算法能夠有效地篩選出關(guān)鍵特征。
實驗2:為了驗證FIS算法在識別準(zhǔn)確率等評價指標(biāo)方面的優(yōu)越性,選擇信息增益、卡方校驗和TF-IDF的特征選擇方法與FIS算法做橫向?qū)Ρ?,同時與其它成熟的檢測工具進行比較,評估FIS算法在實際應(yīng)用中的具體成效。
實驗使用的數(shù)據(jù)集由Android良性和惡意應(yīng)用兩種類型的樣本組成。其中1400個惡意應(yīng)用來自CICMalDroid2020[9,10]與CICInvesAndMal2019[11]開源項目,1400個良性應(yīng)用在安卓網(wǎng)(https://www.apk3.com/app)自行下載獲得,并且所有良性應(yīng)用在實驗前均由360安全殺毒引擎進行二次驗證,確保它們的非惡意性。
采用Androguard開源工具對數(shù)據(jù)集中2800個應(yīng)用進行反編譯處理,通過數(shù)據(jù)預(yù)處理后一共提出到3844個特征。為方便機器學(xué)習(xí),需要對特征向量化。定義集合S為樣本集中所有類型特征的并集,如式(4)所示,集合S1、S2和S3分別代表權(quán)限、API和意圖3大類別的特征。若當(dāng)前APK包含某種特征,則標(biāo)記為1,否則表示為0
S=S1∪S2∪S3
(4)
因為惡意檢測的本質(zhì)是二分類問題,所以在最后添加isMalware一列。值為1,代表這個應(yīng)用是惡意軟件,為0表示這個應(yīng)用是良性軟件。表1以轉(zhuǎn)置的形式展示了部分特征屬性的向量化信息。
表1 部分特征屬性向量化信息
本文使用準(zhǔn)確率ACC(accuracy)、假正率FPR(false positive rate)、召回率Recall、F1值和ROC(receiver ope-rating characteristic)曲線5個指標(biāo)對本文提出的檢測算法進行評估。其中TP(true positive)和FP(false positive)分別表示為良性軟件被正確預(yù)測為良性軟件的數(shù)量與惡意軟件被錯誤判定為良性軟件的數(shù)量;TN(true negative)與FN(false negative)分別表示為惡意軟件被正確識別成惡意軟件的數(shù)量與良性軟件被錯誤識別成惡意軟件的數(shù)量。具體的公式定義如下所示
(5)
(6)
(7)
(8)
(9)
(10)
ROC的縱坐標(biāo)是真正率TPR,其值與召回率等同,橫坐標(biāo)為假正率FPR。
FIS算法的設(shè)計初衷是為了在特征選擇過程中篩選出更具有代表性的特征,降低一般特征的重要性。
在權(quán)限、接口和意圖3種類別中,從數(shù)據(jù)集中2800個樣本里一共提取出重要性分?jǐn)?shù)從大到小排名前30、90、150和全部3844個特征。將它們分別作為樸素貝葉斯Naive Bayes、支持向量機SVM(support vector machine)、K近鄰KNN(k-nearest neighbor)和隨機森林Random Forest這4種分類器的輸入,最終的結(jié)果如圖2所示。
圖2 FIS算法使用不同分類器的準(zhǔn)確率
圖3 FIS算法使用不同分類器的ROC曲線
結(jié)果表明,隨機森林分類器獲得的準(zhǔn)確率最高,整體效果最好;SVM次之,準(zhǔn)確率略低于隨機森林,其次是KNN,效果最差的樸素貝葉斯分類模型最高準(zhǔn)確率僅為93.8989%。
圖3表示在特征數(shù)量固定為150的情況下,4個分類器ROC曲線的局部放大對比。隨機森林分類器的曲線朝左上方凸起的表現(xiàn)最為明顯,樸素貝葉斯的曲線最靠近右下方。
因此,4種分類器中最適合FIS算法的是隨機森林模型,它帶來的效果更好,樸素貝葉斯對于本算法來說是最不合適的。從FIS算法應(yīng)用在隨機森林模型上的表現(xiàn)可以得出該算法能夠有效地篩選出有區(qū)分度的關(guān)鍵特征。在特征集合中選出重要性指數(shù)排名前150個的特征,最后訓(xùn)練的效果與全部特征的訓(xùn)練效果基本等同甚至略好(特征數(shù)量為150時準(zhǔn)確率為98.8448%,3844個全部特征的準(zhǔn)確率為98.7091%)。因此,F(xiàn)IS算法可以有效地篩選出具有區(qū)分度的關(guān)鍵特征,在特征數(shù)量較少的情況下達(dá)到較好的分類效果,滿足了其設(shè)計的初衷。
為驗證接口API、意圖Intent和權(quán)限Permission這3種類型結(jié)合的特征除了理論上優(yōu)勢,是否具有實際數(shù)據(jù)的參考意義,所以分別選出API、Intent、Permission和三者結(jié)合的類型,各自提取重要性評分排名前30、90和150個特征作為對比。統(tǒng)一選擇隨機森林作為分類器,最終結(jié)果如圖4所示,本文選擇的3種特征結(jié)合的方式更占據(jù)優(yōu)勢。在特征數(shù)量相同的條件下,結(jié)合后的結(jié)果都比單獨的特征效果好。
圖4 多特征在不同數(shù)量下的準(zhǔn)確率
為進一步驗證FIS算法在特征選擇過程中的實際表現(xiàn)和優(yōu)勢,將其與IG、Chi和TF-IDF這3個算法進行對比。表2展示在特征數(shù)量固定為150的條件下,IG、Chi、TF-IDF和FIS這4種選擇算法在樸素貝葉斯NBayes、支持向量機SVM、K近鄰KNN和隨機森林Random Forest這4種分類器模型的實驗數(shù)據(jù)對比。
表2 不同特征選擇方法的實驗結(jié)果對比
數(shù)據(jù)表明,在K近鄰和支持向量機的分類器中,F(xiàn)IS表現(xiàn)不及TF-IDF和卡方檢驗算法,但是在樸素貝葉斯和隨機森林兩種模型中,F(xiàn)IS相比其它算法的表現(xiàn)更優(yōu),同時隨機森林與FIS算法的組合能夠在3個指標(biāo)下均獲得本次實驗的最高評分。雖然在K近鄰和支持向量機兩種模型下表現(xiàn)不及TF-IDF和卡方檢驗,但是分類器的作用僅是為了逼近最終結(jié)果上限。從總體來看,F(xiàn)IS算法對惡意軟件的識別效果明顯優(yōu)于其它傳統(tǒng)的選擇算法。
同時將FIS算法計算每個特征的重要性評分所花費的時間與TF-IDF算法進行對比,F(xiàn)IS算法總共花費約1.725 s的時間,相比于TF-IDF的0.888 s可以節(jié)約48%。
將同類文獻(xiàn)提出的特征選擇方法與本文的FIS算法同時應(yīng)用在相同的數(shù)據(jù)集上(一共3844個特征)進行實驗測試。其中,文獻(xiàn)[12]提出一種檢測外觀比率間隔的特征選擇方法來篩選關(guān)鍵特征。文獻(xiàn)[13]使用遺傳算法去除數(shù)據(jù)集里冗余特征,實驗的數(shù)據(jù)結(jié)果見表3。
表3 與其它惡意軟件檢測情況對比
可以看出,文獻(xiàn)[12]的F1值和文獻(xiàn)[13]的準(zhǔn)確率與本文提出算法的效果接近,但是篩選出的特征數(shù)量遠(yuǎn)遠(yuǎn)多于FIS算法得出的150個特征。文獻(xiàn)[12]的外觀比率間隔算法通過Mann-Whitney檢驗得到特征集,但其檢驗的效率較低,要足夠的樣本容量才能達(dá)到合適的結(jié)果;文獻(xiàn)[13]采用的遺傳算法會對大量個體樣本進行計算評估,同時涉及多種參數(shù)需要調(diào)整,如種群大小和交叉率等,所需的計算成本較高。本文提出的FIS算法實現(xiàn)簡單,不受樣本集規(guī)模和各種參數(shù)的影響,擁有良好的適應(yīng)性。實驗結(jié)果表明,在效果接近的情況下,本文提出的FIS算法明顯更具有優(yōu)勢,能更高效地判斷應(yīng)用的惡意性。
本文從CICInvesAndMal2019數(shù)據(jù)集中選出不同于之前數(shù)據(jù)集的143個惡意軟件,用來驗證FIS算法對于未知軟件的檢驗識別能力。使用之前訓(xùn)練成功的隨機森林模型生成的檢測工具分別與小紅傘、騰訊電腦管家、火絨和金山毒霸4種軟件進行檢測,結(jié)果見表4。
表4 不同檢測工具的準(zhǔn)確率
結(jié)果表明,騰訊電腦管家檢測的準(zhǔn)確率最高,達(dá)到97.22%,其次是93%準(zhǔn)確率的小紅傘。表現(xiàn)較差的是金山毒霸和火絨,準(zhǔn)確率均低于60%。本文提出的基于FIS算法檢測工具準(zhǔn)確率在90%以上。因此該算法可以有效應(yīng)對未知的惡意軟件。
本文從特征的頻度和差異性兩個角度提出了一種特征選擇算法FIS,用來篩選出具有代表性的少量特征來體現(xiàn)惡意行為,作為分類器的輸入。與TF-IDF算法相比,F(xiàn)IS算法加強對不同類別應(yīng)用的特征頻率表現(xiàn),同時加入分布差異指數(shù),用以表征同一類別中的應(yīng)用中不同特征體現(xiàn)出的差異性。實驗結(jié)果顯示,F(xiàn)IS算法可以有效提高惡意軟件檢測的效率,最佳準(zhǔn)確率為98.82%。
另一方面,F(xiàn)IS算法僅對單一特征進行了重要性分析,沒有重視多種特征之間的關(guān)聯(lián)特性[14]。下一步工作中,將在未來工作中完善上述不足,并著力于函數(shù)調(diào)用圖等圖模型結(jié)合圖卷積網(wǎng)絡(luò)進一步研究[15]。