張玉玲,尹傳環
美國信息技術研究和顧問公司Gartner于2016年2月公布了2015年全球智能手機銷售量[1]。2015年全球智能手機銷量達14億部,較2014年增長了14.4%。Gartner預計2016年全球手機出貨量將達到19.59億部,高于2015年的19.10億部,而2017年將達到19.83億部。德國網絡安全公司GDATA最新公布的調查報告顯示,2015年底,Android惡意軟件文件數量多達230萬。Android惡意軟件數量眾多,已成為移動安全的重災區[2]。移動應用安全事件頻發,主要有以下問題:簡單的應用市場安全審查、粗粒度的權限系統、有限的系統級安全監測,以及鼓勵快速傳播的應用分派模式[3]。傳統分類方案雖然實現了惡意軟件的檢測,但其安全性、實時性、性能等方面均存在不足,特別是在移動端發展迅速的情況下,其檢測機制難以滿足惡意軟件檢測需求,不足以應對不斷變化的未知惡意軟件和變異問題。Mudflow[4]是目前少有的有關安卓惡意異常檢測的研究,利用單分類支持向量機(One-class SVM)[5]分類,檢測正常軟件和惡意軟件的準確率只有83.8%,該方法利用靜態污點分析技術,找出正常軟件和惡意軟件之間的數據流差別來標記可疑特征,模型的建立并沒有脫離惡意軟件。
針對上述問題,本文提出Droid-Saf框架,利用輕量級的靜態分析,訓練集僅包含正常軟件的樣本,基于svdd算法建立模型,并對該算法做了改進,融入了隱含特征,以便更好地應對軟件的不斷變化。檢測惡意軟件的誤報率從10%降低到0.6%,并且新算法對參數不敏感,更容易找到比較理想的結果。
檢測惡意軟件的方法,大致可分為兩種:靜態分析和動態分析。靜態分析不運行程序只分析代碼,試圖找到表明應用程序的行為的控制流,也被用來分析正常軟件的代碼缺陷和故障,甚至在不運行應用程序的情況下直接檢測其惡意行為。靜態檢測優點是速度快,缺點是需要構建并且動態維護惡意行為的特征庫。動態分析不分析代碼而在專有的虛擬環境中運行代碼,用自動化工具追蹤應用程序的行為,然后再分析它的日志文件或者系統調用序列等。其缺點是需要進行實時監控,內存和電量的消耗高。
近年來,眾多研究者提出了很多方案。靜態分析方面,例如PiggyDroid[6]使用API調用等靜態特征來做檢測;RiskRanker[7]檢測軟件是否利用root漏洞和是否發送后臺信息等篩選出需要深入研究的軟件,但都是靠專家系統檢測。DroidAPIMiner[8]把數據流相關的API作為特征,然后用改進的KNN算法進行分類,還有研究者提出了一些有效的方法與框架,例如 Droid-Sec[9]、Shina[10]、Drebin[11]。動態分析方面,例如Crowdroid框架[12]由客戶端和服務器端組成,客戶端使用Linux系統的Strace機制監控Android系統調用,然后把調用信息發送到服務器端處理;CopperDroid[13]不關注底層動作的調用,而是捕捉java代碼和本地執行代碼發起的行為。DroidAnalyst[14]提出一個新的自動化應用,審查和分析惡意軟件的框架,集成了靜態和動態分析的協同作用來提高分析的精度和效率。
上述方法都是利用現有的正常軟件和惡意軟件進行訓練和分類,隨著惡意軟件的不斷更新變化,應對未知惡意行為又是一道難題,應用異常檢測是目前比較流行的方法。
異常檢測是指將正常的習慣行為特征存儲在數據庫中,然后將當前的行為特征與特征數據庫中的特征進行比較,如果兩者偏差足夠大,則說明發生了異常[15]。目前異常檢測的研究主要基于無監督學習框架[16],因此本文基于單分類算法進行研究。現有方法對惡意軟件檢測困難主要有兩個原因:1)惡意軟件經常出現在檢測方法之前。傳統的檢測依賴已知樣本進行訓練,不能自動更新規則庫,也無法檢測新的惡意行為;2)惡意軟件數據收集不完整。現實檢測任務中異常數據普遍難以采集或者采集代價過高,往往只有一類數據可供使用,因此對于沒有收集到的惡意軟件無法辨別。針對惡意軟件不斷變化且數據收集不完整的問題,異常檢測是比較可行的方法,本文基于SVDD單分類算法進行研究。
支持向量數據描述,英文名(support vector data description,SVDD)[17],通俗來講,它是一種單分類模型,假設正常數據服從球形分布,利用核函數把樣本空間映射到高維核空間,在核空間找到一個能包含所有樣本的超球體,尋求一個最小包含球以包含正常樣本,該方法不需假設原點為異常點,并且該方法以極小極大化方法求解最小包含球(球心、半徑)。當識別一個新的樣本時,如果樣本在球體內部,就認為是正常的,否則就是異常的[18]。
SVDD首先通過核函數將輸入空間映射到一個高維空間,在這個高維空間構造一個包含所有訓練樣本點的球體;在球面上的樣本點即為SVDD所求得的支持向量。假設模型f(x; w)表示一類緊密的有界數據集,SVDD的優化目標就是求一個中心為a半徑為R的最小球面,而且使訓練集X的所有樣本都落在此球體內。它的原理和SVM很像,類比于SVM[19],定義一個最小化問題:

