侯勤勝,曹天杰
(中國礦業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇徐州 221116)
安卓惡意軟件的分析與檢測(cè)
侯勤勝,曹天杰
(中國礦業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇徐州 221116)
為了充分說明安卓(Android)惡意軟件的工作原理,分析并降低其威脅性,本文利用Android的安全機(jī)制缺陷和Service、Broadcast兩個(gè)組件實(shí)現(xiàn)了一個(gè)隱私竊取軟件。闡述了使用Android逆向工程技術(shù)完成惡意代碼植入的方法。基于云安全技術(shù)和信息比對(duì)算法,設(shè)計(jì)出一個(gè)惡意軟件靜態(tài)檢測(cè)方案,能夠有效地在源碼級(jí)完成惡意軟件的檢測(cè)工作。
安卓;安全機(jī)制缺陷;惡意軟件;逆向工程;靜態(tài)檢測(cè)
在全球智能手機(jī)的發(fā)展過程中,安卓(Android)手機(jī)做出了最突出的貢獻(xiàn)[1]。但基于Android系統(tǒng)的惡意軟件也隨之迅猛發(fā)展,360互聯(lián)網(wǎng)安全中心發(fā)布《2013年中國手機(jī)安全狀況報(bào)告》中指出,在2013年360互聯(lián)網(wǎng)安全中心共截獲了大約67萬個(gè)新增的Android惡意程序樣本,較上年增長了4倍多,平均每天截獲大約1 800個(gè)[2]。由此可見,Android惡意軟件給人們帶來的威脅越來越大。
近年來,針對(duì)Android惡意軟件的研究已經(jīng)成為信息安全領(lǐng)域的熱點(diǎn)。文獻(xiàn)[3]提出了基于權(quán)限對(duì)比的檢測(cè)方案,但該方案只考慮對(duì)權(quán)限的分析,誤報(bào)率和漏報(bào)率比較高。文獻(xiàn)[4]提出了基于軟件行為特征的惡意軟件檢測(cè)方案,但該方案的效率比較低。文獻(xiàn)[5]對(duì)惡意軟件的混淆技術(shù)進(jìn)行了研究,文獻(xiàn)[6]實(shí)現(xiàn)了一個(gè)基于支持向量機(jī)的惡意軟件檢測(cè)方案,但它們都忽略了惡意代碼植入正常應(yīng)用程序的情況,存在較高的漏報(bào)率。這些文獻(xiàn)都沒有對(duì)惡意軟件的實(shí)現(xiàn)原理進(jìn)行分析,缺乏對(duì)惡意軟件研究的主動(dòng)性。
本文利用Android系統(tǒng)的安全機(jī)制缺陷和Service、Broadcast兩個(gè)組件,首先實(shí)現(xiàn)了一個(gè)具有較高隱蔽性的Android隱私竊取軟件,復(fù)現(xiàn)了惡意軟件的實(shí)現(xiàn)原理和技術(shù),并且詳細(xì)描述了惡意軟件開發(fā)者利用Android逆向工程進(jìn)行惡意代碼植入的方法。最后設(shè)計(jì)了一個(gè)惡意軟件靜態(tài)檢測(cè)方案,通過對(duì)簽名信息和應(yīng)用程序編程接口(API)調(diào)用信息的對(duì)比,可以完成對(duì)具有較高隱蔽性和篡改正常應(yīng)用程序的惡意軟件的檢測(cè)工作。
1.1 Android安全機(jī)制缺陷分析
1.1.1 權(quán)限控制機(jī)制缺陷
Android系統(tǒng)的權(quán)限機(jī)制規(guī)定Android應(yīng)用程序只能夠訪問和調(diào)用其AndroidManifest.xm l文件中所聲明的權(quán)限及相關(guān)的API[7]。但這種機(jī)制是靜態(tài)的,系統(tǒng)無法在程序后動(dòng)態(tài)地管理該程序所調(diào)用的權(quán)限[8]。惡意軟件開發(fā)者利用Android的這種靜態(tài)權(quán)限管理機(jī)制來調(diào)用一些敏感權(quán)限實(shí)現(xiàn)惡意操作,并可以用一些隱藏技術(shù)使安全軟件無法限制權(quán)限調(diào)用行為。
1.1.2 簽名機(jī)制缺陷
Android系統(tǒng)的簽名機(jī)制可以在Android應(yīng)用程序安裝時(shí),對(duì)Android安裝包(APK)中的數(shù)字簽名和簽名文件中的數(shù)字簽名一致性進(jìn)行檢測(cè)[9]。但若是將簽名文件刪除,并使用重新簽名技術(shù),則Android系統(tǒng)的簽名機(jī)制就無法正常發(fā)揮其作用[10]。簽名機(jī)制的缺陷主要會(huì)被應(yīng)用到惡意代碼注入的操作中。
1.2 隱私竊取軟件主要功能實(shí)現(xiàn)
本文實(shí)現(xiàn)了基于短信指令的隱私竊取軟件實(shí)例,該軟件可以獲取手機(jī)上的短信、通訊錄、通話記錄等隱私信息,還可以通過該手機(jī)向第三方號(hào)碼發(fā)送短信以及對(duì)特定短信監(jiān)聽。隱私竊取軟件工作流程見圖1。由于Android權(quán)限管理機(jī)制不具備動(dòng)態(tài)管理能力,而且該軟件借助于Service和Broadcast Receiver兩個(gè)組件實(shí)現(xiàn)了軟件的后臺(tái)運(yùn)行,所以Android系統(tǒng)和手機(jī)安全軟件都無法限制其對(duì)敏感權(quán)限的調(diào)用以及惡意行為的實(shí)現(xiàn)。
1.2.1 后臺(tái)運(yùn)行與安全軟件免殺功能的實(shí)現(xiàn)

