進入移動互聯時代以來,隨著日益豐富的應用生態,Android系統的市場占有率也隨之增長。與IOS不同,Android應用軟件下載更加方便快捷,不同的軟件市場都可以下載,例如,騰訊手機管家,360手機衛士,Google官方市場等。不過,如此多的軟件來源雖然為Android用戶提供了方便,但因為其不同的軟件安全標準也給用戶帶來了一定的安全隱患[1]。Android軟件不需要安全機構的認證也可上線使用,軟件開發者僅靠簽名與其開發軟件建立信任關系,而且Android軟件被反編譯進行修改的成功率比較大,這也無疑增加了Android惡意軟件的生存空間。此外黑客們攻擊Android操作系統所獲取的收益遠大于攻擊其他操作系統,這也是惡意軟件瘋狂增長的一大誘因[2]。層出不窮的惡意軟件和脆弱的操作系統對用戶的隱私信息和設備的正常使用造成了極大的威脅[3]。惡意軟件不僅會盜取隱私數據,還會濫用系統資源,擾亂設備的正常使用。而且如果帶有惡意軟件的智能手機接進了一個機構的網絡中,那么該機構其他設備的系統和數據都會受到很大的威脅[4]。根據CISCO的一份報告[5]顯示,大約99%的手機惡意軟件都是運行在Android平臺中。因此,在當前設計出一種高效的Android惡意軟件檢測方案是很有必要的。
對于Android惡意軟件檢測方案的研究越來越被重視。文獻[6]中實現了使用啟發式過濾器來檢測新的Android惡意軟件,同時通過Android軟件所獲取的權限來審核其是否為惡意軟件。文獻[7]提出通過對Android軟件所獲取的敏感權限進行語義檢索以及分析其所獲取權限之間的聯系來判斷其是否為惡意軟件。文獻[8]通過總結Android惡意軟件所獲取的權限提出了一種以所需權限為依據的檢測方法。文獻[9]中設計了一種靜態檢測工具,此檢測工具通過對應用程序AndroidManifest.xml文件中數據流傳輸是否符合安全規則的分析來判斷其是否為惡意軟件。文獻[10]中提出的方法基于應用程序中的權限計算了程序的威脅系數,并發現樸素貝葉斯算法能夠在基于威脅系數的應用程序分類方法中得到最優結果。文獻[11]提出了DroidSIFT系統,該系統首先對API調用的關聯關系進行建模,然后比較所得到的關聯關系圖,最后使用樸素貝葉斯算法進行分類判斷。上述方案對Android惡意軟件起到了一定的檢測作用,但是這些方案都存在著檢測準確性差或者檢測效率低等方面的問題。
針對上述問題,在本文中作者通過分析Android惡意軟件的實現原理,基于云安全架構提出一種靜態檢測方案,該方案借鑒云安全架構來構建檢測系統并設計異常檢測算法,使得Android惡意軟件的靜態檢測工作更加高效、準確。
文章第一部分對目前安全惡意軟件檢測方案的研究進行了比較分析,第二部分對云安全技術、分類學習算法等相關技術進行了介紹與對比,第三部分在分析了Android惡意軟件的實質后進行了基于云安全架構的整體方案設計,第四部分對客戶端系統進行了設計,其主要功能模塊是APK文件信息收集和評估結果顯示,第五部分對云端服務器系統進行了設計,其主要功能模塊為簽名比對、APK文件反編譯、源碼的靜態分析和結果的評估,所運用的技術主要是Android反編譯技術和機器學習分類算法,第六部分對方案進行了實驗評估,最后總結了方案的優勢。
云安全技術是先進的云計算技術的整合,作為云計算技術中的重要分支在安全領域中的應用卓有成效[12]。在云安全技術中,客戶端的請求將根據服務器端相應的安全策略進行處理,處理結果直接反饋給客戶端。此外,服務器端的安全策略會根據客戶端定期獲取惡意軟件的最新信息而進行更新。
Android惡意軟件檢測方案主要分為動態檢測和靜態檢測兩種[13]。動態檢測部署在手機上實時運行進行檢測,會消耗一定的內存和電量,而且動態檢測的作用主要是對惡意行為發生后進行檢測和攔截,無法完全地消除惡意行為帶來的安全隱患。在本文中所設計的Android惡意軟件檢測方案采用了靜態檢測的思路,靜態檢測主要作用于Android程序安裝之前,通過對程序進行源碼級的分析來檢測該程序是為惡意軟件,從而優質快速的減少程序的惡意行為,保證了用戶信息的相對安全。
分類學習算法是一種對大數據進行處理的技術,目前被廣泛運用與計算機相關的各個領域中[14]。分類學習算法主要包括分類器訓練和分類器實施兩部分。在分類器訓練階段中,首先需要準備一個包含大量已知類別APK文件的訓練集,接著通過對每個APK文件進行分析來獲取該文件的向量模型,然后利用這些文件的向量模型和對應的類別標記生成所需要的分類器。在分類器實施階段中,選擇一個非訓練集中的APK文件來進行測試,首先獲取該APK文件的向量模型,然后使用分類器對此向量模型進行分類,便可以得到該APK文件的分類結果。
Android惡意軟件的實質就是利用一些涉及到用戶敏感信息的API進行特殊的排列組合來完成惡意行為[15]。例如,abortBroadcast()的功能是用來中斷廣播,它與用來發送短信息的sendTextMessage()相結合,會實現屏蔽短信息并轉發的功能。在Android應用程序的開發中,如果應用程序中要調用一個API來實現一些功能,則需要在AndroidManifest.xml配置文件中聲明與該API所對應的系統權限。而Android系統采用的是靜態管理的權限控制機制,無法有效地對安裝后的應用程序進行權限管理,這無疑增加了惡意軟件的生存能力。所以,分析Android應用程序的AndroidManifest.xml配置文件,通過其中的敏感權限定位敏感API,然后分析敏感API的排列組合是否具有惡意行為,可以判斷出該應用程序是否為惡意軟件。
隨著科學技術的日益成熟,手機平臺的安全軟件也得到了快速發展,純粹的Android惡意程序也隨之減少,但是那些通過編譯普通應用程序將惡意代碼嵌入被破解編譯的普通應用程序中從而通過安全軟件檢測以實現惡意功能的惡意程序則與日俱增,所以說,被修改過的Android程序通常情況下更有可能是惡意程序,而判斷一個Android應用程序是否被修改的依據就是判斷其簽名文件是否被修改。Android程序的三個簽名文件,MANIFEST.MF、CERT.SF和CERT.RSA,保存著該程序中各個文件的加密信息。每一個應用程序安裝包中的簽名文件都是唯一的,被修改后的應用程序安裝包中的簽名文件無法再與原應用程序中的簽名文件保持一致。所以,通過對簽名文件信息的匹配,可以判斷出該應用程序是否被修改過。

