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

        ?

        面向Android應(yīng)用隱私泄露檢測(cè)的多源污點(diǎn)分析技術(shù)?

        2019-03-05 03:45:16何冬杰馮曉兵
        軟件學(xué)報(bào) 2019年2期
        關(guān)鍵詞:分析檢測(cè)

        王 蕾,周 卿,何冬杰,李 煉,馮曉兵

        1(計(jì)算機(jī)體系結(jié)構(gòu)國家重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院 計(jì)算技術(shù)研究所),北京 100190)

        2(中國科學(xué)院大學(xué),北京 100190)

        隨著移動(dòng)應(yīng)用的廣泛普及,其安全問題正受到嚴(yán)重的挑戰(zhàn).移動(dòng)支付、電子商務(wù)、社交網(wǎng)絡(luò)等活動(dòng)中存在著大量的用戶隱私數(shù)據(jù),大量第三方移動(dòng)應(yīng)用程序的使用導(dǎo)致隱私數(shù)據(jù)難以被有效地保護(hù).例如,印度的一家公司設(shè)計(jì)了一組智能手機(jī)應(yīng)用開發(fā)工具包SilverPush,它可以嵌入到一個(gè)正常的手機(jī)應(yīng)用中并在后臺(tái)運(yùn)行,在用戶不知情的情況下收集用戶的隱私數(shù)據(jù)(包括IMEI ID、位置信息、視頻與音頻信息、Web瀏覽記錄等),并將其發(fā)送給廣告推薦商[1].污點(diǎn)分析技術(shù)(taint analysis)[2]是信息流分析技術(shù)(information-flow analysis)[3]的一種實(shí)踐方法.該技術(shù)通過對(duì)系統(tǒng)中的敏感數(shù)據(jù)進(jìn)行標(biāo)記,繼而跟蹤標(biāo)記數(shù)據(jù)在程序中的傳播,檢測(cè)系統(tǒng)安全問題.據(jù)調(diào)查分析[4],在Android應(yīng)用的靜態(tài)安全檢測(cè)中,污點(diǎn)分析則是最為流行的分析方案.

        污點(diǎn)分析可以有效地檢測(cè)Android應(yīng)用的隱私泄露問題.舉例說明,圖1所示為一段Android應(yīng)用程序代碼,運(yùn)行該段程序會(huì)導(dǎo)致用戶的密碼數(shù)據(jù)通過發(fā)送短信的方式泄露.污點(diǎn)分析首先要識(shí)別引入敏感數(shù)據(jù)的接口(source,污點(diǎn)源)并進(jìn)行污點(diǎn)標(biāo)記.具體到程序中,即識(shí)別第 4行的 passwordText接口為污點(diǎn)源,并對(duì)pwd變量進(jìn)行標(biāo)記.如果被標(biāo)記的變量又通過程序依賴關(guān)系傳播了給其他變量,那么根據(jù)相關(guān)傳播規(guī)則繼續(xù)標(biāo)記對(duì)應(yīng)的變量.當(dāng)被標(biāo)記的變量到達(dá)信息泄露的位置(sink,污點(diǎn)匯聚點(diǎn))時(shí),則根據(jù)對(duì)應(yīng)的安全策略進(jìn)行檢測(cè).圖1中,第 8行帶污點(diǎn)標(biāo)記的leakedMessage變量可以傳播到發(fā)送信息的sendTextMessage接口,這就意味著密碼數(shù)據(jù)會(huì)被該接口泄露.污點(diǎn)分析又分為靜態(tài)和動(dòng)態(tài)的污點(diǎn)分析.靜態(tài)污點(diǎn)分析是指在不運(yùn)行代碼的前提下,通過分析程序變量間的數(shù)據(jù)依賴關(guān)系來進(jìn)行污點(diǎn)分析.相對(duì)于動(dòng)態(tài)運(yùn)行的污點(diǎn)分析,靜態(tài)污點(diǎn)分析可以在程序發(fā)布之前對(duì)應(yīng)用程序安全問題進(jìn)行檢測(cè),避免了發(fā)布之后造成的安全問題.另外,該技術(shù)具有分析覆蓋率高(不依賴測(cè)試集合)、無需程序插樁(而導(dǎo)致的程序運(yùn)行出現(xiàn)開銷)等優(yōu)勢(shì).

        Fig.1 An example of taint analysis圖1 污點(diǎn)分析示例

        然而,在檢測(cè) Android應(yīng)用隱私泄露問題時(shí),靜態(tài)污點(diǎn)分析存在結(jié)果誤報(bào)率較高的問題.這是由于為了能夠發(fā)現(xiàn)所有潛在的惡意行為,污點(diǎn)分析需要將可能的敏感信息泄露路徑都報(bào)告出來,而程序中正常功能也需要選定一些敏感的數(shù)據(jù)傳播到外界.據(jù)統(tǒng)計(jì),MudFlow[5]利用靜態(tài)污點(diǎn)分析工具FlowDroid測(cè)試的2 866個(gè)良性軟件(benign App)一共產(chǎn)生了338 610條污點(diǎn)分析結(jié)果,檢測(cè)人員需要在大量集合中選出具有惡意行為的結(jié)果,這將是效率極低的.利用污點(diǎn)分析解決的隱私泄露問題(提高檢測(cè)精度)是當(dāng)前Android安全的重要研究熱點(diǎn).一些研究工作[5-8]嘗試使用統(tǒng)計(jì)的方法進(jìn)行惡意行為區(qū)分,例如,MudFlow[5]嘗試對(duì)比污點(diǎn)分析結(jié)果和良性軟件結(jié)果的差異,利用 SVM 分類模型檢測(cè)出一個(gè)軟件是否是惡意軟件.然而,檢測(cè)人員常常需要驗(yàn)證具體的泄露路徑,該工具只能給出一個(gè)軟件整體是否具有惡意行為(而且該工具也會(huì)存在誤報(bào)),無法給出其中一條污點(diǎn)分析路徑[Source→Sink]是否是直接導(dǎo)致隱私泄露的結(jié)果,這驅(qū)使我們嘗試更加有效的分析方案.不同于其他方法,本文選擇了另外一種假設(shè)作為切入點(diǎn):我們假設(shè)良性軟件和惡意軟件所使用的敏感數(shù)據(jù)流之間的相關(guān)性(綁定發(fā)生特性)是有差異的(我們將在第 5.1節(jié)來驗(yàn)證該差異確實(shí)存在).例如,在良性軟件中,地圖信息和設(shè)備標(biāo)識(shí)信息的驗(yàn)證往往不在一個(gè)模塊中執(zhí)行,而惡意軟件則將設(shè)備信息與定位信息一起(綁定)發(fā)送到網(wǎng)絡(luò).然而,當(dāng)前研究工作沒有提供有效的多源分析技術(shù).基于上述的分析與假設(shè),本文提出了一種分析污點(diǎn)結(jié)果中多源之間是否綁定發(fā)生的污點(diǎn)分析技術(shù).該技術(shù)可以給出污點(diǎn)分析結(jié)果之間是否可以在一次執(zhí)行中綁定發(fā)生.此外,本文還提出了一種高效的實(shí)現(xiàn)方法,使得多次的多源分析開銷很低.隨后,本文將該技術(shù)應(yīng)用到Android應(yīng)用隱私泄露檢測(cè)中.

        總之,本文的主要貢獻(xiàn)如下.

        (1)創(chuàng)新地提出了一種解決多源綁定發(fā)生問題的污點(diǎn)分析技術(shù).該技術(shù)具有上下文敏感、流敏感、域敏感的特性,且可以精確地區(qū)分出分支條件路徑互斥的情況.

        (2)提出了一種多源綁定發(fā)生技術(shù)的高效實(shí)現(xiàn)方法.該方法將高復(fù)雜度(指數(shù)級(jí)別)的多源問題進(jìn)行近似,并提出了一種按需的多源污點(diǎn)傳播方法.實(shí)驗(yàn)結(jié)果表明,該方法與傳統(tǒng)污點(diǎn)分析相比,開銷僅為19.7%,且多次的多源分析開銷很低(進(jìn)一步分析的平均時(shí)間為0.3s).

        (3)實(shí)現(xiàn)了原型系統(tǒng)MultiFlow,應(yīng)用其到2 116個(gè)良性手機(jī)軟件和2 089個(gè)惡意手機(jī)軟件的隱私泄露檢測(cè)中,發(fā)現(xiàn)了良性軟件和惡意軟件的綁定發(fā)生特性有較大的差別,且本文方法和傳統(tǒng)方法對(duì)比有較大的精度提升(減少多源對(duì) 41.1%).最后,我們還提出了一種污點(diǎn)分析結(jié)果風(fēng)險(xiǎn)評(píng)級(jí)標(biāo)準(zhǔn),應(yīng)用評(píng)級(jí)結(jié)果可以直接提高檢測(cè)的效率和精度.

        本文第1節(jié)對(duì)本文的研究背景進(jìn)行介紹,包括靜態(tài)污點(diǎn)分析的通用解決方案及Android隱私泄露檢測(cè)相關(guān)技術(shù).第 2節(jié)使用實(shí)際例子演示本文的研究動(dòng)機(jī)并分析該問題的難點(diǎn).第 3節(jié)介紹多源綁定發(fā)生的污點(diǎn)分析技術(shù),包括問題定義以及提高精度和效率兩方面的關(guān)鍵技術(shù).第4節(jié)給出具體實(shí)驗(yàn)以驗(yàn)證多源技術(shù)的開銷.第5節(jié)將該技術(shù)應(yīng)用到實(shí)際隱私泄露檢測(cè)中.第6節(jié)為相關(guān)工作.第7節(jié)對(duì)本文進(jìn)行總結(jié),并深入討論該技術(shù)潛在的應(yīng)用場景.

        1 背景知識(shí)

        1.1 IFDS框架

        一般而言,靜態(tài)污點(diǎn)分析問題都是被轉(zhuǎn)化為數(shù)據(jù)流分析問題[9]進(jìn)行求解:首先,根據(jù)程序中的函數(shù)調(diào)用關(guān)系構(gòu)建調(diào)用圖(call graph,簡稱 CG);其次,為了提供更細(xì)粒度地區(qū)分程序不同執(zhí)行路徑的分析,還需要構(gòu)建控制流圖(control flow graph,簡稱CFG);最后,在過程內(nèi)和過程間,根據(jù)不同的程序特性進(jìn)行具體的數(shù)據(jù)流傳播分析(與指針分析).在具體實(shí)現(xiàn)中,污點(diǎn)分析常常被設(shè)計(jì)為一種按需的分析算法:以污點(diǎn)源 source函數(shù)為驅(qū)動(dòng)源,分析其返回值(污點(diǎn))在程序中的傳播,直到匯聚點(diǎn)sink函數(shù)為止.

        IFDS框架[10]是一個(gè)精確高效的上下文敏感和流敏感的數(shù)據(jù)流分析框架,于1996年由Reps等人提出.IFDS的全稱是過程間(interprocedural)、有限的(finite)、滿足分配率的(distributive)、子集合(subset)問題.該問題作用在有限的數(shù)據(jù)流域中,且數(shù)據(jù)值(data flow fact)需要通過并(或交)的集合操作滿足分配率.滿足上述限定的問題都可以利用IFDS算法進(jìn)行求解(文獻(xiàn)[10]中的Tabulation算法),而污點(diǎn)分析問題正是滿足IFDS問題要求的.污點(diǎn)分析的數(shù)據(jù)流值是污點(diǎn)變量,表示當(dāng)前污點(diǎn)變量可以到達(dá)程序點(diǎn)Stmt.該算法的最壞的時(shí)間復(fù)雜度是O(ED3),其中,E是當(dāng)前控制流圖中的邊個(gè)數(shù),D是數(shù)據(jù)流域的大小.

        IFDS問題求解算法的核心思想就是將程序分析問題轉(zhuǎn)化為圖可達(dá)問題[11].算法的分析過程在一個(gè)按照具體問題所構(gòu)造的超圖(exploded supergraph)上進(jìn)行(如圖2的例子所示),其中,數(shù)據(jù)流值可被表示成圖中的節(jié)點(diǎn).算法擴(kuò)展了一個(gè)特殊數(shù)據(jù)流值:0值,用于表示空集合;程序分析中轉(zhuǎn)移函數(shù)的計(jì)算,即對(duì)數(shù)據(jù)流值的傳遞計(jì)算,被轉(zhuǎn)化為圖中的邊的求解.為了更好地進(jìn)行描述,算法根據(jù)程序的特性將分析分解成4種轉(zhuǎn)移函數(shù)(邊).

        (1)Call-Flow,即求解函數(shù)調(diào)用(參數(shù)映射)的轉(zhuǎn)移函數(shù).

        (2)Return-Flow,即求解函數(shù)返回語句返回值到調(diào)用點(diǎn)的轉(zhuǎn)移函數(shù).

        (3)CallToReturn-Flow,即函數(shù)調(diào)用到函數(shù)返回的轉(zhuǎn)移函數(shù).

        (4)Normal-Flow,是指除了上述3種函數(shù)處理范圍之外的語句的轉(zhuǎn)移函數(shù).

        Fig.2 An example of taint analysis solved by IFDS algorithm圖2 使用IFDS算法求解污點(diǎn)分析示例

        IFDS求解算法Tabulation是一種動(dòng)態(tài)規(guī)劃的算法,即求解過的子問題的路徑可被重復(fù)地利用.由于其數(shù)據(jù)流值滿足分配率,因此可以在分支或函數(shù)調(diào)用將邊進(jìn)行合并.求解算法包括了兩類路徑的計(jì)算:路徑邊(path edge)和摘要邊(summary edge).

        · 路徑邊表示的是過程內(nèi)從起點(diǎn)到當(dāng)前計(jì)算點(diǎn)的可達(dá)路徑.

        · 摘要邊表示的是函數(shù)調(diào)用到函數(shù)返回的邊,其主要特點(diǎn)是,如果在不同調(diào)用點(diǎn)再次遇到同樣的函數(shù)調(diào)用,可以直接利用其摘要邊信息,從而避免了函數(shù)內(nèi)重復(fù)的路徑邊的計(jì)算.

        下面以圖2中的例子來演示IFDS算法是如何求解污點(diǎn)分析問題的,其中的數(shù)據(jù)流值表示由污點(diǎn)源傳播來的污點(diǎn)變量.為了簡潔,我們簡寫污點(diǎn)源函數(shù)為source(),泄露點(diǎn)為sink(b),其中,b為泄露變量(下文同理).如第 2行所示,此時(shí)將產(chǎn)生一條由0到a的邊.對(duì)于第3行的賦值語句[b=a;]和a變量,Normal-flow一般被定義為:如果賦值語句右值是污點(diǎn)變量,那么產(chǎn)生左值為污點(diǎn)變量且保留原值,即產(chǎn)生a→b和a→a的邊.對(duì)于第4行的程序函數(shù)調(diào)用,由于b是函數(shù)foo的參數(shù),分析將啟動(dòng)Call-Flow函數(shù).Call-Flow一般定義為:如果實(shí)參為污點(diǎn)變量,就會(huì)對(duì)應(yīng)產(chǎn)生形參的污點(diǎn)變量,即產(chǎn)生b→x的邊.對(duì)于第10行的程序函數(shù)返回點(diǎn),Return-Flow將產(chǎn)生返回語句的值到調(diào)用點(diǎn)返回值映射的邊,即產(chǎn)生y→c的邊.對(duì)于污點(diǎn)匯聚點(diǎn) sink函數(shù),如果有數(shù)據(jù)流值經(jīng)過該語句,例如圖中的變量c,則表示存在一條路徑從0到達(dá)語句sink(c),c為最終觸發(fā)sink的污點(diǎn)變量.對(duì)于foo中已經(jīng)計(jì)算完成的入口到出口的邊(圖中x→y),分析將其保存為摘要邊,之后,如果程序其他位置用 foo時(shí),則直接利用該摘要邊即可.

        1.2 FlowDroid

        FlowDroid[12]是當(dāng)前最流行的開源Android靜態(tài)污點(diǎn)分析工具,目前被廣泛地應(yīng)用于檢測(cè)Android隱私泄露和其他Android安全問題.FlowDroid接受待分析的apk文件作為輸入,利用反編譯工具Dexpler和Java分析工具Soot[13]將apk文件轉(zhuǎn)化成Soot中間表示Jimple,隨后在Jimple上進(jìn)行靜態(tài)的污點(diǎn)分析.其分析的結(jié)果是多個(gè)污點(diǎn)源到污點(diǎn)匯聚點(diǎn)(Src→Sink)的集合.FlowDroid提供了完整的 Android函數(shù)調(diào)用圖的構(gòu)建,且提供了高精確度和高效率的污點(diǎn)傳播分析.Android框架中存在大量回調(diào)函數(shù),導(dǎo)致 Android程序的分析存在多入口的問題.FlowDroid嘗試對(duì) Android生命周期函數(shù)進(jìn)行模擬,迭代地加入預(yù)先分析的入口函數(shù)(異步調(diào)用、回調(diào)函數(shù)等),使用dummyMain和虛擬節(jié)點(diǎn)連接成完整的調(diào)用圖.在污點(diǎn)傳播分析中,FlowDroid正是基于IFDS[10]數(shù)據(jù)流分析框架(提供了面向 Java的 Call-Flow、Return-Flow、CallToReturn-Flow、Normal-Flow的污點(diǎn)傳播轉(zhuǎn)移函數(shù)).FlowDroid同時(shí)提出一種按需的后向別名分析方法,使用Access Path來支持域敏感.因此,FlowDroid具有流敏感、上下文敏感、域敏感的高精確度.FlowDroid使用Susi[14]工具來生成在Android隱私泄露應(yīng)用中使用的源和匯聚點(diǎn);使用手工書寫的摘要來對(duì)庫函數(shù)的語義進(jìn)行模擬(后續(xù)工作提供了 StubDroid[15]來自動(dòng)生成庫函數(shù)的摘要).FlowDroid的初衷是提供一個(gè)敏感度高且高效的污點(diǎn)分析工具,然而其沒有深入探索污點(diǎn)分析檢測(cè)Android應(yīng)用隱私泄露的問題.

        2 研究動(dòng)機(jī)

        正如引言中所述,當(dāng)前污點(diǎn)分析面臨的一個(gè)重要研究問題就是:污點(diǎn)分析結(jié)果無法回答一個(gè)應(yīng)用程序是否具有隱私泄露(誤報(bào)率高).本節(jié)用一個(gè)例子來說明本文的研究動(dòng)機(jī).我們選擇兩個(gè)應(yīng)用程序的程序片段來演示當(dāng)前污點(diǎn)分析檢測(cè)隱私泄露問題的困難,其中,圖3是從Google Play[16]應(yīng)用市場中下載的一個(gè)新聞應(yīng)用程序的代碼片段,它是一個(gè)沒有隱私泄露行為的應(yīng)用軟件;另一個(gè)程序(如圖4所示)是一個(gè)從Genome庫[17]中得到的惡意軟件 DroidKungfu的變體.具體分析,新聞應(yīng)用利用了地理位置的信息來提供用戶當(dāng)?shù)氐奶鞖鉅顩r,圖3左側(cè)是其代碼片段.同時(shí),該應(yīng)用的另一個(gè)常用功能就是提供設(shè)備號(hào)以便進(jìn)行網(wǎng)絡(luò)設(shè)備驗(yàn)證,圖3右側(cè)為其相關(guān)代碼.然而,如圖4所示的惡意軟件片段在一個(gè)特殊的回調(diào)函數(shù)OnStartCommand下直接獲取程序的地理位置信息和用戶的設(shè)備號(hào)信息,然后傳遞給網(wǎng)絡(luò).它是以盜取用戶敏感信息為目的的.

        Fig.3 A code snippet of benign App圖3 良性應(yīng)用軟件代碼片段

        Fig.4 A code snippet of malware圖4 惡意軟件代碼片段

        我們使用 FlowDroid對(duì)兩個(gè)應(yīng)用程序進(jìn)行隱私泄露檢測(cè).由于 FlowDroid只是考慮單一的污點(diǎn)分析結(jié)果,分析上述兩個(gè)應(yīng)用程序的結(jié)果都是:{地理信息(getLatitude/getLongitude)發(fā)送到網(wǎng)絡(luò)}和{設(shè)備信息(getDeviceId/getMacAddress)發(fā)送到網(wǎng)絡(luò)}.即便我們嘗試一些統(tǒng)計(jì)分析的方法,例如應(yīng)用 MudFlow 中的統(tǒng)計(jì)結(jié)果(一種分類器)來區(qū)分,由于兩者的結(jié)果是完全一樣的,分類器也是無法區(qū)分兩者的惡意行為的.因此,單獨(dú)地依據(jù)FlowDroid的結(jié)果判斷隱私泄露,會(huì)導(dǎo)致該問題檢測(cè)的誤報(bào),這促使我們嘗試更加精化的分析方法.

        進(jìn)一步分析我們發(fā)現(xiàn),在新聞應(yīng)用中,由于發(fā)送信息是在不同的模塊下,因此在一次執(zhí)行過程中,必然是只能發(fā)送地理位置信息到網(wǎng)絡(luò)就不會(huì)發(fā)送用戶的設(shè)備信息,反之亦然.然而對(duì)比惡意軟件,由于地理信息和用戶設(shè)備等信息是惡意軟件同時(shí)需要的,因此它們往往是綁定在一起發(fā)送到網(wǎng)絡(luò)的.目前的污點(diǎn)分析只能提供單一的污點(diǎn)源和匯聚點(diǎn)的組合結(jié)果,并沒有考慮多個(gè)組合之間的相關(guān)性關(guān)系.出于上述考慮,本研究的目標(biāo)就是利用多個(gè)污點(diǎn)源到污點(diǎn)匯聚點(diǎn)組合的相關(guān)性來降低隱私泄露檢測(cè)的誤報(bào)率.更進(jìn)一步來講,我們研究在程序的一次執(zhí)行(一次事件觸發(fā)下)路徑上,多個(gè)污點(diǎn)分析組合是否能夠綁定發(fā)生在這一路徑上.我們將該問題命名為多源綁定發(fā)生問題,而提供解決此問題的污點(diǎn)分析稱為多源綁定發(fā)生的污點(diǎn)分析技術(shù).

        更加特殊的情況如圖3右側(cè)程序的分支 7和分支 9下,在設(shè)備驗(yàn)證模塊中,由于某些情況(缺少 SIM 卡),getDeviceId函數(shù)將返回空,這時(shí)需要使用設(shè)備的Wifi物理地址(getMacAddress)作為設(shè)備標(biāo)識(shí).FlowDroid得到的結(jié)果是getDeviceId→NETWORK和getMacAddress→NETWORK.然而在一次執(zhí)行過程中,它們是不可能都被執(zhí)行的,原因是IF分支的真分支和假分支是互斥的情況.由此可見,多源綁定發(fā)生的污點(diǎn)分析技術(shù)需要區(qū)分不同路徑下的分析結(jié)果;其次,雖然在上述例子中沒有出現(xiàn),但分析還需要保證如FlowDroid一樣的精度(上下文敏感、流敏感、域敏感等)以及可用范圍內(nèi)的開銷.這些都給發(fā)掘污點(diǎn)分析結(jié)果之間的相關(guān)性帶來了困難.因此,本研究的關(guān)鍵技術(shù)是提出一種精確高效的多源綁定發(fā)生的污點(diǎn)分析技術(shù).

        3 多源綁定發(fā)生的污點(diǎn)分析技術(shù)

        3.1 多源綁定發(fā)生問題定義

        首先,本文給出了多源綁定發(fā)生問題的形式化描述.

        定義1(程序執(zhí)行的軌跡流).在程序的一次執(zhí)行中,從程序入口到程序出口的一系列被執(zhí)行的語句序列P:

        其中,Si表示程序執(zhí)行過程中執(zhí)行的指令語句.如果P1是P的子序列,那么P1?P,其含義表示P1出現(xiàn)在P的執(zhí)行過程中.

        定義2(污點(diǎn)分析軌跡流).從污點(diǎn)源傳播到污點(diǎn)匯聚點(diǎn)的一系列被執(zhí)行的語句序列F:

        如果F?P,則說明一條污點(diǎn)分析軌跡流F出現(xiàn)在程序執(zhí)行P中或程序的一次執(zhí)行P可以觸發(fā)污點(diǎn)分析結(jié)果F.

        定義3(多源綁定發(fā)生).令表示一組污點(diǎn)分析軌跡流,那么在一次執(zhí)行軌跡流P中,該組軌跡流能夠綁定發(fā)生,當(dāng)且僅當(dāng)滿足如下公式:

        我們簡稱多源綁定發(fā)生問題為多源問題.令的大小(即中污點(diǎn)結(jié)果的個(gè)數(shù))為k,我們稱大小為k的F的綁定發(fā)生問題為k-多源綁定發(fā)生問題,簡稱k-多源問題.傳統(tǒng)的產(chǎn)生獨(dú)立污點(diǎn)結(jié)果的污點(diǎn)分析則是 1-多源問題.

        目前,使用靜態(tài)分析解決多源綁定發(fā)生問題具有很大的挑戰(zhàn).

        · 首先,由于程序中分支和循環(huán)的存在,程序可能的執(zhí)行路徑數(shù)量會(huì)根據(jù)分支的數(shù)量呈指數(shù)級(jí)上升.為了完成有效的分析,靜態(tài)(污點(diǎn))分析常用的方法是在分支交匯處合并數(shù)據(jù)流值,以表示出當(dāng)前可能發(fā)生的數(shù)據(jù)流值.例如,圖3例子中,分支結(jié)束點(diǎn)第 13行得到的最終數(shù)據(jù)流值包含的源是{getDeviceId,getMacAddress},表示兩個(gè)源都可能傳播到網(wǎng)絡(luò).然而,同樣的問題在多源綁定發(fā)生問題中并不適用,因?yàn)槿绻诔绦蚍种庍M(jìn)行合并就無法有效地區(qū)分出不同路徑下的污點(diǎn)傳播.

        · 其次,一次污點(diǎn)分析往往會(huì)產(chǎn)生多組污點(diǎn)分析結(jié)果,記其個(gè)數(shù)為k.對(duì)k-多源問題求解的復(fù)雜度會(huì)是k的指數(shù)級(jí)別(將在后文進(jìn)行論證),即便我們僅對(duì)結(jié)果中的兩對(duì)源進(jìn)行分析(2-多源問題),k對(duì)結(jié)果之間兩兩組合的個(gè)數(shù)是,此時(shí),我們可能的查詢次數(shù)最多會(huì)有次數(shù).如果多源問題的開銷較大的話,多次的查詢會(huì)導(dǎo)致系統(tǒng)難以使用.

        本文創(chuàng)新地提出了解決上述難點(diǎn)的方法,我們將在第3.2節(jié)介紹多源綁定發(fā)生的污點(diǎn)分析技術(shù)(保證精度),在第3.3節(jié)介紹一種高效的實(shí)現(xiàn)方法(保證效率).

        3.2 多源綁定發(fā)生的污點(diǎn)分析

        正如第 1節(jié)所述,靜態(tài)污點(diǎn)分析的數(shù)據(jù)流值表示的是當(dāng)前的污點(diǎn)變量可能到達(dá)該語句 Stmt.為了能夠保證多源綁定發(fā)生的分析,我們創(chuàng)新地提出了將數(shù)據(jù)流值擴(kuò)展以污點(diǎn)變量組成的向量的形式,如公式(1)所示.

        令v1,v2,…,vn-1,vn為污點(diǎn)變量,其綁定發(fā)生的數(shù)據(jù)流值為

        數(shù)據(jù)流值是一個(gè)污點(diǎn)變量組成的向量,而整個(gè)數(shù)據(jù)流值表示向量中所有的變量在當(dāng)前的語句 Stmt上是可以綁定到達(dá)的.以圖5中的程序?yàn)槔?如果數(shù)據(jù)流值〈b1,b2〉分別傳播到sink(b1)和sink(b2),則表示污點(diǎn)變量b1和b2的源是可以綁定發(fā)生的.傳統(tǒng)的污點(diǎn)分析方法(如FlowDroid中的方法)正是該方法的一個(gè)特例,即數(shù)據(jù)流值為一元向量的情況.

        Fig.5 An example of multi-source binding data flow analysis(1)圖5 多源綁定發(fā)生數(shù)據(jù)流傳播示例(1)

        上述數(shù)據(jù)流值形式保證其分析可以滿足IFDS問題,從而對(duì)該問題的求解可以支持上下文敏感和流敏感的性質(zhì).具體來講,我們提供了IFDS問題的擴(kuò)展數(shù)據(jù)流方程相關(guān)的轉(zhuǎn)移函數(shù),即Normal-Flow函數(shù)、Call-Flow函數(shù)、Return-Flow函數(shù)、CallToReturn-Flow函數(shù),表1給出了算法詳細(xì)的偽代碼.解釋如下:令表示數(shù)據(jù)流值向量,用v表示中對(duì)應(yīng)維度的元素,算法重用了傳統(tǒng)的污點(diǎn)分析的轉(zhuǎn)移函數(shù)(簡稱為 solo轉(zhuǎn)移函數(shù),算法中的soloNormal/soloCall/soloReturn/soloCallToReturn函數(shù))用來表示對(duì)單一的v的污點(diǎn)變量獨(dú)立的傳播規(guī)則.由于solo轉(zhuǎn)移函數(shù)已經(jīng)在文獻(xiàn)[18]中提供,這里省略.在 Normal-Flow函數(shù)中,對(duì)中的每一維度v進(jìn)行遍歷,如果v在當(dāng)前語句n的計(jì)算,即Normal(v,n)的結(jié)果為soloRes集合,那么對(duì)于soloRes中每一個(gè)元素t,用t替換原中v生成新值,即.replace(v,t)來表示保證其他維度不變用新值t替換v生成新值.例如在圖5右側(cè)的傳播:對(duì)于語句[b1=a1;],數(shù)據(jù)流值〈a1,a2〉中的a1 會(huì)根據(jù) soloNormal函數(shù)產(chǎn)生a1 和b1,所以最終的函數(shù)會(huì)生成〈a1,a2〉和〈b1,a2〉.在 Call-Flow 函數(shù)中,需要對(duì)v中所有在函數(shù)調(diào)用中使用的變量都進(jìn)行污點(diǎn)傳播;對(duì)中每一維度元素,查找其是否在函數(shù)調(diào)用中使用,如果有使用,則用soloCall生成的新值進(jìn)行替換.Return函數(shù)與Call函數(shù)類似,只是將參數(shù)映射轉(zhuǎn)化為返回值的映射.CallToReturn與Normal類似,一種特殊的CallToReturn函數(shù)是對(duì)污點(diǎn)源和匯聚點(diǎn)的處理函數(shù),例如,〈0,0〉表示IFDS框架的初始值(0值),污點(diǎn)源source1和source2為兩個(gè)不同的源.對(duì)于污點(diǎn)源的計(jì)算,算法將從0產(chǎn)生對(duì)應(yīng)位置的污點(diǎn)變量,如語句[inta1=source1();]將從〈0,0〉產(chǎn)生〈a1,0〉.算法的初始輸入是待分析的多個(gè)源的集合,而其他不在這個(gè)集合的污點(diǎn)源并不會(huì)進(jìn)行分析.圖5右側(cè)演示了左側(cè)程序的傳播過程.可見,算法能夠有效地生成〈b1,b2〉向量,也就是之后可以綁定地觸發(fā)sink(b1)和sink(b2)的污點(diǎn)變量.

        Table 1 Data flow transfer functions of multi-source binding analysis表1 多源綁定發(fā)生的數(shù)據(jù)流轉(zhuǎn)移函數(shù)

        該方法的主要特點(diǎn)就是能夠區(qū)分出分支(IF)互斥的路徑中污點(diǎn)變量的傳播,如圖6所示程序?yàn)槔?source1()源的污點(diǎn)變量c1的傳播路徑是source1→a1→b1→c1.其中,如果變量無法傳遞到中間變量b1,自然無法傳遞到c1.如果考慮到分支的情況,分支Brb1和Brc1控制了污點(diǎn)源source1()進(jìn)行傳遞的變量b1和c1,而分支Brb2和Brc2則控制對(duì)source2()傳播的b2和c2.不難發(fā)現(xiàn),Brb1和Brb2是互斥的.這會(huì)導(dǎo)致a1污點(diǎn)傳播到b1而a2就不會(huì)傳播到b2,反之亦然.所以對(duì)于可以觸發(fā)sink(b1)的b1和觸發(fā)sink(b2)的b2對(duì)應(yīng)的源是不能綁定發(fā)生的.我們的方法可以有效地區(qū)分出此類情況.如圖6右側(cè)的具體數(shù)據(jù)流傳遞所示,傳播算法可以正確地區(qū)分出具有互斥關(guān)系的分支.由最后的結(jié)果可見:結(jié)果向量集合中不會(huì)存在具有互斥(不會(huì)再一次執(zhí)行中綁定發(fā)生)的污點(diǎn)變量,〈b1,b2〉,〈c1,c2〉,〈b1,c2〉,〈c1,b2〉是不會(huì)出現(xiàn)在結(jié)果中的.

        Fig.6 An example of multi-source binding data flow analysis(2)圖6 多源綁定發(fā)生數(shù)據(jù)流傳播示例(2)

        此外,我們還擴(kuò)展了一個(gè)特殊的污點(diǎn)變量:END值(如圖5所示),END(S)表示從S的源出發(fā)的污點(diǎn)變量已經(jīng)流到sink().這是出于考慮:有些情況雖然一個(gè)源已經(jīng)被sink觸發(fā)了,但是為了整體的分析,還需要繼續(xù)告知其他源該源已經(jīng)發(fā)生的信息.例如圖7的情況,源src1和源src2是可以同時(shí)發(fā)生的,但是在src1的污點(diǎn)變量還未能到達(dá)sink1()時(shí),src2的污點(diǎn)變量就已經(jīng)傳播到sink2,且在func1內(nèi)部完成了該傳播.通過使用END數(shù)據(jù)流,可以有效地解決該問題,即在sink2之后,在src2源對(duì)應(yīng)維度增加END變量繼續(xù)傳遞.END值不同于觸發(fā)sink但又可以繼續(xù)傳播的污點(diǎn)變量,因?yàn)镋ND是可以跨越過程的.

        Fig.7 An example of multi-source binding data flow analysis(3)圖7 多源綁定發(fā)生數(shù)據(jù)流傳播示例(3)

        3.3 多源問題的高效實(shí)現(xiàn)方法

        由于IFDS求解算法的最壞時(shí)間復(fù)雜度是O(ED3),算法的效率與數(shù)據(jù)流域D的大小(即數(shù)據(jù)流值的個(gè)數(shù))有直接關(guān)系.我們令傳統(tǒng)方法(1-多源問題)的污點(diǎn)變量個(gè)數(shù)是Dsolo,多源問題中源的個(gè)數(shù)(向量維度)是k,那么最壞情況,代入得知,整個(gè)問題的復(fù)雜度是.由此可見,多源綁定發(fā)生問題算法的復(fù)雜度是k指數(shù)級(jí)別的.

        為了能夠高效地實(shí)現(xiàn)多源問題的分析,我們將該問題近似為:將k-多源問題轉(zhuǎn)化為次的 2-多源問題求解.具體來講,令k-多源問題中的所有源進(jìn)行兩兩組合形成的集合為S,如果S中所有的2-多源問題都能滿足(綁定發(fā)生),我們就近似認(rèn)為k-多源問題能夠滿足.例如,對(duì)于結(jié)果為{getDeviceId,getMacAddr,getLineNum}的 3-多源問題,需要保證{getDeviceId,getMacAddr}、{getDeviceId,getLineNum}和{getLineNum,getMacAddr}這 3個(gè) 2-多源問題都滿足.我們提出上述近似方法的原因是:首先,如果k-多源問題滿足,那么S中的2-多源問題是一定都滿足的(充分條件),所以該近似不會(huì)產(chǎn)生漏報(bào).雖然反之不成立(不滿足必要條件),即會(huì)產(chǎn)生誤報(bào),但是我們認(rèn)為在隱私泄露檢測(cè)問題中,k-多源問題綁定發(fā)生和其所有兩兩組合的 2-多源綁定都發(fā)生的危害是相近的.同時(shí),我們?cè)趯?shí)驗(yàn)中發(fā)現(xiàn),一般能夠滿足上述近似的k-多源問題,實(shí)際上有很大概率是完全滿足k-多源綁定發(fā)生的,誤報(bào)率很低.我們將在實(shí)驗(yàn)部分進(jìn)一步闡述相關(guān)驗(yàn)證.

        上述的近似方法導(dǎo)致數(shù)據(jù)流域個(gè)數(shù)D的值降低為,算法的時(shí)間復(fù)雜度是.一般情況下,污點(diǎn)源的個(gè)數(shù)k的值并不會(huì)太大,且為了保證完整的分析結(jié)果,控制流的邊的個(gè)數(shù)往往不變,因此,k2×E的數(shù)量往往無法被降低,此時(shí),減少Dsolo的個(gè)數(shù)將是本技術(shù)提高效率的關(guān)鍵.本節(jié)將提供一種減少Dsolo的個(gè)數(shù)的高效實(shí)現(xiàn)方法.

        由于污點(diǎn)分析的本質(zhì)是一個(gè)按需的分析問題,即污點(diǎn)傳播只在污點(diǎn)源到匯聚點(diǎn)之間的路徑傳播,直觀上,污點(diǎn)分析應(yīng)該只針對(duì)該路徑進(jìn)行分析即可.傳統(tǒng)的污點(diǎn)分析在未遇到污點(diǎn)匯聚點(diǎn)時(shí)并不知道最終的傳播路徑,因此需要保守地傳播所有污點(diǎn)傳播的變量.當(dāng)擴(kuò)展到多源綁定發(fā)生問題時(shí),這種方法將產(chǎn)生大量的無用傳播.如圖8中的例子所示.來自source1的返回值a1會(huì)在第3行傳遞給f1、在第4行傳遞給t1,t1會(huì)在第11行傳遞給t2,t2在第12行觸發(fā) sink.這條完整的路徑為a1→t1→t2→sink,在圖8右側(cè)路徑中的紅色節(jié)點(diǎn)即為該傳播路徑.然而對(duì)于f1來講,他可以傳遞給f2、b、f3變量,但這些變量并不會(huì)觸發(fā)sink,如圖8右圖中白色節(jié)點(diǎn)之間的路徑.然而在多源綁定問題分析時(shí),即與source2的返回值a2形成向量,會(huì)根據(jù)上節(jié)的算法生成〈f2,a2〉,〈b,a2〉,〈f3,a2〉的值.同理,這些值也不會(huì)到達(dá)sink進(jìn)行觸發(fā).可見,這些值的傳播實(shí)際上是沒有意義的.當(dāng)a2進(jìn)一步在程序中傳播時(shí),則會(huì)帶來更多的無用數(shù)據(jù)流值.基于上述觀察,本節(jié)方法的核心思想就是消減這些無用的數(shù)據(jù)流值,只在可以觸發(fā)sink的路徑上進(jìn)行多源分析,即在圖中只傳播紅色節(jié)點(diǎn)變量(對(duì)于source1)和藍(lán)色節(jié)點(diǎn)變量(對(duì)于source2).

        為了維護(hù)污點(diǎn)源和匯聚點(diǎn)的路徑信息,我們需要利用一種重要的數(shù)據(jù)結(jié)構(gòu)[19]——數(shù)據(jù)流值的前驅(qū)節(jié)點(diǎn)(predecessor)和鄰居節(jié)點(diǎn)(neighbor).所謂一個(gè)數(shù)據(jù)流值的前驅(qū)節(jié)點(diǎn),是指直接生成該節(jié)點(diǎn)的數(shù)據(jù)流值.例如,圖8中,數(shù)據(jù)流值t1的前驅(qū)節(jié)點(diǎn)是a1.數(shù)據(jù)流值的鄰居節(jié)點(diǎn)是指,如果兩個(gè)數(shù)據(jù)流值可在分支(循環(huán))出口進(jìn)行合并(merge),但它們分別來自不同分支,那么它們之間互為鄰居關(guān)系.例如圖8中第6行處的分支,第7行和第9行都會(huì)產(chǎn)生數(shù)據(jù)流值b.為了區(qū)分不同分支的值,令第7行處為b′,第9行處為b,那么在分支結(jié)束處會(huì)將b的鄰居節(jié)點(diǎn)設(shè)置成b′.為了維護(hù)正確的污點(diǎn)分析路徑,鄰居信息是不可以被省略的,b′的前驅(qū)是f1,b的前驅(qū)是f2,它們分別代表不同的路徑.有了上述的數(shù)據(jù)結(jié)構(gòu),就可以利用觸發(fā)sink的變量進(jìn)行回溯,求得完整的污點(diǎn)分析路徑,進(jìn)而在多源分析中重用.另外,為了在多源分析中使用這些路徑信息,我們還需為數(shù)據(jù)流值擴(kuò)展一個(gè)結(jié)構(gòu)用于存儲(chǔ)由〈useStmt,nextDatafact〉組成的集合.useStmt表示當(dāng)前數(shù)據(jù)流值將要被使用的位置;nextDatafact表示在useStmt處產(chǎn)生的新數(shù)據(jù)流值.例如,t1在第11行生成t2,那么useStmt為line11,nextDatafact是t2.

        Fig.8 Efficient implementation method and data flow’s predecessor and neighbor圖8 高效實(shí)現(xiàn)方法以及數(shù)據(jù)流值前驅(qū)和鄰居示例

        基于上述結(jié)構(gòu),多源綁定發(fā)生的高效實(shí)現(xiàn)方法具體流程如下.

        (1)運(yùn)行傳統(tǒng)(1-多源問題)的污點(diǎn)分析,并通過FlowTwist[19]中的算法將數(shù)據(jù)流值的前驅(qū)和鄰居進(jìn)行記錄;并得到觸發(fā)sink的污點(diǎn)數(shù)據(jù)流值集合sinkSet.我們記該過程為SoloFlow.

        (2)將sinkSet中的值加入工作集中;對(duì)于工作集中的數(shù)據(jù)流值D,得到D的前驅(qū)pred(通過getPredecessor方法),將D和產(chǎn)生D值的位置語句(通過getCurrentStmt得到)記錄到pred中的〈useStmt,nextDatafact〉集合域中(使用方法SetUseStmt()).將D的neigh和pred加入工作集,迭代地對(duì)工作集中的數(shù)據(jù)流值遍歷直到結(jié)束.具體算法如算法1所示.我們記該過程為PreProcess.

        (3)執(zhí)行多源綁定的污點(diǎn)分析:由于每一個(gè)數(shù)據(jù)流值已經(jīng)在 PreProcess過程中記錄了其后繼的產(chǎn)生位置useStmt和后繼的值nextDatafact,我們修改原Solo轉(zhuǎn)移函數(shù)為只有在useStmt的位置產(chǎn)生新的數(shù)據(jù)流值nextDatafact即可.記該過程為MultiFlow.

        算法1.PreProcess過程算法.

        輸入:sinkSet.

        輸出:sourceSet.

        舉例說明,對(duì)于a1 變量,經(jīng)過 PreProcess 過程之后,a1 中〈useStmt,nextDatafact〉域的值是〈line4,t1〉.因此,該變量只在第4行處生成t1而不會(huì)在第3行處生成f1.同理,t1也只會(huì)在第11行處產(chǎn)生t2.如圖8右側(cè)紅色部分是source1的傳播路徑,而白色部分則不會(huì)計(jì)算.可見,該方法可將大量的無用變量的傳播進(jìn)行消除,而對(duì)于過程間的數(shù)據(jù)流值,效率提高的效果將更加明顯.此外,我們還利用了SoloFlow階段產(chǎn)生的摘要邊信息應(yīng)用到上述方法進(jìn)行優(yōu)化,即當(dāng)只有一個(gè)維度的污點(diǎn)變量被函數(shù)調(diào)用使用,并且當(dāng)前該調(diào)用已經(jīng)具有該值得摘要邊時(shí),我們直接使用其摘要信息產(chǎn)生其函數(shù)返回值.摘要邊也是在SoloFlow中自然產(chǎn)生的,因此不會(huì)引入額外的開銷.

        上述方法的主要特點(diǎn)是:我們只需要執(zhí)行 1次污點(diǎn)傳播以及回溯地完成路徑信息的記錄(soloFlow和PreProcess過程),但是可以執(zhí)行多次的多源綁定發(fā)生(MultiFlow過程)的分析.所以,對(duì)于一次污點(diǎn)分析的結(jié)果進(jìn)行n次的綁定發(fā)生分析,其時(shí)間為T=time(SoloFlow)+time(PreProcess)+n×time(MultiFlow).對(duì)于一個(gè)k-多源問題,其近似計(jì)算方法的時(shí)間是.

        4 實(shí) 驗(yàn)

        4.1 實(shí) 現(xiàn)

        為了驗(yàn)證本文技術(shù)的有效性,我們實(shí)現(xiàn)了一個(gè)原型系統(tǒng) MultiFlow.MultiFlow的實(shí)現(xiàn)是基于 Soot和FlowDroid的:重用了FlowDroid面向Android特性構(gòu)建的函數(shù)調(diào)用圖,使用訪問路徑(access path)來保證域敏感的分析,在Soot的中間表示Jimple上完成多源污點(diǎn)分析.MultiFlow重用了FlowDroid的后向傳播求解的別名分析,將一個(gè)污點(diǎn)變量別名的數(shù)據(jù)流值的前驅(qū)設(shè)置成該變量的前驅(qū).由于Android系統(tǒng)是事件驅(qū)動(dòng)的,MultiFlow設(shè)置一次多源綁定分析的結(jié)束為一次回調(diào)函數(shù)的結(jié)束.

        在下文的所有實(shí)驗(yàn)以及第5節(jié)的應(yīng)用中,我們統(tǒng)一使用表2所示的污點(diǎn)源和匯聚點(diǎn).

        Table 2 Sources and sinks in MultiFlow provided by Susi表2 MultiFlow使用的Susi提供的源和匯聚點(diǎn)

        表2所示的污點(diǎn)源和匯聚點(diǎn)由SuSi工具提供,由于排版受限,我們將源和匯聚點(diǎn)縮寫成其函數(shù)名和方法名的形式,省略了參數(shù)和返回值類型,完整的名字請(qǐng)參考https://blogs.uni-paderborn.de/sse/tools/susi/.

        4.2 效 率

        本節(jié)將驗(yàn)證多源綁定技術(shù)的效率.本文的技術(shù)為傳統(tǒng)污點(diǎn)分析技術(shù)精度的提升提供了可能,但是該技術(shù)也會(huì)引入開銷的增加.因此,該實(shí)驗(yàn)的目的就是驗(yàn)證多源綁定發(fā)生技術(shù)與傳統(tǒng)技術(shù)相比有多少開銷.實(shí)驗(yàn)對(duì)比對(duì)象是傳統(tǒng)的污點(diǎn)分析,此處我們使用FlowDroid的污點(diǎn)分析階段.實(shí)驗(yàn)機(jī)器的配置是:64核Intel(R)Xeon(R)CPU E7-4809(2.0GHz)和128G RAM,為每一個(gè)Java虛擬機(jī)分配32G的內(nèi)存.我們隨機(jī)地從Google Play應(yīng)用市場下載驗(yàn)證程序,并盡量選擇其中可運(yùn)行規(guī)模較大的程序.這里,我們選擇 IFDS邊的個(gè)數(shù)作為計(jì)算規(guī)模的衡量標(biāo)準(zhǔn),最終的驗(yàn)證程序包含16個(gè)Android應(yīng)用程序.由于我們將k-多源問題轉(zhuǎn)化為2-多源問題,我們將驗(yàn)證多次的2-多源問題.此時(shí),我們?cè)?-多源問題(SoloFlow階段)的結(jié)果中兩兩組合形成的集合中隨機(jī)選擇10對(duì)組合進(jìn)行2-多源問題計(jì)算(如果少于10次,則將所有源進(jìn)行兩兩組合計(jì)算).我們對(duì)驗(yàn)證集合的程序運(yùn)行3次,隨后記錄其執(zhí)行時(shí)間的平均值,表3是相關(guān)的實(shí)驗(yàn)結(jié)果.

        Table 3 Time overhead of multi-source binding taint analysis technique表3 多源綁定發(fā)生污點(diǎn)分析技術(shù)的時(shí)間開銷

        由實(shí)驗(yàn)結(jié)果得出,我們的方法與傳統(tǒng)方法相比不會(huì)有較大開銷.此外,由于通常多源分析會(huì)進(jìn)行多次MultiFlow階段的查詢,我們驗(yàn)證了多源問題高效實(shí)現(xiàn)方法的各個(gè)階段時(shí)間所占比例.如圖9所示,由于SoloFlow階段的時(shí)間即為1-多源問題的時(shí)間,所以我們的主要開銷是time(PreProcess)+n×time(2-MultiFlow).

        Fig.9 Percentage of each phase of the efficient implementation method圖9 高效實(shí)現(xiàn)方法的各個(gè)階段所占比例

        從圖9中可以發(fā)現(xiàn),2-MultiFlow所用時(shí)間所占比例僅為1%(平均0.3s).這正說明了多源高效實(shí)現(xiàn)方法的有效性.因此,我們的開銷主要消耗在 PreProcess階段.也就是說,進(jìn)一步對(duì) 2-MultiFlow進(jìn)行多次查詢對(duì)系統(tǒng)的查詢開銷影響并不大.綜合統(tǒng)計(jì),本文技術(shù)的平均時(shí)間開銷(PreProcess階段開銷)為19.7%,這在靜態(tài)分析中往往是可以接受的.

        4.3k-多源問題近似方法驗(yàn)證

        本節(jié)將驗(yàn)證將k-多源問題轉(zhuǎn)化為次的2-多源問題的可行性.由于此方法并不會(huì)產(chǎn)生漏報(bào),而可能產(chǎn)生誤報(bào),我們這里主要驗(yàn)證其誤報(bào)率的大小,也就是說,驗(yàn)證次 2-多源問題滿足的條件下,k-多源問題的滿足情況.這里,我們選擇在惡意軟件庫中挑選程序進(jìn)行驗(yàn)證.我們?cè)贕enome庫[17]中隨機(jī)挑選50個(gè)具有隱私泄露問題的程序,利用 MultiFlow對(duì)其所有的污點(diǎn)分析結(jié)果兩兩配對(duì)進(jìn)行 2-多源問題分析.我們使用反編譯工具將其轉(zhuǎn)化為可讀的中間表示代碼,對(duì)其結(jié)果進(jìn)行人工驗(yàn)證.我們發(fā)現(xiàn),這 50個(gè)程序中,所有通過近似方法滿足的k-多源問題就是k-多源綁定發(fā)生的.進(jìn)一步分析,如果近似方法不滿足,則說明具有多個(gè)2-多源問題分別出現(xiàn)在了不同的分支下,如圖10 所示的分支,多源對(duì)〈src1,src2〉,〈src1,src3〉,〈src2,src3〉分別出現(xiàn)在不同的分支下,而我們選擇的這50個(gè)例子是沒有這種復(fù)雜情況的.這也充分地驗(yàn)證了k-多源問題近似方法的可行性.

        Fig.10 An example of thek-multi approximation method violation圖10k-多源問題近似方法違反示例

        5 Android應(yīng)用隱私泄露檢測(cè)應(yīng)用

        本節(jié)我們將探索多源技術(shù)在 Android應(yīng)用隱私泄露檢測(cè)中的應(yīng)用.首先,本節(jié)驗(yàn)證了當(dāng)前良性軟件和惡意軟件在多源綁定發(fā)生特性上的差異,從而提供區(qū)分惡意行為的依據(jù);其次,本節(jié)驗(yàn)證多源技術(shù)相比簡單方法的精確度提升;最后,本節(jié)提出了一種污點(diǎn)分析結(jié)果風(fēng)險(xiǎn)評(píng)級(jí)方法,檢測(cè)人員即可從結(jié)果中惡意行為級(jí)別由高到低地進(jìn)行檢測(cè),從而縮小了檢測(cè)范圍,提高了分析的效率.

        5.1 良性軟件和惡意軟件多源綁定發(fā)生特性差異

        本節(jié)將驗(yàn)證文章開始部分提出的假設(shè):良性軟件和惡意軟件的多源綁定特性具有較大差異,從而可以利用其提高檢測(cè)精度.實(shí)驗(yàn)使用統(tǒng)計(jì)方法進(jìn)行驗(yàn)證,選擇具有較大數(shù)量的良性軟件庫和惡意軟件庫作為驗(yàn)證集合.我們?cè)趹?yīng)用市場中隨機(jī)選擇了2 116個(gè)程序作為良性軟件庫測(cè)試集合,其中,1 148個(gè)來源于Google play應(yīng)用市場[16],968個(gè)來源于安智網(wǎng)應(yīng)用市場[20].另外選擇了 2 089個(gè)程序作為惡意軟件庫集合,其中,1 089個(gè)來自Genome庫[17],1 000個(gè)來自 VirusShare庫[21].最后,使用 MultiFlow 對(duì)這些軟件進(jìn)行多源綁定的分析,將所有SoloFlow階段產(chǎn)生的結(jié)果之間的所有組合進(jìn)行了分析,如果兩個(gè)源可以綁定發(fā)生,我們就停止對(duì)這兩個(gè)源(其他調(diào)用點(diǎn))進(jìn)行分析.

        在良性軟件庫運(yùn)行結(jié)果中,337個(gè)(占15.9%)應(yīng)用程序(由于超時(shí)、反編譯錯(cuò)誤等問題)無法正常分析,443個(gè)(占20.9%)程序產(chǎn)生小于2條污點(diǎn)分析結(jié)果(綁定發(fā)生至少需要2個(gè)源).我們將這兩類程序去除,最終可以進(jìn)行綁定發(fā)生分析的集合包括1 336個(gè)應(yīng)用程序,其中有382個(gè)(占能多源分析的28.6%)應(yīng)用程序沒有綁定發(fā)生的污點(diǎn)分析結(jié)果(雖然有大于1條的傳統(tǒng)污點(diǎn)分析結(jié)果,但都不是綁定發(fā)生的).對(duì)剩下的具有綁定發(fā)生結(jié)果的954個(gè)應(yīng)用程序進(jìn)行統(tǒng)計(jì)分析,實(shí)驗(yàn)使用 Apriori算法[22]抽取頻繁項(xiàng)集,其中,選擇最小支持度(support)為 10%,即多源組合中出現(xiàn)次數(shù)大于整個(gè)集合的 10%(95個(gè))的多源組合.最后統(tǒng)計(jì)結(jié)果按照支持度進(jìn)行排序,見表4.在惡意軟件庫運(yùn)行結(jié)果中,除去103個(gè)(占4.9%)應(yīng)用程序無法正常分析和711個(gè)(占34%)程序產(chǎn)生小于2條的污點(diǎn)分析結(jié)果(惡意軟庫中還包含很多非隱私泄露問題的惡意問題[17],這種情況并不會(huì)產(chǎn)生污點(diǎn)分析結(jié)果),最終可以進(jìn)行綁定分析的集合有1 275個(gè).另外發(fā)現(xiàn)有237個(gè)(占能多源分析的18.7%)應(yīng)用程序沒有綁定發(fā)生的污點(diǎn)分析結(jié)果.最后對(duì)剩下的產(chǎn)生結(jié)果的1 038個(gè)應(yīng)用程序進(jìn)行統(tǒng)計(jì)分析,同樣使用Apriori算法抽取頻繁項(xiàng)集(最小支持度 10%),統(tǒng)計(jì)結(jié)果見表5.同時(shí),我們還對(duì)比良性軟件庫中使用頻繁的組合在惡意軟件庫中所占的比例(反之亦然),結(jié)果為表4和表5的最后一列.

        從表中的結(jié)果可以發(fā)現(xiàn),惡意軟件和良性軟件在多源綁定發(fā)生特性上具有明顯的差異.具體來講:

        · 首先,在使用頻繁度上,良性軟件和惡意軟件的統(tǒng)計(jì)結(jié)果差別很大.良性軟件統(tǒng)計(jì)結(jié)果包含 16個(gè)組合,且其中有8個(gè)組合出現(xiàn)在惡意軟件統(tǒng)計(jì)結(jié)果中;但惡意軟件統(tǒng)計(jì)結(jié)果產(chǎn)生了38個(gè)組合,而只有6個(gè)組合也出現(xiàn)在良性軟件的統(tǒng)計(jì)結(jié)果中.針對(duì)排名次序差異的比較結(jié)果更為明顯,良性軟件結(jié)果中出現(xiàn)頻率最多的是{getLongitude,getLatitude}(47%),其次是{getDeviceId,getLongitude/getLongitude}(39%)和{getDeviceId,(java.net.URL)openConnection}(34%),這也說明了良性軟件使用的都是用戶常用的功能,即地理信息(經(jīng)度/緯度)、地理信息和設(shè)備號(hào)、設(shè)備號(hào)和網(wǎng)絡(luò)輸入信息.我們發(fā)現(xiàn),這些信息在惡意軟件統(tǒng)計(jì)結(jié)果中也會(huì)出現(xiàn),這充分說明了當(dāng)前惡意軟件經(jīng)常需要偽裝成一個(gè)正常的軟件,所以同樣會(huì)使用這些常用的功能組合.然而對(duì)比惡意軟件結(jié)果,{getDeviceId,getSubscriberId}出現(xiàn)的次數(shù)是最多的(43%),而該對(duì)組合在良性結(jié)果中僅占 0.4%(4個(gè)),這反映出良性軟件往往不需要 getDeviceId和getSubscriberId綁定發(fā)生,而惡意軟件則出于盜取更多設(shè)備信息的目的將兩者綁定發(fā)送.表5中的大部分組合都是此類的信息,它們是組合1、組合5、組合6、組合9、組合10、組合12~組合38,一共32組,它們出現(xiàn)在良性軟件中的概率最大僅為2.5%.

        · 其次,我們發(fā)現(xiàn),惡意軟件結(jié)果平均每個(gè)組合中源的個(gè)數(shù)更多,良性軟件結(jié)果中只有組合5和組合10包含3個(gè)源(這里,getLongitude、getLatitude被視為1個(gè)源).而在惡意軟件結(jié)果中,有18個(gè)組合包含3組以上的源,有5個(gè)組合包含4個(gè)以上的源,更特殊地,組合36包含了5個(gè)源,這也充分說明了惡意軟件是需要更多的信息來完成惡意行為的.

        · 最后,針對(duì)某些源,兩個(gè)庫之間的配對(duì)差異也很明顯.例如,在惡意軟件庫中,對(duì)于(ContentResolver)query主要和getDeviceId綁定發(fā)生,(ContentResolver)query出現(xiàn)時(shí),getDeviceId綁定發(fā)生概率為95%.而在良性軟件庫中,(ContentResolver)query經(jīng)常和(database.Cursor)getString(數(shù)據(jù)庫查詢)源綁定出現(xiàn),(database.Cursor)getString出現(xiàn)概率為 99%.這也說明惡意軟件經(jīng)常是發(fā)送用戶賬戶信息結(jié)合設(shè)備信息來完成用戶賬戶信息的盜取,而良性軟件則是正常的數(shù)據(jù)庫功能.

        Table 4 High frequency results in benign App set表4 良性應(yīng)用軟件測(cè)試集合中出現(xiàn)頻率高的結(jié)果

        Table 5 High frequency results in malicious App set表5 惡意軟件測(cè)試集合中出現(xiàn)頻率高的結(jié)果

        5.2 Android應(yīng)用隱私泄露檢測(cè)的精確度提升驗(yàn)證

        本節(jié)所驗(yàn)證精確度的衡量標(biāo)準(zhǔn)是對(duì)良性軟件的檢查結(jié)果中 2-多源對(duì)的個(gè)數(shù),2-多源對(duì)個(gè)數(shù)越少,該工具的精確度就越高.之所以使用良性軟件的結(jié)果,是因?yàn)楣ぞ邎?bào)告的良性軟件中的污點(diǎn)路徑并不是以隱私泄露竊取為目的的,在隱私泄露檢測(cè)上,該工具產(chǎn)生了誤報(bào).當(dāng)分析多源問題結(jié)果時(shí),用戶必須手工驗(yàn)證每個(gè)多源對(duì)結(jié)果是否是真實(shí)的泄露.多源對(duì)的數(shù)目越少,用戶所檢測(cè)的范圍就越小,說明檢測(cè)工具的誤報(bào)就越少.而且當(dāng)前沒有準(zhǔn)確標(biāo)注惡意軟件中污點(diǎn)分析路徑的惡意行為的基準(zhǔn)集合(benchmark),而良性軟件中的路徑是非惡意行為則是一個(gè)確定的事實(shí).我們會(huì)在下一節(jié)介紹風(fēng)險(xiǎn)評(píng)級(jí)方法用以提高人工檢測(cè)惡意軟件中惡意行為路徑效率的方法.

        基于上述標(biāo)準(zhǔn),我們統(tǒng)計(jì)了第5.1節(jié)中能夠產(chǎn)生大于1條污點(diǎn)分析結(jié)果的良性軟件,一共1 336個(gè).分別使用MultiFlow和FlowDroid分析其產(chǎn)生的結(jié)果數(shù)目,對(duì)比圖如圖11所示.對(duì)于不考慮多源(圖11中SOLO列)的情況,即將 FlowDroid中所有的源進(jìn)行統(tǒng)計(jì)(這里,我們假設(shè)同一個(gè)源出現(xiàn)多個(gè)調(diào)用點(diǎn)等同于用出現(xiàn)一次源),此時(shí)FlowDroid得到3 935個(gè)源.此時(shí),MultiFlow會(huì)產(chǎn)生3 472個(gè)2-多源對(duì),其中,一共有2 827個(gè)非重復(fù)的源.對(duì)于多源的情況,由于當(dāng)前 FlowDroid沒有多源分析的功能,我們假設(shè)其產(chǎn)生的結(jié)果中所有源的兩兩組合等同于 2-多源分析的結(jié)果,此時(shí),FlowDroid產(chǎn)生了5 890個(gè)2-多源的對(duì),對(duì)比MultiFlow產(chǎn)生的3 472個(gè)對(duì),可見MultiFlow與FlowDroid相比在多源計(jì)算減少了2 418個(gè)2-多源對(duì),提升了41.1%的精度.

        Fig.11 Result number comparision of MultiFlow and FlowDroid on multi-source analysis圖11 MultiFlow和FlowDroid多源結(jié)果數(shù)量對(duì)比

        5.3 污點(diǎn)分析結(jié)果風(fēng)險(xiǎn)評(píng)級(jí)

        對(duì)污點(diǎn)分析的結(jié)果進(jìn)行風(fēng)險(xiǎn)評(píng)級(jí)具有較大的意義.當(dāng)前的工具[5-8]不能保證 100%檢測(cè)精度的惡意軟件分類,這難免使得檢測(cè)人員需要手工地檢查每一條污點(diǎn)分析結(jié)果.即便上述工具可以精確報(bào)告該軟件具有惡意行為,檢測(cè)人員也可能想知道具體是哪條路徑泄露的信息,或產(chǎn)生什么類型的泄露行為等.如果對(duì)污點(diǎn)分析結(jié)果進(jìn)行評(píng)級(jí),程序員就可以從危害級(jí)別較高的組合到級(jí)別較低的組合分別進(jìn)行檢測(cè),一旦確定高危險(xiǎn)度的路徑是惡意路徑則不必繼續(xù)分析,這使得待分析的范圍縮小而提高了檢測(cè)的效率.由于第 5.1節(jié)的實(shí)驗(yàn)證實(shí)了多源特性在惡意和良性軟件間的差異,本節(jié)嘗試?yán)迷撎匦詫?duì)污點(diǎn)分析結(jié)果進(jìn)行風(fēng)險(xiǎn)評(píng)級(jí).

        本文的風(fēng)險(xiǎn)評(píng)級(jí)規(guī)則建立在3個(gè)啟發(fā)式規(guī)則上.

        啟發(fā)式規(guī)則 1.如果一個(gè)污點(diǎn)源不與其他任何的源綁定發(fā)生,我們則認(rèn)為該源的污點(diǎn)分析路徑幾乎沒有惡意行為.我們相信,惡意軟件在盜取了用戶的敏感數(shù)據(jù)之后是需要進(jìn)行惡意行為的,然而單獨(dú)地盜取一種敏感數(shù)據(jù)往往是沒有意義的,例如只盜取用戶的密碼信息而不知道用戶名等.而對(duì)于良性軟件來講,它們往往針對(duì)一類固定的信息進(jìn)行正常使用,例如手機(jī)設(shè)備號(hào)驗(yàn)證或者單一的物理地址使用等.

        啟發(fā)式規(guī)則 2.在大量的良性軟件分析中,如果某些源的組合經(jīng)常綁定發(fā)生,那么很可能這些組合是良性的.例如,地理信息中,經(jīng)度信息往往和緯度信息綁定發(fā)生,如果只有經(jīng)度和緯度的綁定發(fā)生,則認(rèn)為其只是獲取地理信息這一單一的行為.

        啟發(fā)式規(guī)則 3.在大量的數(shù)據(jù)分析中,如果某些多源組合經(jīng)常出現(xiàn)在惡意軟件中,卻很少出現(xiàn)在良性軟件中,那么這些多源組合的綁定發(fā)生是具有惡意性的.在表5中,一些組合正好滿足這樣的特性.例如組合 18和組合22,它們出現(xiàn)在惡意結(jié)果中的頻率分別為15%和14%,然而在良性軟件統(tǒng)計(jì)結(jié)果中出現(xiàn)次數(shù)為0.這也說明了在上一節(jié)的庫中,只要包含組合18和組合22的都是惡意軟件,而產(chǎn)生泄露的信息正是組合18和組合22.

        基于此,我們將污點(diǎn)分析的組合分成4類級(jí)別,由高到低依次是級(jí)別IV、級(jí)別III、級(jí)別II、級(jí)別I.其中,級(jí)別IV是最嚴(yán)重的危險(xiǎn)級(jí)別,其組合是根據(jù)規(guī)則3產(chǎn)生的,在本應(yīng)用中,我們使用表5中的組合1、組合5、組合6、組合9、組合10、組合12~組合38作為級(jí)別IV的組合,這些組合出現(xiàn)在惡意結(jié)果中的頻率高于10%,但是出現(xiàn)在良性結(jié)果中的頻率低于2.5%.級(jí)別II的組合是由規(guī)則2產(chǎn)生的,在本應(yīng)用中我們認(rèn)為,如果一個(gè)應(yīng)用程序產(chǎn)生的多源組合集合中只出現(xiàn)在表4,那么這些組合的危險(xiǎn)度一般不高.級(jí)別I的組合是由規(guī)則1產(chǎn)生的,如果一個(gè)污點(diǎn)源不與其他任何的源綁定發(fā)生,則是級(jí)別I.最后,如果組合不是上述3種級(jí)別,則認(rèn)為它是級(jí)別III.

        進(jìn)一步地,我們將上述的評(píng)級(jí)規(guī)則對(duì)實(shí)際手機(jī)軟件進(jìn)行應(yīng)用,驗(yàn)證該規(guī)則是否可以有效地區(qū)分出不同類別的軟件及其污點(diǎn)分析結(jié)果.我們直接將軟件中包含的評(píng)級(jí)規(guī)則最高的級(jí)別作為其標(biāo)簽,利用其標(biāo)簽將所有驗(yàn)證集合的軟件進(jìn)行分類.我們的驗(yàn)證集合是第5.1節(jié)中所有能夠產(chǎn)生1條以上污點(diǎn)結(jié)果的軟件,其中包含1 336個(gè)良性軟件和1 275個(gè)惡意軟件.如果使用表5中的組合1、組合5、組合6、組合9、組合10、組合12~組合38對(duì)集合中軟件進(jìn)行檢測(cè),可以直接檢測(cè)出685個(gè)具有級(jí)別IV組合的軟件.使用規(guī)則2可以檢測(cè)出953個(gè)包含級(jí)別II及其以下級(jí)別組合的軟件.使用規(guī)則1可以檢測(cè)出621個(gè)只包含級(jí)別I污點(diǎn)分析結(jié)果的軟件,剩下的352個(gè)軟件是包含級(jí)別 III及其以下級(jí)別組合的軟件.圖12為該結(jié)果的分布圖,可見,包含級(jí)別 IV組合的軟件占有26%,這也說明了我們的方法可以直接給出占較大規(guī)模的惡意結(jié)果(占實(shí)際惡意軟件的66%),檢測(cè)人員可以直接識(shí)別出26%個(gè)惡意軟件中的具體泄露路徑而不必分析其他路徑.而級(jí)別II和級(jí)別I的結(jié)果分別占37%和24%,由此可見,該方法可以直接篩選出超過大半的良性的軟件,一般情況下,此類軟件的檢測(cè)優(yōu)先級(jí)較低.而對(duì)于包含級(jí)別III及其以下危險(xiǎn)的軟件只包含13%,且檢測(cè)人員可以優(yōu)先檢查具有級(jí)別II的污點(diǎn)路徑.上述的應(yīng)用數(shù)據(jù)也直接說明了使用該評(píng)級(jí)標(biāo)準(zhǔn)可以區(qū)分出不同級(jí)別的軟件,間接地幫助檢測(cè)人員提高檢測(cè)效率和精度.

        Fig.12 Distribution of App’s taint result risk ranking圖12 污點(diǎn)結(jié)果評(píng)級(jí)分布

        6 相關(guān)工作對(duì)比

        污點(diǎn)分析技術(shù)是一類重要的程序分析技術(shù),如今,大量的研究工作應(yīng)用其解決計(jì)算機(jī)系統(tǒng)信息的保密性和完整性問題.Mino[23]在硬件級(jí)別上擴(kuò)展了寄存器的標(biāo)志位來實(shí)現(xiàn)污點(diǎn)分析,以進(jìn)行一些基礎(chǔ)漏洞挖掘,如緩沖區(qū)溢出.Privacy Scope[24]、Dytan[25]利用插樁工具 Pin[26]實(shí)現(xiàn)了針對(duì) x86程序的動(dòng)態(tài)污點(diǎn)分析.TAJ[27]工具利用混合切片的污點(diǎn)分析提供Java Web安全漏洞的檢測(cè).在面向Android安全的應(yīng)用中,TaintDroid[28]是當(dāng)前最流行的動(dòng)態(tài)檢測(cè)隱私泄露的工具,它使用多層次的插樁來完成污點(diǎn)傳播.然而,TaintDroid必須在運(yùn)行時(shí)對(duì)APK文件進(jìn)行檢測(cè),這依賴于APK輸入測(cè)試集合來觸發(fā)敏感數(shù)據(jù)流,且TaintDroid會(huì)對(duì)Android系統(tǒng)本身帶來一定的開銷,每次Android版本更新之后,TaintDroid都需要重新進(jìn)行定制.CHEX[29]嘗試使用靜態(tài)的污點(diǎn)分析方法檢測(cè)智能手機(jī)組件劫持漏洞.FlowDroid[12]則提供了更精確的靜態(tài)污點(diǎn)傳播.DroidSafe[30]結(jié)合 Android Open Source Porject(AOSP)實(shí)現(xiàn)了與原 Android接口語義等價(jià)的分析模型,并使用精確分析存根(accurate analysis stub)將AOSP代碼之外的函數(shù)加入到模型,在此基礎(chǔ)上進(jìn)行污點(diǎn)分析.IccTA[31]利用靜態(tài)程序插樁和IC3工具[32]提供了敏感信息通過組件間進(jìn)行泄露的檢測(cè)方法.正如前文所述,上述工具雖然提供了基礎(chǔ)污點(diǎn)分析方法,但是沒有關(guān)注分析結(jié)果之間的相關(guān)性,也沒有解決結(jié)果之間多源綁定發(fā)生的技術(shù).

        此外,利用污點(diǎn)分析對(duì)Android應(yīng)用市場中惡意軟件分類的相關(guān)工作也與本文類似.MudFlow[5]利用數(shù)據(jù)挖掘的方法直接使用FlowDroid的輸出結(jié)果進(jìn)行惡意軟件分類,該工具針對(duì)2 866個(gè)良性軟件的污點(diǎn)結(jié)果進(jìn)行統(tǒng)計(jì)訓(xùn)練,其核心思想是,通過對(duì)良性軟件產(chǎn)生的污點(diǎn)結(jié)果與當(dāng)前待檢測(cè)的 Apk文件的差異來判斷其惡意性.Apposcopy[6]嘗試?yán)梦埸c(diǎn)分析結(jié)合組件的語義信息提供應(yīng)用簽名,之后,嘗試?yán)煤灻ヅ鋪頇z測(cè)惡意行為.Dark Hazard[7]使用特殊的分支條件下的污點(diǎn)分析觸發(fā)路徑作為機(jī)器學(xué)習(xí)的特征,從而檢測(cè)惡意的隱藏敏感操作.雖然上述工具都是以提高檢測(cè)精度為出發(fā)點(diǎn),但是我們發(fā)現(xiàn),這些方法都是直接使用污點(diǎn)分析的結(jié)果,并不會(huì)提高污點(diǎn)分析本身的功能.我們?nèi)绻僭O(shè)污點(diǎn)分析是一個(gè)黑盒,那么這些方法使用黑盒產(chǎn)生結(jié)果,然后在外部進(jìn)行分析;而我們的方法是在黑盒內(nèi)部提供更細(xì)粒度的分析.所以我們相信,多源污點(diǎn)分析是可以直接應(yīng)用到上述方法中完成更進(jìn)一步精度提升的.我們將在后續(xù)的工作中,將多源技術(shù)結(jié)合機(jī)器學(xué)習(xí)技術(shù)及更多語義信息來探索高精度的惡意軟件分類方法.

        7 總結(jié)與未來的工作

        本文以當(dāng)前污點(diǎn)分析檢測(cè)Android應(yīng)用隱私泄露的誤報(bào)率高為出發(fā)點(diǎn),針對(duì)惡意軟件和良性軟件之間的多源綁定發(fā)生特性差異來提高檢測(cè)精度.我們提出了一種多源綁定發(fā)生的靜態(tài)污點(diǎn)分析技術(shù):在精度上,該技術(shù)具有上下文敏感、流敏感、域敏感等特性,并且可以有效地區(qū)分出分支互斥路徑的情況;在效率上,提出一種按需的高效實(shí)現(xiàn)方法,降低了多次的多源問題計(jì)算的開銷.我們的實(shí)驗(yàn)數(shù)據(jù)表明:即使在一次污點(diǎn)分析結(jié)果上進(jìn)行多次多源問題分析,我們的執(zhí)行時(shí)間也在可以接受的范圍之內(nèi)(初始階段開銷為 19.7%,進(jìn)一步的多源分析時(shí)間平均為 0.3s).隨后驗(yàn)證了多源綁定發(fā)生技術(shù)在隱私泄露檢測(cè)問題中的應(yīng)用,發(fā)現(xiàn)當(dāng)前良性軟件和惡性軟件的多源綁定發(fā)生特性確實(shí)具有較大的差異.隨后,我們驗(yàn)證了多源技術(shù)與簡單方法相比的精度提升(減少多源對(duì)41.1%).最后提出了一種智能手機(jī)隱私泄露結(jié)果風(fēng)險(xiǎn)評(píng)級(jí)標(biāo)準(zhǔn),應(yīng)用此評(píng)級(jí)結(jié)果,可以進(jìn)一步改善用戶的檢測(cè)的效率.

        在未來的工作中,我們將把該技術(shù)與其他應(yīng)用技術(shù)相結(jié)合,以提供更高的惡意軟件檢測(cè)精度.

        · 首先,該技術(shù)可以結(jié)合更多語義信息,基于語義信息的惡意軟件檢測(cè)方法可以避免代碼混淆技術(shù)帶來的威脅,而多源綁定發(fā)生技術(shù)為更多語義信息支持提供可能性,一些有效的語義信息包括Android生命周期、特殊的回調(diào)函數(shù)、關(guān)鍵的API使用、GUI信息特征、特殊的分支觸發(fā)條件等.例如,我們可以提取污點(diǎn)分析路徑中的關(guān)鍵API作為語義信息基礎(chǔ),探索多個(gè)綁定發(fā)生源之間的API調(diào)用序列之間的關(guān)系.又如,我們可以探索在一個(gè)特殊的Button觸發(fā)下,有哪些多源被綁定發(fā)生.如果這些源綁定發(fā)生行為與Button本身語義違反,則可以報(bào)告相關(guān)問題.

        · 其次,我們將探索更有效的統(tǒng)計(jì)分析方法.目前,利用該方法在檢測(cè) Android安全問題上有很大的應(yīng)用空間.例如,MudFlow嘗試將待分析程序與良性軟件間的差異作為特征,進(jìn)一步利用 SVM 分類器進(jìn)行檢測(cè).DroidADDMiner[8]利用了FlowDroid提取API數(shù)據(jù)之間的依賴關(guān)系作為特征向量進(jìn)行惡意軟件檢測(cè).多源方法在上述方法中的應(yīng)用需要更有效的統(tǒng)計(jì)方法支持.另外一個(gè)值得研究方向是探索應(yīng)用市場中不同的目錄類別下的應(yīng)用程序中多源問題的使用情況,因?yàn)橄嗤悇e下的 APK往往會(huì)有類似的使用結(jié)果,探索相關(guān)的多源特性違反情況可以提供保證軟件質(zhì)量和軟件安全的特征.

        此外,多源綁定的污點(diǎn)分析技術(shù)還可以用來對(duì)別名分析進(jìn)行優(yōu)化.非別名的污點(diǎn)傳播是跟隨程序的執(zhí)行而傳播的,然而對(duì)于別名的傳播往往不能通過直接的計(jì)算可以得到.例如,FlowDroid嘗試在遇到堆變量賦值計(jì)算別名時(shí)啟動(dòng)一個(gè)后向的別名分析求解器.此時(shí),如果后向的別名傳播和正向的變量在分支互斥的路徑下,則會(huì)產(chǎn)生誤報(bào).例如,如圖13所示,a和b別名的前提是IF語句執(zhí)行了第5行的分支,而實(shí)際的污點(diǎn)傳播則是通過第7行進(jìn)行的.此時(shí),我們可以利用多源綁定的技術(shù)對(duì)該問題進(jìn)行精度提升(設(shè)置a為另一個(gè)污點(diǎn)源,判斷a是否與source綁定發(fā)生).我們堅(jiān)信多源技術(shù)是一類重要基礎(chǔ)性的技術(shù),未來將被更多程序分析領(lǐng)域應(yīng)用.

        Fig.13 An example of alias analysis optimization圖13 別名分析優(yōu)化示例

        猜你喜歡
        分析檢測(cè)
        “不等式”檢測(cè)題
        “一元一次不等式”檢測(cè)題
        “一元一次不等式組”檢測(cè)題
        隱蔽失效適航要求符合性驗(yàn)證分析
        “幾何圖形”檢測(cè)題
        “角”檢測(cè)題
        電力系統(tǒng)不平衡分析
        電子制作(2018年18期)2018-11-14 01:48:24
        電力系統(tǒng)及其自動(dòng)化發(fā)展趨勢(shì)分析
        小波變換在PCB缺陷檢測(cè)中的應(yīng)用
        中西醫(yī)結(jié)合治療抑郁癥100例分析
        亚洲欧美日韩国产综合一区二区| 国产亚洲午夜精品久久久| 日本边添边摸边做边爱| 天天夜碰日日摸日日澡| 国产成人啪精品| 亚洲视频不卡免费在线| 亚洲高清国产一区二区| 国产午夜精品一区二区| av在线色| 国产一区二区av男人| 二区三区三区视频在线观看| 爽爽精品dvd蜜桃成熟时电影院 | 亚洲精品乱码久久久久久蜜桃图片 | 亚洲熟妇自偷自拍另欧美| 国产麻无矿码直接观看| 亚洲无码激情视频在线观看| 精品嫩模福利一区二区蜜臀| 国模吧无码一区二区三区| a一区二区三区乱码在线 | 欧洲| 中文字幕精品亚洲二区| 蜜臀av一区二区三区久久| 亚洲欧美日韩国产精品一区二区 | 国产自拍在线视频观看| 少妇性l交大片7724com| 国产精品成年片在线观看| 国产精品国产午夜免费福利看| 亚洲精品在线一区二区| 婷婷丁香五月激情综合| 四虎影视一区二区精品| 网红极品女神精品视频在线| 蜜臀av毛片一区二区三区| 老妇女性较大毛片| 亚洲VA欧美VA国产VA综合| 91国内偷拍精品对白| 一本色道久久爱88av| 国内揄拍国内精品| 亚洲中文字幕第二十三页| 中文字幕亚洲精品一区二区三区| 色播久久人人爽人人爽人人片av| 国产精品色内内在线播放| 日本九州不卡久久精品一区|