梁俊鵬
(成都信息工程大學信息安全工程學院, 四川 成都 610225)
?
基于API頻繁模式挖掘算法的Android惡意應用檢測方法
梁俊鵬
(成都信息工程大學信息安全工程學院, 四川成都610225)
文章提出一種基于API頻繁模式挖掘算法的Android惡意應用檢測方法,通過挖掘API調用之間的關聯,發現惡意軟件中具有的頻繁模式,采用一定去冗余操作提高檢測的準確率檢測未知的Android軟件,并通過實驗驗證方法的可行性和有效性.結果顯示,該方法對檢測未知的Android軟件可以達到83﹪的檢測準確率,具有一定實用價值,可為進一步研究提供參考.
Android;惡意軟件;靜態檢測;機器學習
市場調研機構高德納咨詢公司發布的最新報告顯示,在2015年第二季度的統計中,全球智能手機中82.2﹪采用Android系統產品,占據智能手機市場的主導地位,遠超iOS、Windows、BlackBerry等操作系統[1].由于Android系統具有較高的開放性,運行該系統的智能手機越來越多地成為惡意攻擊者和惡意軟件的攻擊目標,出現了大量基于Android系統開發的軟件,其中也包含了大量惡意程序.這些惡意軟件對用戶的信息安全構成了嚴重威脅,包括隱私泄漏、財產損失、商業機密泄露等.大量普通用戶由于缺乏基本的信息安全意識,軟件程序的來源渠道不正規等,導致惡意軟件快速傳播,造成較大危害.根據360公司發布的最新消息,2015年第三季度,360互聯網安全中心共截獲Android平臺新增惡意程序樣本558萬個,平均每天截獲新增手機惡意程序樣本近6.07萬個,累計監測到移動端用戶感染惡意程序7 722萬人次,平均每天惡意程序感染量達到83.9萬人次.新增惡意程序主要是資費或流量消耗,占53.1﹪;其次為惡意扣費(41.5﹪)和隱私竊取(3.6﹪).這三類惡意程序占總量的98.3﹪,其余類型的惡意程序新增量只占1.7﹪.
不同于別的移動操作系統平臺,Android系統允許安裝來自未受認證的軟件源的應用安裝包,如第三方市場、論壇等.隨著Android市場份額的急劇擴張,目前網絡上有大量為Android系統提供軟件下載服務的網站,此類網站每天都會收到大量的軟件開發者提交的發布軟件的申請,并對這些軟件進行審核后提供給公眾下載.由于發布申請的數量非常龐大,多數網站無法做到對每一個軟件進行詳細審查和安全檢測,導致部分具有惡意代碼的軟件被公開發布出來,繼而被用戶下載.這一過程對網站的信譽和用戶的信息安全都造成了損失.
為應對Android平臺上的惡意軟件,國內外研究人員進行了一系列研究[2-5].目前,移動平臺的惡意代碼檢測技術主要分為2種:靜態檢測和動態檢測.靜態檢測多為基于特征碼,如哈希值、指令序列等檢測方法,大部分安全軟件都采用這種檢測方法,基于已有的特征庫進行檢測,誤報率較低,但也導致對未知惡意應用的防范較為乏力,具有一定的滯后性.動態檢測為軟件運行時收集其產生的行為信息,包括API調用、系統調用、內存存取、電源消耗等信息,結合已有的異常特征判定是否為惡意軟件,但需要較長的時間來收集動態數據,比靜態分析更復雜.文獻[6]提出一種基于權限頻繁模式挖掘算法的Android惡意應用檢測方法,需要對已知的惡意軟件家族進行靜態分析和權限特征提取,對最新的惡意應用樣本檢測率較低,僅為50﹪.文獻[7]提出一種基于機器學習的Android惡意軟件檢測模型,訓練靜態指紋匹配庫和動態行為簽名庫,能在一定程度上檢測未知惡意程序,但訓練數據量太少,樣本說服力不夠.文獻[8]提出一種基于改進貝葉斯分類的Android惡意軟件檢測方法,利用移動設備應用程序獲取多種行為特征值,應用機器學習技術檢測Android惡意軟件.該方法只選取了短信、GPS、撥打電話等6種行為特征集合,不能較完整地表現惡意軟件的行為,有較大片面性,而且惡意與非惡意的判別標準不完善,還有改進的空間.文獻[9]提出一種利用APK文件解壓得到classes.dex可執行文件中類與函數名信息,利用機器學習進行分類的方法.
以上基于權限方面的研究存在對過度申請權限造成的干擾處理不到位的問題.為了解決原始權限存在過度申請造成的干擾,本文使用基于關聯權限特征的靜態分析方法,結合Apriori挖掘算法挖掘惡意行為涉及的關聯API特征,然后進行特征的去冗余等計算,選擇出最適合進行惡意軟件檢測的特征集.在Android系統上,一個應用程序需要實現某項功能,比如獲取敏感信息、系統資源、使用和修改設備狀態等,需要通過調用系統提供的API來完成,不同的代碼范圍和API使用層級反映了對應模塊的代碼功能,能夠推測出模塊在運行過程中可能具有的行為屬性和表現形式.由于完成一項惡意行為通常需要多個API的結合使用才能實現,所以我們需要對API使用情況的關聯性進行挖掘分析.然而,由于部分在惡意軟件中出現的關聯組合也會出現在正常程序中,所以需要對此類關聯組合進行判斷,以提取出最能反映惡意軟件和正常軟件區別的關聯組合.以往的研究多數基于權限相關性特征,由于目前國內的Android應用程序存在權限申請過度的情況,本文基于API的靜態分析方法,結合Apriori頻繁項集挖掘算法[10]挖掘惡意軟件中包含的API頻繁項集特征,然后進行特征的去冗余操作,選擇出適應于惡意軟件檢測的特征集,最后基于生成的特征數據庫對未知的惡意軟件進行檢測.
2.1特征提取及預處理
為了便于后續算法的運行,在此對Android應用程序樣本進行特征提取及預處理操作,如圖1所示.

