王歡,來歡,李國棟,田達,梁博
(1.西安工程大學服裝與設計藝術學院, 710048, 西安; 2.西安閻良國家航空高技術產業基地管理委員會, 710089, 西安; 3.西安交通大學網絡中心, 710049, 西安)
?
采用函數調用關系的注入型Android惡意應用檢測
王歡1,來歡2,李國棟3,田達2,梁博2
(1.西安工程大學服裝與設計藝術學院, 710048, 西安; 2.西安閻良國家航空高技術產業基地管理委員會, 710089, 西安; 3.西安交通大學網絡中心, 710049, 西安)
針對注入型Android惡意應用日益泛濫、傳統檢測方法依賴大量已知特征的問題,提出了采用函數調用關系的注入型Android惡意應用檢測方法。該方法無須依賴大量已知特征,僅通過分析注入型Android惡意應用的自身結構特征即可實現對該類惡意應用的有效檢測,并能夠實現對未知惡意代碼家族的識別。所提方法在smali代碼的基礎上構建函數調用關系圖,并進一步進行子圖劃分,通過判定各子圖威脅度確定是否存在惡意行為。檢測過程無需動態行為分析輔助,因此分析檢測時間短、效率高。該方法不僅可以檢測出Android應用是否存在惡意行為,還可根據子圖威脅度確定包含惡意行為的具體代碼。經過對1 260個Android惡意應用和1 000個正常應用的實驗分析發現:所提方法能夠很好地檢測注入型Android惡意應用,當誤報率為8.90%的時候,檢測率達到95.94%,相對于主流Android惡意應用檢測系統Androguard,檢測效果有顯著提升。
Android;惡意代碼;靜態分析;函數調用關系
隨著智能手機的快速發展,Android操作系統成為當前最流行的移動終端平臺。IDC的統計數據顯示,2014年第4季度Android市場占有率達到76.6%[1]。Android系統的快速發展也伴隨著Android惡意應用的出現,攻擊者為了更好地傳播Android惡意應用,會采用注入技術將惡意代碼重打包到當下流行的Android應用程序中,并通過第三方電子市場、Android應用程序分享論壇等途徑進行傳播。Zhou的研究結果表明,第三方電子市場上5%至13%的應用程序屬于注入型Android惡意應用[2]。
Android惡意代碼靜態檢測研究方面,文獻[3]基于API信息構建Android惡意應用的檢測模型,取得了較好的檢測效果。Wu等提取Android應用程序中的權限、組件以及Intent等信息構建特征向量,并利用k-均值算法建立惡意代碼檢測模型[4]。
Android惡意代碼動態檢測研究方面,文獻[5-6]分別實現了動態行為監控的沙盒系統,可在不同層次監控應用程序的運行行為。DroidScope系統則進一步重新構建了Android系統與Dalvik虛擬機,實現了Android惡意代碼的動態檢測[7]。
本文針對注入型Android惡意應用提出了基于函數調用關系的惡意代碼檢測方法。為了保證應用程序功能正常執行,大部分注入型Android惡意應用通過注入的獨立組件執行惡意行為,例如注入一個廣播接收器用于監聽開機啟動事件,當手機重啟后,該廣播接收器便可被觸發用于執行惡意行為。此種注入型Android惡意應用的特征使得惡意代碼部分與正常應用代碼之間在函數調用關系上聯系較弱。
對于待檢測的Android應用程序,首先進行反編譯并在smali代碼級別構建函數調用關系圖,在此基礎上將函數調用關系圖進一步劃分為函數調用子圖,進一步基于子圖中敏感API的調用次數計算子圖威脅度,最后根據威脅度判定子圖中是否包含惡意代碼。
本文提出了針對注入型Android惡意應用的檢測方法,所提方法基于靜態分析,相對于動態分析系統,具有較高的代碼覆蓋率,同時也更加簡單易行。針對1 260個Android惡意應用和1 000個正常應用樣本的測試表明,所提方法針對注入型Android惡意應用具有很好的檢測效果。
Android應用程序以APK文件的形式發布,結構上主要包括4大組件,分別為:①Activity組件提供與用戶交互的界面,每個應用程序一般都存在一個主Activity作為應用程序啟動的入口;②Service與Activity不同的是,Service組件主要運行在后臺。Android惡意應用為了防止被用戶察覺,一般會通過Service在后臺悄悄執行惡意行為;③Broadcast Receiver組件接受來自應用程序內部其他組件或者其他應用程序發送的廣播消息,因此可以用于監聽系統的廣播事件,例如網絡狀態變化、電池電量低、短信接收等;④Content Provider組件提供數據操作的統一接口,可以通過URI聲明數據訪問地址,允許應用程序之間的數據共享。
Geinimi是Android平臺上首個僵尸網絡惡意應用,采用注入技術將其自身注入到流行的Android應用程序中,供Android用戶下載,實現廣泛傳播的目的[8]。該惡意應用會收集被感染用戶的隱私信息并可以接受遠程控制服務器下發的命令,可對廣大用戶的個人隱私信息造成嚴重的威脅。以MD5值為08E4A73F0F352C3ACCC03EA9D4E946 7F的惡意樣本為例,從AndroidManifest.xml配置文件中可以發現該樣本添加了一個名為com.geinimi.AdServiceReceiver的廣播接收器,用于監聽開機廣播事件,并進一步觸發惡意行為的執行。
圖1為該樣本的函數調用關系圖,圖中每個節點代表了一個方法,節點之間的邊表示方法之間存在調用關系,空心節點表示調用的敏感API,其他節點皆為非敏感API。右上方的節點來自于應用程序中的正常代碼部分,而左下方的節點則是來自于注入的惡意代碼Geinimi。從函數調用關系圖可以看出,在該應用程序的正常代碼部分,基本沒有對敏感API的調用,而惡意代碼部分則調用了大量敏感API用于實現惡意行為。另一方面,該樣本的函數調用關系圖明顯地分為兩個部分,同時兩個部分之間沒有明顯的聯系。通過對該樣本的分析可以發現,函數調用關系在一定程度上反映了Android應用程序內部各部分之間的關系,注入型Android惡意應用內部注入的惡意代碼部分與正常代碼部分之間存在明顯的割裂性。