使得這個球面滿足:

式中:這里的ξi是松弛變量;C是調節松弛變量的影響大小。利用Lagrange函數求解上述約束下的最小優化問題,得到:

對上述問題相對α求最大,可以用標準的二次規劃算法來解決。這樣就可以求得α的最優值,對于非0的αi,其對應的樣本點是支持向量,位于球面上;而αi=0則表示對應的樣本點位于球體內。α和R可用含α的表達式隱式地表示。判斷一個數據點屬于這個類,那么當滿足:

即判Z屬于正常類,否則為異常類。將超球面的中心用支持向量來表示,那么判定新數據是否屬于這個類的判定條件就是:

式中:R是任意一個支持向量Xk到球心a的距離。當輸入空間的樣本點不滿足球狀分布時,可以通過核技巧把輸入空間先映射到高維空間,然后在映射后的高維空間內求解。如果使用核函數上述判定條件改寫為

常用的核函數有線性核函數、多項式核函數、RBF核函數等,不同的核函數,對實驗結果影響很大, 用合適的核函數分類才能得到理想的實驗結果。 傳統的靜態分析關注樣本申請的權限和API調用等特征,受系統調用序列關注系統調用頻率[20]的啟發,上述特征的總和可以體現出惡意軟件的行為活躍程度。在正常樣本中,申請次數多的樣本代表它本身活躍,行為復雜。正常軟件中頻繁申請權限或者API的樣本應該更加得到關注,所以可以從這方面入手體現不同軟件的共有特性。將頻率融入到svdd單分類算法當中,以尋找最適應于本方案的超球體,盡可能地將這些樣本包含在SVDD的超球體內,達到靜態分析特征進而降低單分類檢測的誤警率的目的。
將樣本頻率融入到算法當中:定義正常樣本活動頻率矩陣c=[c1c2c3··· cn],n為訓練樣本個數。

式中:n是樣本個數,m是特征維數,所有樣本的特征用一個m×n的矩陣P表示;分子指的是第i個樣本的頻率(即樣本的非0特征個數,分母指的是全部樣本的最大頻率)。那么函數的最小化問題變為

構造新的Lagrange函數如式(9):

由此,通過上式調整對應的約束條件:

本章主要講述了將正常樣本作為數據源,用輕量級靜態分析方法提取特征,并在特征庫的基礎上提出了一種挖掘隱形特征的方法,將特征頻率作為新的特征融入到SVDD算法當中,實現降低檢測惡意軟件的誤警率的目標。
實驗的流程框架如圖1所示。
其中,數據處理用到了FexDroid[21]的降維方法。
把從谷歌商店、安智、應用寶等安卓軟件市場收集的軟件作為正常樣本,一共有1 976個;從drebin中隨機選取了1 952個惡意軟件作為負樣本;然后用apktool等工具反編譯這些APP,運行得到manifest和 smali文件,再提取 permission、api_call、activity等特征,共得到8 874個特征;再將每個樣本的特征長度(也就是樣本的行為頻率)作為新的特征融入svdd算法當中。
評價指標是漏報率和誤報率,為準確描述這兩個概念,避免不必要的誤會,給出以下計算公式。
我們引入4個參數3個評價標準,如表1所示,首先如下假設:
FP:將樣本判定為正常樣本,實際為惡意樣本的數量。
TN:將樣本判定為惡意樣本,實際為惡意樣本的數量。
TP:將樣本判定為正常樣本,實際為正常樣本的數量。

