王宇曉
【摘 要】當前Android惡意應用程序威脅越來越多,因此首先介紹了當前Android應用程序動態(tài)檢測技術背景和發(fā)展趨勢,其后重點介紹以JDWP協(xié)議為基礎的惡意行為檢測方法和檢測技術,最后與實際檢測經(jīng)驗結合,介紹如何依照檢測結果對應用程序惡意行為進行分析和判斷。
【關鍵詞】Android應用程序 動態(tài)檢測 JDWP 惡意行為分析
1 引言
近年來,智能手機深入應用于人們生活當中,Android操作系統(tǒng)因其本身開源性和免費性,受到許多手機廠商和開發(fā)者的青睞和支持。據(jù)悉,2016年度Android系統(tǒng)在全球市場的占有率已經(jīng)高達80%。但隨之而來的是,與Android平臺相關的惡意應用軟件攻擊也越來越多。OWASP[1]曾對比上百萬應用軟件,發(fā)布了十大移動應用惡意行為,其中涉及惡意扣費、靜默下載、隱私竊取、資費消耗、遠程控制等多方面。2016年,360互聯(lián)網(wǎng)安全中心發(fā)布《2016年AnDroid惡意軟件專題報告》,其中提到2016年累計截獲Android平臺新增惡意程序樣本1403.3萬個,平均每天新增3.8萬惡意程序樣本,而新增惡意程序主要是資費消耗,占比高達74.2%,其次是惡意扣費(16.5%)、隱私竊取(6.1%)[2]。
Android應用軟件的惡意行為給廣大用戶帶來了財產(chǎn)安全和個人新信息安全的重大威脅,對行業(yè)造成不良影響。在此種情況下,對智能手機應用軟件進行檢測是必要的,以求達到對風險可知、可控。當前Android平臺上,對應用軟件檢測主要分為靜態(tài)檢測技術和動態(tài)檢測技術兩個方面[3]。靜態(tài)檢測技術重點分析使用逆向技術[4]后得到的源碼,關注業(yè)務邏輯和相關算法,以達到對應用軟件檢測的目的。動態(tài)檢測技術將應用程序置于運行環(huán)境中運行,對其動態(tài)行為實時監(jiān)控、分析和判斷,以判定應用軟件是否存在出現(xiàn)惡意行為的潛在風險。
本文基于JDWP協(xié)議監(jiān)控敏感行為API,對Android應用程序進行動態(tài)檢測并分析和判斷行為事件是否具備惡意行為特征,接下來會從動態(tài)檢測技術背景、JDWP監(jiān)控應用程序API原理和過程、惡意行為分析和判斷這三個方面進行介紹。
2 動態(tài)檢測技術背景和相關工作
2.1 通用動態(tài)檢測技術
動態(tài)檢測技術通常會把Android應用程序置于真實或者模擬環(huán)境中,監(jiān)控應用程序的運行情況,對應用程序行為進行實時記錄分析,以判斷其正常性。目前Android應用程序動態(tài)監(jiān)控技術既包括內(nèi)核層監(jiān)控,也包括應用層監(jiān)控。內(nèi)核層監(jiān)控可采用鉤子(hook)技術、掛鉤系統(tǒng)關鍵敏感API來實現(xiàn)動態(tài)監(jiān)測;而應用層監(jiān)控采用重打包技術進行檢測[5]。常用的動態(tài)檢測技術包括DroidBox、APIMonitor[6]等。
DroidBox主要用于檢測隱私泄露,通過對隱私數(shù)據(jù)進行標識,使隱私數(shù)據(jù)成為污染源。一旦惡意程序獲取隱私數(shù)據(jù),并對其進行操作,會使得新生成的數(shù)據(jù)被污染。如果出現(xiàn)污染數(shù)據(jù)流出或泄露的情況,證明應用軟件出現(xiàn)隱私泄露行為[7],在其他方面比如文件讀寫操作、網(wǎng)絡傳輸數(shù)據(jù)、動態(tài)加載、短信以及電話等操作,都能起到監(jiān)控作用,但工具較大,容易在使用過程中出現(xiàn)問題。
APIMonitor利用Dalvik層面代碼篡改和重打包技術,監(jiān)控特定敏感API以追蹤應用軟件的惡意行為。但隨著應用程序安全越來越受到重視,應用程序采用加固、反編譯、抗重打包、簽名驗證等技術增強安全性。這樣APIMonitor工具本身就有了很大的局限性,適用范圍受到限制。
2.2 JDWP調(diào)試原理
JDWP(JAVA調(diào)試協(xié)議)是JAVA平臺調(diào)試體系結構的重要組成部分之一[8],作為調(diào)試器和目標虛擬機交互的通信協(xié)議,在調(diào)試過程中起到重要作用。簡而言之,JDWP協(xié)議的作用就是通信,調(diào)試器可使用JDWP協(xié)議獲取虛擬機中程序的信息或者控制目標程序運行狀態(tài)。而虛擬機可通過JDWP協(xié)議通知調(diào)試器返回信息以執(zhí)行后續(xù)操作[9],包括握手和應答兩個階段,在建立傳輸層連接之后,調(diào)試器會發(fā)送字符串“JDWP-Handshake”到虛擬機,虛擬機回復字符串“JDWP-Handshake”。兩端握手結束,調(diào)試器即可對虛擬機發(fā)送命令。
JDWP通信內(nèi)容包括命令和回復,調(diào)試器和虛擬機兩端都有可能發(fā)送命令包和回復包。調(diào)試器發(fā)送命令給虛擬機,獲取當前在虛擬機中運行程序的信息,虛擬機回復該命令是否成功執(zhí)行。同時虛擬機也可以向調(diào)試器發(fā)送命令包以通知部分事件的發(fā)生。JDWP執(zhí)行的異步性使得請求和回復之間不需要考慮順序,減少等待時間,可直接發(fā)送其他命令。同時任何語言都可以實現(xiàn)JDWP,使得檢測系統(tǒng)更加容易實現(xiàn)。
3 惡意行為監(jiān)控過程
本文的動態(tài)檢測技術利用JDWP協(xié)議、調(diào)試器與虛擬機通信獲得虛擬機工作狀態(tài),以達到監(jiān)控應用程序的作用。但是JDWP協(xié)議只能獲取正在運行的應用程序信息,所以當用戶開啟應用程序時,需要根據(jù)之前獲取的應用程序基本信息進行JDWP通信,獲取應用程序的運行信息。
在Android系統(tǒng)中,每一個Android應用都運行在一個虛擬機實例里,每一個虛擬機實例都是一個獨立的進程空間。每一個進程都有一個ID,被稱為Process ID(PID)[10]。調(diào)試器根據(jù)PID追蹤應用程序運行狀況,aapt工具可獲取當前移動設備中所有應用程序信息,比如應用程序名稱、應用程序包名、應用程序權限等,使用aapt命令獲取應用程序名稱。Android系統(tǒng)內(nèi)置ps命令,ps命令可根據(jù)具體應用程序名稱獲取此進程的PID。PC端使用ADB(Android Debug Bridge)調(diào)試器,根據(jù)正在運行的應用程序PID值向Android虛擬機發(fā)出JDWP命令,請求虛擬機應用程序運行狀態(tài),其后虛擬機返回應用程序相關信息,PC實時輸出應用軟件動態(tài)行為并判斷此應用程序是否存在惡意行為。動態(tài)檢測過程示意圖如圖1所示:
圖1 動態(tài)檢測過程示意圖
JDWP監(jiān)控處理過程如下:
(1)ADB調(diào)試器發(fā)送JDWP請求與Android虛擬機握手,建立連接。
(2)根據(jù)用戶需求,ADB調(diào)試器發(fā)送JDWP命令到Android虛擬機,獲取當前某個運行中應用程序所加載的所有API地址。
(3)匹配用戶需監(jiān)控API,確定地址,發(fā)送JDWP命令到Android虛擬機,對具體地址進行監(jiān)控。
(4)ADB調(diào)試器處理監(jiān)控返回信息,判斷連接和監(jiān)控有效。
(5)用戶執(zhí)行應用程序輸入操作,一旦被監(jiān)控的API被觸發(fā),Android虛擬機返回相關信息到ADB調(diào)試器。
(6)對返回信息分析和判斷,實時通過PC端展示給用戶,達到實時監(jiān)控目的。
JDWP監(jiān)控過程時序圖如圖2所示。
監(jiān)控過程使用多進程監(jiān)控思想,對于多個應用程序開啟多個進程處理。進程之間相互獨立,即使在監(jiān)控過程中某個應用程序崩潰,也不會影響對其他應用程序的監(jiān)控。同時多進程提高了性能,每一個進程都具有相同的地址空間和相同的資源,這樣能夠達到的性能上限相對較大。
4 惡意行為分析和判斷
本部分惡意行為分析和判斷是根據(jù)大量實際檢測經(jīng)驗分析而來,包括兩部分內(nèi)容,一是介紹如何對用戶信息泄露監(jiān)控;二是如何根據(jù)事件行為時間序列對惡意行為進行監(jiān)控。
在引言中提到,惡意行為中涉及惡意扣費、靜默下載、隱私竊取、資費消耗等占的百分比較大。惡意扣費和資費消耗相似,其行為都涉及后臺發(fā)送短信、撥打電話、連接網(wǎng)絡等。惡意行為分析中對短信發(fā)送相關API、撥打電話API以及連接網(wǎng)絡API監(jiān)控與分析是必不可少的部分[11]。因而本文在惡意行為分析與判斷部分,重點關注隱私竊取。隱私竊取行為會在用戶不知情的情況下,將手機內(nèi)涉及用戶隱私信息內(nèi)容通過互聯(lián)網(wǎng)上傳到服務器。獲取移動設備信息比如IMEI、IMSI等需監(jiān)控函數(shù)android.telephony.telephonyManager.getDeviceId和android.telephony.telephonyManager.getSubscriberId。在分析和判斷時,此類監(jiān)控API一旦出現(xiàn),可定義為相關惡意行為出現(xiàn)。除移動設備本身信息外,用戶信息以不同存儲方式保存在移動設備中。其他用戶私有數(shù)據(jù)存儲和共享部分借助Content Provider實現(xiàn),Content Provider為數(shù)據(jù)定義統(tǒng)一資源定位符(URI),讀取數(shù)據(jù)時只需訪問對應URI。對于Content Provider,包括四種操作,查詢、插入、更新、刪除等行為需要監(jiān)控API如下:android.content.ContentResolver.query、android.content.ContentResolver.insert、android.content.ContentResolver.update、android.content.ContentResolver.delete。一旦出現(xiàn)此類函數(shù)監(jiān)控事件,表明應用軟件對數(shù)據(jù)庫進行操作。但由于Content Provider本身設計機制,會根據(jù)不同的輸入?yún)?shù)對不同的數(shù)據(jù)庫進行操作,比如日歷、聯(lián)系人、短信、上網(wǎng)記錄、圖片、視頻、音頻等數(shù)據(jù),需要根據(jù)其對應URI參數(shù)進行特定監(jiān)控。
應用程序惡意行為分析內(nèi)容較多,部分涉及讀取的惡意行為根據(jù)監(jiān)控事件即可確認,如上文所介紹。而部分惡意行為本身只是敏感行為,需要根據(jù)敏感行為發(fā)生上下文環(huán)境和關系進行分析判斷,來確定它是否可以被定義為惡意行為。
本文將監(jiān)控實時事件行為與用戶輸入操作行為的時間序列進行對比。若敏感行為發(fā)生時間未與用戶輸入操作時間對應,即可將敏感行為判定為惡意行為,這種分析方式符合可治可控原則。除此之外,惡意行為也需要借助實際運行環(huán)境中上下文事件行為來進行分析和判斷。
以某一款錄音應用程序為例介紹。錄制音頻函數(shù)包括android.media.MediaRecorder.start和android.media.AudioRecord.startRecording。錄制音頻和錄制視頻時都會使用到android.media.MediaRecorder.start函數(shù)。因而在對此款錄音應用程序行為監(jiān)控時,android.media.MediaRecorder.start函數(shù)出現(xiàn),單純分析此事件,并不能確定此款錄音應用程序只是在進行其功能性錄音行為,后臺是否開啟視頻錄制無法確定。值得一提的是,在拍照和錄制視頻時,Android要求必須開啟相機預覽功能,而部分后臺錄制和拍照采取開啟相機預覽而設置預覽模塊大小為零的方案。用戶無法看到相機預覽,這就達到后臺拍照錄影的目的。在錄音應用程序開啟時間段內(nèi),android.media.MediaRecorder.start事件發(fā)生本身屬于正常行為。但如果此時間段內(nèi)出現(xiàn)開啟相機預覽(android.hardware.Camera.startPreview)事件,錄音應用軟件則具備惡意行為嫌疑。此錄音應用程序在錄制音頻同時也在后臺錄制視頻,因而對敏感行為上下文事件行為發(fā)生分析和判斷是很有必要的,特別是由于Android系統(tǒng)的開放性,同一功能可能由不同方法完成,在惡意行為分析和判斷過程中特殊情況值得重視。
5 優(yōu)勢和改進
本文中提到的動態(tài)檢測技術使用多進程思想,本身性能會有較大的提高,但是如果移動設備本身需要監(jiān)控的應用程序過多的話,對PC端性能有較高要求。所以每次監(jiān)控應用程序數(shù)量可以在PC端性能允許的情況下達到盡量多的數(shù)目,以求提高監(jiān)控效率。
利用JDWP原理對應用程序事件進行實時監(jiān)控和檢測,本身具有較高的時效性。但JDWP需要ADB調(diào)試器對Android虛擬機進行通信,通信本身就有一定時耗。其次由于Android虛擬機的設計,每個虛擬機實例都是一個獨立進程空間。當有新的Android應用程序開啟,創(chuàng)建一個新的虛擬機實例并被追蹤監(jiān)控,這期間也需要一定的時間消耗,所以在用戶使用過程中,監(jiān)控新開啟的應用程序需要一定的時間緩沖,應用程序用戶模擬輸入或?qū)嶋H輸入需要等待連接建立監(jiān)控開啟后進行。即便虛擬機創(chuàng)建進程采用Linux的fork機制復制進程,相比較創(chuàng)建進程會有更高的效率,但短時間停頓仍然存在。在此段時間內(nèi)如果應用程序開啟用戶輸入行為,可能會出現(xiàn)無法監(jiān)控的情況。如果考慮應用程序行為監(jiān)控完整性,就需要用戶輸入等待一段時間,這樣可能會造成不太良好的用戶體驗。在這一方面,期待在之后的研究和探索有一定的改進。
6 結束語
本文介紹了當前Android應用程序動態(tài)檢測技術和發(fā)展現(xiàn)狀,重點研究了以JDWP為基礎的動態(tài)檢測技術,并結合實際檢測經(jīng)驗分析惡意行為的判定。目前針對Android應用程序動態(tài)檢測技術并不算少,但大多與實際應用并不能很好的結合,具有一定的局限性。然而應用程序越來越多地應用到人們生活、學習和工作的方方面面,因而研究應用程序的動態(tài)監(jiān)測技術以及如何對惡意行為分析判斷定性具有一定的意義。
參考文獻:
[1] OWASP. Mobile Top 10 2016-Top 10[CP/OL]. (2017-02-
13). https://www.owasp.org/index.php/Mobile_Top_10_
2016-Top_10.
[2] 360互聯(lián)網(wǎng)安全中心. 2016年Android惡意軟件專題報告[EB/OL]. (2017-02-28). http://blogs.#/360mobile/2017/02/28/review_android_malware_of_2016/.
[3] Shabtai A. Malware Detection on Mobile Devices[A]. Mobile Data Management[C]. 2010: 289-290.
[4] 豐生強. Android軟件安全與逆向分析[M]. 北京: 人民郵電出版社, 2013: 6-7.
[5] 王艷紅,楊丁寧,史德年. 當前移動應用軟件常用安全檢測技術[J]. 現(xiàn)代電信科技, 2012(9): 6-10.
[6] WU D J, MAO C H, WEI T E, et al. Droidmat: Android malware detection through manifest and api calls tracing[A]. 7th Asia Joint Conference on Information Security[C]. 2012.
[7] Sanz B, Santos I, Nieves J, et al. MADS: Malicious Android ApplicationsDetection through String Analysis[M]. Springer Berlin Heidelberg, 2013: 178-191.
[8] IBM. 深入 Java 調(diào)試體系,第 3 部分: JDWP 協(xié)議及實現(xiàn)[EB/OL]. (2014-11-04). https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/.
[9] 史成潔. Android平臺應用軟件保護技術的研究與實現(xiàn)[D]. 北京: 北京郵電大學, 2015.
[10] 周志明. 深入理解Java虛擬機[M]. 北京: 機械工業(yè)出版社, 2013.
[11] 楊衛(wèi)軍,秦海權,王鵬. Android移動應用軟件檢測平臺[J]. 信息網(wǎng)絡安全, 2012(8): 64-66.★