移動終端側(cè)的惡意軟件檢測概述
?一、發(fā)展背景及意義
Android系統(tǒng)是由Google公司于2007年發(fā)布的一種基于Linux內(nèi)核的操作系統(tǒng)。作為全球最受歡迎的移動端操作系統(tǒng),Android擁有來自190多個國家超過25億的活躍用戶,所占市場份額超過85%[1]。由于其高度的開源性及自由性,許多開發(fā)人員紛紛投身于應(yīng)用軟件開發(fā)工作。截至2020年,Google Play商店中存在290萬個應(yīng)用程序,下載次數(shù)高達1080億次[1]。但與此同時,大量惡意軟件利用第三方應(yīng)用市場的審查漏洞趁虛而入,為智能手機用戶帶來了巨大的危害,包括隱私泄露、資費消耗等。近年來,惡意軟件檢測已經(jīng)成為熱門研究領(lǐng)域,各大安全廠商也開發(fā)出了各自的安全檢測軟件,如AVG Antivirus、Norton Mobile Security等。但隨著Android版本的更新,惡意軟件的攻擊方法不斷升級,現(xiàn)有的安全檢測軟件效果有待進一步的提升。
二、Android系統(tǒng)安全機制
Android 系統(tǒng)是基于Linux 內(nèi)核實現(xiàn)的,同時在Linux 原有的安全機制基礎(chǔ)上結(jié)合移動端的特性,設(shè)計了應(yīng)用程序簽名機制、權(quán)限機制、進程沙箱隔離機制等安全機制,保證了應(yīng)用程序在發(fā)布、安裝和運行過程中的安全[2]。
1. 應(yīng)用程序簽名機制
應(yīng)用程序簽名機制指的是在應(yīng)用程序發(fā)布時,由開發(fā)者采用私鑰進行簽名,在安裝程序時,Android系統(tǒng)使用公鑰對應(yīng)用程序進行驗證溯源,從而與開發(fā)者間建立信任關(guān)系。通過數(shù)字簽名,系統(tǒng)一方面可以實現(xiàn)對程序的版本控制,另一方面也可以對應(yīng)用程序安裝包的完整性進行驗證,同時可以有效檢測重打包攻擊、應(yīng)用篡改等惡意行為,從而過濾惡意應(yīng)用。但攻擊者有時也會偽造第三方應(yīng)用簽名,逃過系統(tǒng)檢測。簽名機制按照簽名對象可以分為兩類:對程序安裝包解壓后的非目錄和非過濾文件進行簽名驗證,以及對壓縮安裝包整體進行簽名驗證。
2. 權(quán)限機制
權(quán)限機制指的是應(yīng)用程序在安裝時和運行過程中,向系統(tǒng)申請所需服務(wù)的權(quán)限,并根據(jù)獲取的權(quán)限運行相應(yīng)服務(wù),其定義信息包括包名、標(biāo)簽、描述和保護級別等[3]。
3. 進程沙箱隔離機制
圖1
進程沙箱隔離機制指的是應(yīng)用程序始終運行于系統(tǒng)為其開辟的獨立Dalvik虛擬機中,擁有獨立的運行空間和系統(tǒng)資源空間,從而保證應(yīng)用程序間的獨立,限制不可信程序的權(quán)限。具體來說,每個應(yīng)用程序在安裝時都被系統(tǒng)賦予了唯一的UID,在程序運行期間,系統(tǒng)隔離非同一UID的應(yīng)用程序及資源,使其互不干擾,進而使各個應(yīng)用程序的資源都得到安全保護。
三、常見的惡意軟件攻擊方法
1. 重打包攻擊
重打包攻擊指的是攻擊者對原始應(yīng)用程序進行反編譯,將惡意代碼植入應(yīng)用程序中,然后通過偽造應(yīng)用簽名通過系統(tǒng)檢測,重新打包為第三方應(yīng)用進行發(fā)布。
2. 提權(quán)攻擊
提權(quán)攻擊是指攻擊者利用Android系統(tǒng)漏洞或第三方代理軟件等,提升普通應(yīng)用程序的系統(tǒng)服務(wù)權(quán)限,從而獲得其所需權(quán)限。一旦惡意應(yīng)用擁有較高的系統(tǒng)權(quán)限,就會對系統(tǒng)造成巨大的安全威脅。
3. 其他攻擊
隨著Android系統(tǒng)的更新與發(fā)展,市場上出現(xiàn)了許多其他的惡意軟件攻擊方法。比如利用剪切板功能簡單且無需申請額外權(quán)限的特點,惡意篡改剪切板內(nèi)容,危害系統(tǒng)安全;植入抓取代碼,竊取用戶隱私信息,進行電子詐騙;利用調(diào)試接口傳播惡意軟件等。
四、惡意軟件檢測的基本方法
惡意軟件檢測問題本質(zhì)上是一個分類問題,對給定的應(yīng)用程序,判斷其為惡意軟件還是正常軟件。根據(jù)解決分類問題的一般性方法,惡意軟件檢測的大致流程如圖2所示。
圖2
首先獲取谷歌應(yīng)用市場和第三方應(yīng)用市場中的正常軟件程序包,以及惡意軟件程序包,構(gòu)成數(shù)據(jù)集;然后從中抽取特征信息,并進行特征預(yù)處理;最后根據(jù)特征值信息,基于規(guī)則或分類算法完成分類任務(wù)。
Android應(yīng)用程序安裝包是一個后綴為.apk的壓縮文件,解壓后可得如下文件:
表1
常見的惡意軟件檢測方法,主要是基于AndroidManifest.xml文件和classes.dex文件進行特征抽取。
AndroidManifest.xml文件是Android應(yīng)用程序的全局配置文件,提供了在程序運行前系統(tǒng)所需的各種必要信息,包括應(yīng)用的包名、版本號、權(quán)限信息、硬件信息等。
classes.dex文件是應(yīng)用程序的二進制可執(zhí)行文件,java代碼首先會被編譯為.class文件,得到的類文件被翻譯成Dalvik字節(jié)碼,最終合并為一個或多個可執(zhí)行dex文件[4]。在惡意軟件檢測方法中,有的研究者會首先對其進行反編譯,然后再抽取特征,有的研究者則會直接利用原始字節(jié)碼序列或?qū)ζ溥M行截取、處理。
五、Android惡意軟件檢測方法
1. 按照不同的特征抽取方法,可以分為靜態(tài)檢測、動態(tài)檢測和混合檢測[5]。
(1)靜態(tài)檢測方法
靜態(tài)檢測方法是指在應(yīng)用程序不運行的情況下,基于應(yīng)用程序特征進行系統(tǒng)檢測分析[6-7]。其常用的特征包括應(yīng)用權(quán)限、Java代碼、網(wǎng)絡(luò)地址、硬件組件等。靜態(tài)檢測方法優(yōu)點是檢測速度快,缺點是無法有效識別利用了靜態(tài)檢測對抗技術(shù)(如代碼混淆)的惡意應(yīng)用程序。常見的靜態(tài)檢測方法包括基于應(yīng)用程序安裝包文件特征的檢測、基于應(yīng)用程序代碼分析的檢測、基于應(yīng)用布局特征的檢測等。
基于應(yīng)用程序安裝包文件特征的檢測方法,關(guān)注表1所示的簽名文件、清單文件、資源文件及代碼文件等,從中抽取特征表示,通過相似性比較或模型訓(xùn)練的方法完成惡意應(yīng)用檢測。比如Zhou等[8]提出DroidMoss模型抽取應(yīng)用的代碼特征,采用模糊哈希的方法生成應(yīng)用程序特定的指紋信息,然后進行相似度比較,從而判斷是否為惡意應(yīng)用程序,但該方法無法有效應(yīng)對代碼混淆等對抗攻擊。Nicheporuk等[9]基于API方法調(diào)用和權(quán)限信息,采用卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型完成分類。
基于應(yīng)用程序代碼分析的檢測方法,更加關(guān)注代碼文件,將應(yīng)用程序代碼抽象為控制流圖、API函數(shù)圖或程序依賴圖,然后再進行相似性比較。比如Crussell等[10]提出DNADroid模型基于應(yīng)用程序依賴圖完成相似性計算,有效應(yīng)對重打包攻擊。為了提升對重打包應(yīng)用的檢測效率,同時有效對抗代碼混淆攻擊,汪潤等[11]提出可以進行粗細兩個粒度的檢測并抽取代碼的深層語義信息。該模型首先進行粗粒度檢測,將應(yīng)用程序依賴圖抽象為程序語義特征,計算程序語義特征間相似性,實現(xiàn)快速檢測;對于細粒度檢測,則是將程序依賴圖作為特征,實現(xiàn)更為準(zhǔn)確的惡意應(yīng)用檢測。
基于應(yīng)用布局特征的檢測方法,關(guān)注應(yīng)用程序的UI界面,從中抽取特征信息作為分類依據(jù)。比如Zhang等[12] 提出可以根據(jù)應(yīng)用界面生成界面圖,然后計算圖間的相似性。該方法檢測速度快,但檢測精度有限,因此可以將其與代碼特征相結(jié)合,兼顧檢測速度與精度。
(2)動態(tài)檢測方法
動態(tài)檢測方法是在沙盒環(huán)境中運行程序,并跟蹤程序的API調(diào)用序列、系統(tǒng)調(diào)用、網(wǎng)絡(luò)流量和CPU數(shù)據(jù),以監(jiān)視程序運行期間的數(shù)據(jù)流[5],獲取程序運行過程中的動態(tài)特征。動態(tài)檢測方法的關(guān)鍵點在于如何對程序的全部功能進行檢測,如何保證測試用例的真實性及全面性。該方法在實際應(yīng)用中通常需要占用一定的系統(tǒng)資源且檢測速度較慢,但對于未知惡意軟件的檢測通常具有較好的表現(xiàn)。常見的動態(tài)檢測方法分為兩類:基于應(yīng)用行為分析的檢測和基于污點跟蹤的檢測。
對應(yīng)用行為的分析目標(biāo),可以選擇應(yīng)用程序?qū)ο到y(tǒng)服務(wù)的調(diào)用信息,也可以選擇非系統(tǒng)調(diào)用信息,如實時交互信息或應(yīng)用運行信息等。Tam等[13]設(shè)計了CopperDroid模型,結(jié)合系統(tǒng)調(diào)用和Binder通信行為數(shù)據(jù),重構(gòu)了惡意應(yīng)用程序的高級語義信息,最終輸出惡意行為,包括系統(tǒng)相關(guān)行為和Android相關(guān)行為兩種。該方法可以有效抵抗代碼混淆攻擊,且無需修改系統(tǒng)源碼,部署方便。Gianazza等[14] 提出PuppetDroid模型,基于用戶與應(yīng)用程序的實時交互行為獲取特征信息,進行惡意應(yīng)用檢測,與普通的自動UI方法相比達到了更高的代碼覆蓋率。
基于應(yīng)用行為數(shù)據(jù)獲取的特征表示,忽視了數(shù)據(jù)間的關(guān)聯(lián)性信息,且無法刻畫程序的全流程行為。為解決該問題,Enck等[15]提出基于污點跟蹤的惡意軟件檢測方法——TaintDroid。該方法從污染源標(biāo)記敏感信息,動態(tài)追蹤數(shù)據(jù)流和系統(tǒng)調(diào)用,實現(xiàn)了變量級、信息級、方法級和文件級的污點跟蹤。
(3)混合檢測方法
無論是靜態(tài)檢測方法還是動態(tài)檢測方法,都具有一定的局限性。靜態(tài)檢測無法捕獲應(yīng)用程序在運行時的行為信息,而動態(tài)檢測無法實現(xiàn)完整的代碼覆蓋范圍。因此,有研究者提出混合檢測方法,即靜態(tài)和動態(tài)分析組合的方法,可以使Android惡意軟件檢測更加準(zhǔn)確和高效。Onwuzurike等[16]在靜態(tài)檢測和動態(tài)檢測中使用了相同的建模方法,都基于API調(diào)用序列構(gòu)建馬爾科夫鏈,最終比較兩種方法的檢測性能。結(jié)果表明,混合檢測的方法具有更好的性能表現(xiàn)。
參考文獻
[1] Android Statistics (2022) https://www.businessofapps.com/data/android-statistics/
[2] Google Inc. Android security[EB/OL]. (2013-06-26)[2019-10-07]. https://source.android.com/tech/security/.
[3] 王思遠, 張仰森, 曾健榮, 等. Android 惡意軟件檢測方法綜述[J]. 計算機應(yīng)用與軟件, 2021, 38: 9.
[4] 李佳琳, 王雅哲, 羅呂根, 等. 面向安卓惡意軟件檢測的對抗攻擊技術(shù)綜述[J]. 信息安全學(xué)報, 2021, 6(4): 28-43.
[5] Meijin L, Zhiyang F, Junfeng W, et al. A Systematic Overview of Android Malware Detection[J]. Applied Artificial Intelligence, 2022, 36(1): 2007327.
[6] 孫偉,孫雅杰,夏孟友. 一種靜態(tài)Android 重打包惡意應(yīng)用檢測方法[J]. 信息安全研究, 2017,3( 8) : 692 - 700.
[7] 蔣煦,張長勝,戴大蒙,等. Android 平臺惡意應(yīng)用程序靜態(tài)檢測方法[J]. 計算機系統(tǒng)應(yīng)用, 2016, 25( 4) : 1 - 7.
[8] Zhou W, Zhou Y, Jiang X, et al. Detecting repackaged smartphone applications in third-party android marketplaces[C]//Proceedings of the second ACM conference on Data and Application Security and Privacy. 2012: 317-326.
[9] Nicheporuk A, Savenko O, Nicheporuk A, et al. An Android Malware Detection Method Based on CNN Mixed-Data Model[C]//ICTERI Workshops. 2020: 198-213.
[10] Crussell J, Gibler C, Chen H. Attack of the clones: Detecting cloned applications on android markets[C]//European Symposium on Research in Computer Security. Springer, Berlin, Heidelberg, 2012: 37-54.
[11] 汪潤, 唐奔宵, 王麗娜. DroidFAR: 一種基于程序語義的 Android 重打包應(yīng)用抗混淆檢測方法[J]. 武漢大學(xué)學(xué)報: 理學(xué)版, 2018, 64(5): 407-414.
[12] Zhang F, Huang H, Zhu S, et al. ViewDroid: Towards obfuscation-resilient mobile application repackaging detection[C]//Proceedings of the 2014 ACM conference on Security and privacy in wireless & mobile networks. 2014: 25-36.
[13] Tam K, Fattori A, Khan S, et al. Copperdroid: Automatic reconstruction of android malware behaviors[C]//NDSS Symposium 2015. 2015: 1-15.
[14] Gianazza A, Maggi F, Fattori A, et al. Puppetdroid: A user-centric ui exerciser for automatic dynamic analysis of similar android applications[J]. arXiv preprint arXiv:1402.4826, 2014.
[15] Enck W, Gilbert P, Han S, et al. Taintdroid: an information-flow tracking system for realtime privacy monitoring on smartphones[J]. ACM Transactions on Computer Systems (TOCS), 2014, 32(2): 1-29.
[16] Onwuzurike L, Almeida M, Mariconti E, et al. A family of droids-Android malware detection via behavioral modeling: Static vs dynamic analysis[C]//2018 16th Annual Conference on Privacy, Security and Trust (PST). IEEE, 2018: 1-10.?