圖1 Geinimi樣本函數調用關系圖
本文提出的基于函數調用關系的檢測方法如圖2所示,主要包含兩個模塊:函數調用關系圖構建模塊負責構建Android應用程序的函數調用關系圖;惡意代碼檢測模塊則負責識別函數調用關系圖中包含惡意代碼的部分。

圖2 注入型Android惡意應用檢測基本算法
3.1 函數調用關系圖的構建
在函數調用關系圖的構建過程中,主要包括APK反匯編、API調用序列提取、函數調用關系圖構建以及子圖劃分4個部分。
(1)APK反匯編:在構建函數調用關系圖之前,需要獲得APK中調用的所有方法。為了獲得精確的函數調用關系,首先利用Android應用程序逆向分析技術將待分析的APK文件經過反匯編得到細粒度的smali代碼,并進一步基于smali代碼構建函數調用關系。
(2)API調用序列提取:在反匯編生成的smali代碼基礎上,從應用程序的每個入口點處搜索并回溯以構建API調用序列,函數的返回值以及參數可作為附加信息進行提取,進而構建信息更為豐富的API調用序列。
(3)函數調用關系圖構建:Android應用程序在開發過程中,主要以類和包的形式進行組織,開發者在開發過程中將具有一定關聯的代碼放入一個類中,進而組織到一個包下,因此類和包具有特定的語義信息。本文根據此語義信息,將前述提取的API調用序列基于類進行聚合,從而構建出函數調用關系圖。
(4)子圖劃分:本文主要采用深度優先遍歷算法在函數調用關系圖的基礎上進行子圖劃分,在對函數調用關系圖進行遍歷后,可以將調用的方法聚類到不同的子圖中,同一個子圖中的方法之間具有強相關性,而不同子圖中的方法具有弱相關性。為了進一步識別子圖中是否包含惡意代碼,首先需要解決兩個問題,一個是Android應用程序中存在的代碼碎片問題,另一個是Android應用程序中廣泛存在的廣告模塊問題。本文所指的代碼碎片是指存在于應用程序中但沒有實際功能的代碼片段,其存在對后續的惡意代碼識別具有干擾作用。為排除代碼碎片的影響,本文提出了簡單有效的方法用于識別Android應用程序中的代碼碎片,其基本規則包括兩方面:當子圖中僅有一個類,且該類沒有敏感API調用并且類中的方法數不超過4個時,該子圖被標識為代碼碎片;當子圖中方法的方法體為空時,該子圖被標識為代碼碎片。
Android應用程序開發者通常會在應用程序中添加廣告模塊,通過廣告分成的方式獲取收益。開發者通常可以在不修改應用程序整體代碼的情況下利用廣告軟件開發包方便地集成廣告模塊,廣告模塊的實現機制導致廣告模塊在函數調用關系圖上呈現獨立的子圖。另外,為了實現精確推送,部分廣告模塊會通過調用敏感API來收集用戶的隱私信息,例如地理位置、瀏覽器搜索歷史等。圖3為包含廣告模塊應用程序的函數調用關系圖,右上方的部分來自某廣告模塊,由圖可見,該廣告模塊中同樣包含了針對若干敏感API的調用。因此,廣告模塊與注入型惡意應用在函數調用關系圖上具有相似的部分,在惡意代碼檢測過程中會導致誤報。
為了區別廣告模塊和注入型Android惡意應用,需要對廣告模塊進行識別。通過分析發現,每個廣告模塊都有其對應的唯一包名,因此,可以基于廣告模塊的包名建立白名單,并依據此白名單對廣告模塊進行過濾,從而降低誤報率。