圖1 檢測方案結構
在本文中所設計的檢測方案借鑒于云安全架構,分為客戶端和服務器端兩部分。客戶端部署在裝有Android系統的移動終端上,服務器系統部署在云端的服務器上。客戶端的主要功能是搜集用戶所要安裝的APK文件的相關信息,將APK文件上傳到云端服務器上,接收云端服務器的反饋信息并顯示給用戶,向服務器發送客戶端上的黑白名單,接收服務器返回的黑白名單并更新。服務器系統的主要功能是接收客戶端所上傳的APK文件,對APK文件進行反編譯和靜態分析,對該文件的簽名信息進行比對,收集檢測結果并反饋給客戶端,收集客戶端發送的黑白名單并將黑白名單進行整合處理后共享給各個客戶端。負責客戶端與云端信息傳輸的網絡通信模塊在客戶端和服務器系統中都有嵌入,該模塊通過現有web技術來實現,本文將不再詳細解說。

圖2 檢測步驟
檢測方案的主要工作步驟如下:
1)客戶端確定所要進行檢測的APK文件,收集該文件的名稱、版本和下載來源信息,然后將APK文件和所獲取的相關信息發送給服務器端。
2)服務器系統接收到客戶端發送來的信息后,將該APK文件進行解壓縮和反編譯,然后根據官方市場中相同的APK文件對該文件的簽名信息進行比對。
3)服務器系統根據反編譯所得到的配置文件分析該軟件所用到的敏感權限,并通過其對敏感API進行定位,然后提取出敏感API的排列組合信息。
4)服務器系統將所得到的敏感API的排列組合信息,使用所設計的異常檢測算法將其與從官方市場中獲取的相同APP進行對比處理,判斷其是否具有異常情況。
5)服務器系統將簽名比對的結果和排列組合信息的處理結果進行整合評估,判斷該軟件是否為惡意軟件,將其加入到黑白名單并反饋到客戶端,由客戶端顯示給用戶。
Android操作系統的移動終端設備是客戶端系統的主要部署環境,主要功能模塊是APK文件信息收集和評估結果顯示。
APK文件信息收集主要作用是收集APK文件的名稱、版本和下載來源等相關信息,這些信息收集完畢后會和APK文件一同發送到云端的服務器系統中。
黑白名單機制的主要作用是在Android手機上完成惡意軟件的安裝攔截功能,并且與服務器端進行信息交互,手機本地的黑白名單與云端服務器進行實時同步,同時接受云端服務器將黑白名單信息進行實時共享以及更新。
云端服務器系統生成評估結果并將評估結果反饋給客戶端,接到反饋的客戶端會將評估結果傳輸到移動終端,從而以視圖的形式展示該軟件的檢測信息給用戶。
本文檢測方案的最重要組成部分就是云端服務器系統,其主要功能模塊為簽名比對、APK文件反編譯、源碼的靜態分析和結果的評估,所運用的技術主要是Android反編譯技術和機器學習分類算法。在對APK文件進行檢測之前,服務器系統會根據該文件的名稱、版本號和下載來源信息來確定該軟件是否在黑白名單中,若已經檢測過則直接向客戶端反饋信息,若沒有進行過檢測則對其進行檢測工作。其檢測流程如圖3所示[17]。