圖1 隱私竊取軟件工作流程
在Androidmanifest.xm l配置文件中,首先需要將Activity組件去掉,保證程序不會(huì)向用戶提供操作界面。然后定義Broadcast Receiver用來接收短信廣播,可以通過Broadcast Receiver接收到相應(yīng)廣播來觸發(fā)Service進(jìn)入運(yùn)行狀態(tài)。再定義該惡意軟件所要使用的兩個(gè)服務(wù),短信服務(wù)和電話服務(wù),分別用來實(shí)現(xiàn)針對(duì)短信和電話的惡意操作。在AndroidManifest.xm l配置文件中同樣會(huì)聲明該程序所用到的系統(tǒng)權(quán)限,主要是針對(duì)短信和電話進(jìn)行操作的敏感權(quán)限,例如“READ_CONTACTS”(允許程序訪問聯(lián)系人通訊錄信息)、“READ_ SMS”(允許程序讀取短信內(nèi)容)等。
實(shí)現(xiàn)安全軟件免殺是利用了Android中的Intent對(duì)象來實(shí)現(xiàn)的。在Broadcast Receiver的定義中使用了隱性Intent啟動(dòng)的方式,這會(huì)使安全軟件無法確定系統(tǒng)中哪些Service會(huì)響應(yīng)這個(gè)廣播,從而讓惡意行為繞過安全軟件的攔截。
1.2.2 短信屏蔽與指令提取的實(shí)現(xiàn)
首先,需要在源碼中定義指令字段,通過比較短信起始與指令字段長度一致的字段是否與指令字段匹配,來確定該短信是否為指令短信。如果為指令短信,則使用abortBroadcast()函數(shù)來終止該短信廣播,在目標(biāo)手機(jī)中屏蔽掉這條信息。然后,存儲(chǔ)指令短信的來源號(hào)碼并分析短信內(nèi)容,將數(shù)字形式的操作指令提取并存儲(chǔ)。
1.2.3 獲取通話記錄功能的實(shí)現(xiàn)
首先,通過ContentResolver實(shí)現(xiàn)應(yīng)用程序之間的數(shù)據(jù)共享。然后,定義了SQLite數(shù)據(jù)庫中Cursor類的變量,存儲(chǔ)通話記錄當(dāng)中的信息。接著調(diào)用getColumn Index()函數(shù)得到通話記錄中的號(hào)碼、聯(lián)系人姓名、來電方式、通話時(shí)長和通話時(shí)間。最后,將以上信息存儲(chǔ)在ArrayList類里定義的變量中。獲取通訊錄信息和短信的原理與其相似,本文中不再描述。
1.2.4 短信發(fā)送功能的實(shí)現(xiàn)
短信發(fā)送功能依靠sendTextMessage()函數(shù)實(shí)現(xiàn)。
1.2.5 通過目標(biāo)手機(jī)向其他號(hào)碼發(fā)送信息功能的實(shí)現(xiàn)
對(duì)于向其他號(hào)碼發(fā)送短信的功能是固定格式的,即“指令:指令碼:發(fā)送號(hào)碼:短信內(nèi)容”。在獲取發(fā)送號(hào)碼和短信內(nèi)容后,將會(huì)調(diào)用程序中定義的發(fā)送短信功能來發(fā)送短信。
1.2.6 特定短信監(jiān)聽功能的實(shí)現(xiàn)
首先,需要在程序中定義特定號(hào)碼、特定時(shí)間和特定字段。接收到相匹配的短信后會(huì)使用abortBroadcast()函數(shù)來屏蔽短信顯示,然后通過短信發(fā)送功能來完成短信轉(zhuǎn)發(fā)。
首先該軟件需要安裝到Android手機(jī)上,在軟件安裝完成后會(huì)以Service形式在系統(tǒng)后臺(tái)運(yùn)行。當(dāng)手機(jī)接收到短信后,該軟件會(huì)首先對(duì)短信進(jìn)行判斷。若短信中含有指令字段,則將此短信屏蔽并提取出指令碼,然后根據(jù)指令碼完成相應(yīng)的惡意操作。若短信中不含有指令字段,則判斷該短信中是否具有特定號(hào)碼、字段和時(shí)間,如果具有則將此短信屏蔽后轉(zhuǎn)發(fā),如果沒有則正常顯示該短信。
1.3 隱私竊取軟件測(cè)試
本文將在Android虛擬機(jī)上對(duì)該軟件進(jìn)行測(cè)試,測(cè)試系統(tǒng)為當(dāng)前的主流系統(tǒng)Android4.0,主要描述其獲取通話記錄功能和向第三方號(hào)碼發(fā)送短信功能。
該惡意軟件能夠通過360手機(jī)衛(wèi)士的安裝檢測(cè),但是該軟件可以被檢測(cè)出所調(diào)用的權(quán)限。盡管使用360手機(jī)衛(wèi)士將其調(diào)用的所有權(quán)限都設(shè)置為禁止,但是經(jīng)過操作表明360手機(jī)衛(wèi)士依舊無法限制該軟件的惡意行為。
指令手機(jī)向目標(biāo)手機(jī)發(fā)送指令qingqiu:3,將會(huì)得到目標(biāo)手機(jī)的通話記錄信息。通話記錄信息的格式為姓名、類型、日期、通話時(shí)間和號(hào)碼。
使用號(hào)碼為5556的虛擬機(jī)向安裝了監(jiān)聽軟件的號(hào)碼為5554的目標(biāo)手機(jī)發(fā)送指令qingqiu:4:5558:hello world,這樣號(hào)碼為5558的虛擬機(jī)便可以接收到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得到對(duì)應(yīng)的jar文件。然后使用jd-gui工具打開jar文件,查看該程序的Java源代碼。
(3)根據(jù)對(duì)目標(biāo)應(yīng)用程序所要更改的功能,對(duì)AndroidManifest.xm l配置文件進(jìn)行修改,并依據(jù)該程序的Java源代碼對(duì)相應(yīng)的smali代碼進(jìn)行修改。
(4)使用編譯指令apktool.bat b test將修改后的應(yīng)用程序相關(guān)文件打包為新的APK文件。(5)使用簽名工具對(duì)新生成的APK文件進(jìn)行重新簽名,使其能夠正常安裝。
2.2 代碼植入的實(shí)現(xiàn)
惡意軟件開發(fā)者通常會(huì)使用Android逆向技術(shù)獲得應(yīng)用程序的配置文件和smali源代碼,然后在smali文件中寫入具有惡意功能的smali代碼,并且在配置文件中寫入相對(duì)應(yīng)的服務(wù)和權(quán)限,接著將修改后的文件重新打包生成新的APK文件。最后利用Android系統(tǒng)的簽名機(jī)制缺陷,使用重新簽名技術(shù)完成新APK文件的簽名。本文將分別描述所實(shí)現(xiàn)的針對(duì)“礦大飛聞”APP的代碼植入實(shí)例。
首先運(yùn)用反編譯工具獲得“礦大飛聞”的Java源代碼、xm l配置文件和smali代碼文件。然后對(duì)該APP的主配置文件進(jìn)行修改。
(1)添加權(quán)限