圖3 包含廣告模塊應用程序的方法調用圖
3.2 惡意代碼檢測
在完成函數調用關系圖構建與子圖劃分處理后,需要進一步判定Android應用程序中是否存在惡意代碼。惡意代碼的判定主要包括兩個步驟:子圖威脅度計算以及子圖惡意代碼判定。
(1)子圖威脅度計算:Android惡意代碼通過調用敏感API來實現惡意行為,例如發送短信需要調用sendTextMessage函數,因此可以通過對敏感API的調用情況來計算子圖的威脅度,本文首先通過對1 000個樣本的統計分析得到了Android惡意代碼中使用頻率較高的API列表,表1顯示了使用率最高的前10個API以及API的調用次數。每個敏感API會根據其潛在的威脅以及被惡意代碼調用的次數賦予相應的威脅度值。對于每個子圖,會進一步根據敏感API調用的次數計算子圖的威脅度值,子圖威脅度值為所有敏感API的威脅度值總和。

表1 使用率最高的前10個系統API
(2)子圖惡意代碼判定:在對100個注入型Android惡意應用程序的子圖威脅度進行分析后發現,包含惡意代碼的子圖具有較高威脅度的同時其函數(所有函數)調用數目較少,而正常子圖在具有較低威脅度的同時函數調用數目較多,因此可以進一步將子圖威脅度值除以函數調用次數獲得平均子圖威脅度值。平均子圖威脅度值越高,其包含惡意代碼的可能性越大,為了確定惡意代碼判定的閾值,對上述100個注入型惡意應用樣本進行檢測實驗,結果如圖4所示。當閾值超過0.4以后,惡意代碼子圖識別出現了漏報,且隨著閾值的提高,漏報率逐漸上升;而當閾值低于0.4時,正常功能代碼子圖部分出現了誤報,且隨著閾值的降低,誤報率快速上升。因此,本文將閾值設為0.4,當平均子圖威脅度值超過該閾值時,則判定該子圖包含惡意代碼。

