杜 煒 李 劍
(北京郵電大學計算機學院 北京 100876) (duwei0810@gmail.com)
權威市場研究機構Gartner于2017年5月發布了全球智能手機操作系統在2017年第1季度的分布報告[1].從分布報告中可以看出在智能手機的操作系統市場中,安卓智能操作系統比去年的市場份額增長了2%,在第1季度的市場份額已經高達86.1%,成為智能手機中主流的操作系統.而iOS智能操作系統的市場份額比去年的市場份額降低了0.9%,作為擁有第二大市場份額的智能操作系統,其在該季度的市場份額卻只有13.7%,離Android智能操作系統的市場份額還有較大的差距.后面,包括Windows Phone在內的其他智能操作系統的市場份額總共為0.2%,占的市場份額很少.
隨著安卓操作系統迅速成為市場占有率最高的智能操作系統,安卓軟件的數量也迅速增長.最近1份報告顯示[2],到2017年9月為止,在Google Play上的安卓軟件數量已經達到330萬個,并且除了Google Play,還有很多第三方應用商店也提供了安卓軟件的下載.由于安卓系統的開放性、開源性及其相對簡單的檢查機制,使得安卓系統吸引了很多惡意軟件開發者,因此安卓成為惡意軟件進行惡意行為的一個主要平臺.
安卓惡意軟件的迅速增長已經對用戶造成了很大的威脅,安卓惡意軟件最常見的惡意行為主要有以下幾種:通過假連接、假按鈕和假提示來誘導用戶下載惡意軟件;通過向付費號碼發送短信進行惡意扣費;偷盜敏感信息并發送到遠程服務等等,這些惡意行為會直接或間接造成用戶的經濟損失或隱私泄露.并且自2012年以來,安卓惡意軟件的數量從幾十萬跨越到幾百萬,這表明安卓惡意軟件總體已經進入了平穩高發期,這就使得安卓惡意軟件的檢測成為一項迫在眉睫的工作.為了應對日益嚴重的安卓信息安全威脅,本文提出了一種基于半監督學習的安卓惡意軟件檢測及其惡意行為分析的研究方案,提高了惡意軟件檢測的精確率.
目前,商業的殺毒產品通常都是采用傳統的基于簽名的檢測技術,通常是從軟件中提取二進制模式或者隨機片段來創建惡意軟件簽名,將產生的惡意軟件簽名加入到創建的惡意代碼庫中,之后使用相同簽名的任何應用程序都將被視為該惡意軟件的一個樣本.基于簽名的惡意軟件檢測技術雖然檢測速度快,只要是存入惡意代碼庫的惡意代碼,都能夠準確檢測出來.但是這種檢測方法對于事先未知的威脅是無法檢測到的,因為不存在以前生成的簽名,并且可以通過對安卓應用程序注入惡意代碼來繞過簽名驗證機制,所以基于簽名的檢測技術并不具備很好的檢測能力.
在過去幾年中,國內外研究人員提出了一些處理日益嚴重的安卓惡意軟件的分析方法和檢測手段,按照方法可以將其分為靜態分析和動態分析.
靜態分析是一種通過分析代碼段來檢測惡意軟件的分析技術,是在安卓軟件不運行的狀態下,將安卓APK進行反匯編處理以后對代碼進行規則匹配及分析,這種情況下只會產生很小的開銷.Liang等人[3]提出了一個基于權限組合的安卓惡意軟件檢測方案,開發了k-map工具來獲得惡意軟件經常請求的權限組合,并根據權限組合自動生成規則集來進行檢測;Idrees等人[4]提出了一種通過分析安卓應用程序的權限和意圖組合特征來檢測惡意軟件的方法,這種方法輔以機器學習算法進一步對應用程序進行分類;Wu等人[5]提出了DroidMat檢測工具,從AndroidManifest.xml文件中提取權限信息、組件信息以及API信息作為安卓軟件的特征,采用分類算法對待檢測的軟件進行分類,得到該軟件是良性軟件還是惡意軟件;Sanz等人[6]提出了一個名為PUMA的安卓惡意軟件檢測方案,該方案基于權限信息對安卓軟件進行分類.
與靜態分析相反,動態分析是一種通過在真實環境中執行安卓軟件來對惡意軟件進行評估的檢測技術,可以在安卓軟件運行時動態監測行為,實時捕獲敏感行為并進行分析.Bla?Sing等人[7]提出了一個名為AASandbox的動態檢測工具,在一個完全隔離的環境中執行安卓軟件,通過分析執行期間獲得的低級別交互日志來進行安卓惡意軟件檢測,這是一種較早使用動態分析方法來進行惡意軟件檢測的;Narudin等人[8]提出了一種利用機器學習方法評估各種網絡流量特征的惡意軟件檢測的解決方案;Shabtai等人[9]提出了一個名為Andromaly的檢測安卓惡意軟件的框架,持續不斷地監控從移動設備獲得的各種特征和事件,然后應用機器學習將收集的數據分類為良性軟件或惡意軟件.盡管這些動態檢測在識別惡意行為上相當有效,但需要花費大量的環境搭建成本和人力分析成本.此外,對于條件觸發式的安卓惡意軟件,動態分析也束手無策.
本文從高校實驗室、研究機構以及安全公司獲得了48 143個安卓軟件并作為數據集,隨后使用VirusTotal[10]為每個安卓軟件標注.因此我們統計了每個安卓軟件是否屬于惡意軟件以及其惡意軟件家族信息,得到了590種不同的惡意軟件家族的信息.
我們根據這590種惡意軟件家族出現的頻率,列出其常見的20種惡意軟件家族,如表1所示.盡管安卓惡意軟件家族體現了安卓惡意軟件的惡意行為,但是,不同的惡意軟件家族很可能具有相似甚至完全相同的惡意行為,因此我們通過人工分析以及聚類等方法將具有相同惡意行為的惡意軟件家族合并,并為每個安卓惡意軟件產生最終惡意行為標簽.但是,想得到590種惡意軟件家族具體的惡意行為是需要花費巨大人力的,甚至是達不到的,因此,我們只針對表1中最常見的20種惡意軟件家族進行分析.但是剩下未標注的數據并未因此丟棄,而是通過半監督學習的方式作用在模型上.

