潘建文 崔展齊 林高毅 陳 翔 鄭麗偉
1 (北京信息科技大學計算機學院 北京 100101)
2 (南通大學信息科學技術學院 江蘇南通 226019)(panjianwen@bistu.edu.cn)
近年來,隨著移動互聯(lián)網的發(fā)展,社交通信、金融證券、游戲娛樂和電子商務等應用全面地從PC轉向移動互聯(lián)網,移動互聯(lián)網用戶和設備數量呈指數級增長.據2021年中國互聯(lián)網網絡安全報告[1]顯示,截至2021年12月,我國手機用戶規(guī)模達10.32億,我國使用手機上網的用戶比例達99.7%.根據國際數據公司(IDC)調查報告[2]顯示,2021年Android手機的市場份額占84%,并不斷增長.開源的Android系統(tǒng)和多樣的應用分發(fā)平臺在帶來巨大的市場份額的同時,也使其成為了惡意應用滋生的溫床和傳播的主要平臺.國家互聯(lián)網應急中心捕獲和通過廠商交換獲得的移動惡意應用也主要集中在Android平臺,僅在2020年就多達303萬個[3].部分Android惡意應用的廣泛傳播造成了嚴重后果.例如,2019年出現(xiàn)的零日漏洞Bad Binder被Android惡意應用利用以控制用戶設備[4],影響到Android 9及之前的版本,給大量用戶帶來了巨大經濟損失.
因此,如何有效檢測Android惡意應用受到了研究人員的廣泛關注.根據其是否運行應用程序,將現(xiàn)有的檢測技術分為動態(tài)檢測和靜態(tài)檢測2類,其中,動態(tài)檢測[5-6]是在真實設備或者模擬器中運行應用,使用測試腳本模擬用戶操作,記錄應用的運行情況,通過分析應用行為特征,如應用程序編程接口(application programming interface,API)調用、網絡流量等特征來檢測惡意應用.動態(tài)檢測的優(yōu)點是可以克服代碼加密、混淆和動態(tài)代碼加載的障礙,其缺點是在真實設備或模擬器中運行測試腳本時間開銷大、難以覆蓋應用全部功能,且耗時較長.靜態(tài)檢測則是通過反編譯應用提取權限、API和操作碼等特征,采用機器學習算法構造分類器以檢測Android惡意應用.靜態(tài)檢測不依賴運行環(huán)境、代碼覆蓋率較高,檢測效率高于動態(tài)檢測方法,例如,Drebin[7]檢測工具在學術界和工業(yè)屆受到了廣泛應用和高度重視.本文重點對Android惡意應用靜態(tài)檢測方法的已有研究成果進行綜述.
本文搜集了2013年至今發(fā)表過的關于Android惡意應用靜態(tài)檢測相關論文并進行了梳理.首先,使用“Android(安卓)”組合“malware/malicious(惡意應用)”、“detection(檢測)”和“classification(分類)”等關鍵字,在國內外重要的論文數據庫(例如IEEE,ACM,Springer,Elsevier,CNKI)中檢索相關論文.由于中國計算機學會(CCF)推薦的期刊和會議影響力較大,具有一定的權威性,我們通過人工篩選的方式,檢索出發(fā)表在CCF評級為A,B類的國際會議或國際期刊,以及《軟件學報》《計算機學報》《計算機研究與發(fā)展》等權威中文期刊上的論文.然后,分析論文的標題和摘要,去除與本綜述關注問題無關的論文.最終,選擇出與本研究問題直接相關的高質量論文89篇,包括國際期刊77篇、中文期刊12篇.其中,TIFS8篇、TDSC6篇、CCS2篇、Computers & Security25篇、《軟件學報》3篇、《計算機學報》1篇、《計算機研究與發(fā)展》3篇.檢索到的論文在不同年份的數量分布如圖1所示,可以看出相關論文發(fā)表數量持續(xù)增長,這表明Android惡意應用檢測是近年來的熱點研究問題.發(fā)表于CCF的A,B類國際期刊和國際會議的論文在不同領域的分布情況如圖2所示,本研究問題的論文大多數分布在網絡與信息安全領域(46篇).
Fig.2 Field distribution of papers published in international journals and conferences ranked as CCF A and B圖2 發(fā)表于CCF A,B類國際期刊和會議的論文領域分布
目前,在Android惡意應用靜態(tài)檢測的綜述中,已有的工作包括:Samra等人[8]在2019年對Android惡意應用靜態(tài)檢測進行綜述,但是僅介紹了基于權限和基于簽名的檢測方法,對于其他靜態(tài)特征方法內容略為缺失;Bayazit等人[9]在2020年對傳統(tǒng)的機器學習檢測Android惡意應用進行了綜述,他們考慮的是惡意應用分類,并對動態(tài)和靜態(tài)檢測方法進行了介紹;在此之后,有41篇重要論文發(fā)表,尤其是基于深度學習的Android惡意應用檢測技術取得進一步的發(fā)展.
本文主要關注Android惡意應用靜態(tài)檢測方法,首先,介紹了Android應用的靜態(tài)特征;然后,分別對基于權限、API、基于操作碼和其他靜態(tài)特征的檢測方法進行分析和總結,并論述數據集和評價指標;最后,對現(xiàn)有的研究工作總結,并對未來的研究方向進行了展望.
APK(Android application package)是一種Android操作系統(tǒng)使用的應用程序包文件格式,用于應用分發(fā)和系統(tǒng)安裝.Android靜態(tài)特征提取是根據對Android隱私安全和開發(fā)過程的了解,在不運行應用程序情況下分析APK中的文件內容,從中收集和提取各類特征.基于所提取到的靜態(tài)特征,可采用不同的算法應用于Android惡意應用檢測.
常見的提取特征方法包括:采用Androguard[10]等逆向工具直接提取權限、API等部分特征;使用Apktool[11]等工具進行反編譯分析,這種提取特征方法所提取到的特征更為全面.如圖3所示,Apktool反編譯后的文件結構包括Android系統(tǒng)可執(zhí)行(Dalvik executable,DEX)文件、AndroidManifest.xml文件、res文件夾、META-INF文件夾和lib文件夾.DEX文件是Dalvik[12]和ART虛擬機可執(zhí)行的字節(jié)碼文件,可被反編譯為Smali或Java文件集合.Smali文件中包含應用程序的全部操作指令以及運行時數據,每個Smali文件包含類,類中包含多個方法,可在其中提取API調用以及由操作碼(opcode)和操作數所組成的指令.AndroidManifest.xml是清單配置文件,其包含了Android系統(tǒng)為運行應用程序所需要的參數,如權限、軟件包名稱、應用組件、應用所需要的硬件和軟件功能等信息.res文件夾用于存放資源文件,包括應用執(zhí)行所需的布局、圖像、動畫、顏色和界面字符串等.META-INF目錄下存放的是簽名信息,用來保證APK包的完整性和系統(tǒng)的安全,Android系統(tǒng)要求所有APK必須先使用證書進行數字簽名,然后才能安裝、更新和分發(fā).lib目錄存放應用程序依賴庫的so文件.so文件是在Android系統(tǒng)上直接運行的二進制代碼,可在應用運行時訪問設備實體組件,例如傳感器和觸摸輸入等,是Android的動態(tài)鏈接庫.
Fig.3 Decompiling structure of APK圖3 APK反編譯結構
APK文件中的內容可被提取作為靜態(tài)特征.根據所使用靜態(tài)特征類型的不同,衍生出不同的檢測方法,本文中將其分為基于權限特征、基于API特征、基于操作碼特征和基于其他特征4類Android惡意應用檢測方法.本文將在第2~5節(jié)中分別對這4類靜態(tài)檢測方法進行詳細介紹.
權限機制用于限制Android應用程序訪問文件、數據和資源等安全敏感項.為保護用戶隱私數據,Google為Android 10版本設置了155個權限,開發(fā)人員可根據應用功能的需要向用戶申請權限.然而,調查數據表明,大多數用戶不夠了解應用所需的權限,導致過度授權的情況頻發(fā)[13].一旦惡意應用申請的敏感權限獲得通過,將可能導致用戶遭受隱私泄露、惡意扣費和資費消耗等嚴重后果,侵害用戶利益.良性應用和惡意應用所申請的權限在數量、類別和關系上存在一定的差異,這使得基于權限分析檢測Android惡意應用具有可行性.基于權限的Android惡意應用檢測方法通過清單配置文件AndroidMenifest.xml提取權限特征,然后分析其使用情況或挖掘權限間相關性,以檢測惡意應用.由于權限特征數量較少且提取便捷,使得此類方法出現(xiàn)較早,根據使用權限特征的方式不同,本節(jié)將其分為基于權限使用情況和基于權限相關性挖掘的Android惡意應用檢測方法.
2.2.1 基于權限使用情況分析的方法
基于權限使用情況分析的方法先提取權限特征,然后將機器學習方法用于檢測Android惡意應用.例如,Sanz等人[14]提出基于權限的方法來檢測Android惡意應用,Ilham等人[15]在此基礎上采用信息增益、信息增益率和皮爾遜相關系數等方法選擇出權限的特征子集,然后分別構建隨機森林(random forest)、支持向量機(support vector machine, SVM)和決策樹(decision tree)模型檢測Android惡意應用.
Intent[16]是包含目標組件地址和數據的消息對象,主要用于Android應用程序內和應用程序間通信,可通過發(fā)送Intent消息對象請求應用內的組件或其他應用執(zhí)行特定操作,還可在操作結束后接收返回的數據.Intent與權限相比語義信息更豐富,因此除單獨分析權限使用情況外,研究人員還對權限結合Intent檢測Android惡意應用的方法進行了研究.其中,楊宏宇等人[17]采用加權投票方法改進隨機森林算法,使用權限和Intent作為特征值檢測Android惡意應用.AndroDialysis[18]首先采用Intent作為特征,取得較好的檢測效果,然后將權限與Intent特征結合,并使用貝葉斯網絡來檢測Android惡意應用,進一步提升了檢測性能.Idrees等人[19]提出結合權限和Intent的集成學習方法PIndroid,構造了決策表、多層感知機(multilayer perceptron,MLP)和決策樹等6種基分類器,并用Boosting,Bagging,Stacking集成學習方法檢測Android惡意應用,取得99.8%的準確率.Zhang等人[20]提出基于N-Gram分析和在線增量分類器結合的方法,提取權限、Intent等多種特征用于N-Gram分析,采用被動攻擊(passive-aggressive)算法進行增量學習,該框架不僅可以檢測惡意應用,還可對惡意應用所屬家族進行分類.
2.2.2 基于權限相關性挖掘的方法
Android有多個權限組,每個權限組中含有若干個權限.Android惡意應用進行惡意行為時,通常需要多個權限的協(xié)作和配合,因此可挖掘權限組間和權限組內的權限相關性,并將其用來檢測惡意應用.例如,為修改接收到的短信,惡意應用需要使用權限組合:接收短信(RECEIVE_SMS)、讀取短信(READ_SMS)和寫入短信(WRITE_SMS).2014年,Wang等人[21]通過挖掘單個權限或一組協(xié)作權限風險的方式來檢測惡意應用.該方法首先采用互信息、皮爾遜相關系數和T檢驗3種特征排序算法對權限進行風險排序;然后使用序列前向選擇(sequential forward selection)方法和主成分分析(principal component analysis)方法選擇權限子集,挖掘出多個權限間協(xié)作的風險;最后構造支持向量機、決策樹以及隨機森林模型檢測惡意應用.
以往大多數研究工作主要關注權限使用情況,而忽視了挖掘權限之間的關系,楊歡等人[22]提出了基于頻繁模式挖掘算法PApriori,挖掘惡意應用家族中權限使用的相互依賴關系,通過匹配待檢測應用的權限特征來檢測Android惡意應用.相似地,Arora等人[23]提出了基于權限對的Android惡意應用檢測方法PermPair,首先分別提取惡意應用集和良性應用集的權限對,構建惡意應用權限對圖(Malicious-Graph)和良性應用權限對圖(Normal-Graph),并根據權限對在不同應用集中出現(xiàn)的頻率,對圖中每條邊分配權重,然后通過比較待檢測應用權限對在Malicious-Graph和Normal-Graph中的權重和,確定其是否為惡意應用.該方法在權重計算過程中采用了圖邊緣優(yōu)化算法,刪除不重要的權限對,有效減少了檢測惡意應用的時間消耗.
表1對基于權限的方法進行了對比.其中,數據集來源和數量列采用來源(數量)的形式給出了論文使用的良性和惡意應用來源和數量,例如,良性:Google Play(674)表示使用了Google Play數據集中的674個良性應用.從表1可以看出,基于權限相關性挖掘的Android惡意應用檢測方法的準確率整體低于基于權限使用情況分析的方法,這主要是由于Android應用中過度和隨意申請敏感權限現(xiàn)象極為常見,使得噪聲更多,增加了挖掘權限相關性的難度.
Table 1 Comparison of Android Malware Detection Methods Based on Permission表1 基于權限的Android惡意應用檢測方法對比
基于權限的Android惡意應用檢測方法的優(yōu)點是權限特征提取方式簡單快捷、特征數量較少、檢測效率較高,其缺點是惡意應用容易申請和良性應用相同的權限,以偽裝成良性應用,導致檢測準確率較低、誤報率較高.常見的改進方法是將權限特征和其他靜態(tài)特征結合,以提高Android惡意應用檢測的精度.
Android API[24]是Android系統(tǒng)提供的函數接口,惡意應用在獲得敏感權限后,可能通過API調用訪問和獲取手機中的短信、通訊錄、定位、相機和相冊等敏感數據,也可能通過惡意操作執(zhí)行系統(tǒng)破壞、遠程控制和誘騙欺詐等惡意行為,導致用戶的隱私和經濟安全受到侵害.良性應用和惡意應用在API使用和調用模式上存在差異,因此可通過分析API特征的方式來檢測惡意應用.權限特征設置粒度較粗,導致基于權限的Android惡意應用檢測方法存在較大的不確定性,而分析API調用情況能更全面細致地理解應用特征.因此,相較于基于權限的方法,基于API的Android惡意應用檢測方法取得了更高的準確性和魯棒性,是目前使用最廣泛的一類方法.此類方法通過分析反編譯后的Smali文件,提取API調用序列或API調用圖,以檢測惡意應用.根據所使用API信息和方式的不同,本節(jié)將其分為基于API使用情況、基于API調用依賴圖和基于API與其他特征結合3類Android惡意應用檢測方法.
3.2.1 基于API使用情況的方法
API使用情況能在一定程度反映應用的特點.基于API使用情況的方法通過提取和分析應用的API調用序列和關系,并使用各類機器學習算法檢測惡意應用,這類方法取得了較好效果.例如,Scalas等人[25]針對勒索應用對Android用戶的威脅,提出基于API檢測策略的方法R-PackDroid,該方法可用于檢測具有勒索行為的惡意應用和其他類別的惡意應用.由于勒索應用攻擊嚴重依賴特定的API來執(zhí)行其操作,可通過包、類和函數3類粒度的API特征信息進行檢測,實驗結果表明,基于函數粒度特征的檢測方法相比其他2種有更高的準確率.
隱私竊取是惡意應用的典型行為之一,常使用數據流分析和污點分析來檢測這類惡意行為.其中,數據流分析方法記錄和跟蹤敏感數據流路徑,包括源點、數據傳播路徑和交匯點,并分析API在數據流路徑上的調用序列,以檢測隱私數據是否被泄露.Wu等人[26]提取與數據流相關的API,并根據每個API在惡意應用中的使用情況計算其惡意權重值,在計算出惡意權重值的基礎上,使用改進的馬氏距離(Mahalanobis distance)方法計算K最鄰近(K-nearest neighbor, KNN)分類算法中相鄰節(jié)點的距離,以提高敏感數據分析的效率和模型的檢測精度.隨著惡意應用的不斷演化,其收集敏感數據的行為更加復雜,僅由源點和交匯點構成的簡單信息流難以捕獲此類行為.為此,Shen等人[27]通過提取由簡單信息流集合所組成的復雜信息流路徑上的API序列,使用N-Gram模型生成不同長度的API特征向量,然后使用SVM算法構造模型以檢測惡意應用.此外,Dexteroid[28]從Android生命周期函數調用中提取組件的行為特征、事件調用和狀態(tài)轉換,以檢測存在信息泄露和發(fā)送惡意短信隱患的惡意應用.
污點分析方法能夠追蹤應用程序中的隱私數據從獲取到泄露的整個傳播過程.Feng等人[29]提出基于API語義的方法Apposcopy,該方法將靜態(tài)污點分析和組件間調用圖相結合,以檢測具有控制流和數據流屬性的惡意應用.為提高污點分析效率,張捷等人[30]提出基于污染變量關系圖的污點分析方法FastDroid.除了關注污點分析效率外,大量惡意應用采用代碼保護技術,導致污點分析技術存在誤報率較高的問題.為此,繆小川等人[31]使用敏感路徑識別方法分析Android應用的安全性,該方法首先提取組件間函數調用關系圖,在圖中尋找由敏感行為以及觸發(fā)該行為的API組成的敏感路徑,然后對敏感路徑進行特征抽象化,以使用決策樹模型檢測惡意應用.王蕾等人[32]提出面向Android應用隱私泄露檢測的多源污點分析技術可有效區(qū)分出分支互斥路徑,提升了檢測效率,并且降低了多源污點問題計算開銷.
也有研究工作關注到用戶輸入和行為等敏感操作與API調用序列之間存在一定關聯(lián)關系.2015年,Elish等人[33]使用TriggerMetric元組來表示用戶輸入和行為觸發(fā)的敏感API調用特征,TriggerMetric元組包括用戶操作、觸發(fā)器、依賴路徑和API調用,可根據應用操作行為的不同區(qū)分良性應用和惡意應用.Alam等人[34]提出了基于優(yōu)勢樹(dominance tree)的API調用序列挖掘方法DroidDomTree,改進TF-IDF方法為優(yōu)勢樹中的節(jié)點分配權重,根據權重選擇重要的API特征,從而提高了檢測效率.
3.2.2 基于API調用依賴圖的方法
隨著Android版本的升級,以及惡意應用的演化,常使用升級后的API實現(xiàn)相似的惡意功能,導致惡意應用檢測模型逐漸老化.面對新出現(xiàn)的惡意應用時檢測準確率不斷下降,需要定期重新收集數據集再次訓練,構建API調用關系圖是減緩模型老化的有效方法.為此,Mariconti等人[35]提出了基于行為模型馬爾可夫鏈(Markov chain)的惡意應用檢測方法MaMa-Droid,將API調用圖抽象成包和類序列以構建馬爾可夫鏈形式的行為模型,以從中提取特征檢測惡意應用.實驗結果表明,將使用舊數據集訓練的模型用于檢測1年和2年后出現(xiàn)的新惡意應用時,F(xiàn)1值分別達到了86%和75%.為進一步緩解模型老化問題,Zhang等人[36]提出了APIGraph框架,通過構建API關系圖分析API升級前后的語義相似性,以減緩模型老化.首先,采用NLP語義解析不同版本的Android API文檔,從中提取API、權限等實體并構建API關系圖;然后使用圖嵌入方法將圖中的實體編碼為向量,通過向量之間的差異表示實體間的語義相似性,以將語義相似的實體聚類到不同簇中;最后使用實體簇訓練模型以緩解Drebin和MaMaDroid等Android惡意應用檢測工具老化速度.相似地,Xu等人[37]提出了SDAC方法,根據現(xiàn)有API的貢獻來評估新增API對惡意應用檢測模型的貢獻,具體為根據API的語義距離對所有API進行聚類,在訓練階段創(chuàng)建一個可擴展的特征集,以通過添加檢測階段新增API特征的方式來適應Android版本差異所帶來的API變化,實驗結果表明,SDAC的性能相較MaMaDroid取得了明顯提升.
為提升檢測效率,相關研究使用社交網絡分析技術檢測Android惡意應用.例如,Wu等人[38]提出了基于圖的輕量級檢測方法MalScan,將函數調用圖視為社交網絡,采用社交網絡中心性分析獲取圖的語義特征,相比Drebin和MaMaDroid大幅度提升了檢測速度.但是當惡意應用行為與良性應用行為相似時,MalScan會出現(xiàn)漏報,為此Zou等人[39]提出了IntDroid,在社交網絡中心性分析的基礎上,通過計算社交網絡中敏感API和中心節(jié)點的平均親密度來表示圖的語義特征,以適當降低擴展性為代價取得了比MalScan更高的準確率.Wu等人[40]將函數調用圖中的惡意部分節(jié)點僅占一小部分的惡意應用稱為隱蔽惡意應用.隱蔽惡意應用的函數調用圖中良性部分和惡意部分具有強相關性且所占比例較小,導致IntDroid面對隱蔽惡意應用時檢測性能下降.為此,他們提出了基于社交網絡同質性分析的方法HomDroid檢測隱蔽Android惡意應用,實驗結果表明HomDroid檢測隱蔽惡意應用性能優(yōu)于Drebin,MaMaDroid,IntDroid等方法.隨著對Android應用研究的深入,惡意應用檢測方法取得較大進展,基于API調用依賴圖的方法取得了較好的檢測性能.然而,研究發(fā)現(xiàn)通過擾亂特征向量等方法可生成成功繞過檢測的惡意應用.例如,Zhao等人[41]提出了Android惡意應用對抗性攻擊的方法,使用強化學習修改對函數調用依賴圖,通過插入節(jié)點、刪除節(jié)點、添加邊和重寫的方式適應程序的操作(插入方法、刪除方法、添加調用關系和重寫),提高對抗性攻擊的有效性.針對精心設計的對抗性攻擊可能會繞過惡意應用檢測模型的問題,Demontis等人[42]提出了對抗規(guī)避攻擊的惡意應用檢測方法,通過對不同特征分配不同權重的方式來提高模型的魯棒性.
隨著深度學習技術在各個領域取得良好成績,研究人員也開始嘗試使用深度學習檢測Android惡意應用[43-44].卷積神經網絡(convolutional neural network,CNN)僅能處理歐氏空間數據如圖像、文本等,不支持非歐空間數據,如圖數據[45].而圖數據能夠更準確地表達Android應用和API之間調用關系,Gao等人[46]提出使用圖卷積神經網絡(graph convolutional network,GCN)檢測Android惡意應用的方法GDroid,將應用和API映射為異構圖,惡意應用檢測任務轉換為節(jié)點分類任務,該方法以應用(APP)、API間的調用關系和API的使用模式構建APP-API和API-API為邊的異構圖,并將異構圖輸入圖卷積網絡模型以檢測惡意應用.相似地,Li等人[47]也提出使用圖卷積網絡檢測惡意應用的方法,該方法首先提取API調用序列生成有向循環(huán)圖,然后使用馬爾可夫鏈和主成分分析法提取圖的特征,并基于圖卷積網絡檢測惡意應用.除此之外,AMalNet[48]還采用GCN結合獨立循環(huán)網絡(independently recurrent neural network,IndRNN)的方式檢測Android惡意應用.
為了減少對圖的分析,提升檢測效率,研究人員將API調用圖化分為多個子圖集合.S3Feature[49]在函數調用圖中標記敏感節(jié)點形成敏感函數調用圖,然后從中挖掘出敏感子圖(SSG)及其相鄰子圖(NSG),最后將SSG和NSG去重后編碼為特征向量用于惡意應用檢測.Fan等人[50]提出了基于頻繁子圖的Android惡意應用檢測方法FalDroid,通過構建同一家族代表性應用的頻繁子圖的方式,將敏感API調用關系圖劃分為子圖集合,以減少圖分析復雜度,提升檢測惡意應用效率.類似地,Lu等人[51]在提取函數調用圖后,從圖中刪除敏感API節(jié)點距離大于3的節(jié)點以簡化函數調用圖,構建去噪圖卷積神經網絡(denoising graph convolutional neural network),提升了惡意應用檢測性能.
除了文獻[49-51]構建API調用關系圖的方法外,研究人員[52]還使用API調用上下文信息來提高檢測精度.Allen等人[53]對API調用上下文信息的有效性進行了全面研究,發(fā)現(xiàn)API調用的入口點對分類正確性影響較大,并提出了輕量級上下文感知系統(tǒng)PIKADROID,以用于檢測惡意應用.Zhang等人[54]提出基于API語義依賴圖的方法來檢測Android惡意應用,并實現(xiàn)了原型系統(tǒng)DroidSIFT,該方法首先提取上下文加權API依賴圖作為程序語義來構造特征集合,然后根據圖相似性來檢測惡意應用.另外,MKLDroid[55]從應用程序的依賴圖中捕獲結構和上下文信息,以在依賴圖中定位細粒度的惡意代碼.
同一家族應用程序具有類似的功能,可通過分析它們共同特征的相似性檢測惡意應用.受推薦系統(tǒng)的啟發(fā),F(xiàn)renklach等人[56]提出了利用應用程序相似性圖來檢測Android惡意應用的方法,在該方法中,應用程序對應被推薦的項目,功能對應用戶.該方法首先提取并處理API調用圖,從應用程序和功能的二分網絡中生成應用相似性圖(APP similarity graph,ASG);然后采用Node2Vec圖嵌入方法將ASG轉為特征向量,以使用隨機森林模型檢測惡意應用.具有共同特征的惡意應用可能屬于同一個惡意應用家族,Karbab等人[57]據此在Cypider[58]的基礎上提出基于應用程序相似性網絡的檢測方法,該方法首先構建應用程序的相似性網絡,從相似性網絡中提取具有高連通性的子圖作為社區(qū),然后為每個社區(qū)生成單個社區(qū)指紋,最后使用SVM對社區(qū)指紋進行分類,以將惡意應用歸類為不同家族.
3.2.3 基于API與其他特征相結合的方法
研究人員還采用API與其他特征相結合的方式,進一步提升檢測Android惡意應用的性能.典型工作如Arp等人[7]提出的Drebin在API的基礎上,結合了權限、Intent、各類組件、硬件組件和網絡地址等特征以檢測惡意應用,該項工作還共享了惡意應用數據集,Drebin方法成為了后續(xù)工作的常用比較對象.2019年,Badhani等人[59]提出CENDroid方法,該方法首先提取API和權限特征;然后分別創(chuàng)建API、權限及API和權限的3組特征集;其次采用決策樹、極限學習機(extreme learning machine,ELM)、邏輯回歸(logistic regression,LR)、RIPPER和SVM這5種分類器分別使用3組特征集進行惡意應用檢測,實驗結果表明API與權限組合的特征有更高的檢測性能;最后,通過集成學習將5種分類器結合,其各項評估指標均優(yōu)于單個的分類器,提高了檢測Android惡意應用的性能.HybriDroid[60]同樣使用多數投票等集成學習方法結合徑向基函數(radical basis function network,RBF)網絡、人工神經網絡(artificial neural network, ANN)和邏輯回歸等多個分類器,并結合API、權限和元數據等特征,使得檢測Android惡意應用準確率達到了98.8%.針對如何學習有效的特征表示,Zhu等人[61]通過無監(jiān)督特征學習算法從數據集中學習有效的特征,以降低對Android先驗知識和人工選擇特征的依賴.
由于API和其他特征結合后會導致特征數量增多,樣本在特征空間分布更加稀疏,容易造成過擬合等問題,影響模型的檢測時間和精度,因此,研究人員嘗試通過特征選擇方法優(yōu)化模型性能.Cen等人[62]將API與權限相結合作為特征,采用信息增益(information gain,IG)和卡方檢驗(chi-square test,CHI)進行特征選擇,采用基于正則化Logistic回歸的概率判別模型來檢測Android惡意應用.Peynirci等人[63]提出基于IDF值的特征選擇算法以檢測惡意應用,該方法首先提取權限、API和字符串3種特征,根據惡意應用出現(xiàn)最多和良性應用出現(xiàn)最少的特征,計算特征IDF差值并選擇前5%或10%的特征,然后使用KNN、SVM、Native Bayes、J48、隨機森林等模型檢測Android惡意應用.Kong等人[64]將孿生卷積神經網絡(siamese convolutional neural network,SCNN)用于檢測惡意應用,該方法首先使用特征分組(feature grouping)策略對API和權限進行特征選擇,然后構建和訓練SCNN模型,通過相似度距離方法計算出良性應用和惡意應用的均值并將其作為中心點,最后計算待檢測應用與2個中心點的距離以確定應用類別.注意到現(xiàn)有部分工作忽視了特征間的重要性差異,Cai等人[65]提出了基于特征加權聯(lián)合優(yōu)化的Android惡意應用檢測方法JOWMDroid,該方法提取系統(tǒng)資源、權限、組件、Intent、受限API、敏感API、權限調用API和敏感Shell命令8類特征,然后使用IG對其進行特征選擇,并使用5種權重映射函數計算特征權重,最后通過集成學習結合SVM,LR,MLP這3類模型提升惡意應用檢測精度.文獻[62-65]采用了特征選擇的方法,避免了特征“維度爆炸”,在減少模型訓練時間和檢測時間的同時,提高了模型準確率.
除此之外,F(xiàn)eng等人[66]提出了MobiTive檢測系統(tǒng),該方法結合了API、權限、Intent和硬件特征,并比較了CNN、長短期記憶(long short-term memory,LSTM)和門控循環(huán)單元(gated recurrent unit,GRU)這3種模型的準確率,其中GRU模型取得了最好效果,MobiTive還可對Android惡意應用家族進行歸類.類似地,Garcia等人[67]提出了RevealDroid方法,該方法提取API、反射特征和Native代碼作為特征,不僅提升了檢測Android惡意應用的準確性和效率,還可適用于經過代碼混淆處理的應用.另外,Hei等人[68]提出了快速檢測新應用的框架HAWK,將實體(包含API、權限、類、接口和so文件等)和行為關系建模為異構信息網絡,并結合改進的圖注意力網絡模型檢測新應用.
表2對部分具有代表性的基于API的惡意應用檢測方法進行了對比.從表2的分析可以看出,基于API使用情況的方法假設各特征間相互獨立,或僅考慮數據流在API之間的傳播路徑,不考慮API間復雜的相關性,雖然具有方便快捷的優(yōu)點,但是大量冗余的API特征會增加算法時間消耗.
Table 2 Comparison of Android Malware Detection Methods Based on API表2 基于API的Android惡意應用檢測方法對比
通過API調用依賴圖來抽象API之間的調用關系,可利用圖結構進行分析以識別惡意應用,但構建API調用圖存在較大挑戰(zhàn).首先,API調用基于事件監(jiān)聽與回調,可能無法正確表示調用方法的順序;然后,應用的不同部分通過組件間通信來進行交互,這部分行為在代碼層面沒有直接調用關系,因此構建的應用API調用依賴圖可能不夠完整;最后,API調用依賴關系的復雜性導致所生成的圖較為復雜,使得基于圖分類的方法時間消耗較多.
API與其他特征結合的方法通過結合多種特征提升了惡意應用檢測精度,但通常需要使用有效的特征選擇算法以選取更有代表性的特征子集.
研究發(fā)現(xiàn),部分惡意應用采用代碼混淆技術以規(guī)避檢測,降低了基于權限和API檢測Android惡意應用方法的有效性[69].代碼混淆技術在一定程度上改變了應用的程序結構,會引起程序的信息流等變化,但應用的核心操作邏輯通常不會發(fā)生較大變化.作為程序執(zhí)行過程中的指令,操作碼可表征應用的行為特征,針對方法名、變量名、字符串和權限的混淆技術對操作碼特性影響較小.因此,可將操作碼信息作為特征來檢測惡意應用.基于操作碼的Android惡意應用檢測方法首先通過反編譯提取Smali文件中的操作碼序列,然后對操作碼序列進行分析處理,以檢測惡意應用.根據所使用操作碼信息的方式不同,本節(jié)將介紹基于操作碼使用情況、基于操作碼序列轉化圖像、基于操作碼和其他特征的3類Android惡意應用檢測方法.
4.2.1 基于操作碼使用情況的方法
操作碼可用于表征應用程序的行為模式,很多研究工作在提取操作碼序列后,使用統(tǒng)計模型或機器學習方法來檢測Android惡意應用.例如,陳鐵明等人[70]提出了基于N-Gram模型的Android惡意應用靜態(tài)檢測方法Maldetect,該方法首先使用逆向工程提取操作碼指令并將其抽象為指令符號,然后使用NGram模型將指令符號序列編碼為特征,最后構造隨機森林、SVM、KNN、Naive Bayes模型來檢測惡意應用.基于N-Gram模型的方法對操作碼數量較為敏感,如果N-Gram模型中操作碼較少,無法涵蓋足夠信息來檢測惡意應用;而如果N-Gram模型中操作碼較多,特征維度過大,則會引入過多噪聲,導致更高的訓練時間成本.與統(tǒng)計模型相比,深度學習方法可自動提取特征并組織特征之間的關系.例如,McLaughlin等人[71]提取由218個操作碼組成的多個序列作為文本集,采用自然語言處理的方法,構建卷積神經網絡模型檢測惡意應用,并和基于N-Gram模型的方法進行比較,實驗結果表明,卷積神經網絡模型在效率和性能均優(yōu)于基于N-Gram的檢測方法.
李挺等人[72]提出了基于Dalvik指令的Android惡意代碼檢測方法,該方法首先對惡意應用中操作碼指令集進行精簡以保留反映程序語義的指令,并對其進行形式化描述以建立惡意特征庫,然后使用軟件相似度度量算法(MOSS)和閔可夫斯基距離算法(Minkowski distance)計算待檢測應用惡意應用特征庫的相似度結果來判定其是否為惡意應用.
機器學習方法通常需要類別較為平衡的訓練樣本集才能生成性能較好的檢測模型.然而在真實場景下樣本類別存在嚴重不平衡,導致模型檢測性能較低.為此,Mercaldo等人[73]采用進程代數模型表示Android應用,將字節(jié)碼轉換為進程,并通過等價性檢驗(equivalence checking)來分析所生成進程代數模型之間的關系,該方法不需要樣本標簽,即可檢測惡意應用及其所屬家族,從而解決樣本類別不平衡的問題.
鑒于Windows平臺上的應用同樣由操作碼序列組成,有研究人員將Windows平臺基于操作碼序列檢測惡意應用的方法移植到Android平臺上.例如,Canfora等人[74]評估了使用基于操作碼特征的隱馬爾可夫模型(hidden Markov model,HMM)和結構熵2種方法檢測Android惡意應用的性能.該研究表明基于HMM的方法可有效檢測Android惡意應用,而基于結構熵的方法更適合對Android惡意應用家族分類.
4.2.2 基于操作碼序列轉化圖像的方法
大多數惡意應用的變種往往通過自動化技術重用攜帶惡意代碼模塊的方法生成,因此它們之間的操作碼序列具有一定的相似性.部分研究人員將操作碼序列轉化為圖像使其可視化,然后采用圖像識別的方法以識別原始樣本的變體來檢測Android惡意應用.典型工作為Xiao等人[75]將Dalvik操作碼和操作數組成的字節(jié)碼文件轉換為RGB圖像,該方法首先以十六進制格式讀取字節(jié)碼,然后將3個連續(xù)的十六進制數分別轉換為RGB通道的3個值,將字節(jié)碼序列轉換為顏色矩陣,形成圖像文件,最后將圖像輸入CNN模型進行分析,檢測是否為惡意應用.在此工作基礎上,Yadav等人[76]對多種CNN模型進行測試,結果表明采用EfficientNetB4結構的CNN模型優(yōu)于MobileNetV2和ResNet50等結構的模型.
代碼混淆技術會繞過部分Android惡意應用檢測系統(tǒng),降低現(xiàn)有方法的有效性.為此,Tang等人[69]提出了基于多粒度操作碼特征的Android惡意應用檢測方法MGOPDroid,首先針對不同的混淆技術提取不同粒度的操作碼特征,通過TF-IDF方法和混淆前后操作碼特征的差異計算特征權重,以選擇有效的抗混淆操作碼特征,然后將操作碼序列特征轉為灰度圖像,作為ResNet模型的輸入,最后把訓練好的模型,通過TensorFlow Lite部署在移動設備,實現(xiàn)本地檢測.
注意到已有基于深度學習的惡意應用檢測方法缺乏可解釋性,Iadarola等人[77]對檢測惡意應用的CNN模型進行了可解釋性分析.首先,應用反編譯,并將DEX字節(jié)碼轉換為灰度圖,以訓練CNN模型;然后,使用Grad-CAM生成熱圖,對CNN模型的輸出進行解釋,并按惡意應用家族分類熱圖,以生成代表家族特性的累積熱圖.
部分研究工作借鑒了檢測Windows平臺惡意應用的方法來檢測Android應用,并取得了良好的效果.例如,Yuan等人[78]提出了基于馬爾可夫圖像(Markov image)和深度學習的方法MDMC,將提取的字節(jié)碼經概率轉移矩陣轉換成Markov圖像,通過深度卷積神經網絡的方法對圖像進行惡意應用檢測.該方法不僅適用于檢測Android惡意應用,也適用于檢測Windows平臺惡意應用.
4.2.3 基于操作碼和其他特征相結合的方法
為進一步提升Android惡意應用檢測性能,研究人員還結合了操作碼、權限和API等多種特征來檢測惡意應用.張炳等人[79]提出了面向概念漂移的可解釋性Android惡意應用檢測方法InterDroid,首先根據Android惡意應用報告分析和提取了API、權限、Intent和字節(jié)碼,然后使用自動化機器學習算法TPOT(tree-based tipeline optimization tool)篩選最佳分類模型集合,并使用集合中的模型和特征構建特征解釋器,最后基于聯(lián)合分布適配算法提高檢測準確率.Qiu等人[80]提出的多視圖特征智能檢測框架MFI,從已知惡意應用家族中學習功能表示,以識別具有相同功能的新惡意應用.具體而言,提取權限、API調用圖和操作碼等異構特征,通過特征分析、選擇、聚合和編碼等過程,構建深度神經網絡(deep neural network,DNN)檢測模型檢測惡意應用.實驗結果表明,MFI優(yōu)于Drebin和MaMaDroid等方法.陳波等人[81]提出基于多層SimHash的相似度檢測方法,首先從APK文件中提取的AndroidManifest.xml、Smali代碼集、操作碼指令集、Java代碼集、Java指令集5類特征表征應用,然后采用SimHash算法進行相似度分析,并分別用于構建一層數據模型,在檢測過程中使用投票感知器(voted perceptron)算法,為每層分別賦予信任權重值,最后將每層結果結合權重進行投票,根據投票結果判斷是否為惡意應用.實驗結果表明該方法有較好的檢測效果.Kim等人[82]提出多模態(tài)深度學習方法檢測惡意應用,通過提取操作碼、API、權限、組件、字符串、共享庫函數和環(huán)境7類特征,以構建深度神經網絡DNN模型檢測惡意應用.
Lu等人[83]設計了DLAMD框架,使用預檢測和深度檢測2個階段檢測Android惡意應用,預檢測階段提取權限特征并使用BP神經網絡模型初步篩選具有明顯特征的惡意應用,以降低檢測時間和計算成本,提高整個框架的檢測效率.深度檢測階段提取應用的操作碼結合CNN和LSTM模型,以進一步檢測疑似惡意應用,提升檢測準確性.
表3將部分基于操作碼的代表性方法進行了對比.其中,基于操作碼使用情況方法的優(yōu)點是可以有效避免因代碼混淆而提取不到重要特征的問題,也無需人工選擇具體特征.基于操作碼轉化圖像的方法將Android惡意應用檢測的問題轉為圖像分類問題,可利用已有的圖像分類算法,由于其缺點是可解釋性較差,且對計算機硬件和算力要求較高;基于操作碼和其他特征結合的方法結合多種特征,提升了惡意應用檢測精度,其缺點是模型設計較為復雜且檢測時間較長.
Table 3 Comparison of Android Malware Detection Methods Based on Opcode表3 基于操作碼的Android惡意應用檢測方法對比
除了上述權限、API和操作碼等常用的靜態(tài)特征方法外,為應對代碼混淆、惡意代碼注入所帶來的挑戰(zhàn),有研究通過結合動靜態(tài)特征和相似代碼片段等方法來檢測Android惡意應用.
5.2.1 基于動靜態(tài)特征結合的方法
Android惡意應用動態(tài)檢測指分析Android應用是在嚴格控制的環(huán)境(真實設備或模擬器)中利用自動化腳本模擬用戶操作,執(zhí)行如API調用、網絡通信、資源訪問、進程控制等操作,并通過對應用行為分析來判斷其是否存在隱私竊取、惡意扣費、遠程控制等惡意行為.由于Android應用是通過事件交互驅動的,惡意應用行為往往與交互方式相關,在動態(tài)檢測中如果沒有發(fā)現(xiàn)惡意行為,并不能確保之后不會發(fā)生,而靜態(tài)分析可以分析更多的可執(zhí)行路徑,但難以應對代碼混淆加密的問題.因此,有研究工作通過將動態(tài)特征與靜態(tài)特征相結合的方式來解決上述問題.
楊歡等人[84]提出了靜動態(tài)結合的方法Androdect,其使用的靜態(tài)特征包括權限、各類組件、API信息和Native代碼,在模擬器中使用Monkey[85]模擬用戶行為,以收集動態(tài)特征,并設計了3層混合系綜算法(triple hybrid ensemble algorithm,THEA),使用決策樹、樸素貝葉斯和KNN等多種機器學習模型的最優(yōu)分類器來檢測惡意應用.
Alzaylaee等人[86]提出了基于深度學習的惡意應用檢測方法DL-Droid,可適用于真實設備.DL-Droid使用權限、API和Intent等靜態(tài)特征和運行日志等動態(tài)特征來訓練檢測惡意應用的深度學習模型,并與SVM,SVM RBF,NB,LR,PART,RF,J48等主流算法進行比較,實驗結果表明DL-Droid具有更好的性能.
網絡流量特征可用于檢測具有惡意代碼更新功能和泄露隱私的應用,可與靜態(tài)特征相結合檢測惡意應用.Arora等人[87]提出了基于權限特征和網絡流量特征的Android惡意應用檢測方法,該方法將KNN算法和K-Medoids算法相結合,實驗結果表明,該方法優(yōu)于僅使用動態(tài)流量特征或靜態(tài)權限特征的檢測方法.大多數惡意應用竊取隱私數據后將其發(fā)送到服務端,Tong等人[88]先通過動態(tài)運行應用提取文件調用和網絡訪問相關的特征,分別構建良性應用和惡意應用模式集,以基于模式匹配檢測惡意應用.Wang等人[89]通過挖掘應用訪問的URL以檢測惡意應用,首先將收集到的應用在模擬器中運行,并收集應用的網絡訪問數據,然后提取其中的URL信息并將其向量化,以訓練用于檢測惡意應用的神經網絡模型.
此外,權限、組件和API調用等靜態(tài)特征也可以和動態(tài)行為特征組合以檢測惡意應用[90-92].例如,李鵬偉等人[93]對APK進行脫殼重打包后提取動靜態(tài)特征,其中靜態(tài)特征包括應用的結構信息、權限信息、加固情況、反射、Native代碼、權限和類信息,動態(tài)特征為通過插裝獲取的行為序列.Costa等人[94]提出了污點分析和動態(tài)特征結合的檢測方法,主要對敏感API調用特征進行分析.另外,Yuan等人[95]提出了深度學習檢測的方法Droid-Sec,該方法提取靜動態(tài)特征采用深度置信網絡檢測惡意應用.在動態(tài)運行過程中,Android應用在調用分配內存、訪問文件等API函數時,會轉換為相應的系統(tǒng)調用,Amer等人[96]通過結合API調用、系統(tǒng)調用和權限序列特征,構建LSTM模型,捕獲應用運行時API調用和系統(tǒng)調用間的依賴關系,以檢測惡意應用.
5.2.2 基于相似代碼片段的方法
為規(guī)避檢測,Android惡意應用開發(fā)人員可對良性應用反編譯,注入惡意組件(例如存在惡意代碼的第三方庫),修改控制流以確保其正常運行后,再重新打包上架至第三方應用市場.通過這種方式構造的惡意應用與其對應的良性應用行為相似,難以檢測.由于這些惡意應用中注入的惡意代碼存在相似性,有研究通過基于相似代碼片段的方法檢測Android惡意應用.
重打包檢測方法主要通過各種相似度度量指標找到高度相似的應用.例如,為消除第三方庫帶來的影響,Zhang等人[97]在特征提取階段根據應用白名單移除通用第三方庫后,采用Jaccard指數分析應用剩余部分的代碼相似度,然后根據代碼相似度、應用程序的元數據和商業(yè)防病毒軟件提供的標簽3類異構信息構建網絡表示學習以對弱標簽惡意應用聚類劃分為已知和未知的家族,最后構建3層DNN來進一步分類已知家族的應用.Tian等人[98]提出了代碼重打包檢測方法DR-Droid,該方法將應用代碼的結構根據其行為依賴關系劃分為多個代碼子集,在不同的代碼子集中提取了粗粒度的類級依賴圖和細粒度的方法調用圖來生成應用的特征向量.除常見的Java庫隱藏惡意代碼外,部分惡意應用將惡意行為隱藏在Native代碼中,因此,Alam等人[99]提出了DroidNative以檢測字節(jié)碼或Native代碼中的惡意行為.Zhan等人[100]對Android第三方庫的檢測工具進行了實證研究,從惡意應用的檢測性能、檢測效率、代碼混淆恢復能力和易用性4方面分析和評估了現(xiàn)有的檢測工具.結果表明,LibScout[101]有更好的檢測性能,LibRadar[102]時間消耗少且更易用,Libeccio[103]抗代碼混淆效果最好.
He等人[104]提出了基于惡意代碼片段識別的檢測方法MsDroid,使用GNN檢測Android惡意應用.MsDroid使用調用圖、操作碼和權限信息,把Android應用中的敏感行為建模為行為子圖集(behavior subgraph set),通過查找相似惡意應用代碼片段檢測惡意應用.Chen等人[105]使用克隆代碼檢測Android惡意應用,該方法分為簽名生成和簽名匹配2個階段.簽名生成階段使用代碼檢測工具NiCad[106]查找惡意應用集中的克隆類,通過基于相似子集的方法將不同的惡意應用聚類成不同的集合,并取每個克隆類的代表性示例作為這個類的簽名,構成簽名集合.簽名匹配階段以增量模式使用NiCad在簽名集合中匹配良性應用和惡意應用克隆示例.Meng等人[107]提出了基于確定性符號自動機的檢測模型,通過總結惡意應用家族的代表性行為特征來檢測惡意應用的變種.
5.2.3 其他靜態(tài)檢測方法
此外,還有一些利用簽名、Intent、APK文件等其他靜態(tài)特征的Android惡意應用檢測方法.
應用簽名相當于程序的唯一標識,用于應用編譯打包后的身份驗證,劉新宇等人[108]提出了基于APK簽名信息反饋的檢測方法,根據對APK簽名的驗證和篩選來檢測惡意應用.現(xiàn)有部分方法捕獲應用程序和Android系統(tǒng)的交互,而Xu等人[109]關注應用程序內部或應用程序間的通信,提出Intent組件檢測方法ICCDetector.
研究人員除了將操作碼序列轉圖像外,還可將Android可執(zhí)行文件APK轉為圖像進行檢測,Pinhero等人[110]提出了基于惡意應用可視化和深度學習的惡意應用檢測方法,將APK轉為灰度、RGB和Markov Image,然后使用Gabor濾波器進行紋理分析,最后將圖像作為輸入提供給12個不同的神經網絡進行檢測.
表4對部分具有代表性的基于其他特征的Android惡意應用檢測方法進行了對比.由于部分論文未提供數據集來源,在數據集來源和數量列僅給出了應用數量.動靜態(tài)結合方法的優(yōu)點是可檢測代碼混淆加密等代碼保護技術和代碼熱更新技術的惡意應用,提升了檢測性能;缺點是由于應用在模擬器或真實設備中運行以收集動態(tài)特征,導致時間消耗增大且魯棒性較差.基于相似代碼片段檢測的方法可用于識別重復和相似的代碼,優(yōu)點是可識別具有相似惡意代碼模塊的應用,可有效對惡意應用所屬家族進行歸類,缺點是檢測未知類型的惡意應用誤報率較高.
Table 4 Comparison of Android Malware Detection Methods Based on Other Features表4 基于其他特征的Android惡意應用檢測方法對比
在評估Android惡意應用檢測方法的有效性時,需要采用合理評價指標,并使用有代表性的Android應用數據集.本節(jié)從2方面出發(fā),總結常用的Android應用數據集和評價指標.
Android惡意應用檢測研究離不開有效的數據集支撐.在表1~4給出了此前研究中常用的良性應用和惡意應用數據集.其中,大多數研究人員使用的良性應用數據集來自Google Play應用商店.Google Play中的應用在上架發(fā)布前會經過Google Play Protect的安全檢測,雖然可能仍會含有惡意應用,但是數量極少,通??烧J為是良性應用.由于Google Play應用商店的應用無法直接下載,爬取也較為困難,Androzoo[111]平臺收集了大量的應用,包括Google Play應用商店的應用,可作為良性應用數據集備選方案.
早期對Android惡意應用的研究主要通過研究人員自行收集數據集,以對所提出方法的有效性進行評估.Genome,Drebin,AMD是Android惡意應用檢測問題研究中使用最多的惡意數據集.Zhou等人[112]最早共享出Genome數據集,Genome里面包含49個家族,共1 260個惡意應用,應用分布年份在2010—2011年間.Arp等人[7]收集了Drebin數據集,該數據集包含179個家族,共5 560個惡意應用.Wei等人[113]共享了AMD (Android malware dataset)數據集,AMD數據集包含24 650個惡意應用.Kadir等人[114]針對Android僵尸網絡的研究工作收集了數據集Botnet,其共包括1 929個僵尸網絡惡意應用.Wang等人[115]根據McAfee,F(xiàn)ireEye,Kaspersky等10家安全公司發(fā)布的移動安全報告,收集創(chuàng)建了包含148個惡意應用家族,共4 534個惡意應用的數據集MalRadar,并從分發(fā)渠道、安裝方法、激活方法、惡意行為和反分析技術等方面進行了描述.關注到近年來COVID-19相關的惡意應用較為泛濫的問題,Wang等人[116]系統(tǒng)地對COVID-19相關的應用進行分析,構建了含有4 322個應用的COVID-19相關應用數據集,其中611個為惡意應用.這些惡意應用數據集有力推動了Android惡意應用檢測技術的發(fā)展.
隨后出現(xiàn)的惡意應用共享平臺,收集了用戶提交的大量惡意應用,可供研究人員下載使用.例如OmniDroid[117],Koodous,Contagio,Pwnzen,VirusShare等.表5給出了常用的惡意應用數據集和惡意應用共享平臺,其中,應用分布年份代表該數據集所收集應用的年份.從表5中可以看出Koodous,MalRadar,Androzoo提供了一些近年來出現(xiàn)的惡意應用.
Table 5 Datasets of Malware Application表5 惡意應用數據集
在Android惡意應用檢測過程中,研究人員最常使用的評估分類模型指標有準確率(Accuracy)、誤報率(ErrorRate) 、精確率(Precision)、召回率(Recall)、F1值、ROC曲線和AUC值等.在表1~4展示了各參考文獻中采用的評價指標及最優(yōu)性能.除ROC曲線外,其余評價指標都需要通過混淆矩陣計算,Android惡意應用檢測的混淆矩陣如表6所示.
Table 6 Confusion Matrix表6 混淆矩陣
Accuracy是系統(tǒng)對整個樣本的檢測能力,即將惡意應用檢測為惡意應用,將良性應用檢測為良性應用的能力,計算為
ErrorRate與Accuracy相反,表示預測錯誤的樣本(FP和FN)在所有樣本中占的比例,計算為
Precision是實際為惡意應用的個數占檢測為惡意應用的個數之比,計算為
Recall是被正確識別出來的惡意應用個數與測試集中所有惡意應用個數的比值,計算為
F1值(F1-Measure)是Precision和Recall的調和平均值,計算為
受試者工作特征曲線(receiver operating characteristic, ROC),ROC曲線橫坐標為假正率(false positive rate, FPR),縱坐標為真正率(true positive rate, TPR).根據ROC曲線面積(area under the curve, AUC)值判斷分類器的優(yōu)劣,AUC取值范圍是0~1,越靠近1,性能越好.
本文對Android惡意應用靜態(tài)檢測方法的最新研究技術成果進行了回顧和總結.首先,對Android應用靜態(tài)特征進行了分析;然后,將現(xiàn)有惡意Android檢測靜態(tài)方法分為基于權限的方法、基于API的方法、基于操作碼的方法、基于其他靜態(tài)特征的方法4類,分別對各類方法進行了歸納總結,并比較了不同方法的優(yōu)缺點;最后,介紹了在Android惡意應用檢測研究中常用的數據集和評價指標,以方便對后續(xù)提出的檢測方法進行全面地評估.雖然研究人員針對Android惡意應用靜態(tài)檢測方法取得了大量研究成果,但是還存在缺少統(tǒng)一的Android實驗數據集,難以提取經加殼、混淆等處理后應用的靜態(tài)特征,未能充分利用多類特征的互補性提升檢測精度和檢測新類型的惡意應用能力較弱等局限性.基于上述分析,本文提出Android惡意應用靜態(tài)檢測4個值得進一步研究的方向:
1)構建持續(xù)更新的Android應用開放數據集.Android應用數據集對實驗結果有著至關重要的影響,盡管研究人員已共享了大量Android惡意應用數據集,其中一些惡意應用數據集[7,112-113]被使用的次數也較多,但是其中存在部分發(fā)布時間較久的惡意應用,可能影響方法評估的有效性,且缺少代表性強、認可度高的開放數據集.另外,Android惡意應用的更新?lián)Q代較為頻繁,需要提供開放接口以面向用戶收集最新出現(xiàn)的惡意應用.構建持續(xù)更新的Android應用開放數據集有助于將研究人員更公平和全面地評估所提出的惡意應用檢測方法.
2)提升自動化提取特殊Android應用靜態(tài)特征能力.Android惡意應用靜態(tài)檢測方法中使用了權限、API和操作碼等多種特征,快速準確地提取特征是決定惡意應用檢測性能的關鍵環(huán)節(jié).研究人員在實驗中所使用的Android惡意應用數據集通常經過篩選和預處理,確保能夠從中提取靜態(tài)特征.然而,在真實場景下,Android惡意應用常會使用代碼混淆、加密、加殼和反編譯對抗等代碼保護技術,以及代碼熱更新的方法,導致直接提取靜態(tài)特征失敗,而人工脫殼反匯編提取特征則效率較低.為提升自動化提取特殊Android應用靜態(tài)特征能力,需研制更為成熟有效的Android應用反編譯脫殼等工具.
3)融合多類特征綜合提升Android惡意應用檢測性能.權限、API和操作碼等不同類型的信息可從不同角度表征Android應用的行為,可通過融合多類特征以提升Android惡意應用檢測的性能.例如,可針對每種靜態(tài)特征類型分別搭建惡意應用檢測模型,再通過集成學習結合多類模型,以提高檢測準確率.除靜態(tài)特征外,還可嘗試加入資源申請、交互行為等動態(tài)特征以進一步提升Android惡意應用檢測性能.
4)提供有效的自適應方法檢測新增Android惡意應用.隨著移動互聯(lián)網技術的發(fā)展,Android系統(tǒng)版本不斷升級,惡意應用出現(xiàn)的場景也在不斷變化,例如,在人們焦慮COVID-19的時候,部分惡意應用偽造COVID-19疫苗預約和注冊的功能來進行網絡釣魚和詐騙[116].由于靜態(tài)特征和新業(yè)務場景變化,導致基于已有惡意應用構建的模型在檢測新出現(xiàn)的惡意應用時面臨著檢測模型退化、檢測準確率下降等問題[36],這通常需要收集新數據集再次進行模型訓練,并且增加了時間和經濟成本.未來可使用增量學習方法構建可持續(xù)更新的Android惡意應用檢測模型,有效學習新增Android應用樣本特征,避免重新訓練模型帶來的開銷,并保持相對較高的準確率,以更好地適用于移動應用市場等需要處理大量新增待檢測應用的場景.
作者貢獻聲明:潘建文負責文獻資料的整理和分析、論文主體撰寫及修訂等工作;崔展齊指導論文選題、論文整體思路框架設計并修改論文;林高毅整理資料并修改論文;陳翔和鄭麗偉提出指導意見并修改論文.