吳 帆,陸濟湘,曹文靜
(武漢理工大學 理學院,武漢 430070)
2016年9月8日,諾基亞發(fā)布了《諾基亞威脅情報報告——2016上半年》[1].該報告顯示:2016年上半年感染惡意軟件的智能手機大幅增加,與2015年下半年相比,1~7月份感染惡意軟件的智能手機數(shù)量增長了近一倍.
目前市場流行的兩大惡意軟件檢測方法主要分為特征碼[2]檢測法和啟發(fā)式[3]檢測法.特征碼檢測需要不斷收集新的惡意軟件樣本MD5特征碼,然后建立MD5特征數(shù)據(jù)庫,最后通過比對數(shù)據(jù)庫中的特征碼來檢測惡意軟件.該技術(shù)被當前360、金山、騰訊等安全軟件開發(fā)商廣泛使用.這種方式輕便快捷,雖然能夠快速清除已知惡意軟件,但一旦遇到經(jīng)過代碼混淆和加殼處理的惡意軟件時,檢測率便會大打折扣,因此該方法具有滯后性.啟發(fā)式檢測法通過獲取已出現(xiàn)的惡意行為的統(tǒng)計信息,然后建立分類模型,將未知應(yīng)用程序的行為分類到已知的檢測類別中,以此來分析程序的惡意行為,該技術(shù)需要使用靜態(tài)分析[4]與動態(tài)分析[5].靜態(tài)分析無需運行代碼,速度快、輕量級,但無法處理經(jīng)過代碼混淆和加密處理的應(yīng)用程序.動態(tài)分析是在程序運行時收集程序的行為信息,需要在模擬器上運行,耗時且重量級,檢測過程復雜.迄今為止,針對啟發(fā)式掃描法采用什么樣的分類算法,提取什么樣的特征,如何提取,提取多少等問題還沒有一個完美的答案.本文的主要貢獻如下:
1)使用動、靜結(jié)合技術(shù)收集程序的函數(shù)調(diào)用和系統(tǒng)調(diào)用特征,避免了以往單靜態(tài)分析或單動態(tài)分析的局限性;
2)對于龐大的特征數(shù)據(jù)采用卡方統(tǒng)計處理,剔除對分類影響較小的數(shù)據(jù),提高分類器的效率和檢測精度;
3)使用多種分類算法檢測不同特征,增強了不同特征對于不同算法的適應(yīng)性.在檢測函數(shù)調(diào)用特征時,將屬性值按相同的比例映射到區(qū)間[0,1]上,這樣可以降低屬性間距離間參差不齊的影響.
一開始,Android以權(quán)限機制[6]為研究出發(fā)點.Android系統(tǒng)為了安全,設(shè)立“先申請權(quán)限再實現(xiàn)功能”模式,軟件開發(fā)者根據(jù)功能為程序申請相應(yīng)權(quán)限.過去研究者通常先定義不能同時申請的權(quán)限集合[6],然后提取程序中清單文件中申請的權(quán)限,二者進行比對,以此來檢測具有潛在威脅的惡意程序.但Android權(quán)限存在粒度過粗等問題,因此權(quán)限分析存在不確定性.針對細化授權(quán)機制,研究者提出許多權(quán)限分組改進方案,彭凌[7]和Geneiatakis[8]等人利用Android權(quán)限隔離機制構(gòu)建敏感行為集合.但在安卓安全問題中,權(quán)限機制只是一部分,需要與其他安全問題解決方案攜手共進.
權(quán)限機制面臨的問題主要表現(xiàn)在:
1)惡意軟件可以利用系統(tǒng)漏洞或提升權(quán)限等方法,突破最小特權(quán)法則[6],從而不申請敏感權(quán)限.從而導致權(quán)限檢測方法誤報率增高,可用性降低.
2)溢權(quán)問題,安卓機制很難發(fā)現(xiàn)程序申請過多權(quán)限,研究表明大約60%的程序具有溢權(quán)問題.
由此可見,傳統(tǒng)的權(quán)限分析已經(jīng)不能滿足惡意軟件檢測的需要,需要結(jié)合靜態(tài)、動態(tài)分析技術(shù)才能做出更準確的檢測.
靜態(tài)分析[4]的優(yōu)點是不需要運行程序,只需利用分析工具對程序安裝包(Android Package,APK)中的文件和代碼進行分析.通常將APK反編譯成Java源代碼和jar文件,然后對清單文件(AndroidManifest.xml)進行分析.靜態(tài)檢測技術(shù)主要分為數(shù)據(jù)流分析、控制流分析和語義分析.
國內(nèi)外研究者秦中原[9]、Sato R[4]和Junaid[10]等人研究了惡意程序的靜態(tài)分析技術(shù).和動態(tài)行為檢測相比,靜態(tài)分析無需運行代碼,也無需像動態(tài)分析那樣去改寫安卓系統(tǒng)源代碼,因此速度快、輕量級,具有檢測能耗低的優(yōu)勢,風險也更低;缺點是無法真實模擬程序的功能,無法識別漏洞攻擊,也無法處理經(jīng)過代碼混淆和加密處理的應(yīng)用程序,因此容易產(chǎn)生誤報,準確率低.
動態(tài)分析[5]是在程序運行時收集程序的行為信息如:監(jiān)測系統(tǒng)調(diào)用、網(wǎng)絡(luò)訪問、文件和內(nèi)存修改等,因此不受靜態(tài)分析中代碼混淆技術(shù)的影響.早期將電池消耗作為檢測的主要依據(jù),這樣缺乏惡意程序的行為模式.如今研究者以Linux研究為基礎(chǔ),開始關(guān)注內(nèi)核層的系統(tǒng)調(diào)用.監(jiān)控系統(tǒng)調(diào)用雖然被認為是最準確的檢測方法之一,但底層信息的操作難度更大,隨后研究者開始采用API調(diào)用分析和信息流跟蹤等方法,以全面掌握程序運行時的數(shù)據(jù)信息.系統(tǒng)調(diào)用和上層API調(diào)用的流程如圖1所示:
系統(tǒng)調(diào)用屬于內(nèi)核層,它能夠體現(xiàn)應(yīng)用層和底層系統(tǒng)之間的交互特征,能夠收集程序在底層的執(zhí)行信息,因此不易被干擾,結(jié)果準確.張曉璐[11]等人采用動態(tài)分析技術(shù)研究了惡意程序,動態(tài)分析的優(yōu)點是無需分析代碼,只需觀察程序執(zhí)行的狀態(tài),因此克服了代碼混淆和加密等問題,檢測精度高;缺點是需要改寫系統(tǒng)源碼,需要在模擬器上運行,耗時且重量級,檢測過程復雜.加之,某些異常軟件在大部分情況下運行是正常狀態(tài),一旦在某個時刻接收到由遠程網(wǎng)絡(luò)端發(fā)送的惡意指令后,便會將移動客戶端(手機或平板電腦上)的敏感信息發(fā)送出去,這樣就巧妙的逃過了動態(tài)行為監(jiān)測.因此動態(tài)分析也需要結(jié)合靜態(tài)分析,將程序中隱藏的發(fā)送指令代碼塊識別出來.
圖1 API調(diào)用與系統(tǒng)調(diào)用關(guān)系Fig.1 Relationship between API call and system call
惡意軟件檢測的實質(zhì)其實就是,首先分析已知惡意樣本獲取分類經(jīng)驗,再利用這種經(jīng)驗去檢測未知程序.如今研究者開始采用數(shù)據(jù)挖掘分類算法對程序的行為進行分類,最終實現(xiàn)對惡意、正常應(yīng)用程序的分類.
靜態(tài)和動態(tài)行為特征是數(shù)據(jù)挖掘的起點,其中,靜態(tài)特征可以從反編譯Dalvik字節(jié)碼得到的結(jié)果中抽取,動態(tài)特征則憑借程序運行時的行為進行收集.楊歡[12]等采用權(quán)限頻繁模式挖掘算法檢測惡意程序,Shabtai A[13]等人使用動態(tài)方法獲取API函數(shù)調(diào)用特征,并自己編寫了少量惡意程序,然后使用分類算法對進行監(jiān)測,但缺少現(xiàn)實中大量惡意應(yīng)用程序作為樣本測試,樣本數(shù)量太少,誤報性較高,因此該方法只能算作輕量級的檢測方法.周曉[14]采用了K-means聚類算法識別同一惡意或正常應(yīng)用程序改寫的代碼,該方法只限于檢測同一應(yīng)用程序的變種,無法精確識別多種惡意程序.迄今為止,采用什么樣的分類算法,提取什么樣的特征是數(shù)據(jù)挖掘效果優(yōu)良的至關(guān)因素,這些問題目前一直在不斷優(yōu)化過程中,至今還沒有一個完美的答案.
由于靜態(tài)分析無法處理經(jīng)過代碼混淆和加密處理的惡意程序,容易產(chǎn)生誤報準確率低;動態(tài)分析需要改寫系統(tǒng)源碼,需要運行程序,檢測過程耗時且復雜,所以單動態(tài)分析或單靜態(tài)分析都具有片面性,應(yīng)該動靜結(jié)合分析,揚長避短.針對數(shù)據(jù)挖掘檢測技術(shù),由于有些特征之間存在冗余,有些特征對分類的結(jié)果影響很小,如果不處理這些特征,會降低分類器的正確率,增加執(zhí)行時間和誤報率,因此本文采用卡方統(tǒng)計處理這些特征;同時,考慮到不同特征對同一算法具有不同的適應(yīng)性,如果用同一算法檢測不同特征,效果不一定全部最優(yōu),應(yīng)該將特征分類檢測.
綜上所述,本文提出基于多類特征的混合算法,大致流程如下頁圖2所示.
特征提取之前需要創(chuàng)建正常和惡意程序庫,惡意程序庫的創(chuàng)建參考周婭瑾[15]等人使用的惡意應(yīng)用,正常程序可以從Google Play上批量下載,然后再使用多種檢測軟件檢測以確保準確性.
圖2 檢測流程Fig.2 Testing process
3.2.1 函數(shù)調(diào)用特征的提取
首先使用Android工具包SDK(SoftBware Develop-ment Kit)中的工具AAPT對應(yīng)用程序進行解壓,然后提取清單文件和lib庫文件(.so格式).接著使用NDK工具包中的readelf.exe工具可以提取ELF文件的函數(shù)調(diào)用序列,其中ELF文件由native代碼編譯后生成.本文對每個程序的lib文件夾下的系統(tǒng)共享庫:libc.so、liblog.so、libm.so、libstdc++.so文件進行合并,然后使用readelf命令工具提取動態(tài)符號表中保存的“Symblo Table”,在抽取的信息中選取“Func”.
3.2.2 系統(tǒng)調(diào)用特征的提取
首先在模擬器上運行程序,然后使用Android軟件開發(fā)工具包(SDK)中strace工具收集每個系統(tǒng)調(diào)用執(zhí)行的次數(shù),因為程序執(zhí)行各種行為都會與系統(tǒng)調(diào)用交互;Linux內(nèi)核中約有290個系統(tǒng)調(diào)用,只有部分系統(tǒng)調(diào)用能描述程序行為,為了減少計算量節(jié)省時間,同時為了提高準確性,本文提取15個系統(tǒng)調(diào)用,它們最能描述程序的行為,具體如表1.
表1 系統(tǒng)調(diào)用表
Table 1 System call table
arcess、chmod、chown、open、ioctl、brkread、write、clone、close、execve、sendto、sendmsg、revfrom、recvmsg最常用 access、chown、chmod
其中access、chown 、chmod可以用來篡改權(quán)限;最后將執(zhí)行得到的系統(tǒng)調(diào)用數(shù)據(jù)組成一個向量.
對于分類算法而言,特征的選擇十分重要,選擇的結(jié)果直接影響分類結(jié)果.在文本特征選擇過程中的方法有卡方統(tǒng)計、互信息、期望交叉熵、信息增益、文檔頻率等,而在文本特征選擇中,卡方統(tǒng)計與信息增益效果相對較好.卡方統(tǒng)計可以表述特征項與類之間相關(guān)度,CHI值越高說明相關(guān)度越大.本文采用卡方統(tǒng)計處理特征,特征Xi在每個類別中的分布如表2所示.
特征Xi的卡方值計算公式:
表2 特征分類表
Table 2 Feature classification
特 征正 常惡 意總 數(shù) Ximnm+n xixyx+y總數(shù)m+xn+yN
(1)
卡方值給出了特征Xi與Cj的關(guān)聯(lián)程度,某個特征的CHI卡方值越大,代表該特征越接近該判斷類別,當特征的卡方值CHI=0時,則代表該特征與類別相互獨立.
K-最近鄰(K-Nearest Neighbor,KNN)分類算法理論上比較成熟,該算法的總體思路為:在特征空間中,取某樣本的k個最相鄰樣本作為集合,若該集合中的大多數(shù)屬于某一類別,則該樣本也屬于這個類別.可以概括為:“近朱者赤,近墨者黑”.由于K-最近鄰方法主要憑借周圍K個鄰近的樣本,不是依賴判別類域來確定所屬類別,因此當待分樣本集中類域重疊較多時,使用KNN方法更佳適合.
本文用向量來表示程序運行蹤跡,向量維數(shù)m為函數(shù)調(diào)用總數(shù).向量屬性值為對應(yīng)的函數(shù)調(diào)用出現(xiàn)的次數(shù),n個向量構(gòu)成向量集合P=(p1+p2+…+pn)T,得到的函數(shù)調(diào)用向量中的每個特征屬性都是標量,相異度用向量之間的歐幾里德距離表示,則向量X與Y間的距離d(X,Y)為:
(2)
考慮到屬性值越大,對距離產(chǎn)生的影響越大,如此一來屬性間的距離分布太散,不能準確地顯示相異度,因此有必要對屬性值進行格式化處理,這樣可以降低屬性間距離間參差不齊的影響.現(xiàn)將所有屬性值按相同的比例映射到區(qū)間[0,1]上,映射公式為:
(3)
本文在WEKA環(huán)境下,使用K最近鄰算法取K=1進行試驗,判斷待測向量周圍最近的一個向量的類別.
通俗來講SVM是二類分類模型,本質(zhì)是對線性可分的情況進行分析,對于線性不可分的情況,可以使用非線性映射算法(核函數(shù))轉(zhuǎn)化為高維特征空問使其線性可分,如此一來我們就可以在高維特征空間中,采用線性算法對非線性特征的樣本進行線性分析.
SVM 中共有四種核函數(shù)可以選擇,但常用的是線性核函數(shù)、徑向基核函數(shù)(Radial Basis Function,RBF).線性核函數(shù):K(x,y)=x·y,RBF核函數(shù):K(x,y)=exp(-γ‖x-y‖2).
當面臨線性可分問題時,設(shè)樣本x是n維向量,即:xi∈Rn,用y表示樣本屬于正類別和負類別時的信息,則yi∈{-1,1},則k個樣本的訓練樣本集可以表示為:(xi,yi)∈Rn×{-1,1},其中i=1,2,…,k.SVM分類器的目標就是:在n維輸入空向上尋找一個多維空間中的超平面,正負兩類數(shù)據(jù)被該超平面分開,并使得超平面到它兩側(cè)最近數(shù)據(jù)的距離(邊緣)最大.
由于存在一些樣本不能被正確分類,因此需要為這些樣本引入松弛變量ζi與懲罰因子C,然后就可以在原函數(shù)上面加一個懲罰函數(shù)和限制條件,具體表示如下:
(4)
s.t.yi[wΤ·xi+b]≥1-ζi,i=1,2,…,k,ζi≥0
式中k為數(shù)目,C表示對分錯點加入多少懲罰的系數(shù),該系數(shù)可以由用戶指定;xi為第i個樣本,yi為第i個樣本的類別,當xi被分在正確一邊時,ζi=0.我們可采用拉格朗日乘子法去解該優(yōu)化問題,依據(jù)KTT條件引入拉格朗日乘子α,將對w和b求解的原問題,轉(zhuǎn)化為求解α的對偶問題,公式描述如下:
αi≥0,i=1,2,…,k
(5)
求解后得到線性分類函數(shù):
(6)
式中s為支持向量數(shù).當向量x屬性未知時,遍可采用該分類函數(shù)來判定其所屬類別.
同理可得,當輸入空間非線性可分時,使用滿足Mercer定理的核函數(shù)K(xi·xj)將n維輸入空間變換到更高維特征空間上,其對偶問題為:
(7)
0≤αi≤C,i=1,2,…,n
求得最終分類函數(shù)為:
本實驗的惡意樣本來源于AMGP(Android Malware- Genome Project),一共獲取1100個惡意樣本,主要分為49個家族;正常的應(yīng)用程序可以從安卓市場下載.
表3 混淆矩陣
Table 3 Confusion matrix
檢測輸入正常惡意正常TPFN惡意FPTN
混淆矩陣(confusion matrix) 是分析分類器效果的一種實用工具.本文將正常程序定義為+,惡意應(yīng)用定義為-.True positives( TP) 指分類器將正常程序正確檢測為正常程序的組;True negatives( TN) 指分類器將惡意程序正確檢測為惡意程序的組;False positives(FP) 指分類器將惡意程序錯誤檢測為正常程序的組;False negatiyes(FN) 指分類器將正常程序錯誤檢測為惡意程序的組.混淆矩陣如表3所示:
為了測試該檢測方法的效果,本文在WEAK平臺中采用十折交叉驗證,實驗結(jié)果取10次實驗的平均值.本文從準確率(Accuracy rate)、召回率(Recall rate)、FP rate、精度( Precision)、AUC(Area Under ROC Curve,ROC曲線下的面積)等四個指標進行評價.
圖3 函數(shù)調(diào)用分類效果Fig.3 Function call classification effect
函數(shù)調(diào)用特征分類結(jié)果如圖3所示,相比其他算法,KNN算法的AUC、準確率、召回率最高,FP rate最低,因此效果最好.
實驗的評價標準如表4.
表4 評價標準公式表
Table 4 Evaluation standard formula table
標 準公式正確率:Accuracy=(TP+TN)/(TP+TN+FN+FP)召回率:TPrate=Recallrate=TP/(TP+FN)FPrate:=FP/(FP+TN)Precision:=TP/(TP+FP)
系統(tǒng)調(diào)用特征分類結(jié)果如圖4所示,相比其他算法,SVM算法的AUC、準確率、召回率最高,FP rate最低,因此效果最好.
圖4 系統(tǒng)調(diào)用分類效果Fig.4 System call classification effect
上述實驗說明,傳統(tǒng)的單一算法檢測多類特征具有片面性,雖然KNN算法在函數(shù)調(diào)用檢測上優(yōu)于SVM算法,但針對系統(tǒng)特征SVM卻優(yōu)于KNN算法.
為了顯示本文檢測方法的有效性,接下來使用著名的Androguard工具,在相同的樣本集和實驗環(huán)境下進行對比實驗.Androguard是一款使用Python語言編寫的工具,對Android程序具有分析、檢測和評估等功能,應(yīng)用廣泛.我們可以發(fā)現(xiàn),當用Androguard工具處理大量應(yīng)用程序時,無法完全自動化,耗時并存在少量程序不能正確處理,進程卡死停頓甚至退出等問題,測試結(jié)果對比如表5所示.
表5 測試結(jié)果對比表
Table 5 Test results comparison table
不能處理的app(個)準確率(%) 運行時間(h)本文:094.7645Androguard:2789.2163
對比結(jié)果表明:本文所提出的檢測方法在準確率和執(zhí)行時間效率上高于Androguard,證明了該檢測方法的適用性.
本文提出了基于多類特征的混合檢測算法,在使用KNN算法在檢測函數(shù)調(diào)用特征時,為了降低屬性距離間參差不齊的影響,將屬性值按相同的比例映射到區(qū)間[0,1]上,與其他算法相比,SVM有很多優(yōu)勢:
1)通常數(shù)據(jù)挖掘算法得到的是樣本數(shù)趨于無窮大時的最優(yōu)解,而SVM算法得到的是小范圍樣本下的最優(yōu)解,在本文情況下這種最優(yōu)解更精確;
2)SVM算法可以將優(yōu)化問題轉(zhuǎn)化成凸二次規(guī)劃問題,因此理論上可以得到唯一的全局最優(yōu)解;
3)SVM算法可以通過核函數(shù),巧妙地將原空間中復雜的線性不可分問題轉(zhuǎn)換到高維特征空間去解決.最后,本文用實例驗證了該檢測方法的可行性和有效性.
[1] Nokia Security Center Berlin.Nokia threat intelligence report[EB/OL].https://networks.nokia.com/products/malware-reports,2016.
[2] Li Y,Jin Z.An android malware detection method based on feature codes[C].International Conference on Mechatronics,Materials,Chemistry and Computer Engineering,2015:2690-2694.
[3] Wu S,Wang P,Li X,et al.Effective detection of android malware based on the usage of data flow APIs and machine learning[J].Information & Software Technology,2016,75(C):17-25.
[4] Sato R,Chiba D,Goto S.Detecting android malware by analyzing manifest files[C].Asia Pacific Advanced Network,2013:23-31.
[5] Mistry N,Padariya N.Review of behavior malware analysis for android[J].International Journal of Engineering and Innovative Technology,2013,2(7):230-232.
[6] Wu Ze-zhi,Chen Xing-yuan,Yang Zhi,et al.Optimal mining on android permission configuration[J].Journal of Chinese Computer Systems,2015,36(10):2354-2359.
[7] Peng Lin,Zeng Fan-ping,Yan Jun,et al.A method to detect implicit permission in android applications[J].Journal of Chinese Computer Systems,2016,37(3):515-519.
[8] Geneiatakis D,Fovino I N,Kounelis I,et al.A permission verification approach for android mobile applications[J].Computers & Security,2015,49(C):192-205.
[9] Qin Zhong-yuan,Xu Yu-qing,Liang Biao,et al.An android malware static detection method[J].Journal of Southeast University(Natural Science Edition),2013,43(6):1162-1167.
[10] Junaid M,Liu D,Kung D.Dexteroid:detecting malicious behaviors in Android apps using reverse engineered life cycle models[J].Computers & Security,2016,59(June 2016):92-117.
[11] Zhang X,Breitinger F,Baggili I Rapid android parser for investigating DEX files (RAPID)[J].Digital Investigation,2016,17(C):28-39.
[12] Yang Huan,Zhang Yu-qing,Hu Yu-pu,et al.A malware behavior detection system of android applications based on multi-class features[J].Chinese Journal of Computers,2014,37(1):15-27.
[13] Shabtai A,Kanonov U,Elovici Y,et al.Andromaly:a behavioral malware detection framework for android devices[J].Journal of Intelligent Information Systems,2012,38(1):161-190.
[14] Zhou Xiao.Friendly analysis on mobile network based on k-means[D].Nanjing:Nanjing University of Posts,2015.
[15] Zhou Y,Jiang X.Dissecting android malware:charact-erization and evolution[C].Institute of Electrical and Electronics Engineers Symposium on Security and Privacy,2012:95-109.
附中文參考文獻:
[6] 吳澤智,陳性元,楊 智,等.面向安卓的權(quán)限配置優(yōu)化[J].小型微型計算機系統(tǒng),2015,36(10):2354-2359.
[7] 彭 凌,曾凡平,嚴 俊,等.一種檢測Android應(yīng)用程序隱式權(quán)限的方法[J].小型微型計算機系統(tǒng),2016,37(3):515-519.
[9] 秦中元,徐毓青,梁 彪,等.一種Android平臺惡意軟件靜態(tài)檢測方法[J].東南大學學報(自然科學版),2013,43(6):1162-1167.
[12] 楊 歡,張玉清,胡予濮,等.基于多類特征Android應(yīng)用惡意行為檢測系統(tǒng)[J].計算機學報,2014,37(1):15-27.
[14] 周 驍.基于K-means移動應(yīng)用網(wǎng)絡(luò)友好性分析系統(tǒng)[D].南京:南京郵電大學,2015.