管 峻,毛保磊,劉慧英
1(西北工業(yè)大學(xué) 自動(dòng)化學(xué)院,西安 710072)
2(鄭州大學(xué),鄭州 450001)
隨著5G 時(shí)代的到來(lái),移動(dòng)智能終端成為必不可少的重要載體.因此,針對(duì)移動(dòng)終端的惡意攻擊層出不窮,尤其是市場(chǎng)占有率第一的Android 系統(tǒng).360 安全大腦發(fā)布的《2019年Android 惡意軟件專題報(bào)告》[1]指出,2019年全年,360 安全大腦共截獲移動(dòng)端新增惡意軟件樣本約180.9 萬(wàn)個(gè),足以說(shuō)明惡意應(yīng)用時(shí)刻威脅著移動(dòng)智能終端用戶的切身利益、不同行業(yè)領(lǐng)域的正常發(fā)展,甚至影響到國(guó)家的安全建設(shè).目前,惡意應(yīng)用的檢測(cè)技術(shù)主要分為靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè).從效率上講,靜態(tài)檢測(cè)的效率高,適用于大規(guī)模的惡意應(yīng)用檢測(cè).動(dòng)態(tài)檢測(cè)需要實(shí)際運(yùn)行應(yīng)用程序,在運(yùn)行期間捕獲惡意行為,效率相對(duì)較差,但可以應(yīng)對(duì)代碼混淆等對(duì)抗靜態(tài)分析的手段.另外,無(wú)論良性應(yīng)用還是惡意應(yīng)用出于對(duì)自身的保護(hù),越來(lái)越多地采取加殼的方式保護(hù)自身被反編譯.這也造成惡意應(yīng)用檢測(cè)特征只能來(lái)源于應(yīng)用程序反編譯后得到的AndroidManifest.xml 全局配置文件,該文件提供應(yīng)用程序申請(qǐng)的權(quán)限、組件等信息.
雖然過去許多基于權(quán)限、組件信息等作為特征的機(jī)器學(xué)習(xí)算法研究取得了較好的檢測(cè)結(jié)果,但實(shí)驗(yàn)選取的惡意應(yīng)用樣本大多數(shù)是2013年左右的,與同時(shí)期及現(xiàn)在下載的良性應(yīng)用在權(quán)限的使用上存在明顯差異.本文對(duì)收集的2013年左右的惡意應(yīng)用、VirusShare[2]收集的2016年惡意應(yīng)用和2020年隨機(jī)從小米應(yīng)用市場(chǎng)下載的良性應(yīng)用申請(qǐng)的權(quán)限信息進(jìn)行統(tǒng)計(jì),2013年的1200 個(gè)惡意應(yīng)用平均申請(qǐng)權(quán)限13.31 個(gè),2016年VirusShare 收集的惡意應(yīng)用平均申請(qǐng)權(quán)限為30.41 個(gè),從小米應(yīng)用市場(chǎng)下載的1500 個(gè)應(yīng)用程序平均申請(qǐng)權(quán)限32.22 個(gè).由此可以看出,惡意應(yīng)用和良性應(yīng)用申請(qǐng)的權(quán)限從數(shù)量上來(lái)講差異變小,而且進(jìn)一步分析發(fā)現(xiàn)在具體權(quán)限的使用上也十分接近.
因此,僅依靠權(quán)限作為機(jī)器學(xué)習(xí)算法特征已經(jīng)很難達(dá)到過去的檢測(cè)效果,需要更加細(xì)粒度的API 作為特征參與檢測(cè),多類的應(yīng)用程序特征有利于提高檢測(cè)的準(zhǔn)確率.然而,應(yīng)用程序的加殼使得研究者無(wú)法通過對(duì)應(yīng)用程序反編譯獲取應(yīng)用程序調(diào)用的API,尤其是來(lái)源于正規(guī)的第三方應(yīng)用市場(chǎng)的應(yīng)用程序.廣大研究者的惡意應(yīng)用樣本主要來(lái)自于公共的數(shù)據(jù)庫(kù),其中大多數(shù)樣本可以被反編譯.這樣就會(huì)出現(xiàn)機(jī)器學(xué)習(xí)正負(fù)樣本的嚴(yán)重失衡,導(dǎo)致現(xiàn)有基于二分類的惡意應(yīng)用檢測(cè)方法出現(xiàn)欠擬合、過擬合的情況,嚴(yán)重影響檢測(cè)的效果.
針對(duì)正負(fù)樣本數(shù)量嚴(yán)重失衡的情況,本文采取單分類SVM 算法檢測(cè)應(yīng)用程序,將11 900 個(gè)VirusShare提供的2016年收集的惡意應(yīng)用分為訓(xùn)練集和測(cè)試集,將前期收集的187 個(gè)良性應(yīng)用作為新穎點(diǎn),主要作出的貢獻(xiàn)如下:
(1) 通過對(duì)2013年左右收集的惡意應(yīng)用、2016年惡意應(yīng)用和良性應(yīng)用進(jìn)行反編譯分析,發(fā)現(xiàn)無(wú)論是權(quán)限還是API 的調(diào)用,2013年左右的惡意應(yīng)用與良性應(yīng)用差異大,2016年的惡意應(yīng)用則相反,說(shuō)明本文提出的檢測(cè)方法具有現(xiàn)實(shí)意義.
(2)為了提高機(jī)器學(xué)習(xí)檢測(cè)的效果,對(duì)2016年收集的惡意應(yīng)用和良性應(yīng)用進(jìn)行反編譯,根據(jù)特征使用頻率進(jìn)行歸一化處理,提取具有差異性的權(quán)限、API 作為機(jī)器學(xué)習(xí)算法的特征,提高了機(jī)器學(xué)習(xí)分類器的性能.
(3) 本文采取單分類SVM 算法解決了在惡意應(yīng)用、良性應(yīng)用樣本數(shù)量嚴(yán)重失衡情況下對(duì)Android 惡意應(yīng)用的檢測(cè),解決了欠擬合、過擬合的問題,相比于二分類算法明顯提高了惡意應(yīng)用檢測(cè)的效果,對(duì)惡意應(yīng)用、良性應(yīng)用的檢測(cè)同時(shí)有效.
隨著惡意應(yīng)用指數(shù)級(jí)的增長(zhǎng),機(jī)器學(xué)習(xí)算法廣泛應(yīng)用于惡意應(yīng)用的檢測(cè).Singh 等[3]將Android 應(yīng)用程序使用的權(quán)限和調(diào)用的API 作為機(jī)器學(xué)習(xí)的特征,取得了較好的惡意應(yīng)用分類準(zhǔn)確率.Shang 等[4]利用信息增益法提取權(quán)限特征,采用改進(jìn)后的樸素貝葉斯算法對(duì)惡意應(yīng)用進(jìn)行檢測(cè).但包括上述研究在內(nèi)的許多研究方法都是采用正負(fù)樣本平衡的數(shù)據(jù)集,對(duì)正負(fù)樣本嚴(yán)重失衡的數(shù)據(jù)集檢測(cè)效果不理想.
針對(duì)正負(fù)樣本嚴(yán)重失衡的研究主要集中在樣本采樣上,分為欠采樣技術(shù)和過采樣技術(shù),但無(wú)論采取哪種技術(shù)目的都是為了達(dá)到正負(fù)樣本數(shù)量的平衡[5].文獻(xiàn)[6–8]基于少數(shù)類的現(xiàn)有樣本去構(gòu)建同類樣本,增加少數(shù)類樣本的數(shù)量.文獻(xiàn)[9]采取孤立森林算法(Isolation Forest)非監(jiān)督學(xué)習(xí)算法,基于多數(shù)類樣本的分布通過輪盤旋轉(zhuǎn)算法選取多數(shù)類樣本,通過K-means 方法形成若干多數(shù)類樣本聚類中心,實(shí)現(xiàn)正負(fù)樣本數(shù)量的均衡.文獻(xiàn)[10]針對(duì)正負(fù)數(shù)據(jù)不均衡的問題,提出基于迭代提升欠采樣的集成分類方法,從多數(shù)類中欠采樣,構(gòu)建弱分類器并通過加權(quán)組合方式構(gòu)成一個(gè)強(qiáng)分類器,提升在樣本數(shù)據(jù)不平衡情況下的檢測(cè)效果.Xu 等[11]采用模糊合成少數(shù)類樣本的方式增加Android 惡意應(yīng)用樣本數(shù)目達(dá)到正負(fù)樣本數(shù)量平衡的目的.文獻(xiàn)[12]通過過采樣技術(shù)合成少數(shù)類樣本,并對(duì)隨機(jī)森林算法進(jìn)行改進(jìn),減少數(shù)據(jù)不平衡對(duì)機(jī)器學(xué)習(xí)分類器的影響.
機(jī)器學(xué)習(xí)方法分為監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)[13].監(jiān)督學(xué)習(xí)主要是通過對(duì)有類別標(biāo)簽的數(shù)據(jù)進(jìn)行學(xué)習(xí)得到檢測(cè)模型,再利用這個(gè)模型對(duì)未知數(shù)據(jù)進(jìn)行分類.無(wú)監(jiān)督學(xué)習(xí)與監(jiān)督學(xué)習(xí)最大的區(qū)別就是訓(xùn)練樣本沒有標(biāo)簽.另外,根據(jù)分類的類別個(gè)數(shù)可以將機(jī)器學(xué)習(xí)分類算法分為單分類、二分類和多分類,其中最常見的是二分類算法.但當(dāng)二分類的正負(fù)樣本數(shù)量嚴(yán)重失衡時(shí),檢測(cè)效果較差.例如,10 000 個(gè)應(yīng)用程序樣本中有9900 個(gè)良性應(yīng)用,100 個(gè)惡意應(yīng)用,那么當(dāng)良性應(yīng)用全部檢測(cè)正確時(shí),即使惡意應(yīng)用全部檢測(cè)失敗,準(zhǔn)確率也達(dá)到99%,但是這個(gè)檢測(cè)模型卻沒有實(shí)際的意義.針對(duì)上述情況,本文采取單分類算法檢測(cè)Android 惡意應(yīng)用.
單分類算法屬于異常檢測(cè),主要分為新穎點(diǎn)檢測(cè)(novelty detection)和異常值檢測(cè)(outlier detection).新穎點(diǎn)檢測(cè)屬于半監(jiān)督學(xué)習(xí)的方法,異常值檢測(cè)屬于無(wú)監(jiān)督學(xué)習(xí)[14].本文采用新穎點(diǎn)檢測(cè)方法,以Android 惡意應(yīng)用檢測(cè)來(lái)說(shuō)明單分類算法,如圖1所示,將多數(shù)類的惡意應(yīng)用作為一類樣本,即在圓圈里面的樣本;而良性應(yīng)用作為新穎點(diǎn)分布在圓圈的外面,其中,圓圈就是決策邊界[15].
圖1 單分類算法示意圖
目前,主要的單分類算法有單分類SVM 算法和單分類孤立森林算法.由于本文采用新穎點(diǎn)檢測(cè)的方法,在訓(xùn)練集中不摻雜任何異常點(diǎn),所以選取單分類SVM算法更適用,而孤立森林算法適用于訓(xùn)練集中包含異常點(diǎn)的檢測(cè).
單分類SVM 算法也是基于SVM 算法的,將數(shù)據(jù)通過核函數(shù)映射到高維的特征空間,利用超平面將多數(shù)數(shù)據(jù)與新穎數(shù)據(jù)隔開,應(yīng)用較多的是高斯核函數(shù),也稱為RBF (Radial Basis Function)核[16].單分類SVM算法解決的同樣是目標(biāo)函數(shù)最優(yōu)化的問題,即式(1).式中 ω為系數(shù),‖ ω‖為ω的二階范數(shù),c為懲罰系數(shù),ξi為松弛變量.
約束于:
本文收集的可用于反編譯的惡意應(yīng)用數(shù)量遠(yuǎn)超于良性應(yīng)用,所以選擇惡意應(yīng)用作為多數(shù)類樣本進(jìn)行訓(xùn)練建模,良性應(yīng)用作為新穎點(diǎn)進(jìn)行檢測(cè).首先通過apktool 工具反編譯惡意應(yīng)用獲取AndroidManifest.xml全局配置文件和應(yīng)用程序Smali 代碼,使用Python 編寫的程序分別從上述兩個(gè)文件中通過搜索關(guān)鍵字的方法提取所需的特征,基于AndroidManifest.xml 文件搜索“uses-permission android:name="android.permission.”可以獲取應(yīng)用程序申請(qǐng)的權(quán)限、搜索“action android:name”可以獲取組件的Intent Filter 特征;遍歷反編譯后得到的應(yīng)用程序Smali 文件夾,搜索含有關(guān)鍵字“invoke”的語(yǔ)句,獲取應(yīng)用程序調(diào)用的API 特征,將這些特征輸入單分類SVM 分類器進(jìn)行訓(xùn)練構(gòu)建檢測(cè)模型,需要注意的是惡意應(yīng)用樣本的90%作為訓(xùn)練集,剩下的作為測(cè)試集;再使用同樣的方法提取良性應(yīng)用的權(quán)限、Intent Filter和API 特征,輸入至惡意應(yīng)用訓(xùn)練好的檢測(cè)模型,檢測(cè)良性應(yīng)用作為新穎點(diǎn)的分類結(jié)果.Android應(yīng)用程序使用單分類SVM 檢測(cè)方法如圖2所示.
圖2 本文單分類SVM 算法檢測(cè)應(yīng)用程序流程圖
本文收集的惡意應(yīng)用樣本庫(kù)來(lái)源于兩部分,一部分是2013年左右通過AndroMalShare[17]和Malgenomeproject[18]收集的1200 個(gè)惡意應(yīng)用,另一部分是向VirusShare 申請(qǐng)后下載該網(wǎng)站收集的2016年的11 900個(gè)惡意應(yīng)用,其中絕大部分惡意應(yīng)用可以反編譯成功.良性應(yīng)用也來(lái)源于兩部分,一部分是2020年從正規(guī)應(yīng)用商城[19]隨機(jī)下載的1500 個(gè)無(wú)法成功被反編譯但可以獲取AndroidManifest.xml 配置文件的應(yīng)用程序.另另一部分是2016年左右從小米應(yīng)用市場(chǎng)下載的可以被反編譯的良性應(yīng)用187 個(gè),即可以通過對(duì)應(yīng)用程序反編譯獲取更加細(xì)粒度的API 特征.
本節(jié)二分類算法均使用WEKA 工具完成,單分類SVM 算法利用Python Sklearn 完成.分類算法的評(píng)價(jià)指標(biāo)主要選取Accuracy、Precision、Recall、F-measure和AUC,其中AUC 指標(biāo)是指ROC 曲線下的面積,面積越大說(shuō)明分類器的性能越好.另外,下列式(2)–式(4)中的True Positive (TP)即真正類,False Negative (FN)即假負(fù)類,False Positive (FP)即假正類,True Negative (TN)即真負(fù)類[16].
無(wú)論應(yīng)用程序是否進(jìn)行加固,通過反編譯都是可以獲取AndroidManifest.xml 全局配置文件,所以基于該文件提供的特征進(jìn)行機(jī)器學(xué)習(xí)的研究很多[20–22].研究?jī)?nèi)容的重點(diǎn)大多是如何選擇有效的特征,減少特征維度,提高檢測(cè)性能.
本節(jié)通過信息增益法選擇信息增益值靠前的58 個(gè)權(quán)限和Intent Filter 信息作為分類算法的特征,采用常見的、有差異性的SVM、NB (Na?ve Beyesian)、J48(決策樹)、KNN (K-Nearest Neighbor)作為分類器對(duì)樣本進(jìn)行訓(xùn)練、測(cè)試.實(shí)驗(yàn)采用十折交叉法,分別選取不同的實(shí)驗(yàn)樣本和相同的特征,刪除特征提取后重復(fù)的樣本,檢測(cè)結(jié)果如表1、表2所示.
表1 2013年收集的惡意應(yīng)用和良性應(yīng)用分類結(jié)果
表2 2016年收集的惡意應(yīng)用和良性應(yīng)用分類結(jié)果
表1為2013 收集的1200 個(gè)惡意應(yīng)用和從1500個(gè)良性應(yīng)用中隨機(jī)選取1200 個(gè)作為良性樣本的分類結(jié)果.其中,SVM 分類器的準(zhǔn)確率最高,達(dá)到0.973;NB分類器性能指標(biāo)相對(duì)較差,準(zhǔn)確率為0.937.表2為隨機(jī)從2016年VirusShare 惡意樣本庫(kù)中選取的1500 個(gè)惡意應(yīng)用和上述1500 個(gè)良性應(yīng)用作為樣本的分類結(jié)果.通過表1、表2的對(duì)比,可以看出表2中分類器的各項(xiàng)性能指標(biāo)都遠(yuǎn)低于表1,反映了針對(duì)2013年收集的惡意應(yīng)用檢測(cè)效果較好的特征及其分類算法不適用于2016年收集的惡意應(yīng)用檢測(cè),這與惡意應(yīng)用與良性應(yīng)用在權(quán)限上差異性越來(lái)越小有直接的關(guān)系.另外,良性樣本是2020年下載的,與2013年良性應(yīng)用申請(qǐng)的權(quán)限可能也存在不小的差異,間接導(dǎo)致表1的檢測(cè)結(jié)果要明顯優(yōu)于表2.
本節(jié)從2016年VirusShare 樣本庫(kù)中選取11 900個(gè)惡意應(yīng)用和上述可反編譯成功的187 個(gè)良性應(yīng)用作為樣本進(jìn)行研究.實(shí)驗(yàn)中刪除了提取特征后重復(fù)的樣本避免過擬合和欠擬合的發(fā)生.最終正負(fù)樣本比為42.7:1.
為了檢測(cè)取得較好的效果,根據(jù)API 函數(shù)在惡意應(yīng)用和良性應(yīng)用中的使用頻率選取有差異性的289 個(gè)API 函數(shù)和3.1 節(jié)選取的權(quán)限、Intent Filter 一起作為機(jī)器學(xué)習(xí)分類器的特征,采用十折交叉法進(jìn)行檢測(cè).實(shí)驗(yàn)分為兩部分,第一部分是將全部應(yīng)用程序都作為樣本,正負(fù)樣本數(shù)量差異較大,分類結(jié)果如表3、表4所示.表3是對(duì)應(yīng)用程序的檢測(cè)結(jié)果,表4是針對(duì)少數(shù)類良性應(yīng)用的檢測(cè)結(jié)果.實(shí)驗(yàn)中,SVM 分類算法完全偏向于樣本集多數(shù)類(惡意應(yīng)用),無(wú)法檢測(cè)良性應(yīng)用,所以未采用該算法.NB 算法對(duì)應(yīng)用程序與良性應(yīng)用的分類性能指標(biāo)相對(duì)接近且較好,但檢測(cè)效果仍欠佳.
表3 應(yīng)用程序樣本分類結(jié)果
表4 良性應(yīng)用樣本分類結(jié)果
第二部分實(shí)驗(yàn)是隨機(jī)選取與良性應(yīng)用等數(shù)量的惡意應(yīng)用作為樣本,分類結(jié)果如表5、表6所示.表5中J48 分類器的檢測(cè)準(zhǔn)確率最高,為0.854.但所有分類器的性能指標(biāo)相比于表3要差,主要是因?yàn)楸?的檢測(cè)結(jié)果與分類算法完全偏向多數(shù)類(惡意應(yīng)用)有關(guān).同時(shí),表5、表6檢測(cè)結(jié)果也說(shuō)明了惡意應(yīng)用和良性應(yīng)用在API 調(diào)用上的差異也在縮小.
表5 應(yīng)用程序樣本分類結(jié)果
表6 良性應(yīng)用樣本分類結(jié)果
本節(jié)采取單分類SVM 算法對(duì)應(yīng)用程序進(jìn)行檢測(cè),將多數(shù)類的惡意應(yīng)用作為正常值(即+1),將數(shù)量較少的良性應(yīng)用作為新穎點(diǎn)(?1).將惡意應(yīng)用分為訓(xùn)練集和測(cè)試集兩部分,當(dāng)惡意應(yīng)用被判斷為新穎點(diǎn)(?1)時(shí),即為惡意應(yīng)用分類錯(cuò)誤;同理,當(dāng)良性應(yīng)用被判斷為惡意應(yīng)用(+1)時(shí),即為良性應(yīng)用作為新穎點(diǎn)分類錯(cuò)誤.
實(shí)驗(yàn)選取與3.2 節(jié)相同的特征,采用表3中選取的樣本集,將惡意應(yīng)用的90%作為訓(xùn)練集,剩下的10%作為測(cè)試集,將全部良性應(yīng)用作為新穎點(diǎn).單分類SVM算法的主要參數(shù)設(shè)置為nu=0.16,kernel=“rbf”,gamma=“auto”.檢測(cè)結(jié)果如表7所示.
表7 單分類SVM 算法分類結(jié)果
通過表4、表6和表7的對(duì)比可以發(fā)現(xiàn),采用單分類SVM 算法在正負(fù)樣本嚴(yán)重失衡的情況下,可以有效地檢測(cè)出83.5%的良性應(yīng)用,而表6中良性應(yīng)用分類指標(biāo)最好的J48 分類器的準(zhǔn)確率為85%,需要注意的是單分類SVM 算法對(duì)惡意應(yīng)用訓(xùn)練集和測(cè)試集的檢測(cè)準(zhǔn)確率與均衡樣本接近.綜上所述,單分類SVM 算法適用于當(dāng)正負(fù)樣本嚴(yán)重失衡情況下的應(yīng)用程序檢測(cè).
本文研究的重點(diǎn)是當(dāng)Android 惡意應(yīng)用與良性應(yīng)用因?yàn)榧庸痰仍蛟斐烧?fù)樣本數(shù)量失衡時(shí)如何有效地進(jìn)行應(yīng)用程序分類,研究?jī)?nèi)容具有現(xiàn)實(shí)意義.從研究的結(jié)果可以看出,隨著惡意應(yīng)用的不斷升級(jí),與良性應(yīng)用的差異越來(lái)越小,對(duì)檢測(cè)方法提出了更高的要求.傳統(tǒng)的基于權(quán)限等特征的二分類監(jiān)督學(xué)習(xí)的檢測(cè)手段無(wú)法應(yīng)對(duì)這一變化.而本文提出的使用單分類SVM 分類算法檢測(cè)Android 應(yīng)用程序的方法很好地解決了上述的問題.
在后續(xù)的研究中,還需要重點(diǎn)研究Android 應(yīng)用程序特征的選取,盡量選取惡意應(yīng)用與良性應(yīng)用存在差異的特征,進(jìn)一步提高應(yīng)用程序分類的準(zhǔn)確率.另外單分類SVM 算法的參數(shù)配置也是后期研究的重點(diǎn)內(nèi)容.