亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Android動(dòng)態(tài)加載與反射機(jī)制的靜態(tài)污點(diǎn)分析研究

        2017-02-22 04:38:50樂(lè)洪舟張玉清王文杰劉奇旭
        關(guān)鍵詞:污點(diǎn)調(diào)用靜態(tài)

        樂(lè)洪舟 張玉清,2 王文杰 劉奇旭

        1(綜合業(yè)務(wù)網(wǎng)理論及關(guān)鍵技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室(西安電子科技大學(xué)) 西安 710071)2(中國(guó)科學(xué)院大學(xué)國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)入侵防范中心 北京 101408)3 (信息安全國(guó)家重點(diǎn)實(shí)驗(yàn)室(中國(guó)科學(xué)院信息工程研究所) 北京 100093) (yuehz@nipc.org.cn)

        Android動(dòng)態(tài)加載與反射機(jī)制的靜態(tài)污點(diǎn)分析研究

        樂(lè)洪舟1張玉清1,2王文杰2,3劉奇旭2,3

        1(綜合業(yè)務(wù)網(wǎng)理論及關(guān)鍵技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室(西安電子科技大學(xué)) 西安 710071)2(中國(guó)科學(xué)院大學(xué)國(guó)家計(jì)算機(jī)網(wǎng)絡(luò)入侵防范中心 北京 101408)3(信息安全國(guó)家重點(diǎn)實(shí)驗(yàn)室(中國(guó)科學(xué)院信息工程研究所) 北京 100093) (yuehz@nipc.org.cn)

        隱私泄露是當(dāng)前Android安全中最為重要的問(wèn)題之一,目前檢測(cè)隱私泄露的最主要方法是污點(diǎn)分析.Android靜態(tài)污點(diǎn)分析技術(shù)憑借其代碼覆蓋率高、漏報(bào)率低的特點(diǎn)而被廣泛應(yīng)用在Android應(yīng)用隱私泄露的檢測(cè)上.然而,現(xiàn)有的靜態(tài)污點(diǎn)分析工具卻不能對(duì)Android動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效污點(diǎn)分析.鑒于當(dāng)前Android動(dòng)態(tài)加載和反射機(jī)制被越來(lái)越廣泛地應(yīng)用的現(xiàn)狀,對(duì)如何使Android靜態(tài)污點(diǎn)分析工具有效地處理Android應(yīng)用的動(dòng)態(tài)加載和反射機(jī)制的問(wèn)題進(jìn)行了研究.對(duì)Android源碼進(jìn)行了修改,使Android系統(tǒng)能夠?qū)ndroid應(yīng)用實(shí)際運(yùn)行中加載的dex文件和反射調(diào)用信息進(jìn)行實(shí)時(shí)存儲(chǔ),并利用這些信息對(duì)Android靜態(tài)污點(diǎn)分析過(guò)程進(jìn)行引導(dǎo).以當(dāng)前領(lǐng)先的靜態(tài)污點(diǎn)分析工具FlowDroid為基礎(chǔ),對(duì)其進(jìn)行了改進(jìn),提出了使用非反射調(diào)用語(yǔ)句替換反射調(diào)用語(yǔ)句的策略,實(shí)現(xiàn)了一個(gè)能夠?qū)ndroid動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效污點(diǎn)分析的工具——DyLoadDroid,并通過(guò)實(shí)驗(yàn)驗(yàn)證了其在處理Android動(dòng)態(tài)加載和反射機(jī)制的污點(diǎn)分析問(wèn)題上的有效性.

        安卓;隱私泄露;污點(diǎn)分析;動(dòng)態(tài)加載;反射

        當(dāng)前Android隱私泄露問(wèn)題泛濫,不管是惡意應(yīng)用還是非惡意應(yīng)用,都存在隱私泄露問(wèn)題[1].惡意應(yīng)用常常以侵犯用戶的隱私作為目的[2],為惡意應(yīng)用制造者或傳播者提供非法利益[3].非惡意應(yīng)用為了實(shí)現(xiàn)特定功能或提供更好的服務(wù),也存在侵犯用戶隱私的問(wèn)題,例如,手機(jī)地圖應(yīng)用為了向用戶提供用戶所在地的地圖信息,會(huì)獲取用戶的地理位置等隱私信息[4];嵌入Android應(yīng)用(以下簡(jiǎn)稱App)中的第三方廣告類庫(kù)可能會(huì)收集用戶的一些隱私信息,以了解用戶的喜好,提供更具針對(duì)性的廣告[5-6].然而,不管Android應(yīng)用是否惡意,隱私泄露都是當(dāng)前Android手機(jī)用戶面臨的最主要安全威脅之一[4],對(duì)Android隱私泄露的檢測(cè)依然是當(dāng)前移動(dòng)安全領(lǐng)域研究的熱點(diǎn).

        對(duì)于隱私泄露的檢測(cè),目前最主要的方法是污點(diǎn)分析,包括靜態(tài)污點(diǎn)分析和動(dòng)態(tài)污點(diǎn)分析[7].動(dòng)態(tài)污點(diǎn)分析方法是指在Android應(yīng)用動(dòng)態(tài)執(zhí)行的過(guò)程中對(duì)手機(jī)中的隱私數(shù)據(jù)進(jìn)行追蹤,主要的動(dòng)態(tài)污點(diǎn)分析工具有TaintDroid[8],AppFence[9],KynoidA[10]等.靜態(tài)污點(diǎn)分析是指在不運(yùn)行Android應(yīng)用的情況下直接采用靜態(tài)分析的方法對(duì)其進(jìn)行污點(diǎn)分析,比較典型的靜態(tài)污點(diǎn)分析工具有FlowDroid[11],LeakMiner[12],AndroidLeaks[13]等.使用動(dòng)態(tài)污點(diǎn)分析的方法檢測(cè)隱私泄露的優(yōu)點(diǎn)是隱私數(shù)據(jù)追蹤準(zhǔn)確、誤報(bào)率低,缺點(diǎn)是代碼覆蓋率低,對(duì)于實(shí)際運(yùn)行中未被觸發(fā)的隱私泄露,使用動(dòng)態(tài)污點(diǎn)分析的方式將無(wú)法檢測(cè),因此,其漏報(bào)率較高.而靜態(tài)污點(diǎn)分析則剛好相反,靜態(tài)污點(diǎn)分析的缺點(diǎn)是代碼覆蓋率高,可以檢測(cè)出比動(dòng)態(tài)污點(diǎn)分析更多的隱私泄露問(wèn)題;然而,其誤報(bào)率也較高.因此,在實(shí)際的隱私泄露檢測(cè)中,靜態(tài)污點(diǎn)分析和動(dòng)態(tài)污點(diǎn)分析方法是互補(bǔ)的.

        就靜態(tài)污點(diǎn)分析而言,當(dāng)前靜態(tài)污點(diǎn)分析工具面臨的一個(gè)重要問(wèn)題就是不能對(duì)Android動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效污點(diǎn)分析.而當(dāng)前Android動(dòng)態(tài)加載與反射機(jī)制被越來(lái)越廣泛地應(yīng)用在Android開(kāi)發(fā)中,文獻(xiàn)[14]對(duì)Google Play上的14 283個(gè)App進(jìn)行統(tǒng)計(jì)發(fā)現(xiàn),在這些App中有18.5%的App使用了動(dòng)態(tài)加載技術(shù),88%的App使用了反射調(diào)用機(jī)制.文獻(xiàn)[15]也指出,從2010—2014年,使用反射機(jī)制的Android惡意應(yīng)用的比例從43.87%上升到78%,非惡意應(yīng)用也從39.55%上升到93%.動(dòng)態(tài)加載和反射調(diào)用技術(shù)的大量應(yīng)用使當(dāng)前的靜態(tài)污點(diǎn)分析工具越來(lái)越難以對(duì)Android應(yīng)用的污點(diǎn)分析問(wèn)題進(jìn)行有效檢測(cè)[16].雖然動(dòng)態(tài)污點(diǎn)分析工具作為靜態(tài)污點(diǎn)分析工具的一個(gè)重要補(bǔ)充,可以在不受動(dòng)態(tài)加載和反射機(jī)制影響的情況下對(duì)Android應(yīng)用進(jìn)行污點(diǎn)分析,但由于它在代碼覆蓋率上的劣勢(shì),使其無(wú)法取代靜態(tài)污點(diǎn)分析工具在Android污點(diǎn)分析中的作用.

        鑒于動(dòng)態(tài)加載和反射機(jī)制被廣泛使用的現(xiàn)狀,為了充分發(fā)揮靜態(tài)污點(diǎn)分析工具在Android隱私泄露檢測(cè)中的作用,就必須采取措施解決靜態(tài)污點(diǎn)分析工具處理Android動(dòng)態(tài)加載和反射機(jī)制的缺陷.本文以此為出發(fā)點(diǎn),對(duì)當(dāng)前領(lǐng)先的靜態(tài)污點(diǎn)分析工具FlowDroid[11]進(jìn)行改進(jìn),開(kāi)發(fā)出能夠?qū)ndroid動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效污點(diǎn)分析的工具DyLoadDroid,首先將被測(cè)App實(shí)際運(yùn)行中被加載的dex文件下載到本地計(jì)算機(jī),并將系統(tǒng)中所發(fā)生的反射調(diào)用信息記錄下來(lái);然后在靜態(tài)分析的過(guò)程中,根據(jù)這些反射調(diào)用信息將相應(yīng)的反射調(diào)用語(yǔ)句替換為非反射調(diào)用語(yǔ)句,再運(yùn)行FlowDroid的靜態(tài)污點(diǎn)分析流程,使其能夠?qū)κ褂肁ndroid動(dòng)態(tài)加載和反射調(diào)用機(jī)制的Android應(yīng)用進(jìn)行有效的污點(diǎn)分析.

        本文的主要貢獻(xiàn)包括:

        1) 首次提出了使用非反射機(jī)制代替反射機(jī)制的解決方案,解決了靜態(tài)污點(diǎn)分析技術(shù)不能正確處理Android反射機(jī)制的問(wèn)題.

        2) 對(duì)當(dāng)前領(lǐng)先的靜態(tài)污點(diǎn)分析工具Flow-Droid進(jìn)行了改進(jìn),開(kāi)發(fā)出能夠?qū)ndroid動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效污點(diǎn)分析的工具DyLoad-Droid,并通過(guò)實(shí)驗(yàn)驗(yàn)證了其有效性.

        3) 改寫了Android源碼,使Android系統(tǒng)能夠在系統(tǒng)中發(fā)生動(dòng)態(tài)加載和反射調(diào)用行為時(shí)通過(guò)日志輸出的形式輸出相關(guān)信息,DyLoadDroid便可以根據(jù)這些信息及時(shí)下載被加載的dex文件,并提取反射調(diào)用信息,從而指引DyLoadDroid的靜態(tài)污點(diǎn)分析模塊對(duì)Android應(yīng)用進(jìn)行污點(diǎn)分析.

        1 相關(guān)工作

        在Android應(yīng)用動(dòng)態(tài)加載和反射機(jī)制的研究方面, Poeplau等人[17]對(duì)Android動(dòng)態(tài)加載執(zhí)行代碼的安全問(wèn)題進(jìn)行了研究,研究了惡意應(yīng)用利用動(dòng)態(tài)加載機(jī)制繞過(guò)安全檢查的問(wèn)題,并對(duì)非惡意應(yīng)用動(dòng)態(tài)加載執(zhí)行代碼可能導(dǎo)致的安全漏洞進(jìn)行了研究.Zhauniarovich等人[14]提出了StaDynA工具,能夠在Android應(yīng)用運(yùn)行過(guò)程中發(fā)生動(dòng)態(tài)加載時(shí),下載被動(dòng)態(tài)加載的dex文件,并記錄Android應(yīng)用的反射調(diào)用信息,結(jié)合AndroGuard生成函數(shù)調(diào)用關(guān)系圖.然而StaDynA是一個(gè)比較初步的工具,只能為分析者提供一種輔助,不能對(duì)Android應(yīng)用中存在的安全問(wèn)題進(jìn)行自動(dòng)化分析.

        在Android靜態(tài)污點(diǎn)分析方面,Yang等人[12]提出了LeakMiner工具, LeakMiner將Android的生命周期考慮在內(nèi),構(gòu)建能夠覆蓋所有回調(diào)方法的函數(shù)調(diào)用圖;但LeakMiner對(duì)上下文不敏感,且不支持隱式信息流泄露,因此其污點(diǎn)分析準(zhǔn)確率不高.Gibler等人[13]提出的AndroidLeaks工具具有上下文敏感的特性,但它不具有域敏感和對(duì)象敏感的特性,即當(dāng)對(duì)象的某一個(gè)域存儲(chǔ)了污點(diǎn)數(shù)據(jù),則AndroidLeaks將整個(gè)對(duì)象視為污點(diǎn),因此其檢測(cè)準(zhǔn)確性也不高.FlowDroid是當(dāng)前較為先進(jìn)的Android靜態(tài)污點(diǎn)分析工具,由Arzt等人[11]在PLDI 2014會(huì)議上提出,F(xiàn)lowDroid能夠構(gòu)建準(zhǔn)確的Android生命周期模型,并對(duì)Android的回調(diào)函數(shù)進(jìn)行有效的處理.它使用IFDS算法進(jìn)行準(zhǔn)確和高效的污點(diǎn)傳播分析,具有上下文敏感、流敏感、域敏感和對(duì)象敏感的特性.為了解決FlowDroid在組件間數(shù)據(jù)流處理問(wèn)題上的缺陷,Octeau等人[18]在FlowDroid的基礎(chǔ)上,提出了組件間污點(diǎn)分析工具Epicc,能夠?qū)M件間的數(shù)據(jù)傳遞進(jìn)行較為準(zhǔn)確的污點(diǎn)分析.為了使FlowDroid能夠在多個(gè)應(yīng)用之間進(jìn)行污點(diǎn)傳播分析,Klieber等人[19]在FlowDroid和Epicc的基礎(chǔ)上提出DidFail工具,能夠正確處理多個(gè)應(yīng)用之間的相互調(diào)用和數(shù)據(jù)傳輸,進(jìn)而追蹤污點(diǎn)的傳播.

        在Android動(dòng)態(tài)污點(diǎn)分析方面,TaintDroid[8]將所有的隱私數(shù)據(jù)標(biāo)記為污點(diǎn),它在內(nèi)存中為系統(tǒng)中的每個(gè)對(duì)象多申請(qǐng)一倍的空間,用于存儲(chǔ)污點(diǎn)標(biāo)記,在App動(dòng)態(tài)執(zhí)行的過(guò)程中,根據(jù)污點(diǎn)標(biāo)記追蹤污點(diǎn)在內(nèi)存中的傳播情況.Hornyack等人[9]提出的AppFence工具不僅可以檢測(cè)到系統(tǒng)中發(fā)生的隱私泄露問(wèn)題,而且可以阻止隱私信息的泄露.它采取數(shù)據(jù)遮蔽和滲出阻塞技術(shù),將隱私數(shù)據(jù)替換為影子數(shù)據(jù)傳遞到外部網(wǎng)絡(luò)來(lái)防止隱私數(shù)據(jù)的泄露,但其嚴(yán)格的安全控制也容易阻礙App的正常運(yùn)行.Schreckling等人[10]提出的Kynoid工具是對(duì)TaintDroid的改進(jìn),能夠監(jiān)控更細(xì)粒度的污染源,并能夠使用戶以安全策略的方式定義污點(diǎn)傳播內(nèi)容,然而,Kynoid運(yùn)行時(shí)的內(nèi)存消耗比TaintDroid更大,速度也更慢.

        2 背景介紹

        Android動(dòng)態(tài)加載技術(shù)是指Android應(yīng)用在動(dòng)態(tài)執(zhí)行的過(guò)程中加載主應(yīng)用以外的dex文件,并對(duì)該文件中的程序和資源進(jìn)行訪問(wèn)的技術(shù)[14],被加載的dex文件包括“.apk”和“.jar”2種后綴的文件形式,該dex文件可以在沒(méi)有被安裝的情況下被其他Android應(yīng)用通過(guò)反射機(jī)制訪問(wèn).

        反射機(jī)制是Java語(yǔ)言的一個(gè)重要特性,它使程序在Java的運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為Java語(yǔ)言的反射機(jī)制[20].Android應(yīng)用基于Java語(yǔ)言開(kāi)發(fā),因此可以充分利用Java的反射機(jī)制.下面我們通過(guò)一個(gè)例子展示Android的動(dòng)態(tài)加載和反射調(diào)用機(jī)制.

        圖1所示為在Android反射調(diào)用中充當(dāng)調(diào)用者的例子,該段代碼在第⑥行動(dòng)態(tài)加載了位于SD卡中的apk文件DynamicLoadClient.apk;第⑦行加載了該apk文件中的類com.dynamicloadclient.SendMessage;在第⑨行對(duì)該類進(jìn)行了實(shí)例化,并通過(guò)該類的構(gòu)造方法傳入?yún)?shù)“MessageMark”;第⑩行取出該類的名為sendMSG的方法;第行對(duì)該方法進(jìn)行了反射調(diào)用,傳入?yún)?shù)“123456”和deviceId.圖2所示的代碼展示了被調(diào)用者代碼,該段代碼的功能是向手機(jī)號(hào)為number的移動(dòng)設(shè)備發(fā)送內(nèi)容為content的短信信息.結(jié)合調(diào)用者和被調(diào)用者的代碼我們可以看出,調(diào)用者通過(guò)反射調(diào)用向手機(jī)號(hào)為“123456”的設(shè)備發(fā)送了內(nèi)容為設(shè)備的IMEI號(hào)的短信.

        ① ②③④⑤⑥ ⑦ ⑧ ⑨ ⑩ TelephonyManagertm=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);StringdeviceId=tm.getDeviceId();try{Filefile=newFile("∕sdcard∕DynamicLoadClient.apk");if(file.exists()){DexClassLoadercl=newDexClassLoader(file.toString(),getFilesDir().getAbsolutePath(),null,ClassLoader.getSystemClassLoader().getParent());ClassmyClass=cl.loadClass("com.dynamicloadclient.SendMessage");Constructorconstructor=myClass.getConstructor(newClass[]{String.class});Objectobj=constructor.newInstance(newObject[]{"MessageMark"});Methodaction=myClass.getMethod("sendMSG",newClass[]{String.class,String.class});Stringreturn_value=(String)action.invoke(obj,"123456",deviceId);Log.i("return_value","return_value:"+return_value);}}catch(Exceptionex){ex.printStackTrace();}

        Fig. 1 The caller in Java reflection invocation

        圖1 Java反射調(diào)用中的調(diào)用者

        ①②③ ④ ⑤publicStringsendMSG(Stringnumber,Stringcontent){SmsManagersManager=SmsManager.getDefault();sManager.sendTextMessage(number,null,content,null,null);}Log.i(markStr,"Amessagehasbeensentto"+number+",content:"+content);return"OK";}

        Fig. 2 The callee in Java reflection invocation

        圖2 Java反射調(diào)用中的被調(diào)用者

        圖1和圖2所示的例子演示了一個(gè)典型的隱私泄露問(wèn)題,設(shè)備的IMEI號(hào)被以短信的形式發(fā)送給指定手機(jī).隱私泄露問(wèn)題也是當(dāng)前污點(diǎn)分析重點(diǎn)關(guān)注的問(wèn)題,然而,當(dāng)前的靜態(tài)污點(diǎn)分析技術(shù)卻難以對(duì)存在動(dòng)態(tài)加載和反射機(jī)制的程序進(jìn)行正確的處理,因而不能進(jìn)行有效的靜態(tài)污點(diǎn)分析.例如,若將該例中的設(shè)備IMEI號(hào)作為污染源(source),將發(fā)送短信的API調(diào)用作為陷入點(diǎn)(sink),則靜態(tài)污點(diǎn)分析不能構(gòu)建從污染源到陷入點(diǎn)的有效路徑,因而不能檢測(cè)到這個(gè)隱私泄露問(wèn)題.原因是靜態(tài)分析不能確定通過(guò)newInstance方法實(shí)例化的對(duì)象和通過(guò)invoke方法反射調(diào)用的目標(biāo)方法.在該例子中,被反射調(diào)用的方法存在于被加載的dex文件中,實(shí)際上App也可以通過(guò)反射調(diào)用的方式調(diào)用Android系統(tǒng)中任何可達(dá)的Java方法,包括App本身包含的或Android系統(tǒng)類庫(kù)中包含的Java方法,這些反射調(diào)用都不能被當(dāng)前的靜態(tài)污點(diǎn)分析工具正確的處理.

        3 總體設(shè)計(jì)

        本節(jié)開(kāi)始將系統(tǒng)地介紹我們對(duì)FlowDroid進(jìn)行改進(jìn)后的工具——DyLoadDroid.

        DyLoadDroid的總體結(jié)構(gòu)和流程圖如圖3所示,為了方便下文描述,我們做出如下名詞定義.

        1) 源方法.調(diào)用者所在的方法,用Sm表示,如圖1中所示代碼所在的Java方法.

        2) 源類.源方法所在的類,用Sc表示.

        3) 目標(biāo)方法.被調(diào)用者所在的方法,用Tm表示,如圖2所示代碼所在的Java方法.

        4) 目標(biāo)類.被調(diào)用者所在的類,用Tc表示.

        5) 反射方法.調(diào)用者實(shí)施反射機(jī)制所借助的方法,包括newInstance和invoke方法,用Rm表示,如圖1所示代碼第⑨行被調(diào)用的newInstance方法和第行被調(diào)用的invoke方法.

        6) 反射類.反射方法所在的類,用Rc表示.

        Fig. 3 Overall flow chart of DyLoadDroid圖3 DyLoadDroid總體流程圖

        DyLoadDroid主要由2部分組成:動(dòng)態(tài)執(zhí)行模塊和靜態(tài)分析模塊,為了便于下文的描述,我們把它們分別簡(jiǎn)稱為DyLoadDroid-D和DyLoadDroid-S.DyLoadDroid首先運(yùn)行DyLoadDroid-D,將待測(cè)App安裝進(jìn)Android設(shè)備中,該Android設(shè)備中安裝的Android系統(tǒng)是由我們對(duì)Android源碼進(jìn)行特定修改并重新編譯后生成的,它能夠在日志中輸出系統(tǒng)中發(fā)生的動(dòng)態(tài)加載和反射調(diào)用的相關(guān)信息,針對(duì)Android源碼所做的修改我們將在4.1節(jié)中介紹.安裝完該App后,DyLoadDroid-D運(yùn)行該App文件,并循環(huán)讀取系統(tǒng)的日志輸出,獲取App的動(dòng)態(tài)加載和反射調(diào)用的相關(guān)信息.當(dāng)捕獲到該App的動(dòng)態(tài)加載行為時(shí),DyLoadDroid-D便向Android設(shè)備發(fā)出adb下載命令,將被加載的dex文件下載到本地計(jì)算機(jī).當(dāng)捕獲到該App的反射調(diào)用行為時(shí),DyLoadDroid-D將從日志中提取該反射調(diào)用所對(duì)應(yīng)的源方法Sm、反射方法Rm和目標(biāo)方法Tm等信息,并將這些信息以三元組Sm,Rm,Tm的形式存儲(chǔ)在本地計(jì)算機(jī)的文件中,我們稱該文件為SRT信息庫(kù).這些被下載的dex文件和SRT信息庫(kù)將用于后續(xù)的靜態(tài)污點(diǎn)分析.

        當(dāng)動(dòng)態(tài)分析模塊執(zhí)行結(jié)束以后,DyLoadDroid運(yùn)行DyLoadDroid-S,DyLoadDroid-S實(shí)際上是對(duì)FlowDroid的改進(jìn),我們將動(dòng)態(tài)分析模塊輸出的dex文件和SRT信息庫(kù)補(bǔ)充進(jìn)FlowDroid的靜態(tài)污點(diǎn)分析流程,彌補(bǔ)FlowDroid不能處理動(dòng)態(tài)加載和反射調(diào)用的缺陷.FlowDroid首先將待測(cè)APK和被加載的dex文件中的一些必需的Java Class文件加載進(jìn)內(nèi)存,并轉(zhuǎn)換為Soot[21]的三地址中間語(yǔ)言Jimple;然后FlowDroid根據(jù)SRT信息庫(kù)對(duì)源方法的相應(yīng)反射方法調(diào)用進(jìn)行轉(zhuǎn)換,使FlowDroid能夠?qū)Ψ瓷浞椒ㄕ{(diào)用構(gòu)建正確的函數(shù)調(diào)用圖,指引FlowDroid進(jìn)行靜態(tài)污點(diǎn)分析,最終輸出結(jié)果.

        4 DyLoadDroid-D原理介紹

        4.1 Android源碼修改

        我們針對(duì)Android源碼的修改參考了文獻(xiàn)[14]的方法,所修改的Android版本為4.1.2,主要修改包括:

        1) Android系統(tǒng)方法調(diào)用堆棧所存儲(chǔ)元素的修改.Android系統(tǒng)方法調(diào)用堆棧存儲(chǔ)著系統(tǒng)中發(fā)生的方法調(diào)用序列.源碼中方法調(diào)用堆棧只存儲(chǔ)類名和方法名,而不存儲(chǔ)方法的參數(shù).我們修改了Android源碼,使其能夠存儲(chǔ)方法的參數(shù),這樣便可以通過(guò)方法調(diào)用堆棧獲得方法的完整信息.

        2) 增加動(dòng)態(tài)加載的日志輸出.為了監(jiān)控Android應(yīng)用的動(dòng)態(tài)加載行為,我們對(duì)Android源碼的DexFile.java文件的openDexFile方法進(jìn)行了相應(yīng)的修改,使當(dāng)系統(tǒng)發(fā)生動(dòng)態(tài)加載行為后,通過(guò)日志輸出被加載的dex文件的路徑,以便于DyLoadDroid-D能夠及時(shí)下載被加載的dex文件.

        3) 增加newInstance方法調(diào)用的日志輸出.為了監(jiān)控Android應(yīng)用通過(guò)newInstance方法進(jìn)行對(duì)象實(shí)例化的行為,我們對(duì)Android源碼的Constructor.java和Method.java文件的newInstance方法進(jìn)行了修改,使系統(tǒng)中發(fā)生了對(duì)newInstance方法的調(diào)用時(shí),輸出被實(shí)例化的目標(biāo)類的類名、初始化方法名和初始化參數(shù).

        4) 增加invoke方法調(diào)用的日志輸出.為了監(jiān)控Android應(yīng)用通過(guò)invoke方法進(jìn)行反射調(diào)用的行為,我們對(duì)Method.java方法中的invoke方法進(jìn)行了修改,使系統(tǒng)發(fā)生了invoke方法調(diào)用時(shí),輸出目標(biāo)類的類名、目標(biāo)方法的方法名和參數(shù).

        以上對(duì)源碼的修改的2~4這3項(xiàng)都對(duì)應(yīng)日志輸出,除了其中所描述的日志輸出以外,還需要額外輸出日志標(biāo)識(shí)、uid號(hào)、操作號(hào)、調(diào)用堆棧信息等.日志標(biāo)識(shí)用于標(biāo)識(shí)哪些日志信息是需要被DyLoadDroid-D解析的;uid號(hào)使DyLoadDroid-D能夠辨別哪些log輸出是由待測(cè)App產(chǎn)生的;操作號(hào)用于標(biāo)識(shí)所監(jiān)控的程序行為的類型,根據(jù)被調(diào)用的方法的不同,我們?cè)O(shè)置newInstance,invoke,openDexFile方法所對(duì)應(yīng)的操作號(hào)分別為1,2,3.此外,對(duì)于修改3,4這2項(xiàng)的日志輸出,我們還額外輸出當(dāng)前線程在Android方法調(diào)用堆棧中的信息,這些信息將輔助DyLoadDroid-D獲得源方法信息和反射方法信息,具體內(nèi)容我們將在4.2節(jié)介紹.

        4.2 日志解析

        DyLoadDroid-D安裝并運(yùn)行App后會(huì)取出該App所對(duì)應(yīng)的uid號(hào),App的運(yùn)行需要實(shí)驗(yàn)者對(duì)其進(jìn)行實(shí)際使用,實(shí)驗(yàn)者在使用App的過(guò)程中觸發(fā)盡可能多的動(dòng)態(tài)加載和反射調(diào)用行為.DyLoadDroid-D會(huì)循環(huán)讀取手機(jī)的日志信息,提取uid號(hào)為待測(cè)App的日志記錄.當(dāng)讀取到動(dòng)態(tài)加載dex文件的記錄時(shí),DyLoadDroid-D會(huì)根據(jù)日志中記錄的文件信息將該dex文件下載到本地電腦的指定文件夾,用于為DyLoadDroid-S的靜態(tài)污點(diǎn)分析提供類加載源.當(dāng)捕獲到newInstance方法的輸出信息或invoke方法輸出的反射調(diào)用信息時(shí),DyLoadDroid會(huì)從中提取出對(duì)應(yīng)的源方法Sm、反射方法Rm和目標(biāo)方法Tm的信息,并將這些信息以三元組Sm,Rm,Tm的形式存入SRT信息庫(kù),用于為DyLoadDroid-S的靜態(tài)污點(diǎn)分析過(guò)程提供反射調(diào)用信息,圖4描述了該信息的提取原理.

        Fig. 4 Schematic diagram of log analysis圖4 日志解析原理圖

        我們以Cx,Mx,Px分別表示類名、方法名和方法的參數(shù)名,x取s,r,t分別表示源、反射和目標(biāo),例如Cs表示源類的類名,依此類推.根據(jù)4.1節(jié)中關(guān)于Android源碼的修改,當(dāng)待測(cè)Android系統(tǒng)中發(fā)生newInstance或invoke反射方法調(diào)用時(shí),我們可以從日志中直接獲取到Tm的信息Ct,Mt,Pt.對(duì)于Sm和Rm的信息,我們可以通過(guò)當(dāng)前線程的Android方法調(diào)用堆棧獲得.Android方法調(diào)用堆棧存儲(chǔ)著從當(dāng)前方法調(diào)用開(kāi)始,按時(shí)間順序排列的方法調(diào)用序列,當(dāng)前正在調(diào)用的方法信息存儲(chǔ)在堆棧的棧頂,距離當(dāng)前方法調(diào)用最近的一次方法調(diào)用存儲(chǔ)在堆棧的第2個(gè)單元.因此,若發(fā)生反射方法調(diào)用時(shí),處在堆棧最頂部的方法通常是反射方法Rm的信息,而處在堆棧中第2位的便是進(jìn)行反射調(diào)用的源方法Sm的信息.根據(jù)4.1節(jié)中對(duì)Android系統(tǒng)方法調(diào)用堆棧所存儲(chǔ)元素的修改,我們便可以在反射方法調(diào)用發(fā)生時(shí),通過(guò)輸出的堆棧信息,獲得Sm的信息Cs,Ms,Ps和Rm的信息Cr,Mr,Pr.DyLoadDroid-D會(huì)將解析產(chǎn)生的Sm,Rm,Tm以三元組的方式存儲(chǔ)在SRT信息庫(kù)中.

        5 DyLoadDroid-S原理介紹

        DyLoadDroid-D的結(jié)束由人工進(jìn)行控制,當(dāng)實(shí)驗(yàn)者充分使用App后,可以對(duì)DyLoadDroid輸入命令,終結(jié)DyLoadDroid-D的運(yùn)行,并啟動(dòng)DyLoadDroid-S對(duì)App進(jìn)行靜態(tài)污點(diǎn)分析.DyLoadDroid-S實(shí)際上是一個(gè)改進(jìn)版的FlowDroid,它將DyLoadDroid-D輸出的dex文件和SRT信息庫(kù)補(bǔ)充進(jìn)FlowDroid的分析流程,使FlowDroid能夠正確處理App的動(dòng)態(tài)加載和反射機(jī)制的程序代碼,進(jìn)行更全面的污點(diǎn)分析.

        5.1 類的加載

        FlowDroid的靜態(tài)分析方法建立在Soot的Jimple語(yǔ)言基礎(chǔ)上,F(xiàn)lowDroid會(huì)將apk文件中包含的所有類加載進(jìn)內(nèi)存,然后構(gòu)建主方法,并構(gòu)建函數(shù)調(diào)用圖.為了減小內(nèi)存的負(fù)擔(dān),DyLoadDroid-S采取按需加載的方式對(duì)被加載的dex文件中相應(yīng)的類進(jìn)行加載.即DyLoadDroid-S只取SRT信息庫(kù)中的源類和目標(biāo)類進(jìn)行加載,在構(gòu)建函數(shù)調(diào)用圖時(shí),根據(jù)函數(shù)調(diào)用圖的擴(kuò)展,Soot會(huì)自動(dòng)按需加載額外需要的類.目標(biāo)方法既可能存在于被加載的dex文件中,也可能存在于App本身具有的類中或Android系統(tǒng)庫(kù)android.jar中,這些可能存在的文件都將作為Soot的基類.

        5.2 模糊匹配原則和條件轉(zhuǎn)移原則

        DyLoadDroid-S對(duì)源方法的修改實(shí)際上是將源方法中相應(yīng)的反射方法調(diào)用修改為FlowDroid能夠處理的目標(biāo)方法調(diào)用,使FlowDroid的污點(diǎn)分析模塊能夠?qū)Ψ瓷浞椒ㄕ{(diào)用進(jìn)行正確的處理.在介紹源方法修改算法之前,我們先介紹源方法修改的2個(gè)原則——模糊匹配原則和條件轉(zhuǎn)移原則.

        模糊匹配原則是指在對(duì)源方法進(jìn)行修改時(shí),DyLoadDroid-S根據(jù)SRT信息庫(kù),搜索源方法中的反射方法調(diào)用,并根據(jù)反射方法的參數(shù)個(gè)數(shù)、參數(shù)類型、返回值類型近似確定反射方法調(diào)用的位置.例如,圖5是圖2所示源碼的第⑨行和第行代碼對(duì)應(yīng)的Jimple代碼,DyLoadDroid-S從SRT信息庫(kù)中取出該段代碼所在源方法Sm對(duì)應(yīng)的反射調(diào)用信息三元組Sm,Rm,Tm,若Rm為newInstance方法,且Tm具有的參數(shù)個(gè)數(shù)、參數(shù)類型與圖5第③行的$r14數(shù)組元素個(gè)數(shù)和元素類型對(duì)應(yīng),DyLoadDroid-S便認(rèn)為圖5第③行的反射調(diào)用語(yǔ)句對(duì)應(yīng)于這個(gè)反射調(diào)用信息三元組Sm,Rm,Tm.同理,若Rm為invoke方法,且Tm具有的參數(shù)個(gè)數(shù)、參數(shù)類型與圖5第⑧行的$r14數(shù)組元素個(gè)數(shù)和元素類型對(duì)應(yīng),且Tm的返回值類型與$r15對(duì)應(yīng),DyLoadDroid-S便認(rèn)為圖5第⑧行的反射調(diào)用語(yǔ)句對(duì)應(yīng)于反射調(diào)用信息三元組Sm,Rm,Tm.

        ①②③ ④⑤⑥⑦⑧ $r14=newarray(java.lang.Object)[1];$r14[0]="MessageMark";$r5=virtualinvoke$r13.java.lang.reflect.Constructor:ja-va.lang.ObjectnewInstance(java.lang.Object[])($r14);?$r14=newarray(java.lang.Object)[2];$r14[0]="123456";$r14[1]=$r7;$r5=virtualinvoke$r15.java.lang.reflect.Method:java.lang.Objectinvoke(java.lang.Object,java.lang.Object[])($r5,$r14);

        Fig. 5 The Jimple code corresponding to newInstanceand invoke
        圖5 newInstance和invoke調(diào)用對(duì)應(yīng)的Jimple代碼

        條件轉(zhuǎn)移原則是根據(jù)FlowDroid的污點(diǎn)分析特性設(shè)置的,由于FlowDroid不具有符號(hào)執(zhí)行的功能,因此對(duì)于“if…else…”的處理不會(huì)根據(jù)判斷標(biāo)識(shí)的具體取值選擇程序流程,因此,DyLoadDroid-S對(duì)反射方法的修改采取增加“if…else…”語(yǔ)法的方法,首先設(shè)置一個(gè)判斷標(biāo)識(shí),當(dāng)標(biāo)識(shí)為某一數(shù)值時(shí),DyLoadDroid根據(jù)SRT信息庫(kù)構(gòu)造目標(biāo)方法的調(diào)用,否則執(zhí)行原始反射方法調(diào)用.之所以構(gòu)建“if…else…”而不是直接替換反射方法,主要原因有2點(diǎn):

        1) 防止同一源方法通過(guò)同一反射方法調(diào)用多種目標(biāo)方法,這樣,DyLoadDroid-S可以方便地在反射方法調(diào)用上進(jìn)行“if…else…”的嵌套,而不至于使FlowDroid發(fā)生漏報(bào).

        2) 防止模糊匹配的不準(zhǔn)確性導(dǎo)致的污點(diǎn)分析錯(cuò)誤,根據(jù)FlowDroid對(duì)“if…else…”不選擇執(zhí)行的特性,若發(fā)生匹配錯(cuò)誤,F(xiàn)lowDroid也至少可以在原程序方向上正確地運(yùn)行.此外,若同一源方法出現(xiàn)多個(gè)匹配,即對(duì)于某一三元組Sm,Rm,Tm,在Sm中存在多個(gè)反射調(diào)用與該三元組匹配,則“if…else…”原則能夠保證至少有一個(gè)匹配是正確的,而其他錯(cuò)誤的匹配不會(huì)對(duì)FlowDroid的污點(diǎn)傳播結(jié)果造成影響.

        5.3 源方法修改算法

        為了方便算法的描述,我們補(bǔ)充如下定義.

        1) 目標(biāo)反射對(duì)象.使用反射機(jī)制對(duì)目標(biāo)類進(jìn)行實(shí)例化的對(duì)象,用Fo表示,如圖1所示代碼第⑨行的obj對(duì)象.

        2) 目標(biāo)對(duì)象.直接對(duì)目標(biāo)類進(jìn)行實(shí)例化后的對(duì)象,用To表示.

        3) 目標(biāo)反射參數(shù).使用反射機(jī)制向目標(biāo)方法傳遞的參數(shù),用Fp表示,如圖5所示代碼第③行和第⑧行對(duì)應(yīng)的$r14數(shù)組.

        4) 目標(biāo)參數(shù).向目標(biāo)方法傳遞的實(shí)際參數(shù),用Tp表示,如圖5中第②行傳給目標(biāo)類構(gòu)造方法的參數(shù)“MessageMark”和第⑥,⑦行傳給目標(biāo)方法的參數(shù)“123456”和$r7.

        5) 反射對(duì)象.反射類被實(shí)例化后的對(duì)象,用Ro表示,如圖1所示代碼第⑨行的constructor對(duì)象和第行的action對(duì)象.

        Fig. 6 Algorithm flow chart of source method modifying圖6 源方法修改算法流程圖

        具體的源方法修改算法的算法流程圖如圖6所示,對(duì)于一條SRT映射,DyLoadDroid-S首先判斷反射方法為newInstance還是invoke方法.對(duì)于invoke方法,DyLoadDroid-S首先將目標(biāo)反射參數(shù)Fp轉(zhuǎn)化為目標(biāo)參數(shù)Tp;然后判斷目標(biāo)反射對(duì)象是否為空,若為空,則說(shuō)明目標(biāo)方法為靜態(tài)方法,構(gòu)建靜態(tài)目標(biāo)方法調(diào)用;若不為空,則說(shuō)明目標(biāo)方法為非靜態(tài)方法,DyLoadDroid-S會(huì)定義目標(biāo)類類型的對(duì)象To,并將目標(biāo)反射對(duì)象Fo強(qiáng)制類型轉(zhuǎn)換并賦值給To,然后執(zhí)行非靜態(tài)方法調(diào)用.

        newInstance方法包括帶參數(shù)和不帶參數(shù)2種,對(duì)于帶參數(shù)的newInstance方法,DyLoadDroid-S定義并創(chuàng)建一個(gè)目標(biāo)對(duì)象To,并將目標(biāo)反射參數(shù)Fp轉(zhuǎn)化為目標(biāo)參數(shù)Tp,并調(diào)用目標(biāo)方法Tm(只會(huì)是init())對(duì)其進(jìn)行初始化,然后DyLoadDroid-S將該To對(duì)象重新賦值給原目標(biāo)反射對(duì)象Fo,以保證Fo在程序中向下正常傳遞.

        圖7和圖8所示分別為對(duì)反射方法為有參newInstance方法和反射方法為invoke方法且目標(biāo)方法為非靜態(tài)方法的反射調(diào)用進(jìn)行源方法修改后的結(jié)果,其中左邊的Sc和Sm代表修改之前的源類和源方法,右邊的Sc和Sm代表修改之后的源類和源方法.圖9所示為對(duì)圖5中的Jimple代碼進(jìn)行源方法修改后的結(jié)果.

        5.4 污點(diǎn)傳播分析

        在源方法修改之前,由于FlowDroid不能正確處理通過(guò)newInstance方法調(diào)用進(jìn)行的對(duì)象實(shí)例化和通過(guò)invoke方法調(diào)用進(jìn)行的反射調(diào)用,因此,在進(jìn)行污點(diǎn)分析時(shí),F(xiàn)lowDroid不能正確地分析出污點(diǎn)在源方法和目標(biāo)方法之間的傳播.如圖7和圖8所示,修改前FlowDroid無(wú)法將Sm與Tc,Tm建立關(guān)系.

        Fig. 7 Taint propagation analysis for newInstance圖7 newInstance方法的污點(diǎn)傳播分析

        Fig. 8 Taint propagation analysis for invoke圖8 invoke方法的污點(diǎn)傳播分析

        在源方法修改之后,對(duì)于newInstance方法調(diào)用,DyLoadDroid-S使用new關(guān)鍵字直接創(chuàng)建目標(biāo)對(duì)象,并且將目標(biāo)反射參數(shù)轉(zhuǎn)化為目標(biāo)參數(shù),所生成的目標(biāo)對(duì)象To又賦值給目標(biāo)反射對(duì)象Fo,F(xiàn)o能夠被FloDroid正確處理,并在源方法中向下傳遞.圖7和圖8中的實(shí)線橢圓和箭頭分別代表目標(biāo)(反射)對(duì)象和目標(biāo)(反射)對(duì)象的傳遞路線,從中可以看出,圖7中源方法修改后新增了一條目標(biāo)反射對(duì)象Fo的向下傳遞路線,并且這個(gè)新增的路線能夠被FlowDroid正確處理.對(duì)于invoke方法調(diào)用,源方法修改過(guò)后的結(jié)果是,在源方法Sm和目標(biāo)方法Tm之間建立了能夠被FlowDroid處理的調(diào)用關(guān)系,Sm向Tm傳遞的參數(shù)和接收的Tm的返回結(jié)果能夠被FlowDroid正確追蹤.目標(biāo)對(duì)象的傳遞也具有連續(xù)性,例如圖8中的目標(biāo)反射對(duì)象Fo被強(qiáng)制類型轉(zhuǎn)換后賦值給了目標(biāo)對(duì)象To,接下來(lái),對(duì)To的目標(biāo)方法Tm進(jìn)行了調(diào)用.

        ①②③④⑤⑥⑦⑧⑨⑩ $r14=newarray(java.lang.Object)[1];$r14[0]="SendMessage";$i1=0;if$i1==0gotolabel08;$r18=newcom.dynamicloadclient.SendMessage;specialinvoke$r18.com.dynamicloadclient.SendMessage:voidinit(java.lang.String)("SendMessage");$r5=$r18;gotolabel09;label08:$r5=virtualinvoke$r13.java.lang.reflect.Constructor:ja-va.lang.ObjectnewInstance(java.lang.Object[])($r14);label09:…$r14=newarray(java.lang.Object)[2];$r14[0]="123456";$r14[1]=$r7;$i0=0;if$i0==0gotolabel14;$r17=(com.dynamicloadclient.SendMessage)$r5;$r5=virtualinvoke$r17.com.dynamicloadclient.SendMes-sage:java.lang.StringsendMSG(java.lang.String,java.lang.String)("123456",$r7);gotolabel15;label14:$r5=virtualinvoke$r15.java.lang.reflect.Method:java.lang.Objectinvoke(java.lang.Object,java.lang.Object[])($r5,$r14);label15:

        Fig. 9 The Jimple code after the transformation ofnewInstance and invoke

        圖9 newInstance和invoke被轉(zhuǎn)換后的Jimple代碼

        為了便于分析,我們不妨假設(shè)圖7中向下傳遞的目標(biāo)反射對(duì)象Fo最終流向圖8中的Fo,那么從圖7到圖8,DyLoadDroid-S便形成了一條能被FlowDroid正確處理的目標(biāo)對(duì)象傳遞路徑,即圖7的②到圖8的①②③.

        圖7和圖8中的虛線橢圓和箭頭代表可能的污點(diǎn)傳播線路,在圖7中,若目標(biāo)反射參數(shù)Fp攜帶有污點(diǎn)數(shù)據(jù),則會(huì)沿著④轉(zhuǎn)換為目標(biāo)參數(shù)Tp,并在對(duì)象初始化時(shí)傳給Tc的初始化方法init().同理,在圖8中,若目標(biāo)反射參數(shù)Fp攜帶有污點(diǎn)數(shù)據(jù),則會(huì)沿著路徑④⑤⑥進(jìn)行污點(diǎn)傳播.若Tm的返回值re攜帶有污點(diǎn)數(shù)據(jù),則會(huì)沿著路徑⑦傳回源方法Sm,Sm中接收返回值的Fr對(duì)象將在Sm中向下傳播污點(diǎn)數(shù)據(jù).

        6 實(shí)驗(yàn)與分析

        本節(jié)我們將通過(guò)實(shí)驗(yàn)驗(yàn)證DyLoadDroid對(duì)使用Android動(dòng)態(tài)加載和反射機(jī)制的App進(jìn)行污點(diǎn)分析的有效性,并與FlowDroid的檢測(cè)效果進(jìn)行對(duì)比,同時(shí)對(duì)一些典型App進(jìn)行實(shí)例分析,最后,將DyLoadDroid與其他動(dòng)態(tài)污點(diǎn)分析工具進(jìn)行定性的對(duì)比.

        6.1 實(shí)驗(yàn)環(huán)境和實(shí)驗(yàn)樣本

        實(shí)驗(yàn)的主要硬件設(shè)備為一個(gè)三星I9300手機(jī)(4核處理器)和一臺(tái)ThinkCentre計(jì)算機(jī)(8核CPU、8 GB內(nèi)存),我們將4.1節(jié)介紹的修改后的Android 4.1.2系統(tǒng)制作成ROM并刷入三星I9300手機(jī),DyLoadDroid-D所測(cè)試的所有App將在這個(gè)修改后的Android系統(tǒng)中運(yùn)行.而ThinkCentre計(jì)算機(jī)則主要用來(lái)運(yùn)行DyLoadDroid主程序.

        實(shí)驗(yàn)樣本包括:1)從Android應(yīng)用市場(chǎng)豌豆莢[22]下載的11 428個(gè)App,我們把它們作為非惡意樣本(雖然可能有少數(shù)惡意App,但對(duì)實(shí)驗(yàn)結(jié)果不會(huì)造成大的影響);2)從惡意應(yīng)用共享網(wǎng)站VirusShare[23]下載的1 132個(gè)App,我們將它們作為惡意樣本.實(shí)驗(yàn)樣本的下載時(shí)間均為2015年6月,我們使用靜態(tài)分析的方法對(duì)它們使用動(dòng)態(tài)加載和反射機(jī)制的情況進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如表1所示:

        Table 1 Number Statistics of Dynamic Loading and Reflection Invocation in Experiment Samples表1 實(shí)驗(yàn)樣本中動(dòng)態(tài)加載與反射方法調(diào)用的數(shù)目統(tǒng)計(jì)

        從表1可以看出,動(dòng)態(tài)加載和反射機(jī)制在Android應(yīng)用中是普遍存在的,并且在非惡意應(yīng)用中存在的比例高于惡意應(yīng)用,這可能是由于惡意應(yīng)用在功能上通常沒(méi)有非惡意應(yīng)用豐富,代碼量小于非惡意應(yīng)用.

        6.2 實(shí)驗(yàn)結(jié)果

        我們根據(jù)6.1節(jié)中對(duì)樣本App使用動(dòng)態(tài)加載和反射機(jī)制情況的統(tǒng)計(jì),選取了動(dòng)態(tài)加載和反射方法調(diào)用數(shù)量較多的App進(jìn)行分析,表2所示的10個(gè)App為其中比較有代表性的Android應(yīng)用,其中App編號(hào)為1~5的App為非惡意樣本,編號(hào)為6~10的App為惡意樣本,表2對(duì)App運(yùn)行中下載的dex文件數(shù)、存在的newInstance反射方法調(diào)用數(shù)和運(yùn)行中被觸發(fā)的反射方法調(diào)用數(shù)、存在的invoke反射方法調(diào)用數(shù)和運(yùn)行中被觸發(fā)調(diào)用的反射方法調(diào)用數(shù)進(jìn)行了統(tǒng)計(jì).由于實(shí)驗(yàn)中對(duì)App的具體操作依賴于實(shí)驗(yàn)者,因此DyLoadDroid并不能保證反射方法被觸發(fā)的概率為100%.

        Table 2 Information of Dynamic Loading and Reflection Invocation in 10 Samples表2 10個(gè)樣本的動(dòng)態(tài)加載與反射方法調(diào)用情況

        我們分別使用DyLoadDroid和FlowDroid對(duì)這10個(gè)App進(jìn)行了污點(diǎn)分析,并對(duì)它們的檢測(cè)效果進(jìn)行了對(duì)比,分析結(jié)果如表3所示(表3中的App編號(hào)與表2的App編號(hào)對(duì)應(yīng)).我們依據(jù)文獻(xiàn)[24]中的方法選擇污染源(source)和陷入點(diǎn)(sink).實(shí)驗(yàn)中的污染源即手機(jī)中的隱私數(shù)據(jù),我們主要考慮的隱私數(shù)據(jù)類型包括10種:1)手機(jī)標(biāo)識(shí),包括IMEI,IMSI,ICCID,MSISDN,ANDROID_ID等;2)地理位置信息;3)短信記錄;4)通訊錄;5)通話記錄;6)Google賬號(hào);7)wifi信息;8)藍(lán)牙信息;9)基站信息,如基站編號(hào)、位置區(qū)域碼等;10)瀏覽器信息,如瀏覽器書簽、瀏覽歷史記錄等.實(shí)驗(yàn)中的陷入點(diǎn)即可能的隱私泄露途徑,我們主要考慮4種隱私泄露途徑:1)網(wǎng)絡(luò);2)短信;3)日志;4)文件.它們分別表示通過(guò)網(wǎng)絡(luò)或短信發(fā)送隱私信息,或通過(guò)日志輸出或?qū)懳募姆绞綄㈦[私信息暴露在系統(tǒng)中.表3中的中括號(hào)中的內(nèi)容代表FlowDroid和DyLoadDroid共同檢測(cè)出的隱私泄露內(nèi)容或共同檢測(cè)出的隱私泄露路徑,表3中的大括號(hào)中的內(nèi)容代表DyLoadDroid檢測(cè)出、但FlowDroid未檢測(cè)出的隱私泄露內(nèi)容或隱私泄露途徑,從另一角度來(lái)看,大括號(hào)中的內(nèi)容實(shí)際上是App通過(guò)動(dòng)態(tài)加載和反射機(jī)制所泄露的隱私內(nèi)容.

        Table 3 Results Comparison of Taint Analysis表3 污點(diǎn)分析結(jié)果對(duì)比

        Note:The numbers in column “Content of Privacy” represent the type of the private data that be leaked:1—mobile phone identification,2—geolocation information,3—message records,4—contacts,5—call records,6—google accounts,7—wifi information,8—bluetooth information,9—base station information,10—browser information. The marks in column “Ways of Privacy Leakage” represent the ways through which the private data be leaked:①—network,②—short message,③—log,④—file. The contents in the brackets mean the private data or ways of privacy leakage detected by FlowDroid and DyLoadDroid together,while contents in the braces mean the private data or ways of privacy leakage detected by DyLoadDroid,but not by FlowDroid.

        6.3 實(shí)驗(yàn)結(jié)果分析

        從表3可以看出,由于DyLoadDroid能夠?qū)ndroid動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效的污點(diǎn)分析,因此它能夠比FlowDroid檢測(cè)出更多的source、sink和污點(diǎn)傳播路徑數(shù),檢測(cè)出更多的隱私泄露內(nèi)容和隱私泄露途徑.并且我們也能從表3中看出,非惡意應(yīng)用通過(guò)動(dòng)態(tài)加載和反射調(diào)用泄露的用戶隱私的惡意性并不大,通常不會(huì)泄露短信記錄、通訊錄、通話記錄等高度敏感內(nèi)容,而惡意應(yīng)用泄露用戶隱私的行為則通常具有較高的惡意性,這可能是由于非惡意應(yīng)用獲取用戶隱私信息的目的只是為了提供更好的服務(wù),而并不是為了侵犯用戶的隱私,而惡意應(yīng)用則具有明顯的竊取用戶隱私的目的.為了更好地了解它們的動(dòng)態(tài)加載和反射調(diào)用行為,我們采用逆向分析的方法對(duì)其進(jìn)行了實(shí)例分析.

        6.3.1 對(duì)非惡意應(yīng)用的實(shí)例分析

        通過(guò)對(duì)非惡意應(yīng)用的逆向分析,我們發(fā)現(xiàn),一些非惡意應(yīng)用利用動(dòng)態(tài)加載和反射調(diào)用機(jī)制實(shí)現(xiàn)插件式管理,例如,App1(表3中編號(hào)為1的App,以后我們均這樣簡(jiǎn)稱)使用大量的反射調(diào)用對(duì)被加載dex文件中組件的生命周期方法進(jìn)行調(diào)用,并通過(guò)反射調(diào)用,對(duì)被加載dex文件中的資源進(jìn)行加載和訪問(wèn),被加載的dex文件實(shí)際上是以插件的方式為App1提供界面和功能的擴(kuò)展.此外,一些非惡意應(yīng)用利用動(dòng)態(tài)加載和反射機(jī)制進(jìn)行動(dòng)態(tài)升級(jí)或模塊更新,例如,App3啟動(dòng)運(yùn)行時(shí)會(huì)彈出對(duì)話框,提醒用戶是否更新應(yīng)用,當(dāng)點(diǎn)擊“是”時(shí),App3會(huì)從網(wǎng)上下載一個(gè)名為component.jar的jar文件,并替換掉應(yīng)用的數(shù)據(jù)目錄中同名的文件,App3在運(yùn)行的過(guò)程中會(huì)使用反射機(jī)制對(duì)該jar文件進(jìn)行訪問(wèn).我們也對(duì)非惡意應(yīng)用獲取用戶隱私相關(guān)信息的原因進(jìn)行了分析,發(fā)現(xiàn)它們主要還是正當(dāng)?shù)哪康?,例如,App4是一款天氣預(yù)報(bào)軟件,它獲取位置信息是為了向用戶提供用戶所在地的天氣情況.App5具有展示廣告的功能,其內(nèi)部嵌入了廣告類庫(kù),該廣告類庫(kù)具有閱讀瀏覽器瀏覽記錄并傳給網(wǎng)絡(luò)服務(wù)器的功能,該行為或許是為了根據(jù)用戶的喜好,提供更具針對(duì)性的廣告.

        6.3.2 對(duì)惡意應(yīng)用的實(shí)例分析

        惡意應(yīng)用泄露用戶隱私的行為通常具有較高的惡意性,通過(guò)對(duì)惡意應(yīng)用的逆向分析,我們發(fā)現(xiàn)惡意應(yīng)用的動(dòng)態(tài)加載主要是為了隱藏自身和動(dòng)態(tài)下載執(zhí)行一些惡意程序,反射機(jī)制的運(yùn)用也能在一定程度上幫助惡意應(yīng)用繞過(guò)一些安全檢測(cè).例如,App6將惡意的dex文件隱藏在資源文件中,并偽裝其名稱為“l(fā)ogos.png”,實(shí)際上該文件并不是png文件,而是zip文件,程序運(yùn)行時(shí),通過(guò)“XOR”解密和其他一些處理將其轉(zhuǎn)換為dex文件,并通過(guò)反射調(diào)用對(duì)其進(jìn)行調(diào)用.DyLoadDroid截獲了其加載命令,將這個(gè)轉(zhuǎn)換后的dex文件下載到本地電腦,并通過(guò)污點(diǎn)分析,成功發(fā)現(xiàn)它讀取短信記錄和通信錄并發(fā)送給外界的隱私泄露路徑.

        App8安裝后會(huì)在后臺(tái)默默啟動(dòng)一個(gè)服務(wù),這個(gè)服務(wù)會(huì)獲取本應(yīng)用在手機(jī)中被授予的權(quán)限信息,并將信息傳給一個(gè)HTTP服務(wù)器,該HTTP服務(wù)器收到信息時(shí)會(huì)返回一個(gè)URL,該URL是一個(gè)通往網(wǎng)絡(luò)上的jar包的路徑.然后App8會(huì)下載并加載和調(diào)用該jar文件,DyLoadDroid通過(guò)污點(diǎn)分析成功分析出該jar文件所具有的讀取通信錄、通話記錄并傳給HTTP服務(wù)器的行為.

        App9將2個(gè)隱藏的App應(yīng)用置于其assets文件夾,取名為“anservera.db”和“anserverb.db”.我們簡(jiǎn)稱其為pa和pb,當(dāng)App9運(yùn)行時(shí),會(huì)彈出一個(gè)對(duì)話框,誘惑用戶安裝pa,pa安裝完成后不顯示任何圖標(biāo),在后臺(tái)運(yùn)行(這樣一來(lái),即使App9被卸載了,pa也可以繼續(xù)執(zhí)行惡意操作).App9和pa都可以通過(guò)動(dòng)態(tài)加載的方式執(zhí)行pb,pb會(huì)連接網(wǎng)絡(luò)服務(wù)器,向該服務(wù)器發(fā)送用戶的隱私數(shù)據(jù),并接收網(wǎng)絡(luò)服務(wù)器的命令,DyLoadDroid成功追蹤到pb獲取短信記錄和通信錄并傳給網(wǎng)絡(luò)服務(wù)器的污點(diǎn)傳播路徑.

        App10在運(yùn)行時(shí),會(huì)注冊(cè)2個(gè)服務(wù),第一個(gè)服務(wù)動(dòng)態(tài)地注冊(cè)一個(gè)具有最大權(quán)限的短信監(jiān)聽(tīng)器,另一個(gè)服務(wù)會(huì)使用DES算法解密app_TYPE_JAR文件夾下的rt2.jar文件,當(dāng)解密完成后,它能夠在app_sim_index文件夾下生成一個(gè)真正的jar格式文件appmgr.jar,然后App10動(dòng)態(tài)加載并運(yùn)行appmgr.jar,并使用反射機(jī)制調(diào)用其中的方法,DyLoadDroid成功追蹤到它泄露用戶通訊錄和通話記錄的程序路徑.

        6.4 與其他工具的對(duì)比

        由于FlowDroid是當(dāng)前領(lǐng)先的Android靜態(tài)污點(diǎn)分析工具,而本文又是在FlowDroid的基礎(chǔ)上進(jìn)行的改進(jìn),通過(guò)前面幾節(jié)的對(duì)比,DyLoadDroid已經(jīng)顯示出相對(duì)于FlowDroid的優(yōu)勢(shì),因此,我們不需要將DyLoadDroid與其他類型的靜態(tài)污點(diǎn)分析工具進(jìn)行對(duì)比.Epicc[18]和DidFail[19]雖然是對(duì)FlowDroid的擴(kuò)展,但它們只是擴(kuò)展了FlowDroid所能夠分析的數(shù)據(jù)傳播途徑,工具的主體還是FlowDroid,在污點(diǎn)分析效果上并沒(méi)有明顯改善,因此我們也沒(méi)有必要將DyLoadDroid與它們進(jìn)行對(duì)比,而將它們作為DyLoadDroid的有效補(bǔ)充.本節(jié)內(nèi)容主要是將DyLoadDroid與一些動(dòng)態(tài)污點(diǎn)分析工具進(jìn)行對(duì)比,因?yàn)閯?dòng)態(tài)污點(diǎn)分析工具通常不會(huì)受到動(dòng)態(tài)加載和反射機(jī)制的影響,能夠?qū)ζ溥M(jìn)行正常的污點(diǎn)分析.又由于靜態(tài)污點(diǎn)分析工具與動(dòng)態(tài)污點(diǎn)分析工具各具優(yōu)勢(shì)和劣勢(shì),難以進(jìn)行定量比較,因此,我們不對(duì)靜態(tài)污點(diǎn)分析工具和動(dòng)態(tài)污點(diǎn)分析工具進(jìn)行定量比較,而是對(duì)他們進(jìn)行定性比較.

        1) 與TaintDroid的比較

        TaintDroid是當(dāng)前較為領(lǐng)先的Android動(dòng)態(tài)污點(diǎn)分析工具,TaintDroid[8]將所有的隱私數(shù)據(jù)標(biāo)記為污點(diǎn),它在內(nèi)存中為系統(tǒng)中的每個(gè)對(duì)象多申請(qǐng)一倍的空間,用于存儲(chǔ)污點(diǎn)標(biāo)記,在App動(dòng)態(tài)執(zhí)行的過(guò)程中,根據(jù)污點(diǎn)標(biāo)記追蹤污點(diǎn)在內(nèi)存中的傳播情況.當(dāng)TaintDroid監(jiān)測(cè)到隱私數(shù)據(jù)被泄露出去時(shí),會(huì)彈出提示框提醒用戶.TaintDroid可以對(duì)Android動(dòng)態(tài)加載和反射機(jī)制進(jìn)行正確的污點(diǎn)分析,并且具有污點(diǎn)分析準(zhǔn)確、誤報(bào)率低的優(yōu)點(diǎn).就準(zhǔn)確性而言,F(xiàn)lowDroid和DyLoadDroid都無(wú)法和TaintDroid相比,然而,從程序覆蓋率方面來(lái)說(shuō),DyLoadDroid卻要高于TaintDroid,可以發(fā)現(xiàn)TaintDroid不能發(fā)現(xiàn)的污點(diǎn)傳播路徑.雖然在處理Android動(dòng)態(tài)加載和反射機(jī)制的問(wèn)題上,兩者都依賴App的實(shí)際運(yùn)行,但DyLoadDroid依賴App的實(shí)際運(yùn)行只是為了獲得App動(dòng)態(tài)加載的dex文件和反射調(diào)用信息,以輔助靜態(tài)污點(diǎn)分析的過(guò)程,彌補(bǔ)靜態(tài)污點(diǎn)分析工具對(duì)動(dòng)態(tài)加載和反射機(jī)制不能正確處理的缺陷.DyLoadDroid只需要監(jiān)測(cè)到Android的動(dòng)態(tài)加載和反射調(diào)用的行為便可以對(duì)App進(jìn)行更為全面的污點(diǎn)分析,而TaintDroid則需要App在動(dòng)態(tài)運(yùn)行的過(guò)程中走完從污染源到陷入點(diǎn)的完整的路徑才能確定是否發(fā)生隱私泄露,而若某條路徑上出現(xiàn)程序阻斷(例如網(wǎng)絡(luò)阻塞、用戶認(rèn)證失敗等)時(shí),TaintDroid便不能追蹤到這條路徑上存在的隱私泄露問(wèn)題.此外,TainDroid只能在發(fā)生隱私泄露時(shí)向用戶彈窗提醒,而不能輸出從污染源到陷入點(diǎn)的完整的路徑,DyLoadDroid則可以輸出從污染源到陷入點(diǎn)的完整的路徑.

        2) 與AppFence的比較

        AppFence是一個(gè)隱私保護(hù)工具,不僅可以檢測(cè)到系統(tǒng)中發(fā)生的隱私泄露問(wèn)題,而且可以阻止隱私信息的泄露.它采取數(shù)據(jù)遮蔽和滲出阻塞技術(shù)限制App泄露隱私數(shù)據(jù),核心思想是將隱私數(shù)據(jù)替換為影子數(shù)據(jù)傳遞到外部網(wǎng)絡(luò)來(lái)防止隱私數(shù)據(jù)的泄露.與TaintDroid一樣,AppFence能準(zhǔn)確地檢測(cè)出Android系統(tǒng)中發(fā)生的隱私數(shù)據(jù)泄露,誤報(bào)率低.然而,它在代碼覆蓋率和漏報(bào)率方面都存在和TaintDroid同樣的缺點(diǎn),比DyLoadDroid弱.并且AppFence容易阻礙App的正常運(yùn)行,因?yàn)锳pp的正常運(yùn)行可能需要向外部網(wǎng)絡(luò)發(fā)送一些隱私信息(如IMEI、位置信息等),而AppFence的數(shù)據(jù)遮蔽策略可能導(dǎo)致App不能正常地向外發(fā)送數(shù)據(jù),阻礙App的正常運(yùn)行,因此無(wú)法順利地監(jiān)控到App中存在的其他隱私泄露問(wèn)題.

        7 討 論

        雖然DyLoadDroid可以對(duì)Android的動(dòng)態(tài)加載和反射機(jī)制進(jìn)行有效的污點(diǎn)分析,但DyLoadDroid仍然有其自身的缺陷,主要包括:

        1) 污點(diǎn)分析的準(zhǔn)確性依賴于App實(shí)際運(yùn)行中被加載的dex文件數(shù)和被觸發(fā)的反射調(diào)用的比例.通過(guò)表2可以看出,在App實(shí)際運(yùn)行過(guò)程中,DyLoadDroid-D并不能保證能夠觸發(fā)到App中所有的反射調(diào)用行為,并且也不能保證能夠下載到所有能夠被加載的dex文件.因此,DyLoadDroid并不能保證對(duì)App的動(dòng)態(tài)加載和反射調(diào)用機(jī)制進(jìn)行完整的分析,它只能保證以最大的可能彌補(bǔ)靜態(tài)分析方法在處理動(dòng)態(tài)加載和反射調(diào)用機(jī)制方面的缺陷.

        2) 不能有效分析組件間和應(yīng)用間的污點(diǎn)傳播.在第1節(jié)中我們提到過(guò),Epicc和DidFail擴(kuò)展了FlowDroid所能夠分析的數(shù)據(jù)傳播途徑,使FlowDroid能夠追蹤到組件間和應(yīng)用間的污點(diǎn)傳播.然而DyLoadDroid并沒(méi)有將這2個(gè)工具對(duì)FlowDroid的擴(kuò)展功能集成進(jìn)來(lái),因此DyLoadDroid并不能對(duì)組件間和應(yīng)用間的污點(diǎn)傳播進(jìn)行有效處理.原因是Epicc目前沒(méi)有開(kāi)放源代碼,而DidFail目前還不完善,實(shí)用性較差,并且DidFail依賴于Epicc.因此,目前將Epicc和DidFail對(duì)FlowDroid的擴(kuò)展功能集成進(jìn)DyLoadDroid不易于實(shí)現(xiàn).可以認(rèn)為,Epicc,DidFail與DyLoadDroid互為補(bǔ)充,三者對(duì)FlowDroid進(jìn)行了不同方面的改進(jìn).我們也正在聯(lián)系Epicc和DidFail的作者,將Epicc、DidFail與DyLoadDroid進(jìn)行有效集成,實(shí)現(xiàn)更為強(qiáng)大的靜態(tài)污點(diǎn)分析工具.

        在以后的研究工作中,我們將重點(diǎn)研究如何使App觸發(fā)更多的動(dòng)態(tài)加載行為和更多的反射調(diào)用行為,以提高DyLoadDroid的污點(diǎn)分析的準(zhǔn)確性.同時(shí),我們將對(duì)DyLoadDroid進(jìn)行擴(kuò)展,實(shí)現(xiàn)組件間和應(yīng)用間的正確的污點(diǎn)分析.

        8 結(jié)束語(yǔ)

        本文針對(duì)當(dāng)前Android靜態(tài)污點(diǎn)分析工具無(wú)法對(duì)包含Android動(dòng)態(tài)加載和反射機(jī)制的Android應(yīng)用進(jìn)行正常污點(diǎn)分析的問(wèn)題進(jìn)行了研究,對(duì)當(dāng)前領(lǐng)先的靜態(tài)污點(diǎn)分析工具FlowDroid進(jìn)行了改進(jìn),提出了DyLoadDroid工具,并介紹了DyLoadDroid的2個(gè)主要模塊DyLoadDroid-D和DyLoadDroid-S的設(shè)計(jì)原理,提出了根據(jù)App在實(shí)際運(yùn)行過(guò)程中輸出的動(dòng)態(tài)加載和反射調(diào)用信息,下載被加載的dex文件,并將相應(yīng)的反射方法調(diào)用修改為FlowDroid能夠處理的方法調(diào)用的解決方案,使FlowDroid能夠?qū)ndroid動(dòng)態(tài)加載和反射機(jī)制進(jìn)行正常的污點(diǎn)分析.我們通過(guò)實(shí)驗(yàn)驗(yàn)證了DyLoadDroid的有效性,并和FlowDroid進(jìn)行了對(duì)比,并對(duì)一些實(shí)驗(yàn)樣本進(jìn)行了實(shí)例分析,我們也將DyLoadDroid與其他動(dòng)態(tài)污點(diǎn)分析工具進(jìn)行了定性對(duì)比,說(shuō)明了DyLoadDroid所具有的優(yōu)勢(shì).

        [1]Wei T E, Jeng A B, Lee H M, et al. Android privacy[C] //Proc of 2012 Int Conf on Machine Learning and Cybernetics. Piscataway, NJ: IEEE, 2012: 1830-1837

        [2]Felt A P, Finifter M, Chin E, et al. A survey of mobile malware in the wild[C] //Proc of the 1st ACM Workshop on Security and Privacy in Smartphones and Mobile Devices. New York: ACM, 2011: 3-14

        [3]Zhou Y, Jiang X. Dissecting Android malware: Characterization and evolution[C] //Proc of 2012 IEEE Symp on Security and Privacy. Piscataway, NJ: IEEE, 2012: 95-109

        [4]Shu X, Du Z, Chen R. Research on mobile location service design based on Android[C] //Proc of the 5th Int Conf on Wireless Communications. Piscataway, NJ: IEEE, 2009: 1-4

        [5]Grace M C, Zhou W, Jiang X, et al. Unsafe exposure analysis of mobile in-app advertisements[C] //Proc of the 5th ACM Conf on Security and Privacy in Wireless and Mobile Networks. New York: ACM, 2012: 101-112

        [6]Book T, Wallach D S. A case of collusion: A study of the interface between ad libraries and their apps[C] //Proc of the 3rd ACM Workshop on Security and Privacy in Smartphones & Mobile Devices. New York: ACM, 2013: 79-86

        [7]Zhang Yuqing, Fang Zhejun, Wang Kai, et al. Survey of Android vulnerability detection[J]. Journal of Computer Research and Development, 2015, 52(10): 2167-2177 (in Chinese)(張玉清, 方喆君, 王凱, 等. Android安全漏洞挖掘技術(shù)綜述[J]. 計(jì)算機(jī)研究與發(fā)展, 2015, 52(10): 2167-2177)

        [8]Enck W, Gilbert P, Han S, et al. TaintDroid: An information-flow tracking system for realtime privacy monitoring on smartphones[J]. ACM Trans on Computer Systems, 2014, 32(2): No.5

        [9]Hornyack P, Han S, Jung J, et al. These aren’t the droids you’re looking for: Retrofitting Android to protect data from imperious applications[C] //Proc of the 18th ACM Conf on Computer and Communications Security. New York: ACM, 2011: 639-652

        [10]Schreckling D, K?stler J, Schaff M. Kynoid: Real-time enforcement of fine-grained, user-defined, and data-centric security policies for Android[J]. Information Security Technical Report, 2013, 17(3): 71-80

        [11]Arzt S, Rasthofer S, Fritz C, et al. Flowdroid: Precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps[J]. ACM SIGPLAN Notices, 2014, 49(6): 259-269

        [12]Yang Z, Yang M. Leakminer: Detect information leakage on Android with static taint analysis[C] //Proc of the 3rd World Congress on Software Engineering. Piscataway, NJ: IEEE, 2012: 101-104

        [13]Gibler C, Crussell J, Erickson J, et al. Androidleaks: Automatically detecting potential privacy leaks in Android applications on a large scale[J]. Trust and Trustworthy Computing, 2012, 73: 291-307

        [14]Zhauniarovich Y, Ahmad M, Gadyatskaya O, et al. StaDynA: Addressing the problem of dynamic code updates in the security analysis of Android applications[C] //Proc of the 5th ACM Conf on Data and Application Security and Privacy. New York: ACM, 2015: 37-48

        [15]Lindorfer M, Neugschwandtner M, Weichselbaum L, et al. ANDRUBIS-1 000 000 Apps later: A view on current Android malware behaviors[C/OL] //Proc of the 3rd Int Workshop on Building Analysis Datasets and Gathering Experience Returns for Security. 2014 [2015-09-20]. http://cs.ucsb.edu/~yanick/publications/2014_badgers_andrubis.pdf

        [16]Rastogi V, Chen Y, Jiang X. Droidchameleon: Evaluating Android anti-malware against transformation attacks[C] //Proc of the 8th ACM SIGSAC Symp on Information, Computer and Communications Security. New York: ACM, 2013: 329-334

        [17]Poeplau S, Fratantonio Y, Bianchi A, et al. Execute this! Analyzing unsafe and malicious dynamic code loading in Android applications[C/OL] //Proc of the 20th Annual Network & Distributed System Security Symp. 2014 [2015-09-20]. https://cs.ucsb.edu/~vigna/publications/2014_NDSS_ExecuteThis.pdf

        [18]Octeau D, McDaniel P, Jha S, et al. Effective inter-component communication mapping in Android with epicc: An essential step towards holistic security analysis[C] //Proc of the 22nd USENIX Security Symp. Berkeley: USENIX Association, 2013: 543-558

        [19]Klieber W, Flynn L, Bhosale A, et al. Android taint flow analysis for app sets[C] //Proc of the 3rd ACM SIGPLAN Int Workshop on the State of the Art in Java Program Analysis. New York: ACM, 2014: 1-6

        [20]Chiba S. ECOOP 2000—Object-Oriented Programming[M]. Berlin: Springer, 2000: 313-336

        [21]GitHub. Soot[EB/OL]. [2015-09-20]. http://sable.github.io/soot

        [22]Wandou Lab. wandoujia[EB/OL]. [2015-09-20]. https://www.wandoujia.com

        [23]VirusShare. Latest virus samples[EB/OL]. [2015-09-20]. http://virusshare.com

        [24]Rasthofer S, Arzt S, Bodden E. A machine-learning approach for classifying and categorizing Android sources and sinks[C/OL] //Proc of the 20th Annual Network & Distributed System Security Symp. 2014 [2015-09-20]. http://www.bodden.de/pubs/rab14classifying.pdf

        Yue Hongzhou, born in 1987. PhD candidate in the Department of Communication Engineering, Xidian University. His main research interests include Android security and Web security.

        Zhang Yuqing, born in 1966. Professor in the Department of Computer and Control Engineering, University of Chinese Academy of Sciences. His main research interests include network and information system security.

        Wang Wenjie, born in 1964. Associate professor in the Department of Computer and Control Engineering, University of Chinese Academy of Sciences. His main research interests include intelligent information processing and software reliability measurement.

        Liu Qixu, born in 1984. Lecturer in the Department of Computer and Control Engineering, University of Chinese Academy of Sciences. His main research interests include system security, vulnerability assessment and Web security.

        Android Static Taint Analysis of Dynamic Loading and Reflection Mechanism

        Yue Hongzhou1, Zhang Yuqing1,2, Wang Wenjie2,3, and Liu Qixu2,3

        1(StateKeyLaboratoryofIntegratedServicesNetworks(XidianUniversity),Xi’an710071)2(NationalComputerNetworkIntrusionProtectionCenter,UniversityofChineseAcademyofSciences,Beijing101408)3(StateKeyLaboratoryofInformationSecurity(InstituteofInformationEngineering,ChineseAcademyofSciences),Beijing100093)

        Privacy leakage is one of the most important issues in the current Android security. The present most important method to detect privacy leakage is taint analysis. Because of its high code coverage and low false negative, the technique of static taint analysis is widely used in the detection of Android privacy leakage. However, the existing static taint analysis tools cannot do effective taint analysis for Android dynamic loading and reflection mechanism. Taking into account the present situation that Android dynamic loading and reflection mechanism are being used more and more widely, we focus on how to enable static taint analysis tools to effectively deal with Android dynamic loading and reflection mechanism. We modify the Android source code to enable the Android system to timely store the loaded dex files and reflection invocation information during the running process of an Android app. This information will be used to guide the static taint analysis process of the app and a policy that replacing the reflective method invocation with non-reflective method invocation is proposed. Based on these ideas, a taint analysis tool—DyLoadDroid is proposed, which has made some improvements of the state-of-the-art static taint analysis tool—FlowDroid and can do effective taint analysis for Android dynamic loading and reflection mechanism. Sufficient experimental results show that DyLoadDroid is very effective in tackling the problem of static taint analysis of Android dynamic loading and reflection mechanism.

        Android privacy leakage; taint analysis; dynamic loading; reflection

        2015-10-26;

        2016-03-22

        國(guó)家自然科學(xué)基金項(xiàng)目(61572460,61272481,61303239);信息安全國(guó)家重點(diǎn)實(shí)驗(yàn)室開(kāi)放課題(2015-MS-06,2015-MS-04) This work was supported by the National Natural Science Foundation of China (61572460,61272481,61303239) and the Open Project of the State Key Laboratory of Information Security (2015-MS-06,2015-MS-04).

        TP309

        猜你喜歡
        污點(diǎn)調(diào)用靜態(tài)
        基于代碼重寫的動(dòng)態(tài)污點(diǎn)分析
        靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        使用Lightroom污點(diǎn)去除工具清理照片中的瑕疵
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        我國(guó)“污點(diǎn)證人”刑事責(zé)任豁免制度的構(gòu)建
        機(jī)床靜態(tài)及動(dòng)態(tài)分析
        具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
        50t轉(zhuǎn)爐靜態(tài)控制模型開(kāi)發(fā)及生產(chǎn)實(shí)踐
        上海金屬(2013年6期)2013-12-20 07:57:59
        蜜桃精品免费久久久久影院| 变态另类人妖一区二区三区 | 一区二区三区国产偷拍| 在线观看在线观看一区二区三区| 未满十八18禁止免费无码网站| 青楼妓女禁脔道具调教sm| 在线看亚洲十八禁网站| 中文字幕午夜AV福利片| 你懂的视频网站亚洲视频| 热99re久久精品这里都是精品免费| 好吊色欧美一区二区三区四区| 99久久久无码国产精品动漫| 久久99国产精品久久99密桃| 99久久无码一区人妻| 欧产日产国产精品精品| 精品人妻少妇一区二区中文字幕| 亚洲精品成人一区二区三区| 女人下边被添全过视频| 最近免费中文字幕| 中文字幕有码高清| 国产国语按摩对白av在线观看| 18黑白丝水手服自慰喷水网站| 毛片免费在线播放| 日韩精品av在线一区二区| 日本最新一区二区三区视频观看 | 国内精品久久久久影院蜜芽 | 色综合久久网| 日本不卡在线视频二区三区| 欧美手机在线视频| 中文字幕人妻久久久中出| 日本午夜精品一区二区三区电影| 亚洲视频毛片| 国产一级黄色性生活片| 亚洲国产a∨无码中文777| 自拍偷自拍亚洲精品情侣| 国产在线视频h| 国产高清一区二区三区三州| 真实国产老熟女无套中出| 国产成人亚洲综合一区| 丰满熟女人妻一区二区三区| 国产精品女同久久久久电影院|