表1 最常見的20種惡意軟件家族
特征的提取也要分為靜態分析和動態分析,靜態分析主要從安卓軟件的代碼發掘與惡意行為相關的特征,稱之為靜態特征.而動態分析主要通過在真實環境(虛擬機)中執行安卓軟件,同時動態監控其運行時的行為,抓取一些與惡意行為相關的動態特征.而本節我們同時提取了靜態特征和動態特征作為訓練的輸入.
2.2.1靜態特征提取
靜態分析需要從代碼中發掘,而我們的樣本是編譯后的二進制文件,因此,第1步是將安卓軟件進行反編譯.我們使用了工具APKTool.APKTool是一系列工具的集合,它的功能包括APK文件的解包和打包、AXML的編碼與解碼、資源文件的解包和打包、smali文件的匯編與反匯編、smali文件的調試等.經過APKTool工具進行反匯編后,每個APK文件會得到一個如圖1所示的文件結構:

圖1 反編譯后的文件目錄結構
從AndroidManifest文件中提取了142種權限特征和65種服務特征,從smali文件中提取了36種敏感API特征.
2.2.2動態特征提取
安卓軟件樣本的動態行為是使用DroidBox工具來進行監控的,DroidBox可以查找某些調試消息,收集與被監控的應用程序相關的任何信息并生成json格式的日志,該日志中包含了應用程序運行后發生的動態行為.它包含以下重要信息,來確定該安卓軟件的危險性.
1) 網絡通信數據;
2) 文件讀寫操作;
3) 網絡通信,文件讀寫的信息泄露;
4) 權限漏洞;
5) SMS短信;
6) 調用Android API進行加密操作;
7) 撥打電話.
如上所述,我們使用這7種敏感的動態行為作為動態特征.
2.2.3編碼
最后,本實驗提取了142種權限、65種服務和36種敏感API以及7種敏感動態特征,共250種特征.而這250種特征均屬于類別特征(categorical feature),即存在或不存在2種類別,而不是連續值.我們使用獨熱編碼(one-hot encoding)將其編碼為特征向量.獨熱編碼又稱一位有效編碼,主要使用了N位0-1狀態表示每個特征的N個取值.由于我們的特征均是二值特征,因此使用250維度的0-1向量即可將特征編碼為特征向量,其中每一維度表示一種特征,1表示該特征存在,0表示不存在.
對安卓惡意軟件檢測的研究已經日益成熟,但是在之前的研究中絕大部分只是將安卓軟件識別為惡意軟件或者是良性軟件2種,而在本文的研究中,不僅只想將安卓惡意軟件識別出來,并且想對安卓惡意軟件的惡意行為進行分析.安卓惡意軟件家族信息可以反映出安卓軟件的惡意行為,首先通過工具可以得到每一個惡意軟件樣本的惡意軟件家族信息,然后通過對獲得的惡意軟件家族進行人工分析和聚類分析,得到了不同的惡意軟件行為,對惡意軟件樣本進行標注.
2.3.1人工分析
首先,對表1中的20種惡意軟件家族進行人工分析,可以發現明顯有幾個惡意軟件家族是完全一樣的.例如,“Android.Trojan.FakeInst”和“Trojan:AndroidFakeInst”,“Adware:AndroidAdWo”和“Android.Adware.Adwo”,這2對惡意軟件家族明顯存在著相同的惡意軟件行為.繼續分析其他的惡意軟件家族,最終總結出了3種惡意行為,即SMSSend,Adware和PrivacySteal.3種惡意行為的解釋如下.
SMSSend:發送SMS消息或打電話給付費號碼.
Adware:為用戶提供廣告內容.
PrivacySteal:從設備中竊取機密信息.
2.3.2聚類分析