圖1 異常檢測流程框架Fig. 1 The framework of anomaly detection process

表1 實驗評價指標Table 1 The evaluating indicator of experiment
FN:將樣本判定為惡意樣本,實際為正常樣本的數量。
隨機取1 000個正樣本作為訓練集,其他的正樣本和負樣本作為測試集,頻率是每個樣本包含特征的個數,把它歸一化然后做新特征。分別用最常用的多項式核函數和RBF核函數模型。其中,c是svdd的懲罰參數,b是核函數參數;改進算法中頻率特征會取代參數c的作用。為方便描述,模型改進之前的實驗稱為Driod-svd,改進之后的實驗稱為Droid-Saf。兩者對比表明改進算法在RBF核函數上取得了明顯效果,如圖2所示。
如果樣本的特征數非常多, 使用RBF核將樣本映射到高維空間,結果較差,使用線性核比較合適高維數據。因此下面的實驗使用常見的多項式核函數。

圖2 RBF核函數的實驗對比Fig. 2 The experimental comparison of RBF kernel
Droid-Saf對惡意軟件檢測的正確率基本達到100%,參數c對結果并沒有影響,因此對參數不敏感;但是Droid-Svd的部分漏報率大于0,c越大,誤判率越高,漏報率也越高。為了詳細說明細節,表2列出了Droid-Svd的實驗情況。
基于多項式核函數的實驗結果分別取了Droid-Svd和Droid-Saf在多項式核函數下最好的實驗結果,如圖3所示。
當c=0.05時,參數b對基于多項式核函數的Droid-Saf并沒有作用,漏報率基本為0,誤報率明顯低很多。

表2 基于多項式核函數的Droid-Svd實驗的平均值Table 2 The experimental FPR comparison of Polynomial kernel function

圖3 多項式核函數的實驗對比Fig. 3 The experimental comparison of Polynomial kernel function
為了直觀對比實驗的改進效果,表3給出了Droid-Svd和Droid-Saf在核函數分別為多項式和RBF的最好結果。多項式核函數的實驗結果在圖2中,誤報率在c=0.05、b(1-25)不同時總體上差別不大,b對應25個實驗數據,對這25個實驗數據先求和再求平均數;RBF核函數的實驗結果在圖3中,結果在b(1-25)不同時波動較大,因此取了兩條曲線上結果最好的數據。