當(dāng)前的手機(jī)安全軟件大多是以動(dòng)態(tài)檢測(cè)的方式運(yùn)行,只能根據(jù)軟件運(yùn)行時(shí)的行為來判斷其是否為惡意軟件,對(duì)于文中所實(shí)現(xiàn)的能夠?qū)π袨檫M(jìn)行隱藏的惡意軟件無能為力。而高效的靜態(tài)檢測(cè)方案可以通過分析軟件代碼,從源頭上發(fā)現(xiàn)惡意軟件,能做到提前預(yù)防并降低惡意軟件的漏報(bào)率。
本文提出的檢測(cè)方案采用了C/S架構(gòu)。客戶端部署在裝有Android系統(tǒng)的移動(dòng)終端上,服務(wù)器系統(tǒng)部署在云端的服務(wù)器上。客戶端的主要功能是搜集用戶所要安裝的APK文件的相關(guān)信息,將APK文件上傳到云端服務(wù)器上,接收云端服務(wù)器的反饋信息并顯示給用戶。服務(wù)器系統(tǒng)的主要功能是接收客戶端所上傳的APK文件,對(duì)APK文件進(jìn)行反編譯和靜態(tài)分析,對(duì)該文件的簽名信息進(jìn)行比對(duì),收集檢測(cè)結(jié)果并反饋給客戶端。
檢測(cè)方案的主要工作步驟如下:
(1)客戶端確定所要進(jìn)行檢測(cè)的APK文件,收集該文件的名稱、版本和下載來源信息,然后將APK文件和所獲取的相關(guān)信息發(fā)送給服務(wù)器端。
(2)服務(wù)器系統(tǒng)接收到客戶端發(fā)送的信息后,將該APK文件進(jìn)行解壓縮和反編譯,并根據(jù)官方市場(chǎng)中相同的APK文件對(duì)該文件的簽名信息進(jìn)行比對(duì)。該步驟可以有效地檢測(cè)出被篡改的應(yīng)用程序。
(3)服務(wù)器系統(tǒng)根據(jù)反編譯所得到的配置文件分析該軟件所用到的敏感權(quán)限,并通過其對(duì)敏感API進(jìn)行定位,然后提取出敏感API的排列組合信息。
(4)服務(wù)器系統(tǒng)將提取的敏感API排列組合信息與所收集到的惡意行為API排列組合信息進(jìn)行比對(duì),判斷其是否具有惡意功能。
(5)服務(wù)器系統(tǒng)將簽名比對(duì)的結(jié)果和排列組合信息的比對(duì)結(jié)果進(jìn)行整合評(píng)估,判斷該軟件是否為惡意軟件,并反饋到客戶端,由客戶端顯示給用戶。
用來進(jìn)行簽名信息和API信息比對(duì)的算法步驟如下:
輸入:需要進(jìn)行比對(duì)的字符串str1、str 2;
輸出:兩組字符串的相似度sim。