圖2 聚類結果示意圖
對于安卓惡意軟件來說,只將它們分為2.3.1節所列出的3種惡意軟件行為太籠統,例如Privacy-Steal,信息竊取可能是盜取安卓設備的設置信息,也可能是盜取用戶的地理位置.所以需要對2.3.1節得到的3種惡意行為進行細化,得到更準確的惡意行為分類,但是已經無法從惡意軟件家族中獲取更多信息.顯然,聚類算法[11]很適合用來分析這類問題,通過聚類我們可以分析不同惡意家族的相似程度.對人工分析得到的3個主要類別進行k-means聚類,步驟如下:
1) 首先,構造樣本的特征向量,我們使用python-scikit-learn中的k-means訓練聚類模型,選擇2個或者3個聚類簇.
2) 其次,調整聚類簇的個數k,使得目標函數最大.
3) 最后,使用PCA進行降維處理成2維數據,調用Matplotlib繪圖顯示聚類結果.
從圖2的3個分圖分析可知,圖2(a)中SMSSend類別沒有明顯的聚類特性,而圖2(b)中Adware類別可以聚類為2個類別,分別命名為Adware.A和Adware.B.同理圖2(c)中PrivacySteal也可以聚類為2個類別,分別命名為PrivacySteal.A和PrivacySteal.B.而最終我們將每個類別對應在惡意家族中.