圖3 服務器檢測流程
APK文件經過解壓縮后就會得到保存有簽名信息的文件夾,該文件夾下存放著CERT.RSA、CERT.SF和MANIFEST.MF三個簽名文件,對這些簽名文件中的信息進行提取后就可進行簽名信息的比對工作。簽名比對的工作步驟如下:
1)將所要進行檢測的APK文件進行解壓縮得到其簽名文件,并對簽名文件中的簽名信息進行提取。
2)根據客戶端所上傳的APK文件的相關信息,在Android官方市場中找到并下載相對應的軟件,并對其進行解壓縮和簽名信息的提取。
3)對兩次獲得的簽名信息進行匹配,若簽名信息相同則說明該軟件未被修改,若簽名信息不同則說明該軟件被修改的可能性極大。簽名檢測使用的算法和API信息比對檢測都使用所設計的異常檢測算法,算法偽代碼如表1所示。
4)將匹配結果發送到服務器的評估模塊中用來進行最后的結果評估。
APK文件的反編譯就是應用Android的反編譯技術,所需要的工具為APKTool、dex2jar和jd-gui這三種工具。APK文件反編譯后,該軟件中擁有權限信息的AndroidManifest.xml文件和能夠閱讀該軟件Java源代碼的jar文件將會被反編譯者得到。APK文件反編譯的工作步驟如下:
1)將目標軟件的APK文件復制到APKTool工具的根目錄下,使用反編譯指令apktool.bat d test.apk test得到該程序的AndroidManifest.xml配置文件。
2)將目標軟件的APK文件解壓縮,得到其classes.dex文件。將該文件復制到dex2jar工具的根目錄下,使用反編譯指令dex2jar.bat classes.dex得到對應的classes_dex2jar.jar文件。然后使用jd-gui工具打開classes_dex2jar.jar文件,查看該程序的Java源代碼。
根據APK文件反編譯的結果來對該軟件進行源碼級別的靜態分析。AndroidManifest.xml中文件可以得到該軟件中所調用的權限信息,能夠用來定位敏感API。深度研發的jar文件功能十分強大,可以直接用于部署和封裝庫,也可以直接使用到組件以及插件程序中,并且能夠被大型編譯器和Java虛擬機直接操作,能夠從中提取出所有的Java字節信息和內容。在該功能模塊中還會用到機器學習分類算法來對所提取到的敏感API信息進行分類處理。源碼靜態分析的工作步驟如下:
1)通過AndroidManifest.xml文件中敏感權限的信息對源碼中的敏感API進行定位。
2)找到敏感API的位置后,使用基于學習分類的異常檢測算法首先提取敏感API的排列組合信息并生成向量模型,然后通過預生成的分類器對所生成的向量模型進行分類處理得到分類結果。異常檢測算法的偽代碼如表1所示。

表1 本地學習算法

表2 異常檢測算法
3)將所得到的分類結果發送到服務器的評估模塊中來進行最后的結果評估。
結果評估是根據簽名比對和源碼的靜態分析兩個模塊所發送的結果來評估該軟件的安全性。評估規則如下:
1)若簽名信息一致,不存在惡意行為,則該軟件安全;
2)若簽名信息一致,存在惡意行為,則該軟件為惡意軟件;
3)若簽名信息不一致,不存在惡意行為,則該軟件存在安全風險;
4)若簽名信息不一致,存在惡意行為,則該軟件為經過篡改的惡意軟件。
最后的評估結果由服務器端發送到客戶端并顯示給客戶。
針對本文中所設計的靜態檢測方案,我們收集了1143個惡意軟件樣本和2937個正常應用程序樣本來對該方案進行評估,驗證其檢測準確度和檢測效率。另外我們也選擇了一些常見的安全軟件使用同樣的惡意樣本來進行比較。

規則1)為評估實驗中計算檢測準確度的公式,TP為正確判斷出的惡意樣本數,TN為正確判斷出正常樣本的數量,FP為沒有判斷成功的惡意樣本數量,FN為沒有判斷成功的正常樣本數量。各個檢測系統的檢測準確度結果如表3所示。