圖1 特征提取及預處理流程
步驟1確定需要提取的敏感API,并形成敏感API數據庫,便于后續使用.敏感API來源于對已知惡意軟件分析的經驗,以及對已知惡意軟件和已知正常軟件API統計的差異.最終選定了可以用來完成發送短信、刪除短信、撥打電話、刪除通話記錄、修改聯系人、執行shell腳本等功能的API;
步驟2利用Apktool對Android應用程序樣本進行反編譯;
步驟3對上一步反編譯得到的smali文件夾中的smali文件進行掃描,查找其中存在的敏感API;
步驟4統計該應用程序使用的API的序號,形成該應用程序的API調用序列,并寫入數據庫保存.
2.2算法描述
頻繁模式是頻繁地出現在數據集中的模式,如項集、子序列、子結構等[10].Apriori算法是Agrawal和Srikant R于1994年提出的,為布爾關聯規則挖掘頻繁項集的原創性算法.頻繁模式挖掘搜索給定數據集中反復出現的聯系,以發現惡意軟件API使用情況的關聯性.
2.2.1Apriori算法挖掘關聯特征
本文采用一個改進的基于規則挖掘的Apriori算法來進行特征選擇和自動篩選,從而進行有效樣本分類.為了解決對高頻率事件的有效性挖掘,減少對數據庫的掃描次數和候選數據集的數量,在經典的Apriori算法基礎上提出一個改進的Apriori算法.Apriori算法的基本思想是用迭代的方法產生頻繁集,為產生可以滿足最小置信度規則的規則集和輸出.本文中用到的Apriori算法是建立在Android權限這一相關概念的基礎之上的.Apriori算法就是為了挖掘權限頻繁項集,挖掘Android應用采用的API之間的關聯性,以構建API關聯特征庫.
本文通過預處理分別得到正常軟件和惡意軟件的API數據庫.每一個Android軟件均可以映射為一個包含所有敏感API調用的事務,每個API為一個項,API項的集合為項集,最小支持度為min_support,從2個數據庫中分別發現滿足最小支持度的頻繁項集,并建立特征庫.
Apriori算法有兩個主要步驟:連接和剪枝.這也是產生頻繁項集的兩個步驟.
連接:如果一個項集不是頻繁集,那么它的超集也一定不是頻繁項集.
剪枝:如果一個項集是頻繁集,那么它的真子集一定是頻繁項集.
輸入:
Di: 所選擇樣本的集合
min_support:最小支持度閾值
輸出:
頻繁API項集數據庫Dataset
偽代碼描述:
//找出所有頻繁1項集
L1=find_frequent_1_itemsets(D);
For(k=2;Lk-1!=null;k++){
//產生候選,并剪枝
Ck=apriori_gen(Lk-1);
//掃描D進行候選計數
For each事務t∈D{
//得到t的子集
Ct= subset(Ck,t);
For each候選c∈Ct
c.count++;
}
Lk={c∈Ck| c.count>=min_sup}
}
return L=所有的頻繁集
2.2.2檢測特征庫生成步驟
步驟1API頻繁項集挖掘:利用Apriori算法選擇合適的最小支持度min_support,分別對正常和惡意兩類軟件的API調用情況進行頻繁項集挖掘,并將結果記錄到數據庫中.結果形式如下:
item: (68, 212, 390, 1037) , support:0.457
其中,item代表頻繁項集,support代表該頻繁項集的支持度.
步驟2去冗余:由于根據以往的大量實驗發現,比對正常軟件和惡意軟件的頻繁項集,部分頻繁項集會同時出現于正常軟件和惡意軟件,會造成檢測準確率大幅度降低,故從惡意軟件的頻繁項集數據庫中刪除此類數據.
步驟3計算惡意軟件的API調用頻繁項集在正常軟件中出現的次數,升序排列后,記錄到惡意特征庫中.
步驟4評分:選取上述惡意特征庫的前N項頻繁項集,判斷是否存在于當前的Android應用程序的API序列中.如果存在,則根據一定的機制對其評分.當評分達到一定的閾值時判為惡意程序.
3.1實驗樣本
從VirusShare和Android應用市場獲得15 000個樣本,14 200個惡意樣本(其中10 000個樣本用于訓練,其余4 200個樣本用于驗證本算法的檢測效果)和800個正常樣本(其中500個樣本用于訓練,其余300個用于驗證檢測效果).