圖4 惡意代碼子圖漏報率和誤報率隨閾值變化曲線
本節對Android Malware Genome Project[9]中包含的1 260個惡意代碼樣本進行實驗,測試本文方法對真實Android惡意代碼的檢測效果,同時與Androguard[10]進行對比,Androguard主要是基于特征匹配進行惡意代碼檢測。實驗過程中首先對應用程序樣本進行反匯編得到smali代碼,其次在smali代碼的基礎上提取API調用序列并構建函數調用關系圖,同時進一步進行子圖劃分,最后對每部分子圖進行威脅度計算,判斷子圖是否包含惡意代碼。表2顯示了對注入型Android惡意應用的最終檢測結果,表3則為對非注入型Android惡意應用的檢測結果。由實驗結果可見,本文方法能夠很好地檢測注入型Android惡意應用,平均檢測率達到95.94%,遠高于Androguard 32.63%的平均檢測率;從對非注入型惡意應用檢測效果來看,仍然可以檢測出部分惡意應用。與基于特征的靜態惡意代碼檢測系統不同的是,本文方法除了需要敏感API信息外不需要任何其他先驗特征信息。Android惡意代碼執行惡意行為一般需要調用系統API來實現,而這些API在一定程度上是穩定不變的,因此基于函數調用關系圖的方法相比基于特征的惡意代碼檢測方法具有更好的穩定性,同時可以用于檢測未知的惡意代碼。

表2 注入型Android惡意應用檢測結果

表3 非注入型Android惡意應用檢測結果
對于檢測率低的惡意樣本,我們將手動分析并解釋本文方法所存在的局限性。
(1)Asroot:該惡意代碼具有獲取root權限的功能。該家族中的部分樣本并沒有采用注入技術將惡意代碼注入到正常應用中,而是實現了一個具有惡意行為的完整Android應用程序,因此函數調用關系圖之間沒有明顯的差異,這也導致了低檢測率情況的發生。
(2)SndApps:該惡意代碼樣本實際上沒有嚴重的安全威脅,其僅僅在正常應用中注入了大量廣告模塊并綁定了自己的廣告ID,以此來竊取其他開發者的廣告分成利益。由于本文方法在子圖劃分過程中過濾了所有廣告模塊,因此對于SndApps的檢測率為0。
(3)zHash:該惡意代碼樣本通過添加垃圾代碼實現變種目的,同時其自身也實現了部分對用戶有用的功能,因此惡意代碼與正常代碼之間具有較強的相關性,從函數調用關系圖來看,兩個部分是一個整體,這也必然導致了基于函數調用關系檢測方法失效。
進一步隨機選取1 000個來自Google Play的正常Android應用程序作為數據集,測試了本文方法的誤報率。表4顯示了被檢測出包含惡意代碼的包名以及樣本數量,一共有89個樣本被標定為惡意代碼,因此誤報率為8.90%。但是進一步分析發現,大多數被標定為包含惡意代碼的包是來自于廣告模塊或者其他第三方模塊。例如,com.smaato.SMOA來自于名為SMAATO的廣告模塊;com.phonegap來自第三方模塊PhoneGap,該模塊可以為Android應用程序提供Web開發技術。因此,可以通過擴展白名單降低誤報率。