表3 系統檢測準確度
從表1中可以看出,針對我們收集的檢測樣本所進行的準確度評估實驗中,我們所設計的惡意程序靜態檢測方案的檢測準確度要優于百度、金山和360的安全軟件。不過除了檢測準確度之外,我們還應該考慮單個檢測流程所產生的時間損耗,各個檢測系統的檢測時間如表4所示。

表4 系統檢測時間損耗
從表4中可以看出,我們所設計的檢測系統在檢測流程上花費的時間最多,我們經過分析后發現該問題產生的原因主要是APK從客戶端傳輸到云端的網絡時間損耗以及部署在云端服務器的性能劣勢。關于如何提高檢測效率,減少檢測花費的時間是我們今后研究工作的一個主要方向。
本文設計了一種基于云安全架構的Android惡意軟件靜態檢測方案,該方案具有以下優勢:
1)本方案的設計立足于云端服務器,使用功能完備的服務器處理大量復雜的操作過程,從而極大地減輕移動設備終端的使用率,并且提高了檢測效率。
2)本方案中設計了基于分類學習的異常檢測算法,用來對所提取的向量模型進行分類檢測處理,可以很大地提高靜態檢測工作的準確率。
本方案同樣具備不足之處,首先缺乏足夠數量的惡意軟件樣本來進行分類器訓練,這會影響分類器的準確性;而且本方案所花費的檢測時間雖然相對較少,但是距離理想的標準還有一定的差距,更加系統化地實現該檢測方案,精簡檢測步驟,減少檢測花費的時間也將是進一步研究工作的主體。
參考文獻:
[1]2015年中國手機安全狀況報告.360互聯網安全中心[EB/OL].2016-03-20.http://zt.360.cn/1101061855.php?dtid=1101061451&did=1101205565.
[2]Mylonas A,Theoharidou M,Gritzalis D.Assessing privacy risks in Android: a user-centric approach[J].Lecture Notes in Computer Science,2014,8418:21-37.
[3]楊歡.協議漏洞挖掘及Android平臺惡意應用檢測技術研究[D].西安電子科技大學,2014.
[4]楊歡,張玉清,胡予濮,等.基于多類特征的Android應用惡意行為檢測系統[J].計算機學報,2014,37(1):15-27.
[5]CISCO. CISCO 2015 annual security report [EB/OL].2015.
[6]Zhou Y, Wang Z, Zhou W, et al. Hey, you, get off my market:Detecting malicious apps in official and alternative Android markets[A].In Proceedings of the 19th Annual Network&Distributed System Security Symposium[C].2012:1-13.
[7]Gianazza A, Maggi F, Fattori A, et al. Puppetdroid: a user-centric ui exerciser for automatic dynamic analysis of similar android applications[J].Eprint Arxiv,2014:1-12.
[8]Feizollah A,Anuar N, Salleh R, et al. Comparative study of k-means and mini batch k-means clustering algorithms in android malware detection using network traffic analysis[A].International Symposium on Biometrics and Security Technologies[C].2014:198-202.
[9]Sanz B, Santos I, Ugarte-Pedrero X, et al. Anomaly detection using string analysis for android malware detection[A].International Joint Conference SOCO’13-CISIS’13-ICEUTE’13[C].2014:469-478.
【】【】
[10]Yerima SY, Sezer S,McWilliams G.Analysis of bayesian classification based approaches for android malware detection[J].Iet Information Security,2014,8(1):25-36.
[11]Zhang M,Duan Y,Yin H,et al.Semantics-aware Android malware classification using weighted contextual API dependency graphs[A].ACM Sigsac Conference on Computer & Communications Security[C].2014:1105-1116.
[12]Cai M, Hou Q-S, Jing F,et al.Research of cloud security communication firewall based on Android platform[A].ICCSEE-13[C].2013.
[13]彭國軍,李晶雯,孫潤康,等.Android惡意軟件檢測研究與進展[J]. 武漢大學學報(理學版),2015,61(1):21-33.
[14]Feizollah A, Anuar N, Salleh R,et al. A review on feature selection in mobile malware detection[J].Digital Investigation,2015,13:22-37.
[15]侯勤勝,曹天杰.安卓惡意軟件的分析與檢測[J].河南科技大學學報(自然科學版),2015,36(5):52-56.
[16]Karim O-E,Xiaokui S,Danfeng Y,et al.Profiling user-trigger dependence for Android malware detection[J].Computer &Security,2015(49):255-273.
[17]候勤勝,曹天杰,陳秀清.基于網絡行為的Android惡意軟件檢測方案[J].安徽大學學報(自然科學版),2016,40(5):32-36.