表2 5種惡意行為
最終,經過人工分析和聚類分析2個過程,將安卓惡意軟件家族歸并為了5種惡意行為,如表2所示,分別為SMSSend,Adware.A,Adware.B,PrivacySteal.A和PrivacySteal.B,再加上良性的安卓軟件,故本實驗共標注了6個類別.
由于有大量人力無法標注的樣本,因此本文提出的Co-RFGBDT算法是一種使用協同訓練技術的半監督模型,同時屬于混合了隨機森林以及梯度提升決策樹(gradient boosting decison tree, GBDT)兩者優點的一種集成訓練模型.
2.4.1半監督學習
監督學習的監督是指給定的訓練數據具有標注的標簽,一般用于分類或者回歸.反之,無監督學習是給定的數據沒有標注,一般用來作聚類(例如k-means等)或者生成模型(例如自動編碼器、GAN等).而半監督學習主要是如我們的場景一樣,人工標注的代價巨大且耗時,而且專業知識也影響著標注的準確率,但是不標注也就沒有目標,而僅僅使用已標注的少量數據進行訓練得到的模型泛化能力不夠.因此,半監督學習就是研究如何在標注少量樣本時,利用已標注樣本和大量的未標注樣本進行充分學習的方法.
2.4.2隨機森林和GBDT優劣分析
若將模型的預測值作為隨機變量,那么廣義的偏差表示該隨機變量的均值距離真實值的差異,而方差表示該預測值隨機變量的離散程度.若模型的偏差較大意味著預測不準確,若模型的方差較大意味著由于輸入變化導致預測的不穩定,一般方差大意味著模型可能存在過擬合.隨機森林是一個優化方差,但沒有優化偏差的模型,而GBDT是一個優化偏差,但沒有優化方差的模型.
對于隨機森林,每個模型預測值使用隨機變量Xm表示,由于每個訓練單元均使用幾乎同樣的模型,而且隨機抽樣的樣本也存在相似性,我們假設每個訓練單元具有相同的均值和方差,分別用μ和σ2表示.于是總模型的均值為
從上式可以看出,隨機森林集成后模型的均值和單個模型的均值并不能顯著降低模型預測值隨機變量的均值,也就不會改變模型預測的偏差.
而如果假設每個訓練單元是獨立的,那么總模型的方差為
但隨機森林每個訓練單元是不可能獨立的,我們觀察另一個極端,即若每個訓練單元都是完全相同的,那么總模型的方差為
而對于GBDT,其每棵樹的生成依賴于之前訓練的決策樹,訓練單元之間是強相關的,因此其并沒有顯著降低模型的方差,從而可能出現過擬合.而由于GBDT每次迭代均在最小化損失函數,因此其偏差自然會下降.
而針對GBDT和隨機森林的優缺點,結合了隨機森林以及梯度提升決策樹的優點,本文提出一種名為Co-RFGBDT的半監督學習方法,用于安卓惡意軟件檢測以及其惡意行為的分析.
2.4.3Co-RFGBDT算法
在安卓惡意行為分析場景中大量標注樣本是不現實的,因此本文提出了一種半監督學習算法Co-RFGBDT.我們借鑒了Co-Forest的思想,但區別為Co-Forest使用決策樹當作訓練單元,而Co-RFGBDT則將一個完整GBDT模型作為訓練單元.并且,為了保證不同模型之間的獨立性,GBDT的樹的深度以及樹的個數并不固定,而是服從均勻分布,我們稱之為隨機GBDT.因此,與傳統的隨機森林相比,每個訓練單元降低了預測的偏差,而所有訓練單元用Bagging集成后可以降低預測的方差.除此以外,另一個區別在于輸出,輸出引入了拒絕機制,即若預測的數據的最多數投票的數量小于置信度閾值時,那么將拒絕預測的輸入,在本文具體的場景中,其表示識別到了未知的惡意行為.
我們給出Co-RFGBDT算法的完整描述:假設H*表示所有GBDT模型的集合,共有N個,第i個GBDT模型用hi∈H*表示,Hi表示H*中除了hi之外的所有模型的集合,稱之為伴隨集合.使用L表示已經標注的數據集合,使用U表示未標注的數據集合.

