楊 龍,藺 楊
(1.湖南省公安廳,湖南 長沙 410001;2.長沙市公安局,湖南 長沙 410005)
據(jù)北京奇虎科技有限公司互聯(lián)網(wǎng)安全中心發(fā)布的《2014年中國手機(jī)安全狀況報(bào)告》對當(dāng)時(shí)市場較為流行的幾種智能終端應(yīng)用調(diào)查[1]表明:不論是Google公司的Android還是Apple公司的iOS都不同程度的存在被病毒程序攻擊的問題。Android系統(tǒng)的惡意程序雖然出現(xiàn)的比較晚,但近年來Android系統(tǒng)惡意病毒應(yīng)用呈井噴狀態(tài),伴隨而來,針對Android開展電子取證的工作量也急劇增加,加強(qiáng)Android系統(tǒng)應(yīng)用程序的管理也突顯緊迫[2]。
研究惡意程序的電子物證技術(shù),主要是通過逆向工程技術(shù)和動態(tài)監(jiān)測完成對惡意應(yīng)用的電子取證,為司法訴訟提供相關(guān)證據(jù)。
根據(jù)目前Android安全數(shù)據(jù)分析,惡意程序的行為特征主要體現(xiàn)在惡意資源消耗、范圍失控傳播、隱私數(shù)據(jù)盜用、數(shù)據(jù)擦除等方面,其方式包括開機(jī)自啟動、靜默執(zhí)行等。根據(jù)惡意程序各種行為特征,可以通過對其行為實(shí)現(xiàn)原理上進(jìn)行分析,進(jìn)而映射到代碼層。
一個(gè)程序的惡意判斷可以從多個(gè)方面來進(jìn)行。在靜態(tài)檢測過程中,我們主要采用逆向工程技術(shù),對程序反編譯后,再從特征值匹配、權(quán)限檢測、敏感API分析等多個(gè)角度進(jìn)行綜合分析,將多方面靜態(tài)檢測出來的結(jié)果合理賦值,采用危險(xiǎn)特征值加權(quán)評估的方式,進(jìn)行程序的危險(xiǎn)定級,與此同時(shí),開展電子取證工作,視具體情況出具相關(guān)檢驗(yàn)報(bào)告或意見。靜態(tài)檢測取證整體框架如圖1所示。
圖1 靜態(tài)檢測取證系統(tǒng)框圖
1.1.1 逆向工程原理
逆向工程也稱為反向工程(Reverse Engineering)[3],其含義是根據(jù)已有的應(yīng)用程序,通過逆向工程來得到源碼,進(jìn)而分析掌握其設(shè)計(jì)框架。目前該方法被很多公司采用,也可用來分析應(yīng)用程序是否有安全隱患和漏洞。
逆向工程的功能模塊以Android APK應(yīng)用程序文件作為輸入,以配置文件和代碼文件作為輸出。其中APK應(yīng)用程序文件屬于Android系統(tǒng)安裝的文件,是我們熟知的ZIP格式文件。Android逆向工程主要處理兩部分[4]:xml和dex。 對于xml文件的反編譯一般采用工具有兩種,APKtool和 AXMLPrinter2.jar。 反編譯dex一般分為兩步:第一步,從dex文件反編譯出class文件,通常使用 dex2jar.bat和 APKtool。 從 class文件反編譯到j(luò)ava可以使用jd-gui、Jodeclipse以及JadClipse工具。
APK文件經(jīng)過逆向工程后生成dex和smali兩種不同格式的文件,使用dex2jar工具可以將android的.dex 文件轉(zhuǎn)換生成 classes.dex.dex2jar.jar文件,再用rar解壓工具解壓出jar文件中的class文件,然后用jad或者DJ Java Decomplier反編譯工具將Java的.class文件反編譯成.java文件,單獨(dú)java文件還不足以掌握程序的特征,雖smali匯編代碼的可讀性不如java,但是它可以與java代碼解析出來的源碼進(jìn)行功能比對,所以,要想完整的反映一個(gè)應(yīng)用程序的所有特性,必須要smali和java兩種類型文件各一份[5]。結(jié)合對比審查不僅能夠快速找到可疑點(diǎn),還能夠保證分析結(jié)果的準(zhǔn)確性。
1.1.2 打包校驗(yàn)
打包校驗(yàn)過程處于整個(gè)靜態(tài)分析取證的前端,主要分析應(yīng)用程序的簽名信息和應(yīng)用程序包的信息,如PackageName等[1],通過查尋數(shù)據(jù)庫中相應(yīng)的包名對應(yīng)的簽名信息進(jìn)行校驗(yàn)。如果發(fā)現(xiàn)簽名不統(tǒng)一,則可以判斷此安裝文件有一定的安全隱患。
二次打包技術(shù)是惡意程序作者最常用的技術(shù)。惡意程序作者會分析并下載流行的程序,反編譯而后導(dǎo)入惡意的Payloads,再二次打包生成APK。最后惡意程序作者會把二次打包的APK上傳到第三方Android應(yīng)用市場。用戶很容易會被誘騙安裝受到感染的惡意應(yīng)用。
在Android系統(tǒng)中,Android程序必須經(jīng)過數(shù)字證書的簽名后才可以進(jìn)行安裝。數(shù)字證書用以標(biāo)識應(yīng)用程序的作者并與應(yīng)用綁定。故可以通過打包校驗(yàn),及時(shí)的發(fā)現(xiàn)被修改或者植入了惡意程序段的惡意應(yīng)用。這個(gè)方法通過提取APK中的公鑰信息和PackageName信息,然后和樣本數(shù)據(jù)庫中對應(yīng)的PackageName進(jìn)行匹配視其公鑰信息是否和樣本數(shù)據(jù)庫中的一致。如果發(fā)現(xiàn)簽名不一致,則可以判斷此安裝文件有一定的安全隱患,需要進(jìn)一步檢測。
1.1.3 APK 反編譯
通過打包校驗(yàn)后,我們可以初步篩選出有安全隱患的程序,接著開始進(jìn)行APK反編譯工作。通過反編譯程序(APKtool)實(shí)現(xiàn)對APK文件的反編譯,獲取其源代碼文件以及各類資源文件。此過程也可以被稱為資源獲取過程。
通過APKtool反編譯之后可以得到應(yīng)用程序所包含的資源文件,存放在res目錄下,通過修改和替換這些資源文件可以改變這個(gè)應(yīng)用程序的界面,所以Android應(yīng)用程序的漢化和去廣告都是用APK-tool完成的。而APKtool同時(shí)會將.dex文件反編譯成.smali文件,而smali目錄中的文件與Java源文件是相對應(yīng)的,這是APKtool常用的兩個(gè)命令:
反編譯命令 APKtool d<app_path/filename.APK>[<dir>]
編譯命令 APKtool b[<app_path/filename.APK>][<o(jì)ut_file>]
通過APKtool逆向出來的資源包括了res資源庫、smali文件夾、original文件夾、unknown文件夾以及 AndroidManifest.xml文件。
res包含了應(yīng)用的所有圖片資源、布局文件以及 style.xml、string.xml等 value 文件。
smali文件夾下是整個(gè)應(yīng)用的smali文件,smali是Dalvik VM內(nèi)部執(zhí)行的核心代碼。通過閱讀smali代碼,我們可以正確的理解程序的意思和思想。在smali中有對應(yīng)于Java語法的自身語法,包括數(shù)據(jù)類型和方法表示。
unknown文件夾中防止的是反編譯器不識別的文件,一般.html文件都放在這個(gè)文件夾中。
在 AndroidManifest.xml文件中我們可以看到工程的整個(gè)結(jié)構(gòu),包括權(quán)限,組件等信息。因此AndroidManifest.xml是逆向工程第一個(gè)需要分析的文件。
1.1.4敏感權(quán)限檢測
在Android系統(tǒng)中,一個(gè)應(yīng)用如果需要實(shí)現(xiàn)某些特殊功能,都需要向系統(tǒng)申請權(quán)限。申請權(quán)限的方式主要是在源代碼的Manifest.xml中進(jìn)行聲明。一些高危權(quán)限如隱私數(shù)據(jù)擁有操作權(quán)限的申明需要格外注意。
一般情況下,除非移動應(yīng)用已經(jīng)通過申請或者利用系統(tǒng)Linux內(nèi)核存在的漏洞獲取了最高管理員的權(quán)限,一個(gè)移動應(yīng)用只能訪問自己的私有數(shù)據(jù)(/scared目錄中的數(shù)據(jù)需要申請寫外部存儲器的權(quán)限才可以訪問)。所以,通過對APK的權(quán)限進(jìn)行分析,如果沒有申請一些敏感的權(quán)限,并且也不存在ROOT的Exploit,那么就可以判定一個(gè)應(yīng)用是一個(gè)正常的應(yīng)用,如果申請了一些敏感權(quán)限,則需要進(jìn)一步的檢測。
1.1.5 權(quán)重分析
以上述的權(quán)限檢測為例,即使一個(gè)應(yīng)用申請了大量的冗余權(quán)限,且權(quán)限中有敏感權(quán)限,但是其在實(shí)際API調(diào)用中并沒有調(diào)用敏感API,單單依靠敏感權(quán)限申請的檢測無法得到該程序合理的安全性解釋。
我們一般采用平均權(quán)重分配法,對上述參考因子進(jìn)行隨機(jī)權(quán)重分配。并抽取市場上主流的、安全的應(yīng)用進(jìn)行測試,獲得各自的參考值,然后對參考值通過聚類算法,獲得聚類中心。將聚類中心作為標(biāo)準(zhǔn)參考值。如果測試APK的危險(xiǎn)值小于標(biāo)準(zhǔn)參考值,則判斷危險(xiǎn)程度為高,并需要進(jìn)一步人工檢查。如果危險(xiǎn)值大于標(biāo)準(zhǔn)參考值,則危險(xiǎn)程度為低。
在實(shí)際取證應(yīng)用中,我們還會采用動態(tài)監(jiān)測分析,應(yīng)用程序最基本的行為是在系統(tǒng)中執(zhí)行的一條條指令,包括邏輯、運(yùn)算、執(zhí)行控制、存儲處理和接口處理等。但是孤立的研究每一條指令其意義并不大。從軟件工程角度出發(fā),可以把一系列命令看作是一個(gè)程序行為,通過檢測程序行為,與靜態(tài)檢測中獲取的權(quán)限聲明相比較,如果發(fā)現(xiàn)程序行為比申請的權(quán)限大,說明這個(gè)程序是惡意程序的概率就大[6]。
Android應(yīng)用動態(tài)監(jiān)測一般由兩部分組成:應(yīng)用運(yùn)行實(shí)時(shí)行為監(jiān)測和監(jiān)測結(jié)果分析。常用的動態(tài)監(jiān)測技術(shù)由沙箱技術(shù)、鉤子技術(shù)等。
總體來看,動態(tài)監(jiān)測技術(shù)就是實(shí)時(shí)的檢測被測程序的行為,所發(fā)送的數(shù)據(jù),并對相關(guān)信息、行為和數(shù)據(jù)等進(jìn)行捕獲。因此對于惡意應(yīng)用取證來說,靜態(tài)檢測技術(shù)和動態(tài)監(jiān)測技術(shù)都是必不可少的。
前文已詳細(xì)闡述了如何通過靜態(tài)檢測技術(shù)和動態(tài)監(jiān)測技術(shù)實(shí)現(xiàn)針對Android系統(tǒng)惡意程序開展電子取證。具體流程一般為檢測環(huán)境準(zhǔn)備、樣本獲取、惡意程序檢測、電子證物提取以及出具報(bào)告這幾個(gè)環(huán)節(jié)。其中惡意程序檢測環(huán)節(jié)又分為APK逆向、靜態(tài)檢測和動態(tài)監(jiān)測三個(gè)子項(xiàng)目。
筆者將對工作中捕獲的一個(gè)Android惡意程序“相冊.APK”進(jìn)行檢測和取證。該惡意程序偽裝成相冊程序,無基本相冊功能,實(shí)際上該程序運(yùn)行后,會申請大量敏感權(quán)限,能夠群發(fā)惡意短信,獲取大量用戶信息,屬于典型的惡意程序。
在進(jìn)行惡意程序檢測取證之前,首先準(zhǔn)備實(shí)驗(yàn)環(huán)境的搭建。其中包括硬件設(shè)備和軟件環(huán)境兩大部分。
硬件設(shè)備有:取證工作站、手機(jī)信息號屏蔽設(shè)備、手機(jī)專用檢驗(yàn)設(shè)備、照相機(jī)等。
軟件環(huán)境有:殺毒軟件、手機(jī)取證系統(tǒng)、Wireshark、手機(jī)PC套件等。
本次檢測實(shí)驗(yàn)是以一臺安裝了“相冊.APK”木馬的手機(jī)(聯(lián)想手機(jī)A288T型號)作為樣本,該樣本手機(jī)由于用戶的疏忽,點(diǎn)擊了其短信內(nèi)含有惡意鏈接地址,下載安裝了手機(jī)木馬程序,導(dǎo)致用戶手機(jī)內(nèi)大量隱私信息被泄露。惡意程序植入用戶手機(jī)后,以致該手機(jī)用戶遭受到詐騙犯罪侵害。為查明該手機(jī)樣本中是否含有惡意程序、惡意程序的數(shù)量、惡意程序具體行為以及相關(guān)涉案線索,需對該樣本手機(jī)進(jìn)行檢測取證,獲取手機(jī)中的惡意程序進(jìn),并開展檢測取證工作。
2.4.1 樣本登記
對已感染了“相冊.APK”木馬的手機(jī)進(jìn)行唯一性編號,并對手機(jī)型號、手機(jī)IMEI碼、Android版本號、內(nèi)核版本號等相關(guān)信息進(jìn)行登記。隨后,再對具有唯一編號的實(shí)驗(yàn)手機(jī)進(jìn)行拍照和保全備份。
2.4.2 數(shù)據(jù)提取
首先,啟動檢驗(yàn)工作站的殺毒軟件對工作站自身工作系統(tǒng)進(jìn)行殺毒,其次,在手機(jī)通信信號屏蔽的狀態(tài)下,運(yùn)行手機(jī)檢驗(yàn)系統(tǒng),分別獲取其內(nèi)存和SD卡信息,找出所有APK文件。
2.4.3 篩查分析
將所有提取的APK文件進(jìn)行靜態(tài)篩查過濾,排除正常APK程序包,通過識別簽名、查看權(quán)限申請等方法,將剩下未知來歷的APK文件,批量導(dǎo)入手機(jī)取證系統(tǒng)中,通過敏感權(quán)限檢測,發(fā)現(xiàn)只有“相冊.APK”申請了大量與其描述功能完全不一致的敏感權(quán)限,因此它的危險(xiǎn)等級高。
2.4.4 逆向工程
為了能夠更好的確定風(fēng)險(xiǎn)函數(shù)的調(diào)用檢測,需要對原始的可執(zhí)行應(yīng)用程序進(jìn)行反編譯,在反匯編實(shí)現(xiàn)過程中,綜合比較 Dexdump、APKtool、Dedexer等工具性能,發(fā)現(xiàn)APKtool可以對所有資源進(jìn)行處理,功能強(qiáng)大,可以重新打包,能夠快速地解析出應(yīng)用程序中的manifest.xml配置文件,通過Android-Manifest.xml文件的掃描比對,提高了檢測速度,避免對所有代碼進(jìn)行全部特征值掃描比對。通過APKtool反編譯APK,獲取資源文件。進(jìn)而可對資源文件進(jìn)行綜合分析評估,判定該程序是否具有安全風(fēng)險(xiǎn)性。
2.4.5 靜態(tài)檢測
靜態(tài)檢測主要還是指在程序沒有實(shí)際運(yùn)行的情況下,通過程序控制流、數(shù)據(jù)流等信息來研究分析程序的行為[7]。因?yàn)椤跋鄡?APK”樣本的風(fēng)險(xiǎn)評估高,屬惡意程序。首先需要在不運(yùn)行的情況下,通過dex2jar反編譯出惡意程序的源代碼,使用jd-gui工具閱讀jar文件代碼。但是經(jīng)一系列操作后,發(fā)現(xiàn)無法進(jìn)一步查看源代碼文件。因此對“相冊.APK”內(nèi)的lib.so文件進(jìn)行分析,經(jīng)過逆向分析源程序解密出的字符串,如圖2所示。
經(jīng)分析發(fā)現(xiàn)AB為分隔符,前面的數(shù)字為字符ASCII碼減去51所以100AB等于1,102AB等于3依此類推。得到一個(gè)郵箱名a1353347****@vip.*.com,手機(jī)號 1353347****,密碼:****168。
圖2 逆向結(jié)果
2.4.6 動態(tài)監(jiān)測
由于AndroidManifest.xml文件的靜態(tài)分析不能反映應(yīng)用程序數(shù)據(jù)流的走向和遠(yuǎn)程服務(wù)端,在此我們還需采用動態(tài)監(jiān)測技術(shù)進(jìn)行分析。本實(shí)驗(yàn)網(wǎng)絡(luò)抓包使用Linux支持的Tcpdump工具。為實(shí)時(shí)監(jiān)測掌握“相冊.APK”程序運(yùn)行后的具體行為特征,在此,將“相冊.APK”程序安裝到聯(lián)網(wǎng)的實(shí)驗(yàn)機(jī)中。操作流程如下:
(1)加載實(shí)驗(yàn)機(jī),即加載聯(lián)想手機(jī)A288T,如圖3所示。
圖3 加載實(shí)驗(yàn)機(jī)
(2)向?qū)嶒?yàn)機(jī)中 Tcpdump文件賦值,如圖 4所示。
圖4 權(quán)限賦值
(3)為抓包的文件進(jìn)行命名,命名為1_capture.Pcap,如圖5所示。
圖5 重命名
在抓包工具Tcpdump打開后,運(yùn)行“相冊.APK”,間隔數(shù)十幾秒鐘后,關(guān)閉該應(yīng)用程序。將1_capture.pcap文件pull到電子檢驗(yàn)工作站中,通過Wireshark讀取網(wǎng)絡(luò)數(shù)據(jù)通信包。通過抓包分析能夠發(fā)現(xiàn)實(shí)驗(yàn)機(jī)聯(lián)網(wǎng)后數(shù)據(jù)的流向,明確了“相冊.APK”惡意程序運(yùn)行時(shí)數(shù)據(jù)回傳的地址,為案件偵查提供線索支撐。
至此,我們已掌握該惡意程序聯(lián)網(wǎng)后數(shù)據(jù)的流向?yàn)槟赤]件服務(wù)器IP地址,與靜態(tài)檢測的結(jié)果進(jìn)行比對吻合。為獲取動態(tài)監(jiān)測出來的郵箱地址信息。我們還需要進(jìn)行抓包解析工作,如圖6所示。
圖6 捕捉到的數(shù)據(jù)包
經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),郵件發(fā)件人和收件人均為a1353347****@vip.*.com,因此,我們可以證實(shí),a1353347****@vip.*.com 郵箱為惡意程序編寫用于接收手機(jī)使用者通話記錄、短信內(nèi)容等個(gè)人手機(jī)信息。
同時(shí),動態(tài)監(jiān)測發(fā)現(xiàn),該惡意程序會向通信錄列表內(nèi)用戶群發(fā)惡意短信,該惡意短信包括了接收人姓名,因此極易欺騙用戶,如圖7所示。
圖7 截獲的惡意短信
對惡意短信內(nèi)的連接URL地址進(jìn)行調(diào)查發(fā)現(xiàn),用戶如果點(diǎn)擊鏈接,則會出現(xiàn)下載安裝一個(gè)“相冊.APK”程序的提示,被害者通過幾次點(diǎn)擊“下一步”安裝后,該惡意程序便成功地實(shí)現(xiàn)感染和傳播。
本次實(shí)驗(yàn)中所捕獲并分析的惡意程序“相冊.APK”,屬于木馬型惡意APK,調(diào)用大量敏感權(quán)限,且該惡意程序會讀取手機(jī)聯(lián)系人信息和用戶收件箱信息。同時(shí)對聯(lián)系人列表內(nèi)的聯(lián)系人群發(fā)惡意短信。通過短信完成該惡意程序的傳播過程。同時(shí)該惡意程序會將用戶隱私信息如聯(lián)系人列表、短信等相關(guān)信息發(fā)送到指定郵箱,因此本惡意程序具有極高的危害性。
在現(xiàn)有Android安全機(jī)制下,需要在第三方的參與下對應(yīng)用程序進(jìn)行檢測分析,及時(shí)發(fā)現(xiàn)應(yīng)用程序可能帶來的威脅,為發(fā)布預(yù)警信息、案件調(diào)查和取證提供技術(shù)支撐和保障。