將計(jì)算出來的sim值與設(shè)定的閾值做比較,對(duì)簽名信息和API信息進(jìn)行判斷,進(jìn)而判斷軟件是否為惡意軟件。該方案借助于Android反編譯技術(shù)和所設(shè)計(jì)的信息比對(duì)方法,而且將主要檢測(cè)任務(wù)置于云端的服務(wù)器上,能夠高效地實(shí)現(xiàn)對(duì)篡改軟件的檢測(cè)和惡意軟件源碼級(jí)的靜態(tài)檢測(cè)。
Android惡意軟件,實(shí)質(zhì)上是通過調(diào)用一些敏感權(quán)限以及對(duì)一些敏感API按照特殊順序排列組合來實(shí)現(xiàn)其惡意功能的,而且惡意軟件若以Service形式運(yùn)行或者嵌入到正常應(yīng)用程序中將更難被發(fā)現(xiàn)。所以,在源碼級(jí)別上實(shí)現(xiàn)對(duì)Android惡意軟件準(zhǔn)確和高效的靜態(tài)檢測(cè)迫在眉睫。此外,用戶在依靠安全軟件保護(hù)手機(jī)的同時(shí),還需要養(yǎng)成良好的使用習(xí)慣。
[1] 199IT互聯(lián)網(wǎng)數(shù)據(jù)資訊中心.2013-2014年中國手機(jī)市場(chǎng)研究年度報(bào)告[EB/OL].2014-03-22.http://www. 199it.com/archives/203469.htm l.
[2] 360互聯(lián)網(wǎng)安全中心.2013年中國手機(jī)安全狀況報(bào)告[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é)基金項(xiàng)目(61303263)
侯勤勝(1992-),男,山東菏澤人,碩士生;曹天杰(1967-),男,江蘇徐州人,教授,博士,博士生導(dǎo)師,主要研究方向?yàn)槊艽a學(xué)與信息安全.
2015-02-05