算法1. Co-RFGBDT.
輸入:已標注數據集合L、未標注數據集合U、置信度閾值θ、GBDT模型的數量N.
過程:
1) 訓練N個GBDT模型,每個模型的樹的深度服從均勻分布U(a1,b1),每個模型的樹的個數服從均勻分布U(a2,b2),并且每個模型的訓練樣本使用Bagging方式從L中放回隨機抽樣共|L|次.
2) Fori=1 toM:
ei,0=0.5
Wi,0=0
t=0
3) Loop until 所有GBDT模型均不再更改
t=t+1
Fori=1 toN:
ei,t=EstimateError(Hi,L)

Ifei,t-1 IfConfidence(Hi,xu)>θ Wi,t=Wi,t+Confidence(Hi,xu) Fori=1 toN: Ifei,tWi,t 輸出: Ifvotemax≥θelse reject 在最終輸出模型中,其中Ihi(x)=y(i)表示模型hi(x)=y的指示函數,votemax表示所有模型中最多數投票的個數,若該個數小于置信度θ,那么則拒絕分類,回到安卓惡意行為分析的場景中.由于我們只標注了部分惡意行為,但是安卓惡意軟件的惡意行為層出不窮.因此,采用這種方式,當一次預測中votemax≤θ時,我們認為該安卓軟件的惡意行為是未知的. 我們使用多分類的精確率(precision)和召回率(recall)作為評價指標.首先,我們先使用混淆矩陣(confusion matrix)表示多分類模型的預測結果,如表3所示: 表3 混淆矩陣 如表3所示,混淆矩陣的每一行表示實際類別的個數,而每一列表示該類別的預測的個數,那么對于第i個類別,其精確率和召回率為 但由于類別有6個,指標太多會影響模型的比較,因此,我們使用整體指標準確率(accuracy)表示模型整體的優劣,準確率表示分類器所有被正確分類的樣本與總樣本數的比例,本文使用符號Acc表示. 3.2.1基準實驗結果分析 本文將隨機森林、GBDT以及Co-Forest這3種基準實驗參數調至最優,然后進行對比分析,如表4所示: 表4 2個基準實驗和2個比較實驗以及Co-RFGBDT的比較 由表4可以看出,隨機森林在大多類別上的精確率要比GBDT高,而GBDT在大多類別的召回率較高,但總體來看效果相當. 而對于Co-Forest和Co-RFGBDT算法,均符合我們的預期.當使用了半監督學習后,使用了更多未標注的惡意家族樣本參與到訓練,學習到了更廣泛數據的分布,可以得到更好的效果. 對于本文中提出的Co-RFGBDT算法,由于其針對Co-Forest作了改進,使用了GBDT代替決策樹作為訓練單元,在一定程度上避免了偏差出現的可能性,而且通過Bagging以及每個GBDT分類器的生成隨機性,保證了不同分類器的差異,從而足夠降低了方差.其總體Acc相對于基準算法提升了0.015,獲得了最優的效果. 但是從表4可以看出,由于Co-RFGBDT使用了機器學習中拒絕分類的方式(根據置信度閾值θ),以當前參數0.3為例,若某預測樣本通過分類器獲得的最多投票比例不超過0.3,那么我們認為該樣本的惡意行為是未知的.但設置一個完美的θ是很難的,從Co-RFGBDT的結果也可以看出,精確率相對較高,但是召回率相對較低.接下來我們詳細分析參數θ對于精確率和召回率的影響. 3.2.2置信度θ結果分析 Co-RFGBDT分類的效果與很多參數相關,其中置信度閾值θ是一個比較重要的參數.θ不僅控制了未標注樣本的召回閾值,還控制著確定惡意行為是否屬于未知惡意行為.從理論上來講,θ值設置得越高那么預測的置信度就越高,精確率就會越高,但相應的召回率就會降低.我們將設置θ從0.1到0.9,間隔為0.1. 如圖3所示,隨著θ從0緩慢的增加,Acc會跟著緩慢的上升,但當θ>0.6以后,Acc會因為召回率的急劇下降而下降.因此最終我們選擇θ=0.3作為最終的置信度閾值參數.而此時Acc值為0.915 609. 圖3 Acc折線圖 在本文中,提取了安卓軟件的權限、服務和敏感API這3種靜態特征,并提取了7種動態特征彌補了只使用靜態特征不充分的問題.在靜態特征中,主要通過反編譯安卓軟件,并從中提取特征.而動態特征則是使用DroidBox工具提取了安卓軟件運行時的json日志,從中獲得了動態行為特征.對安卓惡意軟件的惡意行為分析是通過多分類來完成的,首先通過VirusTotal工具獲得了每個安卓惡意樣本的惡意軟件家族信息,然后通過對這些惡意軟件家族進行人工分析和聚類分析,將惡意行為分為5類,并對惡意樣本進行標注.使用半監督學習方法Co-RFGBDT將少量的已標注樣本和大量的未標注樣本進行機器學習訓練,并進行實驗評估,并與隨機森林、GBDT以及Co-Forest作了對比,并分析結果出現的原因.最終證明了本文提出的安卓惡意檢測及其惡意行為分析方案具有較高的準確率和召回率,而且證明了本文提出的Co-RFGBDT半監督學習算法在一些場景下具有更好的性能. [1]Egham U K. Gartner says worldwide sales of smartphones grew 9 percent in first quarter of 2017[OL]. [2018-01-05]. https:www.gartner.comnewsroomid3725117 [2]Google Play. Number of available applications in the Google Play Store from December 2009 to September 2017 [OL]. [2018-01-05]. https:www.statista.comstatistics266210number-of-available-applications-in-the-google-play-store [3]Liang S, Du X. Permission-combination-based scheme for android mobile malware detection[C]Proc of 2014 IEEE Int Conf on Communications (ICC). Piscataway, NJ: IEEE, 2014: 2301-2306 [4]Idrees F, Rajarajan M. Investigating the android intents and permissions for malware detection[C]Proc of the 10th Int Conf on Wireless and Mobile Computing, Networking and Communications (WiMob). Piscataway, NJ: IEEE, 2014: 354-358 [5]Wu D J, Mao C H, Wei T E, et al. Droidmat: Android malware detection through manifest and API calls tracing[C]Proc of the 7th Asia Joint Conf on Information Security (Asia JCIS). Piscataway, NJ: IEEE, 2012: 62-69 [6]Sanz B, Santos I, Laorden C, et al. Puma: Permission usage to detect malware in android[C]Proc of Int Joint Conf CISIS’12-ICEUTE’12-SOCO’12 Special Sessions. Berlin: Springer, 2013: 289-298 [7]Bla?Sing T, Batyuk L, Schmidt A D, et al. An Android application sandbox system for suspicious software detection[C]Proc of Int Conf on Malicious and Unwanted Software. Piscataway, NJ: IEEE, 2010: 55-62 [8]Narudin F A, Feizollah A, Anuar N B, et al. Evaluation of machine learning classifiers for mobile malware detection[J]. Soft Computing, 2014, 20(1): 1-15 [9]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 [10]Total V. VirusTotal-Free online virus, malware and URL scanner[OL]. [2018-01-05]. https:www. virustotal. comen [11]Amorim R C, Mirkin B. Minkowski metric, feature weighting and anomalous cluster initialisation in K-means clustering[J]. Pattern Recognition, 2012, 45 (3): 1061-1075 杜煒 碩士研究生,主要研究方向為信息安全、機器學習. duwei0810@gmail.com 李劍 博士,教授,博士生導師,主要研究方向為智能網絡安全、量子密碼學. lijian@bupt.edu.cn



3 實驗結果及分析
3.1 評價標注


3.2 結果對比


4 總 結