表4 正常Android應用程序檢測結果
本文提出了針對注入型Android惡意應用的檢測方法,首先從待分析的Android應用程序中提取API調用序列,基于此調用序列進一步構造函數調用關系圖。在函數調用關系圖的基礎上進行子圖劃分,通過計算平均子圖威脅度值來判定是否包含惡意代碼。實驗結果表明,本文方法對于注入型Android惡意應用具有很好的檢測效果。本文方法不依賴于先驗特征,可以用于檢測已知和未知Android惡意應用。實驗部分選取的樣本較老,隨著注入型Android惡意應用的技術發展,可能會出現新型的樣本,因此在后續工作中,會繼續對新發現的注入型Android惡意應用進行分析,進一步改進檢測方法。
[1] IDC. Smartphone OS market share, Q4 2014 [EB/OL]. (2015-01-20) [2015-03-12]. http:∥www.idc. com/prodserv/smartphone-os-market-share.jsp.
[2] ZHOU Wu, ZHOU Yajin, JIANG Xuxian, 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. New York, USA: ACM, 2012: 317-326.
[3] AAFER Y, DU Wenliang, YIN Heng. DroidAPIMiner: mining API-level features for robust malware detection in Android [C]∥Proceedings of the 9th International Conference on Security and Privacy in Communication Networks. Berlin, Germany: Springer, 2013: 86-103.
[4] WU Dongjie, MAO Chinghao, WEI Teen, et al. Droidmat: Android malware detection through manifest and API calls tracing. [C]∥Proceedings of the 7th Asia Joint Conference on Information Security. Piscataway, NJ, USA: IEEE, 2012: 62-69.
[5] GRACE M, ZHOU Yajin, ZHANG Qiang, et al. Riskranker: scalable and accurate zero-day Android malware detection [C]∥Proceedings of the 10th International Conference on Mobile Systems, Applications, and Services. New York, USA: ACM, 2012: 281-294.
[6] ISOHARA T, TAKEMORI K, KUBOTA A. Kernel-based behavior analysis for Android malware detection [C]∥Proceedings of the 7th International Conference on Computational Intelligence and Security. Piscataway, NJ, USA: IEEE, 2011: 1011-1015.
[7] YAN L K, YIN Heng. DroidScope: seamlessly reconstructing the OS and Dalvik semantic views for dynamic Android malware analysis [C]∥Proceedings of the 21st USENIX Conference on Security Symposium. Berkeley, CA, USA: USENIX, 2012: 29.
[8] PIETERSE H, OLIVIER M S. Android botnets on the rise: trends and characteristics [C]∥Proceedings of the Conference on Information Security for South Africa. Piscataway, NJ, USA: IEEE, 2012: 1-5.
[9] JIANG Xuexian, ZHOU Yajin. Android malware genome project [EB/OL]. (2012-08-11)[2015-03-12]. http:∥www.malgenomeproject.org.
[10]DESNOS A. Androguard: reverse engineering, malware and goodware analysis of Android applications and more [EB/OL]. (2013-11-21) [2015-03-12]. http:∥code.google.com/p/androguard.
(編輯 武紅江)
A Detection Method of Injected Android Malicious Applications Using Function Calling Graphs
WANG Huan1,LAI Huan2,LI Guodong3,TIAN Da2,LIANG Bo2
(1. Apparel and Art Design College, Xi’an Polytechnic University, Xi’an 710048, China;2. Xi’an Yanliang National Aviation Hi-Tech Industrial Base Management Committee, Xi’an 710048, China;3. Network Center, Xi’an Jiaotong University, Xi’an 710049, China)
The number of injected Android malicious applications is increasing, and the traditional detection method heavily relies on lots of extracted characteristics. A static analysis method based on function calling graph is proposed to detect injected Android malicious applications. The method can efficiently detect injected Android malicious applications only by analyzing the application’s structure, and there is no need for known characteristics. The method constructs a function calling graph based on decompiled smali code, and sub-graphs will be further processed to tell whether the Android application is malicious or not. The period of analysis is much shorter than that of any other dynamic detection method. The detection method not only detects whether the Android application is malicious or not, but also has the ability to tell which part of the Android application contains malicious code. The approach is tested on 1 260 Android malicious applications and 1 000 Android normal applications, and the test results show that the approach is effective in detecting injected Android malicious applications. The detection rate of the method for the injected Android malicious applications is 95.94% when the false positive rate is 8.90%. A comparison with the mainstream Android malware detection system Androguard shows that the detection performance of the proposed method has a remarkable promotion.
Android; malware; static analysis; function calling graph
2015-06-13。
王歡(1980—),女,講師。
陜西省科技統籌創新工程計劃資助項目(2013KTCQ01-51);國家自然科學基金資助項目(61103241)。
時間:2015-07-28
10.7652/xjtuxb201510014
TP393
A
0253-987X(2015)10-0084-06
網絡出版地址:http://www.cnki.net/kcms/detail/61.1069.T.20150728.1755.006.html