表3 實驗總結的平均結果Table 3 The summarized average results of the experiments
表3證明了改進方法的有效性和適用性,改進后的算法舍棄了對實驗結果影響敏感的參數c,調參簡單。
傳統分類方案雖然實現了惡意軟件的檢測,但是其安全性、實時性、性能等方面均存在不足,特別是在移動端發展迅速的情況下,其檢測機制難以滿足惡意軟件檢測需求。本文所提出的框架對以上問題給出 解決方案,具有應對未知惡意軟件和惡意軟件變異的能力。針對靜態分析中的特征包含的隱藏信息,提出一種挖掘數據隱含特征的數據處理方案,并且將它融入到單分類算法中,進而改進了單分類算法模型,降低了惡意軟件檢測的誤報率。其中,多項式核函數的漏報率從11%降低到了0.5%;RBF核函數的實驗也有相應的提高。但是因為靜態分析固有的特性,應對代碼混淆需要更好的反編譯技術;另外正常樣本往往會不可避免地混入惡意行為而導致模型偏離現象;這些問題也是以后要研究的方向。
[1]微頭條. Gartner: 2016全球手機出貨預計19.59億部[EB/OL]. http://www.wtoutiao.com/p/19cnOtt.html.
[2]中文業界資訊站. 2015年Android惡意軟件樣本數量超230萬[EB/OL]. [2017-05-13]. http://www.cnbeta.com/articles/478843.html.
[3]楊威, 肖旭生, 李鄧鋒, 等. 移動應用安全解析學: 成果與挑戰[J]. 信息安全學報, 2016, 1(2): 1–14.YANG Wei, XIAO Xusheng, LI Dengfeng, et al. Security analytics for mobile apps: achievements and challenges[J].Journal of cyber security, 2016, 1(2): 1–14.
[4]AVDIIENKO V, KUZNETSOV K, GORLA A, et al. Mining apps for abnormal usage of sensitive data[C]//Proceedings of 37th IEEE International Conference on Software Engineering. Florence, Italy, 2015: 426–436.
[5]JUSZCZAK P. Learning to recognise: a study on one-class classification and active learning[D]. TU Delft, the Netherlands: Delft University of Technology, 2006.
[6]ZHOU W, ZHOU Y, GRACE M, et al. Fast, scalable detection of piggybacked mobile applications[C]//Proceedings of the third ACM conference on Data and application security and privacy. [s.l.], ACM, 2013: 185–196.
[7]TAX D M J, DUIN R P W. Support vector data description[J]. Machine learning, 2004, 54(1): 45–66.
[8]ZHOU Wu, ZHOU Yajin, GRACE M, et al. Fast, scalable detection of “piggybacked” mobile applications[C]//Proceedings of the Third ACM Conference on Data and Application Security and Privacy. San Antonio, Texas, USA, 2013:185–196.
[9]GRACE M, ZHOU Yajin, ZHANG Qiang, et al. Riskranker:scalable and accurate zero-day Android malware detection[C]//Proceedings of the 10th International Conference on Mobile Systems, Applications, and Services (MO-BISYS). Lake District, UK, 2012: 281–294.
[10]WU Songyang, WANG Pan, LI Xun, et al. Effective detection of android malware based on the usage of data flow APIs and machine learning[J]. Information and software technology, 2016, 75: 17–25.
[11]YUAN Zhenlong, LU Yongqiang, WANG Zhaoguo, et al.Droid-Sec: deep learning in android malware detection[C]//Proceedings of the 2014 ACM Conference on SIGCOMM.Chicago, Illinois, USA, 2014: 371–372.
[12]SHEEN S, ANITHA R, NATARAJAN V. Android based malware detection using a multifeature collaborative decision fusion approach[J]. Neurocomputing, 2015, 151:905–912.
[13]TAM K, KHAN S J, FATTORI A, et al. CopperDroid:automatic reconstruction of android malware behaviors[OL/EB]/. [2016-03-24]. https://www.researchgate.net/publication/300925104.
[14]BURGUERA L, ZURUTUZA U, NADJM-TEHRANI S.Crowdroid: behavior-based malware detection system for android[C]//Proceedings of the 1st ACM Workshop on Security and Privacy in Smartphones and Mobile Devices.Chicago, Illinois, USA, 2011: 15–26.
[15]TAM K, KHAN S J, FATTORI A, et al. CopperDroid:Automatic Reconstruction of Android Malware Behaviors[C]//Proceedings of Annual Network and Distributed System Security (NDSS). San Diego, United States, 2015.
[16]FARUKI P, BHANDARI S, LAXMI V, et al. DroidAnalyst: synergic app framework for static and dynamic app analysis[M]//ABIELMONA R, FALCON R, ZINCIRHEYWOOD N, et al. Recent Advances in Computational Intelligence in Defense and Security. Cham: Springer,2016: 519–552.
[17]TAX M J D, DUIN ROBERT P W. Support vector domain description[J]. Pattern recognition letters, 1999,20(11/12/13): 1191–1199.
[18]HASTIE T, TIBSHIRANI R, FRIEDMAN J. Unsupervised learning[M]//HASTIE T, TIBSHIRANI R, FRIEDMAN J. The Elements of Statistical Learning. New York,USA: Springer, 2009: 485–585.
[19]CRISTIANINI N, SHAWE-TAYLOR J. 支持向量機導論[M]. 李國正,譯. 北京: 電子工業出版社, 2004: 57–61.CRISTIANINI N, SHAWE-TAYLOR J. An introduction to support vector machines and other kernel-based learning methods[M]. LI Guozheng, Trans. Beijing: Publishing House of Electronics Industry, 2004: 57–61.
[20]羅雋, 丁力, 潘志松, 等. 異常檢測中頻率敏感的單分類算法研究[J]. 計算機研究與發展, 2007, 44(Z2): 235–239.LUO Jun, DING Li, PAN Zhisong, et al. Research on sequence-call-frequency-based one-class algorithm in abnormal detection[J]. Journal of computer research and development, 2007, 44(Z2): 235–239.
[21]張玉玲, 尹傳環. 基于SVM的安卓惡意軟件檢測[J]. 山東大學學報: 工學版, 2017, 47(1): 42–47.ZHANG Yuling, YIN Chuanhuan. Android malware detection based on SVM[J]. Journal of Shandong university: engineering science, 2017, 47(1): 42–47.