侯勤勝,曹天杰
(中國礦業(yè)大學(xué)計算機科學(xué)與技術(shù)學(xué)院,江蘇徐州 221116)
安卓惡意軟件的分析與檢測
侯勤勝,曹天杰
(中國礦業(yè)大學(xué)計算機科學(xué)與技術(shù)學(xué)院,江蘇徐州 221116)
為了充分說明安卓(Android)惡意軟件的工作原理,分析并降低其威脅性,本文利用Android的安全機制缺陷和Service、Broadcast兩個組件實現(xiàn)了一個隱私竊取軟件。闡述了使用Android逆向工程技術(shù)完成惡意代碼植入的方法?;谠瓢踩夹g(shù)和信息比對算法,設(shè)計出一個惡意軟件靜態(tài)檢測方案,能夠有效地在源碼級完成惡意軟件的檢測工作。
安卓;安全機制缺陷;惡意軟件;逆向工程;靜態(tài)檢測
在全球智能手機的發(fā)展過程中,安卓(Android)手機做出了最突出的貢獻[1]。但基于Android系統(tǒng)的惡意軟件也隨之迅猛發(fā)展,360互聯(lián)網(wǎng)安全中心發(fā)布《2013年中國手機安全狀況報告》中指出,在2013年360互聯(lián)網(wǎng)安全中心共截獲了大約67萬個新增的Android惡意程序樣本,較上年增長了4倍多,平均每天截獲大約1 800個[2]。由此可見,Android惡意軟件給人們帶來的威脅越來越大。
近年來,針對Android惡意軟件的研究已經(jīng)成為信息安全領(lǐng)域的熱點。文獻[3]提出了基于權(quán)限對比的檢測方案,但該方案只考慮對權(quán)限的分析,誤報率和漏報率比較高。文獻[4]提出了基于軟件行為特征的惡意軟件檢測方案,但該方案的效率比較低。文獻[5]對惡意軟件的混淆技術(shù)進行了研究,文獻[6]實現(xiàn)了一個基于支持向量機的惡意軟件檢測方案,但它們都忽略了惡意代碼植入正常應(yīng)用程序的情況,存在較高的漏報率。這些文獻都沒有對惡意軟件的實現(xiàn)原理進行分析,缺乏對惡意軟件研究的主動性。
本文利用Android系統(tǒng)的安全機制缺陷和Service、Broadcast兩個組件,首先實現(xiàn)了一個具有較高隱蔽性的Android隱私竊取軟件,復(fù)現(xiàn)了惡意軟件的實現(xiàn)原理和技術(shù),并且詳細描述了惡意軟件開發(fā)者利用Android逆向工程進行惡意代碼植入的方法。最后設(shè)計了一個惡意軟件靜態(tài)檢測方案,通過對簽名信息和應(yīng)用程序編程接口(API)調(diào)用信息的對比,可以完成對具有較高隱蔽性和篡改正常應(yīng)用程序的惡意軟件的檢測工作。
1.1 Android安全機制缺陷分析
1.1.1 權(quán)限控制機制缺陷
Android系統(tǒng)的權(quán)限機制規(guī)定Android應(yīng)用程序只能夠訪問和調(diào)用其AndroidManifest.xm l文件中所聲明的權(quán)限及相關(guān)的API[7]。但這種機制是靜態(tài)的,系統(tǒng)無法在程序后動態(tài)地管理該程序所調(diào)用的權(quán)限[8]。惡意軟件開發(fā)者利用Android的這種靜態(tài)權(quán)限管理機制來調(diào)用一些敏感權(quán)限實現(xiàn)惡意操作,并可以用一些隱藏技術(shù)使安全軟件無法限制權(quán)限調(diào)用行為。
1.1.2 簽名機制缺陷
Android系統(tǒng)的簽名機制可以在Android應(yīng)用程序安裝時,對Android安裝包(APK)中的數(shù)字簽名和簽名文件中的數(shù)字簽名一致性進行檢測[9]。但若是將簽名文件刪除,并使用重新簽名技術(shù),則Android系統(tǒng)的簽名機制就無法正常發(fā)揮其作用[10]。簽名機制的缺陷主要會被應(yīng)用到惡意代碼注入的操作中。
1.2 隱私竊取軟件主要功能實現(xiàn)
本文實現(xiàn)了基于短信指令的隱私竊取軟件實例,該軟件可以獲取手機上的短信、通訊錄、通話記錄等隱私信息,還可以通過該手機向第三方號碼發(fā)送短信以及對特定短信監(jiān)聽。隱私竊取軟件工作流程見圖1。由于Android權(quán)限管理機制不具備動態(tài)管理能力,而且該軟件借助于Service和Broadcast Receiver兩個組件實現(xiàn)了軟件的后臺運行,所以Android系統(tǒng)和手機安全軟件都無法限制其對敏感權(quán)限的調(diào)用以及惡意行為的實現(xiàn)。
1.2.1 后臺運行與安全軟件免殺功能的實現(xiàn)
圖1 隱私竊取軟件工作流程
在Androidmanifest.xm l配置文件中,首先需要將Activity組件去掉,保證程序不會向用戶提供操作界面。然后定義Broadcast Receiver用來接收短信廣播,可以通過Broadcast Receiver接收到相應(yīng)廣播來觸發(fā)Service進入運行狀態(tài)。再定義該惡意軟件所要使用的兩個服務(wù),短信服務(wù)和電話服務(wù),分別用來實現(xiàn)針對短信和電話的惡意操作。在AndroidManifest.xm l配置文件中同樣會聲明該程序所用到的系統(tǒng)權(quán)限,主要是針對短信和電話進行操作的敏感權(quán)限,例如“READ_CONTACTS”(允許程序訪問聯(lián)系人通訊錄信息)、“READ_ SMS”(允許程序讀取短信內(nèi)容)等。
實現(xiàn)安全軟件免殺是利用了Android中的Intent對象來實現(xiàn)的。在Broadcast Receiver的定義中使用了隱性Intent啟動的方式,這會使安全軟件無法確定系統(tǒng)中哪些Service會響應(yīng)這個廣播,從而讓惡意行為繞過安全軟件的攔截。
1.2.2 短信屏蔽與指令提取的實現(xiàn)
首先,需要在源碼中定義指令字段,通過比較短信起始與指令字段長度一致的字段是否與指令字段匹配,來確定該短信是否為指令短信。如果為指令短信,則使用abortBroadcast()函數(shù)來終止該短信廣播,在目標(biāo)手機中屏蔽掉這條信息。然后,存儲指令短信的來源號碼并分析短信內(nèi)容,將數(shù)字形式的操作指令提取并存儲。
1.2.3 獲取通話記錄功能的實現(xiàn)
首先,通過ContentResolver實現(xiàn)應(yīng)用程序之間的數(shù)據(jù)共享。然后,定義了SQLite數(shù)據(jù)庫中Cursor類的變量,存儲通話記錄當(dāng)中的信息。接著調(diào)用getColumn Index()函數(shù)得到通話記錄中的號碼、聯(lián)系人姓名、來電方式、通話時長和通話時間。最后,將以上信息存儲在ArrayList類里定義的變量中。獲取通訊錄信息和短信的原理與其相似,本文中不再描述。
1.2.4 短信發(fā)送功能的實現(xiàn)
短信發(fā)送功能依靠sendTextMessage()函數(shù)實現(xiàn)。
1.2.5 通過目標(biāo)手機向其他號碼發(fā)送信息功能的實現(xiàn)
對于向其他號碼發(fā)送短信的功能是固定格式的,即“指令:指令碼:發(fā)送號碼:短信內(nèi)容”。在獲取發(fā)送號碼和短信內(nèi)容后,將會調(diào)用程序中定義的發(fā)送短信功能來發(fā)送短信。
1.2.6 特定短信監(jiān)聽功能的實現(xiàn)
首先,需要在程序中定義特定號碼、特定時間和特定字段。接收到相匹配的短信后會使用abortBroadcast()函數(shù)來屏蔽短信顯示,然后通過短信發(fā)送功能來完成短信轉(zhuǎn)發(fā)。
首先該軟件需要安裝到Android手機上,在軟件安裝完成后會以Service形式在系統(tǒng)后臺運行。當(dāng)手機接收到短信后,該軟件會首先對短信進行判斷。若短信中含有指令字段,則將此短信屏蔽并提取出指令碼,然后根據(jù)指令碼完成相應(yīng)的惡意操作。若短信中不含有指令字段,則判斷該短信中是否具有特定號碼、字段和時間,如果具有則將此短信屏蔽后轉(zhuǎn)發(fā),如果沒有則正常顯示該短信。
1.3 隱私竊取軟件測試
本文將在Android虛擬機上對該軟件進行測試,測試系統(tǒng)為當(dāng)前的主流系統(tǒng)Android4.0,主要描述其獲取通話記錄功能和向第三方號碼發(fā)送短信功能。
該惡意軟件能夠通過360手機衛(wèi)士的安裝檢測,但是該軟件可以被檢測出所調(diào)用的權(quán)限。盡管使用360手機衛(wèi)士將其調(diào)用的所有權(quán)限都設(shè)置為禁止,但是經(jīng)過操作表明360手機衛(wèi)士依舊無法限制該軟件的惡意行為。
指令手機向目標(biāo)手機發(fā)送指令qingqiu:3,將會得到目標(biāo)手機的通話記錄信息。通話記錄信息的格式為姓名、類型、日期、通話時間和號碼。
使用號碼為5556的虛擬機向安裝了監(jiān)聽軟件的號碼為5554的目標(biāo)手機發(fā)送指令qingqiu:4:5558:hello world,這樣號碼為5558的虛擬機便可以接收到5554發(fā)來的內(nèi)容為hello world的短信息。
惡意軟件開發(fā)者通過利用Android逆向工程技術(shù),將其所編寫的惡意代碼嵌入到正常的Android應(yīng)用程序當(dāng)中,這類改造而成的惡意軟件具有很大的迷惑性,給Android系統(tǒng)用戶造成了嚴(yán)重的安全威脅。Android逆向工程技術(shù)中常用到的反編譯工具有APKTool、dex2 jar、jd-gui和JadClipse等。
2.1 代碼植入流程
(1)將目標(biāo)應(yīng)用程序的APK文件復(fù)制到APKTool工具的根目錄下,使用反編譯指令apktool.bat d test.apk test得到該程序的AndroidManifest.xm l配置文件和smali文件。
(2)將目標(biāo)應(yīng)用程序的APK文件解壓縮,得到其classes.dex文件。將該文件復(fù)制到dex2 jar工具的根目錄下,使用反編譯指令dex2 jar.bat classes.dex得到對應(yīng)的jar文件。然后使用jd-gui工具打開jar文件,查看該程序的Java源代碼。
(3)根據(jù)對目標(biāo)應(yīng)用程序所要更改的功能,對AndroidManifest.xm l配置文件進行修改,并依據(jù)該程序的Java源代碼對相應(yīng)的smali代碼進行修改。
(4)使用編譯指令apktool.bat b test將修改后的應(yīng)用程序相關(guān)文件打包為新的APK文件。(5)使用簽名工具對新生成的APK文件進行重新簽名,使其能夠正常安裝。
2.2 代碼植入的實現(xiàn)
惡意軟件開發(fā)者通常會使用Android逆向技術(shù)獲得應(yīng)用程序的配置文件和smali源代碼,然后在smali文件中寫入具有惡意功能的smali代碼,并且在配置文件中寫入相對應(yīng)的服務(wù)和權(quán)限,接著將修改后的文件重新打包生成新的APK文件。最后利用Android系統(tǒng)的簽名機制缺陷,使用重新簽名技術(shù)完成新APK文件的簽名。本文將分別描述所實現(xiàn)的針對“礦大飛聞”APP的代碼植入實例。
首先運用反編譯工具獲得“礦大飛聞”的Java源代碼、xm l配置文件和smali代碼文件。然后對該APP的主配置文件進行修改。
(1)添加權(quán)限
當(dāng)前的手機安全軟件大多是以動態(tài)檢測的方式運行,只能根據(jù)軟件運行時的行為來判斷其是否為惡意軟件,對于文中所實現(xiàn)的能夠?qū)π袨檫M行隱藏的惡意軟件無能為力。而高效的靜態(tài)檢測方案可以通過分析軟件代碼,從源頭上發(fā)現(xiàn)惡意軟件,能做到提前預(yù)防并降低惡意軟件的漏報率。
本文提出的檢測方案采用了C/S架構(gòu)。客戶端部署在裝有Android系統(tǒng)的移動終端上,服務(wù)器系統(tǒng)部署在云端的服務(wù)器上??蛻舳说闹饕δ苁撬鸭脩羲惭b的APK文件的相關(guān)信息,將APK文件上傳到云端服務(wù)器上,接收云端服務(wù)器的反饋信息并顯示給用戶。服務(wù)器系統(tǒng)的主要功能是接收客戶端所上傳的APK文件,對APK文件進行反編譯和靜態(tài)分析,對該文件的簽名信息進行比對,收集檢測結(jié)果并反饋給客戶端。
檢測方案的主要工作步驟如下:
(1)客戶端確定所要進行檢測的APK文件,收集該文件的名稱、版本和下載來源信息,然后將APK文件和所獲取的相關(guān)信息發(fā)送給服務(wù)器端。
(2)服務(wù)器系統(tǒng)接收到客戶端發(fā)送的信息后,將該APK文件進行解壓縮和反編譯,并根據(jù)官方市場中相同的APK文件對該文件的簽名信息進行比對。該步驟可以有效地檢測出被篡改的應(yīng)用程序。
(3)服務(wù)器系統(tǒng)根據(jù)反編譯所得到的配置文件分析該軟件所用到的敏感權(quán)限,并通過其對敏感API進行定位,然后提取出敏感API的排列組合信息。
(4)服務(wù)器系統(tǒng)將提取的敏感API排列組合信息與所收集到的惡意行為API排列組合信息進行比對,判斷其是否具有惡意功能。
(5)服務(wù)器系統(tǒng)將簽名比對的結(jié)果和排列組合信息的比對結(jié)果進行整合評估,判斷該軟件是否為惡意軟件,并反饋到客戶端,由客戶端顯示給用戶。
用來進行簽名信息和API信息比對的算法步驟如下:
輸入:需要進行比對的字符串str1、str 2;
輸出:兩組字符串的相似度sim。
將計算出來的sim值與設(shè)定的閾值做比較,對簽名信息和API信息進行判斷,進而判斷軟件是否為惡意軟件。該方案借助于Android反編譯技術(shù)和所設(shè)計的信息比對方法,而且將主要檢測任務(wù)置于云端的服務(wù)器上,能夠高效地實現(xiàn)對篡改軟件的檢測和惡意軟件源碼級的靜態(tài)檢測。
Android惡意軟件,實質(zhì)上是通過調(diào)用一些敏感權(quán)限以及對一些敏感API按照特殊順序排列組合來實現(xiàn)其惡意功能的,而且惡意軟件若以Service形式運行或者嵌入到正常應(yīng)用程序中將更難被發(fā)現(xiàn)。所以,在源碼級別上實現(xiàn)對Android惡意軟件準(zhǔn)確和高效的靜態(tài)檢測迫在眉睫。此外,用戶在依靠安全軟件保護手機的同時,還需要養(yǎng)成良好的使用習(xí)慣。
[1] 199IT互聯(lián)網(wǎng)數(shù)據(jù)資訊中心.2013-2014年中國手機市場研究年度報告[EB/OL].2014-03-22.http://www. 199it.com/archives/203469.htm l.
[2] 360互聯(lián)網(wǎng)安全中心.2013年中國手機安全狀況報告[EB/OL].2014-02-11.http://awhzfien7r.l5.yunpan.cn/lk/QpERXj6bcPGgA.
[3] Xiong P,Wang X F,Niu W J,et al.Android Malware Detection with Contrasting Permission Patterns[J].China Communications,2014(8):1-14
[4] Yu W,Zhang H L,Ge L Q,et al.On Behavior-based Detection of Malware on Android Platform[C]//Communication and Information System Security Symposium,Globecom.2013:814-819.
[5] Rastogi V,Chen Y,Jiang X.Catch Me If You Can:Evaluation Android Anti-Malware Against Transformation Attacks[J]. IEEE Transactions on Information Forensics and Security,2013,9(1):99-10.
[6] Zhao M,Ge F,Zhang T,et al.Antimaldroid:An Efficient Svm-based Malware Detection Framework for Android[J]. Communications in Computer and Information Science,2011,243(3):158-166.
[7] Teufl P,Kraxberger S,Orthacker C,et al.Android Market Analysis with Activation Patterns[J].Lecture Notes of the Institute of Computer Sciences,Social Informatics and Telecommunications Engineering,2012,94(4):1-12.
[8] Kleidermacher D.Bringing Security to Android-Based Devices[J].Strategies and Methodologies,2010(5):56-58.
[9] Burns J.Developing Secure Mobile Application for Android[J].ISEC:Partners,2008(10):1-28.
[10] Shabtai A,Kanonov U,Elovici Y,et al.“Andromaly”:a Behavioral Malware Detection Framework for Android Devices[J].Journal of Intelligent Information Systems,2012(1):161-190.
TP309.5
A
1672-6871(2015)05-0052-05
國家自然科學(xué)基金項目(61303263)
侯勤勝(1992-),男,山東菏澤人,碩士生;曹天杰(1967-),男,江蘇徐州人,教授,博士,博士生導(dǎo)師,主要研究方向為密碼學(xué)與信息安全.
2015-02-05