圖2 檢測系統特征庫生成及未知樣本檢測
3.2評估標準
為了便于評估實驗結果,定義以下指標:
1)設TP(True Positive)表示正常軟件預測準確數量;
2)設FP(False Positive)表示正常軟件預測錯誤數量;
3)設TN(True Negative)表示惡意軟件預測準確數量;
4)設FN(False Negative)表示惡意軟件預測錯誤數量;
5)定義所有軟件檢測準確的比例為:
ACC=(TP+TN)/(TP+TN+FP+FN)
本文依據以上指標對檢測結果進行驗證和評估.
3.3實驗結果
本文選擇不同的最小支持度min_support值進行頻繁項集挖掘,并對相應的檢測效果進行比較,結果如表1所示.

表1 檢測結果 /﹪
對比以上結果可以發現,在最小支持度為0.35時,總體檢測準確率達到83﹪,此時系統具有較好的檢測效果.對于惡意軟件的漏報情況,主要出現在部分采用本地代碼編寫的惡意應用上,較少采用Android 框架層的API.本文檢測方法無法正確反映其惡意行為,故導致存在一定的漏報情況.在檢測效率方面,對4 200個惡意軟件樣本和300個正常軟件樣本進行檢測,除去預處理過程只花費了11 min,平均每個樣本花費時間為0.15 s.
3.4實驗分析
本文基于大量的樣本進行挖掘和分析,經過多次實驗得出較合理的算法參數值,并據此對未知樣本的檢測準確率達83﹪.與文獻[6]相比,其對90個惡意應用的檢測率為50﹪,對新出現的惡意軟件的適應性較差.本文是針對未知應用進行檢測,且相對其檢測準確率有較大提高.文獻[7]僅對200個惡意軟件樣本進行檢測,檢測準確率最高為76﹪.本文獲取了數量更多的樣本,結果更可靠,且檢測準確率也有一定提高.雖然本方法依然存在誤判,但其結果可以作為自動檢測手段使用,為后續采用其他檢測手段和手動檢測提供依據.
本文基于機器學習,利用Android平臺應用程序所使用的API之間的相關性結合頻繁項集挖掘算法,提出一種惡意軟件檢測的方法,并通過去冗余操作提高了檢測準確性.本方法對于檢測惡意軟件具有一定效果,并可與其他檢測手段結合,以提高檢測準確率.雖然本方法在對Android惡意軟件檢測中取得了一定效果,但仍然存在不足,需要在以后研究中收集更多惡意樣本并修改算法參數等,以提高檢測的準確率和算法運行效率.
[1]Gartner. Worldwide Smartphone Sales to End Users by Operating System in 2015[EB/OL].(2015-08-20)[2015-11-12].https://www.gartner.com/newsroom/id/3115517.
[2]ZHOU Y J, JIANG X X. Dissecting android malware: Characterization and evolution[C]. Security and Privacy (SP), IEEE Symposium on IEEE, 2012.
[3]劉華婷,郭仁祥,姜浩. 關聯規則挖掘Apriori算法的研究與改進[J]. 計算機應用與軟件,2009(1):146-149.
[4]張銳,楊吉云. 基于權限相關性的Android惡意軟件檢測[J]. 計算機應用,2014(5):1322-1325.
[5]馮博,戴航,慕德俊. Android惡意軟件檢測方法研究[J]. 計算機技術與發展,2014(2):149-152.
[6]楊歡,張玉清,胡予濮,等. 基于權限頻繁模式挖掘算法的Android惡意應用檢測方法[J]. 通信學報,2013(S1):106-115.
[7]蔡澤廷. 基于機器學習的Android惡意軟件檢測模型研究[D].青島:青島理工大學,2013.
[8]張思琪. 基于改進貝葉斯分類的Android惡意軟件檢測[J]. 無線電通信技術,2014(6):73-76.
[9]童振飛. Android惡意軟件靜態檢測方案的研究[D].南京:南京郵電大學,2012.
[10]MICHELINE K. 數據挖掘概念與技術[M]. 北京:機械工業出版社,2012:157-165.
(責任編輯穆剛)
An android malware detection method based on API frequent pattern mining algorithm
LIANG Junpeng
(College of Information Security Engineering,Chengdu University of Information Technology,Chengdu Sichuan 610225,China)
An android malware detection method based on API frequent pattern mining algorithm was proposed in the paper, in which through the digging the relationship of transferring API, the frequent mode in the malware was detected. Using a certain redundancy removal operation to improve the accuracy of detection, the unknown Android software was detected. The possibility and efficiency of the method was tested by the experimental methods. The results show that the method can reach 83﹪ accuracy, so the method has certain value and provides
for the further study.
Android; malware; static detection; machine learning
2016-01-19
梁俊鵬(1990—),男,江蘇南京人,碩士研究生,主要從事信息安全方面的研究.
TP309.5
A
1673-8004(2016)05-0093-05