国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

DeepRD:基于Siamese LSTM網(wǎng)絡(luò)的Android重打包應(yīng)用檢測(cè)方法?

2018-09-12 02:20:44汪潤唐奔宵王麗娜
通信學(xué)報(bào) 2018年8期
關(guān)鍵詞:程序代碼漏報(bào)相似性

汪潤,唐奔宵,王麗娜

?

DeepRD:基于Siamese LSTM網(wǎng)絡(luò)的Android重打包應(yīng)用檢測(cè)方法?

汪潤1,2,唐奔宵1,2,王麗娜1,2

(1. 空天信息安全與可信計(jì)算教育部重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430072;2. 武漢大學(xué)國家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072)

目前,Android平臺(tái)重打包應(yīng)用檢測(cè)方法依賴于專家定義特征,不但耗時(shí)耗力,而且其特征容易被攻擊者猜測(cè)。另外,現(xiàn)有的應(yīng)用特征表示難以在常見的重打包應(yīng)用類型檢測(cè)中取得良好的效果,導(dǎo)致在實(shí)際檢測(cè)中存在漏報(bào)率較高的現(xiàn)象。針對(duì)以上2個(gè)問題,提出了一種基于深度學(xué)習(xí)的重打包應(yīng)用檢測(cè)方法,自動(dòng)地學(xué)習(xí)程序的語義特征表示。首先,對(duì)應(yīng)用程序進(jìn)行控制流與數(shù)據(jù)流分析形成序列特征表示;然后,根據(jù)詞向量嵌入模型將序列特征轉(zhuǎn)變?yōu)樘卣飨蛄勘硎荆斎雽\生網(wǎng)絡(luò)長(zhǎng)短期記憶(LSTM, long short term memory)網(wǎng)絡(luò)中進(jìn)行程序特征自學(xué)習(xí);最后,將學(xué)習(xí)到的程序特征通過相似性度量實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。在公開數(shù)據(jù)集AndroZoo上測(cè)試發(fā)現(xiàn),重打包應(yīng)用檢測(cè)的精準(zhǔn)率達(dá)到95.7%,漏報(bào)率低于6.2%。

重打包;深度學(xué)習(xí);孿生網(wǎng)絡(luò);長(zhǎng)短期記憶;安全與隱私

1 引言

Android和iOS作為移動(dòng)應(yīng)用市場(chǎng)的兩大主流平臺(tái),截至2017年底,它們的官方應(yīng)用商店Google Play和Apple Store上的移動(dòng)應(yīng)用數(shù)量已經(jīng)超過了300多萬。近年來,移動(dòng)平臺(tái)特別是Android平臺(tái)已經(jīng)逐漸成為惡意軟件泛濫的重災(zāi)區(qū),給用戶的安全和隱私帶來了嚴(yán)重的威脅。

報(bào)告顯示,超過98%的移動(dòng)惡意軟件來自Android平臺(tái),在這些惡意軟件中,重打包應(yīng)用超過了86%[1]。Android重打包應(yīng)用示例如圖1所示。重打包應(yīng)用是指惡意開發(fā)者在保持正常合法應(yīng)用功能不變的前提下,通過添加、修改應(yīng)用程序代碼或資源文件生成的非法應(yīng)用。這類應(yīng)用通過各種渠道讓用戶下載安裝使用,達(dá)到竊取用戶隱私、攻擊用戶設(shè)備等目的。獲取非法收益和傳播惡意軟件是開發(fā)者制造重打包應(yīng)用的兩大動(dòng)機(jī)。

圖1 Android重打包應(yīng)用示例

研究分析發(fā)現(xiàn),Android平臺(tái)上重打包應(yīng)用傳播廣泛的主要原因如下:①Android應(yīng)用容易被反編譯修改,應(yīng)用程序代碼的混淆程度低,反編譯后可讀性強(qiáng);②Android平臺(tái)開放程度高,第三方應(yīng)用市場(chǎng)沒有嚴(yán)格的審查機(jī)制,導(dǎo)致用戶可以隨意地安裝非官方應(yīng)用商店的應(yīng)用;③Android市場(chǎng)份額高,傳播惡意軟件可以獲取大量的非法收益。

為了構(gòu)建健康的移動(dòng)應(yīng)用市場(chǎng),國內(nèi)外研究人員針對(duì)Android平臺(tái)的重打包應(yīng)用展開了一系列的相關(guān)研究[2-9]。具體來說,分為以下2類:第一類是基于應(yīng)用相似性比較的方法;第二類是基于重打包應(yīng)用行為檢測(cè)的方法[10-14]。其中,第一類方法又可以分為基于代碼克隆的檢測(cè)和基于應(yīng)用資源文件的檢測(cè)這2種方法,分別使用程序代碼特征如控制流圖(CFG, control flow graph)、程序依賴圖(PDG, program dependency graph)以及應(yīng)用資源文件作為應(yīng)用的特征表示。通過度量應(yīng)用特征表示之間的相似性實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。有研究發(fā)現(xiàn),部分重打包應(yīng)用中惡意的代碼片段與正常的代碼片段邏輯上獨(dú)立,但與正常的功能代碼片段交互性差。基于上述發(fā)現(xiàn),研究人員提出了第二類基于重打包應(yīng)用行為的檢測(cè)方法,提取可以表示正常代碼片段與惡意代碼片段行為差異的特征,然后訓(xùn)練一個(gè)機(jī)器學(xué)習(xí)的分類模型實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。

目前,重打包應(yīng)用檢測(cè)方法共同存在的不足在于,這些方法都強(qiáng)烈地依賴專家的特征定義。第一類基于應(yīng)用相似性比較的檢測(cè)方法,需要分析應(yīng)用的程序代碼或資源文件來定義應(yīng)用的特征表示;第二類基于重打包應(yīng)用行為的檢測(cè)方法,也需要定義程序代碼的特征表示。然而,針對(duì)這類依賴專家特征定義的檢測(cè)方法,攻擊者可以通過試探的方法猜測(cè)特征表示,精心地構(gòu)造惡意應(yīng)用來繞過檢測(cè)[15-17]。此外,不同類型的重打包應(yīng)用,能夠?qū)崿F(xiàn)最佳檢測(cè)效果的應(yīng)用特征表示也不同。例如,針對(duì)漢化等重打包應(yīng)用,適用于基于應(yīng)用資源文件特征表示的檢測(cè)方法;針對(duì)Piggy-packing應(yīng)用[18]的檢測(cè),則適用于基于重打包應(yīng)用行為的檢測(cè)方法,分析Piggy-packing應(yīng)用中注入的惡意組件和正常功能代碼在功能上的差異,利用代碼功能的差異抽取重打包應(yīng)用檢測(cè)的特征表示。綜上,現(xiàn)有的依賴專家定義特征的檢測(cè)方法,難以定義一種通用的應(yīng)用特征表示可以適用于所有的重打包應(yīng)用類型檢測(cè),這導(dǎo)致在實(shí)際檢測(cè)中存在漏報(bào)率高的問題。

針對(duì)現(xiàn)有的重打包應(yīng)用檢測(cè)方法依賴于專家定義特征存在耗時(shí)耗力,且容易被攻擊者猜測(cè)出檢測(cè)的特征表示,通過精心構(gòu)造惡意應(yīng)用繞過檢測(cè)的問題以及現(xiàn)有方法在實(shí)際檢測(cè)中漏報(bào)率高的現(xiàn)象,本文提出一種基于深度學(xué)習(xí)的Android重打包應(yīng)用檢測(cè)方法,借助于深度學(xué)習(xí)強(qiáng)大的特征學(xué)習(xí)能力[19],自動(dòng)地學(xué)習(xí)應(yīng)用的程序代碼特征,通過程序代碼的相似性度量實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。深度學(xué)習(xí)在圖像識(shí)別[20]、語音識(shí)別[21]以及自然語言處理[22]等領(lǐng)域已經(jīng)取得了突破性進(jìn)展。相關(guān)學(xué)者利用深度學(xué)習(xí)研究安全領(lǐng)域中的一些重要問題并取得了非常顯著的效果[23-32],例如,漏洞檢測(cè)[23]、缺陷預(yù)測(cè)[25]、二進(jìn)制分析[27-28]以及惡意軟件檢測(cè)[24,30-32]等。受這類工作的啟發(fā),本文利用深度學(xué)習(xí)解決目前Android重打包應(yīng)用檢測(cè)中面臨的依賴于專家定義特征表示和漏報(bào)率高這2個(gè)問題。然而,目前應(yīng)用深度學(xué)習(xí)解決圖像識(shí)別、語音識(shí)別等方法并不能直接應(yīng)用于重打包應(yīng)用的檢測(cè)。在應(yīng)用深度學(xué)習(xí)檢測(cè)重打包應(yīng)用時(shí),需要解決以下3個(gè)基本問題。

1) 應(yīng)用分析與檢測(cè)的基本單元。在正常的合法應(yīng)用基礎(chǔ)上添加完整組件以及部分代碼重用是構(gòu)造重打包應(yīng)用的2種主要方式。在Android重打包應(yīng)用檢測(cè)時(shí),不僅需要判斷一對(duì)應(yīng)用是否為重打包應(yīng)用,還需要識(shí)別出被重用的代碼片段。

2) 應(yīng)用的向量表示。在深度學(xué)習(xí)模型的訓(xùn)練及預(yù)測(cè)階段,模型的輸入都是向量。因此,需要將應(yīng)用表示成向量的形式。本文利用深度學(xué)習(xí)檢測(cè)Android平臺(tái)的重打包應(yīng)用,不能將應(yīng)用表示成任意的向量形式,在應(yīng)用向量表示時(shí)需要保留與應(yīng)用相似性度量有關(guān)的程序語義信息。

3) 深度學(xué)習(xí)模型的選擇。深度學(xué)習(xí)在其他領(lǐng)域取得了顯著的效果,但是不同的深度學(xué)習(xí)模型擅長(zhǎng)解決的問題不盡相同。本文中,通過程序代碼的相似性度量實(shí)現(xiàn)重打包應(yīng)用的檢測(cè),這類問題類似于自然語言處理中的文本相似性檢測(cè)。因此,選擇的深度學(xué)習(xí)模型應(yīng)擅長(zhǎng)序列特征數(shù)據(jù)的表示。

針對(duì)應(yīng)用深度學(xué)習(xí)檢測(cè)Android平臺(tái)重打包應(yīng)用中面臨的3個(gè)基本問題,本文提出將應(yīng)用函數(shù)作為分析與檢測(cè)的基本單元,應(yīng)用函數(shù)被表示成序列特征形式并進(jìn)行向量化處理,然后輸入具有LSTM的Siamese網(wǎng)絡(luò)中學(xué)習(xí)程序代碼的語義特征,最后通過應(yīng)用程序代碼的相似性度量判斷是否為重打包應(yīng)用。本文中應(yīng)用函數(shù)的序列特征及特征向量表示方法如下:首先,獲取應(yīng)用函數(shù)中API的調(diào)用序列以及與API存在數(shù)據(jù)依賴關(guān)系的上下文信息形成應(yīng)用函數(shù)的序列特征;然后,將應(yīng)用函數(shù)的序列特征表示成抽象字符串形式;最后,使用詞向量嵌入模型將抽象字符串表示成向量形式輸入深度學(xué)習(xí)模型Siamese LSTM網(wǎng)絡(luò)中訓(xùn)練。本文的主要貢獻(xiàn)如下。

1) 提出基于深度學(xué)習(xí)的Android重打包應(yīng)用檢測(cè)方法,并基于該方法設(shè)計(jì)并實(shí)現(xiàn)一套原型系統(tǒng)DeepRD。利用Siamese LSTM網(wǎng)絡(luò)學(xué)習(xí)程序的語義特征表示,實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。

2) 提出一種基于詞向量嵌入的應(yīng)用函數(shù)向量化表示方法。利用應(yīng)用函數(shù)的API調(diào)用序列及與API存在數(shù)據(jù)依賴的上下文信息來保留程序語義信息,使用詞向量嵌入模型生成應(yīng)用的向量表示。

3) 在程序代碼的相似性度量中,本文使用2個(gè)LSTM網(wǎng)絡(luò)自動(dòng)地學(xué)習(xí)程序代碼的序列特征表示,利用Siamese網(wǎng)絡(luò)度量程序代碼的相似性。

4) 在公開數(shù)據(jù)集AndroZoo[33]上驗(yàn)證本文方法的有效性,實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),本文方法可以達(dá)到檢測(cè)精準(zhǔn)率為95.7%,漏報(bào)率低于6.2%。

2 相關(guān)工作

2.1 基于特征的重打包應(yīng)用檢測(cè)

目前,重打包應(yīng)用檢測(cè)方法強(qiáng)烈地依賴于專家定義應(yīng)用的特征表示,主要分為以下2類方法:基于應(yīng)用相似性比較的檢測(cè)方法和基于重打包應(yīng)用行為的檢測(cè)方法。

基于應(yīng)用相似性比較的檢測(cè)方法又可以分為基于代碼克隆的檢測(cè)方法[1,34-39]和基于應(yīng)用資源文件的相似性檢測(cè)方法[40-43]。這2種方法分別將程序代碼的特征和應(yīng)用資源文件的特征作為應(yīng)用的特征表示,然后通過度量特征之間的相似性來判斷是否為重打包應(yīng)用。DNADroid[34]和Andarwin[35]定義程序依賴圖作為應(yīng)用的特征表示,程序依賴圖的頂點(diǎn)之間通過數(shù)據(jù)依賴建立關(guān)聯(lián),挖掘應(yīng)用之間的同構(gòu)子圖來判定是否為重打包應(yīng)用。ViewDroid[40]定義應(yīng)用的用戶界面(UI, user interface)作為應(yīng)用的特征表示,使用有向圖表示應(yīng)用的用戶界面,圖的頂點(diǎn)表示應(yīng)用的視圖,邊表示視圖之間可以通過事件調(diào)用進(jìn)行切換。

基于重打包應(yīng)用行為的檢測(cè)方法通過分析應(yīng)用中正常的功能代碼片段與惡意插入的代碼片段在功能上的差異,定義代碼特征表示,然后訓(xùn)練分類模型完成檢測(cè)。文獻(xiàn)[13]發(fā)現(xiàn)重打包應(yīng)用中加載的惡意組件不是應(yīng)用的核心代碼,使用基于PDG的模塊解耦技術(shù)將應(yīng)用程序代碼分為核心模塊和非核心代碼,設(shè)計(jì)了一種特征指紋技術(shù)抽取核心模塊的語義特征,實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。

以上基于特征的重打包應(yīng)用檢測(cè)方法強(qiáng)烈地依賴于專家定義各種巧妙的特征,研究發(fā)現(xiàn),攻擊者可以猜測(cè)檢測(cè)系統(tǒng)所使用的特征,然后通過精心地構(gòu)造應(yīng)用繞過檢測(cè)[15-17]。此外,現(xiàn)有的應(yīng)用特征表示方法無法應(yīng)用于所有的重打包應(yīng)用類型的檢測(cè)中,導(dǎo)致在真實(shí)的檢測(cè)中產(chǎn)生報(bào)率高的問題。本文方法能夠有效地克服現(xiàn)有方法存在的以上不足,不但可以保證較高的檢測(cè)精準(zhǔn)率,而且漏報(bào)率遠(yuǎn)低于現(xiàn)有的檢測(cè)方法。

2.2 深度學(xué)習(xí)在網(wǎng)絡(luò)安全中的應(yīng)用

近年來,有學(xué)者利用深度學(xué)習(xí)研究網(wǎng)絡(luò)安全中一些重要的問題,例如,漏洞檢測(cè)、缺陷預(yù)測(cè)、二進(jìn)制程序分析、惡意軟件檢測(cè)等,特別是在惡意軟件檢測(cè)方面取得了一系列重要的研究成果。Droid-Sec利用靜態(tài)分析和動(dòng)態(tài)分析技術(shù)提取了200多個(gè)移動(dòng)應(yīng)用特征,通過訓(xùn)練一個(gè)深信念網(wǎng)絡(luò)(DBN, deep belief network)檢測(cè)Android惡意應(yīng)用[24]。DeepSign提出一種基于DBN的惡意軟件特征自動(dòng)生成及分類檢測(cè)方法,捕獲程序在沙箱中運(yùn)行的行為數(shù)據(jù)作為DBN的輸入,來識(shí)別未知的惡意軟件[31]。Deep4MalDroid通過動(dòng)態(tài)地運(yùn)行Android應(yīng)用,獲取應(yīng)用在執(zhí)行過程中的動(dòng)態(tài)行為特征(Linux內(nèi)核層的系統(tǒng)調(diào)用),然后將Linux內(nèi)核層的系統(tǒng)調(diào)用表示成帶有權(quán)重的有向圖輸入棧式自動(dòng)編碼器(SAE,stacked auto encoder)中,自動(dòng)地學(xué)習(xí)Android惡意應(yīng)用的特征來檢測(cè)未知的惡意應(yīng)用[32]。

以上這些方法均面向通用的惡意軟件檢測(cè),并將獲取應(yīng)用的惡意行為特征作為深度學(xué)習(xí)模型的輸入。這些方法并不適用于本文的重打包應(yīng)用檢測(cè),主要體現(xiàn)在以下2點(diǎn):①這些方法均將惡意軟件的檢測(cè)看作一個(gè)分類問題,而本文研究的是應(yīng)用的相似性判定問題;②重打包應(yīng)用的行為與正常合法應(yīng)用的行為相似,因此上述基于惡意行為的建模方法并不適用于重打包應(yīng)用的檢測(cè)。

本文受到以上工作的啟發(fā),應(yīng)用深度學(xué)習(xí)解決Android平臺(tái)的重打包應(yīng)用檢測(cè)問題,豐富了深度學(xué)習(xí)在安全領(lǐng)域中的應(yīng)用。

圖2 重打包應(yīng)用檢測(cè)方法示意

3 相關(guān)背景知識(shí)

3.1 Android重打包應(yīng)用

重打包應(yīng)用檢測(cè)的2類典型方法如圖2所示。一類方法是基于應(yīng)用相似性的比較,通過定義應(yīng)用特征的相似性計(jì)算函數(shù),設(shè)置閾值來判定是否為重打包應(yīng)用;另一類方法是抽取重打包應(yīng)用的行為特征,然后使用大量的重打包應(yīng)用和原應(yīng)用的標(biāo)記樣本訓(xùn)練分類模型,最后利用訓(xùn)練好的分類模型預(yù)測(cè)一對(duì)應(yīng)用是否為重打包應(yīng)用。本文方法屬于第一類,通過度量應(yīng)用的相似性來判定是否為一對(duì)重打包應(yīng)用,但是本文中用于應(yīng)用相似性度量的特征是通過自動(dòng)學(xué)習(xí)得到的。

3.2 循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN, recurrent neural network)是一種擅長(zhǎng)處理序列數(shù)據(jù)的人工神經(jīng)網(wǎng)絡(luò)。近年來,RNN也被應(yīng)用于程序分析的相關(guān)領(lǐng)域[27-28]。RNN與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的不同在于,隱藏層的節(jié)點(diǎn)之間有連接,隱藏層的輸入包括輸入層的輸出和上一時(shí)刻隱藏層的輸出。隱藏層第步狀態(tài)h的計(jì)算式為

其中,x為第步的輸入,為非線性激活函數(shù),如tanch或ReLU等,、為訓(xùn)練中共享的權(quán)重。由于RNN模型在訓(xùn)練過程中依賴前面步驟的數(shù)據(jù),因此,RNN會(huì)隨著序列長(zhǎng)度的增加存在梯度消失或梯度爆炸等問題。因此,有學(xué)者提出LSTM和GRU(gated recurrent unit)模型。相比于GRU模型,LSTM模型更適用于序列數(shù)據(jù)的建模。LSTM的長(zhǎng)時(shí)間記憶網(wǎng)絡(luò)特性,使其能夠有效地應(yīng)用于程序分析等相關(guān)領(lǐng)域,本文使用LSTM學(xué)習(xí)應(yīng)用程序的序列特征表示。

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

本文旨在研究一種不依賴于專家特征定義的重打包應(yīng)用檢測(cè)方法,降低現(xiàn)有方法在實(shí)際檢測(cè)中存在的高漏報(bào)率現(xiàn)象。本節(jié)具體描述文中方法DeepRD的總體設(shè)計(jì),首先討論在DeepRD設(shè)計(jì)與實(shí)現(xiàn)時(shí)面臨的3個(gè)基本問題。

1) 應(yīng)用分析與檢測(cè)的基本單元

針對(duì)本文重打包應(yīng)用檢測(cè)的兩大目標(biāo):判斷一對(duì)應(yīng)用是否為重打包應(yīng)用;識(shí)別被重用的代碼片段,將應(yīng)用整體作為分析與檢測(cè)的單元存在無法識(shí)別出被重用的代碼片段的問題。研究發(fā)現(xiàn),超過86.2%的重打包應(yīng)用是通過修改應(yīng)用函數(shù)的程序代碼生成的。實(shí)驗(yàn)驗(yàn)證發(fā)現(xiàn),將應(yīng)用整體作為基本分析與檢測(cè)的單元,會(huì)存在漏報(bào)率高以及檢測(cè)精準(zhǔn)率低等問題。因此,本文使用應(yīng)用函數(shù)作為分析與檢測(cè)的基本單元可以滿足文中細(xì)粒度分析的需要。

2) 應(yīng)用的向量表示

本文將應(yīng)用函數(shù)表示成序列特征的形式,使用詞向量嵌入模型將序列特征進(jìn)行向量化表示。抽取平臺(tái)API及其存在數(shù)據(jù)依賴的上下文信息,根據(jù)API的調(diào)用序列形成序列特征表示,可以保留程序的語義信息。此外,基于數(shù)據(jù)依賴的程序代碼特征表示,可以有效地抵御攻擊者在應(yīng)用程序中插入代碼、修改代碼順序等攻擊操作。

3) 深度學(xué)習(xí)模型的選擇

在應(yīng)用的向量表示中,本文將應(yīng)用函數(shù)表示成序列特征形式。RNN被廣泛地應(yīng)用于自然語言處理的相關(guān)任務(wù)中,擅長(zhǎng)序列數(shù)據(jù)的建模。此外,研究顯示RNN在程序分析方面也取得了不錯(cuò)的效果。3.2節(jié)提到在序列長(zhǎng)度增加時(shí),RNN會(huì)存在梯度消失或爆炸的問題。因此,本文使用LSTM網(wǎng)絡(luò)學(xué)習(xí)程序的序列特征表示,利用Siamese網(wǎng)絡(luò)度量特征的相似性。

圖3 DeepRD框架—訓(xùn)練階段

圖4 DeepRD框架—檢測(cè)階段

DeepRD主要包括模型訓(xùn)練和重打包應(yīng)用檢測(cè)這2個(gè)階段,分別如圖3和圖4所示。圖3為DeepRD的訓(xùn)練階段,輸入大量的第三方重打包應(yīng)用對(duì)以及第三方庫的白名單,輸出訓(xùn)練好的應(yīng)用函數(shù)相似性度量模型。訓(xùn)練階段主要包括Android應(yīng)用的預(yù)處理、特征抽取、應(yīng)用向量化表示以及MaLSTM模型訓(xùn)練這4個(gè)步驟。MaLSTM模型是一種用于處理變長(zhǎng)序列數(shù)據(jù)的Siamese LSTM網(wǎng)絡(luò)。圖4為DeepRD的檢測(cè)階段,輸入為2個(gè)待檢測(cè)的應(yīng)用,與訓(xùn)練階段相似,也包括預(yù)處理、特征抽取和應(yīng)用向量化表示等步驟,然后利用訓(xùn)練好的MaLSTM模型度量應(yīng)用函數(shù)的相似性來判斷是否為重打包應(yīng)用。各步驟具體描述的內(nèi)容如第5節(jié)所示。

5 DeepRD方法

5.1 預(yù)處理

Android應(yīng)用安裝(APK, Android package)文件主要由程序代碼dex文件和應(yīng)用資源文件構(gòu)成。在預(yù)處理階段的應(yīng)用反編譯是為了獲取APK文件的程序代碼,提取應(yīng)用函數(shù)的特征,生成應(yīng)用的向量表示。為了提高開發(fā)效率或?qū)崿F(xiàn)應(yīng)用的某些功能要求,程序開發(fā)人員在編寫Android應(yīng)用程序時(shí),會(huì)大量地調(diào)用第三方庫,如廣告庫和功能庫等。

由于第三方庫在應(yīng)用中占用了一定比例的程序代碼片段,因此在本文基于程序代碼相似性度量的重打包應(yīng)用檢測(cè)方法中,第三方庫會(huì)嚴(yán)重地影響檢測(cè)的效果,并在某種程度導(dǎo)致誤報(bào)。為了降低檢測(cè)中由于第三方庫帶來的誤報(bào),本文使用白名單過濾應(yīng)用中的第三方庫。

5.2 特征抽取

深度學(xué)習(xí)模型的輸入都是向量,在應(yīng)用向量化表示時(shí),需要保留應(yīng)用程序的語義信息用于程序代碼片段的相似性度量。本文重打包應(yīng)用分析與檢測(cè)的基本單元是應(yīng)用函數(shù),因此本文抽取應(yīng)用函數(shù)的特征形成應(yīng)用的特征表示。

本文抽取的特征用于判定應(yīng)用的相似性,抽取的程序特征應(yīng)滿足以下基本條件:①特征應(yīng)包含有應(yīng)用的語義信息且可分辨性強(qiáng),相似的程序片段特征相似,不同的程序片段特征差異明顯;②特征易抽取,不依賴于復(fù)雜的靜態(tài)分析方法,且可抵御常見的代碼混淆攻擊?;谝陨铣绦蛱卣鞅硎局行枰獫M足的2個(gè)基本條件,本文提出了一種基于平臺(tái)API調(diào)用序列的特征表示方法,抽取平臺(tái)API及其存在數(shù)據(jù)依賴的上下文信息作為程序的特征表示。

Android應(yīng)用的惡意行為總是與平臺(tái)API的不合理使用有關(guān),特別是與應(yīng)用權(quán)限申請(qǐng)有關(guān)的敏感API有密切的聯(lián)系,它們?cè)趷阂鈶?yīng)用中被開發(fā)者頻繁地調(diào)用以達(dá)到某些非法的目的。一些研究中將API的調(diào)用序列作為惡意應(yīng)用檢測(cè)的特征[44-45]。另外,有研究發(fā)現(xiàn),惡意開發(fā)者在修改或插入惡意代碼生成重打包應(yīng)用時(shí),也會(huì)頻繁地調(diào)用平臺(tái)API,收集用戶的隱私數(shù)據(jù)或執(zhí)行其他敏感的惡意操作等[11]?;谝陨?點(diǎn)啟發(fā),本文提出了基于API調(diào)用序列的特征表示方法。該特征表示方法有如下優(yōu)點(diǎn):①平臺(tái)API在程序分析中不易受到代碼混淆的影響;②平臺(tái)API調(diào)用序列提取簡(jiǎn)單,不依賴于復(fù)雜的靜態(tài)分析方法;③API的上下文信息保留了程序的語義信息,且基于數(shù)據(jù)依賴的平臺(tái)API上下文信息可以防御代碼插入等攻擊[34-35];④定義API的上下文信息作為應(yīng)用的特征表示,還可以抵御攻擊者通過修改API的調(diào)用順序,實(shí)施針對(duì)深度學(xué)習(xí)模型的對(duì)抗攻擊。

特征抽取階段主要包括抽取函數(shù)的API調(diào)用序列和抽取API的上下文信息這2個(gè)步驟,如圖3中步驟T2特征抽取所示。下面詳細(xì)描述這2個(gè)步驟。

1)抽取函數(shù)的API調(diào)用序列

Android應(yīng)用開發(fā)包括基于SDK(software development kit)的Java語言開發(fā)和基于NDK(native development kit)的C/C++語言開發(fā)這2種,NDK開發(fā)主要用于在APK文件中可以調(diào)用由C/C++語言編寫生成的so文件。本文僅考慮修改Java語言生成的重打包應(yīng)用,且目前尚未有研究發(fā)現(xiàn)通過修改C/C++語言生成的重打包應(yīng)用。因此,本文特征抽取階段分析的API包括Android平臺(tái)SDK中的庫和API以及Java平臺(tái)JDK中的庫和API。本文通過靜態(tài)的控制流分析,獲取應(yīng)用函數(shù)中API的調(diào)用序列。

2)抽取API的上下文信息

在應(yīng)用程序中,語句之間的關(guān)系主要分為數(shù)據(jù)依賴和控制依賴這2種形式。數(shù)據(jù)依賴是指如果語句數(shù)據(jù)依賴于,則中有變量的值取決于語句。本文API的上下文信息是指與API在函數(shù)體中存在數(shù)據(jù)依賴的語句,這里的數(shù)據(jù)依賴包括前向數(shù)據(jù)依賴和后向數(shù)據(jù)依賴這2種,如圖5所示。

圖5 平臺(tái)API的上下文信息示意

在圖5中,為API調(diào)用序列中的元素,語句1,2,…,D均數(shù)據(jù)依賴于,數(shù)據(jù)依賴于1,2,…,D'。本文用表示的前向數(shù)據(jù)依賴語句集合,={1,2,…, D};表示的后向數(shù)據(jù)依賴語句集合,={1,2,…, D'}。本文平臺(tái)API及其上下文信息表示為一個(gè)三元組的形式,即=<,,>。

在特征抽取階段,API及其上下文信息特征表示為本文深度學(xué)習(xí)模型輸入的基本單元。本文抽取的程序特征包含程序的語義信息,還可以抵御針對(duì)深度學(xué)習(xí)模型的對(duì)抗攻擊。接下來,具體介紹如何將該階段抽取的特征形成應(yīng)用函數(shù)的序列特征并進(jìn)行向量化表示。

5.3 應(yīng)用向量化表示

在應(yīng)用向量化表示中,根據(jù)5.2節(jié)特征抽取方法形成應(yīng)用函數(shù)的序列特征,然后使用詞向量嵌入模型對(duì)應(yīng)用函數(shù)的序列特征進(jìn)行向量化表示。具體分為函數(shù)序列特征表示和序列特征向量化表示這2個(gè)部分的內(nèi)容。接下來,對(duì)其進(jìn)行詳細(xì)描述。

1) 函數(shù)序列特征表示

在Android應(yīng)用中,開發(fā)人員調(diào)用大量的平臺(tái)API實(shí)現(xiàn)應(yīng)用的功能需求。應(yīng)用函數(shù)中API的調(diào)用順序可用于形成函數(shù)的序列特征表示,一些研究將API的調(diào)用順序作為惡意軟件檢測(cè)的特征。本文則通過靜態(tài)的控制流分析獲取應(yīng)用函數(shù)中API的調(diào)用序列,然后根據(jù)5.2節(jié)API上下文信息的提取方法,形成應(yīng)用函數(shù)的序列特征表示。函數(shù)序列特征表示如算法1所示。

算法1 函數(shù)序列特征表示算法

輸入 應(yīng)用函數(shù)的程序代碼

輸出 應(yīng)用函數(shù)的序列特征表示

1)_=();

/*獲取應(yīng)用函數(shù)的API調(diào)用序列*/

2) forin_

3)_=(); /*獲取的前向數(shù)據(jù)依賴語句*/

4)_=(); /*獲取的后向數(shù)據(jù)依賴語句*/

5)=<_,,>;/*平臺(tái)API及其上下文信息的特征表示*/

6); /*將放入序列特征表示中*/

7) end for

8) return

本文使用表示應(yīng)用函數(shù)的序列特征表示,=(1,2,…,V,…,V),其中,V表示應(yīng)用函數(shù)API調(diào)用序列中API的特征表示,V=<,,>,表示函數(shù)中調(diào)用平臺(tái)API的語句,和表示與存在數(shù)據(jù)依賴關(guān)系的語句。

2)序列特征向量化表示

在獲取應(yīng)用函數(shù)的序列特征表示后,生成序列特征的向量化表示作為本文深度學(xué)習(xí)模型的輸入。序列特征向量化表示主要包括以下幾個(gè)步驟:首先,將函數(shù)序列特征進(jìn)行符號(hào)化表示;然后,對(duì)符號(hào)化表示的特征進(jìn)行抽象化字符串表示;最后,利用詞向量嵌入模型對(duì)其進(jìn)行向量化表示,如圖6所示。接下來,具體描述這3個(gè)步驟的細(xì)節(jié)內(nèi)容。

圖6 應(yīng)用向量化表示步驟

在符號(hào)化表示中,將應(yīng)用函數(shù)的序列特征用Jimple中間符號(hào)表示。Jimple[46]是Java字節(jié)碼的一種抽象表現(xiàn)形式,相比于Java字節(jié)碼和Dalvik字節(jié)碼均超過200條指令,Jimple只有15條指令,常用于簡(jiǎn)化程序的靜態(tài)分析。在本文的特征抽取中,將Dalvik字節(jié)碼轉(zhuǎn)化為Jimple中間符號(hào)表示,然后對(duì)Jimple中間符號(hào)表示的應(yīng)用函數(shù)進(jìn)行靜態(tài)的程序分析,抽取應(yīng)用函數(shù)中API調(diào)用序列和數(shù)據(jù)依賴關(guān)系。本文選擇Jimple作為序列特征的符號(hào)表示是為了簡(jiǎn)化應(yīng)用的向量表示。

在抽象化表示中,通過詞法分析將應(yīng)用函數(shù)的Jimple中間符號(hào)表示轉(zhuǎn)化成抽象字符串表示。在詞法分析中,針對(duì)自定義的對(duì)象、變量以及函數(shù)的處理方式如下:①針對(duì)用戶自定義的數(shù)據(jù)結(jié)構(gòu)或?qū)ο?,字符串抽象表示為常量STR;②針對(duì)用戶自定義的變量,字符串抽象表示為常量VAR;③針對(duì)用戶自定義的函數(shù)調(diào)用,字符串抽象表示為常量FUNC。

在向量化表示中,將應(yīng)用函數(shù)的字符串抽象表式利用詞向量嵌入模型轉(zhuǎn)化為向量形式,輸入深度學(xué)習(xí)模型中進(jìn)行訓(xùn)練與特征學(xué)習(xí)。下面介紹應(yīng)用函數(shù)中API調(diào)用的一個(gè)抽象字符串描述簡(jiǎn)化案例。

VAR=staticinvoke (VAR);

上述案例中,該抽象字符串分割為“VAR”“=”“staticinvoke”“<”“parseInt”“>”“(”“VAR”“)”“;”這10個(gè)字符串形式。然后,使用Word2Vec詞向量嵌入模型將分割的10個(gè)字符串生成相應(yīng)的向量表示。

5.4 模型訓(xùn)練

在應(yīng)用函數(shù)的特征抽取和向量表示中,每個(gè)函數(shù)的特征向量長(zhǎng)度不同,本文使用MaLSTM模型處理變長(zhǎng)的序列特征數(shù)據(jù),如圖7所示。MaLSTM是具有LSTM的Siamese網(wǎng)絡(luò),它由2個(gè)平行的LSTM網(wǎng)絡(luò)構(gòu)成[47]。Siamese網(wǎng)絡(luò)用于度量2個(gè)輸入特征的相似性,MaLSTM將Siamese中用于特征表示的網(wǎng)絡(luò)替換成LSTM網(wǎng)絡(luò),使其適用于序列數(shù)據(jù)的學(xué)習(xí),更加切合本文的研究問題。接下來,詳細(xì)介紹Siamese網(wǎng)絡(luò)和MaLSTM模型的工作原理。

圖7 MaLSTM結(jié)構(gòu)

1) Siamese網(wǎng)絡(luò)

Siamese網(wǎng)絡(luò)[48]是一種應(yīng)用廣泛的特征相似性度量方法,它由2個(gè)結(jié)構(gòu)相同的網(wǎng)絡(luò)組成,這2個(gè)網(wǎng)絡(luò)共享相同的權(quán)值,如圖8所示。Siamese網(wǎng)絡(luò)常用于解決標(biāo)簽樣本缺乏情況下的模型訓(xùn)練問題,它通過從數(shù)據(jù)中學(xué)習(xí)樣本的相似性度量,然后與未知的標(biāo)簽樣本進(jìn)行比較。Siamese網(wǎng)絡(luò)使用一個(gè)函數(shù)將特征輸入映射到目標(biāo)空間,然后使用距離函數(shù)進(jìn)行相似性對(duì)比。在圖8中,NN為結(jié)構(gòu)相同的網(wǎng)絡(luò),輸入1和2分別被映射為N(1)和N(2),1和2相似性度量為E(N(1),N(2))。在Siamese網(wǎng)絡(luò)訓(xùn)練階段,采用的優(yōu)化策略是最小化相同類別樣本的損失函數(shù)值和最大化不同類別樣本的損失函數(shù)值。

圖8 Siamese網(wǎng)絡(luò)結(jié)構(gòu)

2) MaLSTM模型

MaLSTM是由2個(gè)結(jié)構(gòu)相同的LSTM網(wǎng)絡(luò)組成的Siamese網(wǎng)絡(luò),其中,LSTM和LSTM的權(quán)重參數(shù)相同,如圖7所示。MaLSTM的相似性度量函數(shù)定義為一階范數(shù)的指數(shù)函數(shù),如式(2)所示。

其中,和分別表示輸入LSTMa和LSTMb網(wǎng)絡(luò)中最后學(xué)習(xí)到的特征表示。LSTMa和LSTMb網(wǎng)絡(luò)的輸入分別為和,其中,Ta≠Tb。LSTM網(wǎng)絡(luò)中的記憶單元組成如圖9所示。LSTM記憶單元通過輸入門it、輸出門ot、遺忘門ft等控制信息的傳遞,最終輸出的ht由式(3)~式(8)計(jì)算得出。

(4)

本文使用BPTT算法訓(xùn)練MaLSTM模型的Siamese網(wǎng)絡(luò),使用均方差(MSE, mean squared error)作為損失函數(shù)。通過輸入大量的標(biāo)記樣本訓(xùn)練模型參數(shù),將訓(xùn)練好的模型用于應(yīng)用函數(shù)的相似性度量,通過應(yīng)用函數(shù)的相似性比較判定是否為重打包應(yīng)用。

5.5 重打包應(yīng)用檢測(cè)

本文方法的訓(xùn)練階段是為了訓(xùn)練Siamese LSTM網(wǎng)絡(luò),用于度量應(yīng)用函數(shù)的相似性。測(cè)試階段是利用訓(xùn)練好的模型,通過度量應(yīng)用函數(shù)的相似性,來判斷一對(duì)應(yīng)用是否為重打包應(yīng)用。

本文方法DeepRD檢測(cè)階段(如圖4所示)的步驟D1“應(yīng)用向量化表示”與訓(xùn)練階段(如圖3所示)的前3個(gè)步驟類似,包括預(yù)處理、特征抽取和應(yīng)用向量化表示。首先,將輸入的3個(gè)應(yīng)用進(jìn)行預(yù)處理,反編譯獲得應(yīng)用的程序代碼并過濾第三方庫;然后,抽取應(yīng)用函數(shù)的程序特征表示;最后,將應(yīng)用函數(shù)表示成序列特征形式,利用詞向量嵌入模型進(jìn)行特征向量化表示。檢測(cè)階段的步驟D2“檢測(cè)”是利用已經(jīng)訓(xùn)練好的MaLSTM模型度量應(yīng)用函數(shù)的相似性,然后判斷輸入的一對(duì)應(yīng)用是否為重打包應(yīng)用。

本文使用應(yīng)用函數(shù)作為分析與檢測(cè)的基本單元,通過細(xì)粒度的代碼相似性度量來判斷應(yīng)用的相似性,檢測(cè)重打包應(yīng)用以及識(shí)別被重用的代碼片段。本文基于應(yīng)用函數(shù)相似性度量的重打包應(yīng)用檢測(cè)中,需要考慮以下2個(gè)因素:①應(yīng)用中相似函數(shù)的個(gè)數(shù)或比例;②相似應(yīng)用函數(shù)的規(guī)模。應(yīng)用1和應(yīng)用2的相似性度量如式(10)~式(14)所示。

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

6.1方法實(shí)現(xiàn)

本文基于深度學(xué)習(xí)的Android重打包應(yīng)用檢測(cè)的實(shí)驗(yàn)部分主要包括以下4個(gè)部分。

1) Android應(yīng)用APK文件反編譯。Android平臺(tái)的每個(gè)應(yīng)用都有唯一的簽名,惡意開發(fā)者在修改合法應(yīng)用重新編譯生成新應(yīng)用發(fā)布時(shí),其應(yīng)用的簽名信息一定會(huì)改變。本文使用Keytool獲取應(yīng)用的簽名信息,作為唯一的標(biāo)識(shí)區(qū)分應(yīng)用。Apktool用于反編譯應(yīng)用的APK文件,獲取應(yīng)用的程序代碼。

2) 應(yīng)用程序第三方庫過濾。第三方庫主要包括廣告庫和功能庫這2種,本文使用文獻(xiàn)[49]提供的1 113個(gè)功能庫和240個(gè)廣告庫建立白名單,用于過濾應(yīng)用中的第三方庫。

3) 特征抽取及應(yīng)用向量化表示。本文使用soot將Dalvik字節(jié)碼轉(zhuǎn)化為Jimple中間符號(hào)表示,然后通過控制流與數(shù)據(jù)流分析,獲取應(yīng)用函數(shù)的API調(diào)用序列及與API存在數(shù)據(jù)依賴關(guān)系的上下文信息。

4) MaLSTM模型實(shí)現(xiàn)與訓(xùn)練。本文基于TensorFlow和Keras實(shí)現(xiàn)Siamese LSTM網(wǎng)絡(luò),用于度量應(yīng)用函數(shù)的相似性。

6.2 實(shí)驗(yàn)環(huán)境與數(shù)據(jù)來源

本文實(shí)現(xiàn)了基于深度學(xué)習(xí)的Android重打包應(yīng)用檢測(cè)原型系統(tǒng)DeepRD,具體的實(shí)驗(yàn)環(huán)境為CPU Intel(R) Core(TM) i7-6700K 4 GHz,64 GB內(nèi)存,2塊GPU顯卡NVIDA Titan X Pascal,每塊顯卡的顯存為12 GB,1 TB SSD,操作系統(tǒng)為Ubuntu16.04。

本文的實(shí)驗(yàn)數(shù)據(jù)來自公開的實(shí)驗(yàn)數(shù)據(jù)集AndroZoo[33]。該數(shù)據(jù)集中提供了大量重打包應(yīng)用的標(biāo)記樣本數(shù)據(jù),在本文模型的訓(xùn)練及預(yù)測(cè)階段使用AndroZoo提供的15 297對(duì)重打包應(yīng)用,其中,原始的正常合法應(yīng)用共計(jì)2 776個(gè),重打包應(yīng)用共計(jì)15 297個(gè)。

實(shí)驗(yàn)數(shù)據(jù)集中APK文件的大小分布如圖10所示。實(shí)驗(yàn)中APK文件最小為50 KB,最大為123.5 MB。超過88%的APK文件大小在20 MB以內(nèi),超過79%的APK文件大小超過1 MB。實(shí)驗(yàn)樣本數(shù)據(jù)總量達(dá)到147 GB,應(yīng)用函數(shù)的個(gè)數(shù)超過40萬個(gè)。

圖10 實(shí)驗(yàn)數(shù)據(jù)集中APK文件的大小分布

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

本文從重打包應(yīng)用檢測(cè)的效果以及特征表示的有效性這2個(gè)方面評(píng)價(jià)本文方法。因此,本文實(shí)驗(yàn)評(píng)價(jià)中回答以下2個(gè)問題:①本文方法的精準(zhǔn)率和漏報(bào)率分別是多少,是否優(yōu)于現(xiàn)有方法?②本文提出的應(yīng)用函數(shù)序列特征表示方法是否有效?

在實(shí)驗(yàn)效果評(píng)價(jià)中,本文使用漏報(bào)率、召回率、精準(zhǔn)率以及精準(zhǔn)率和召回率的調(diào)和平均值-這4個(gè)指標(biāo)來評(píng)價(jià)本文方法DeepRD的有效性,其中,= 1?。本文4個(gè)評(píng)價(jià)指標(biāo)的具體計(jì)算方法為

其中,各參數(shù)的具體含義為:真陽性(TP, true positive)、假陽性(FP, false positive)、真陰性(TN, true negative)、假陰性(FN, false negative)。

在本文重打包應(yīng)用檢測(cè)中,漏報(bào)率越接近0,精準(zhǔn)率越接近1,表明本文方法的檢測(cè)效果越好。

1) 本文檢測(cè)方法的精準(zhǔn)率與漏報(bào)率分析

本文主要從檢測(cè)的精準(zhǔn)率和漏報(bào)率這2個(gè)方面來說明本文方法的有效性。在實(shí)驗(yàn)結(jié)果評(píng)價(jià)中,在公開數(shù)據(jù)集AndroZoo上將DeepRD與SPRD[50]進(jìn)行對(duì)比,分別從、、和這4項(xiàng)指標(biāo)來評(píng)價(jià)2種方法的有效性。

SPRD是一種用于檢測(cè)第三方Android應(yīng)用市場(chǎng)重打包應(yīng)用的方法,該方法針對(duì)現(xiàn)有的檢測(cè)方法在實(shí)際應(yīng)用中存在難以有效均衡檢測(cè)速度、精準(zhǔn)率以及資源開銷這3個(gè)方面的問題,提出了一種基于應(yīng)用UI和程序依賴圖的重打包應(yīng)用快速檢測(cè)方法。并利用重打包應(yīng)用UI結(jié)構(gòu)相同或相似的特點(diǎn),設(shè)計(jì)了一種應(yīng)用UI抽象表示的散列快速相似性檢測(cè)方法,識(shí)別出可疑的重打包應(yīng)用,然后將應(yīng)用程序依賴圖作為應(yīng)用的特征表示,實(shí)現(xiàn)應(yīng)用的細(xì)粒度相似性比較。但是,該方法并不適用于基于部分代碼復(fù)用方式生成的重打包應(yīng)用。

實(shí)驗(yàn)中,根據(jù)以往的經(jīng)驗(yàn),隨機(jī)地選擇了70%的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),30%的數(shù)據(jù)作為測(cè)試數(shù)據(jù)。本文模型訓(xùn)練時(shí)隱藏層數(shù)=4。圖11和圖12分別表示漏報(bào)率及與隱藏層數(shù)的關(guān)系。從圖11和圖12可以看出,當(dāng)層數(shù)為4時(shí),漏報(bào)率最低;當(dāng)層數(shù)為5時(shí),最高。其中,綜合考慮了和。本文目標(biāo)是為了保持低漏報(bào)率,當(dāng)隱藏層數(shù)設(shè)置為4和5時(shí),只相差1%左右。因此,本文中隱藏層數(shù)設(shè)置為4是合理的。

實(shí)驗(yàn)中,根據(jù)上述的模型參數(shù)設(shè)置,通過10折交叉驗(yàn)證得到本文方法DeepRD與SPRD在數(shù)據(jù)集AndroZoo的最終對(duì)比結(jié)果如表1所示。

圖11 漏報(bào)率與隱藏層數(shù)關(guān)系

圖12 F-score與隱藏層數(shù)關(guān)系

表1 實(shí)驗(yàn)對(duì)比結(jié)果

從表1可以看出,本文方法DeepRD在真實(shí)數(shù)據(jù)集上測(cè)試的漏報(bào)率低于SPRD。實(shí)驗(yàn)結(jié)果顯示,DeepRD的檢測(cè)精準(zhǔn)率達(dá)到95.7%,漏報(bào)率低于6.2%,可以有效地應(yīng)用于Android應(yīng)用市場(chǎng)的重打包應(yīng)用檢測(cè),還可以有效地應(yīng)對(duì)現(xiàn)有重打包應(yīng)用檢測(cè)中漏報(bào)率高的問題。

實(shí)驗(yàn)中,通過人工分析SPRD的漏報(bào)樣本發(fā)現(xiàn),一些通過程序代碼復(fù)用生成的重打包應(yīng)用的UI不同,SPRD方法無法有效識(shí)別,造成了漏報(bào)的現(xiàn)象。

2) 本文函數(shù)序列特征表示的有效性分析

本文抽取應(yīng)用函數(shù)的序列特征,利用詞向量模型對(duì)序列特征進(jìn)行向量化表示,輸入模型中進(jìn)行訓(xùn)練和學(xué)習(xí)。最后,通過應(yīng)用函數(shù)的相似性度量來檢測(cè)重打包應(yīng)用。本節(jié)主要分析本文特征提取方法對(duì)于降低漏報(bào)率和提高是否有效。

在討論函數(shù)序列特征表示的有效性問題時(shí),本文將應(yīng)用函數(shù)表示成任意的特征表示。在實(shí)驗(yàn)中,本文采取2種處理方式。第一種方式將應(yīng)用函數(shù)當(dāng)成一個(gè)完整的字符串來處理,不考慮任何的程序語義信息。是應(yīng)用函數(shù)的特征表示,=(1,2,…,y,…,y),其中,y是將應(yīng)用函數(shù)的完整字符串按照空格進(jìn)行分割得到的元素,然后利用詞向量嵌入模型對(duì)進(jìn)行特征向量化表示,輸入深度學(xué)習(xí)模型中進(jìn)行訓(xùn)練和學(xué)習(xí)。第二種方式是僅抽取應(yīng)用函數(shù)調(diào)用的API序列,沒有獲得API的上下文信息,向量化表示等與本文方法相同。

實(shí)驗(yàn)中基于相同的訓(xùn)練與測(cè)試數(shù)據(jù)集,根據(jù)以上3種特征表示對(duì)模型進(jìn)行訓(xùn)練與參數(shù)學(xué)習(xí)。將DeepRD的序列語義特征表示與其他2種特征表示進(jìn)行比較,實(shí)驗(yàn)結(jié)果如表2所示。

表2 特征對(duì)比實(shí)驗(yàn)結(jié)果

在表2中,語義序列特征是指本文提出的特征表示方法,原始特征表示是指將應(yīng)用函數(shù)當(dāng)成完整字符串生成的特征,API調(diào)用特征是指獲取應(yīng)用函數(shù)的API調(diào)用形成的序列特征。從表2可以看出,如果對(duì)應(yīng)用函數(shù)進(jìn)行任意的特征表示,再利用深度學(xué)習(xí)模型進(jìn)行程序特征學(xué)習(xí),并不能取得比較好的檢測(cè)效果。本文的特征表示方法在漏報(bào)率和這2項(xiàng)指標(biāo)上均優(yōu)于其他2種特征表示方法。因此,本文的函數(shù)序列特征表示方法能夠有效地應(yīng)用于重打包應(yīng)用檢測(cè)中,相比于任意的程序特征表示方法,可以明顯地降低漏報(bào)率和提高。

利用本文基于深度學(xué)習(xí)的重打包應(yīng)用檢測(cè)系統(tǒng)DeepRD,分析目前國內(nèi)外主流Android應(yīng)用市場(chǎng)的重打包應(yīng)用情況,特別是國內(nèi)的應(yīng)用市場(chǎng)。實(shí)驗(yàn)中,我們針對(duì)每一個(gè)應(yīng)用市場(chǎng)隨機(jī)地下載1萬個(gè)應(yīng)用進(jìn)行檢測(cè),這5個(gè)應(yīng)用市場(chǎng)的重打包應(yīng)用分布情況如表3所示。

通過表3可以看出,Android官方應(yīng)用商店Google Play以及各大手機(jī)廠商的應(yīng)用商店如小米、華為等,由于嚴(yán)格的審查機(jī)制,重打包應(yīng)用的比例少。但是,Android應(yīng)用市場(chǎng)上卻存在大量的重打包應(yīng)用,通過分析發(fā)現(xiàn),在Android應(yīng)用市場(chǎng)上,有超過7.8%屬于漢化破解類的重打包應(yīng)用。

表3 國內(nèi)外主流應(yīng)用市場(chǎng)重打包應(yīng)用的比例

6.4 相關(guān)討論

本文方法能夠有效地應(yīng)用于Android平臺(tái)的重打包應(yīng)用檢測(cè),相比于傳統(tǒng)的檢測(cè)方法可以明顯地降低漏報(bào)率,但依然存在一些不足或需要改進(jìn)的地方。主要體現(xiàn)在以下4個(gè)方面。

1) 在本文方法的預(yù)處理階段,使用白名單過濾第三方庫在應(yīng)用相似性比較中會(huì)帶來干擾。但是由于收集的第三方庫由文獻(xiàn)[49]提供,因此會(huì)存在不完備的問題,在檢測(cè)中會(huì)導(dǎo)致一些誤報(bào)。針對(duì)第三方庫的完備性問題,可以通過網(wǎng)絡(luò)或其他渠道收集更多的第三方庫來擴(kuò)充白名單。

2) 本文中程序分析對(duì)象應(yīng)用的是Java代碼,沒有分析由C/C++語言編寫的本地代碼。因此,針對(duì)修改本地代碼生成的重打包應(yīng)用,本文方法無效。但是,目前尚未發(fā)現(xiàn)由修改本地代碼生成的重打包應(yīng)用樣本。

3) 本文的模型訓(xùn)練階段需要標(biāo)記樣本的支撐。然而,安全領(lǐng)域的標(biāo)記樣本是極其寶貴的資源。因此,在未來的工作中研究不依賴于標(biāo)記樣本的學(xué)習(xí)模型,或在只有少量標(biāo)記樣本的情況下,也能取得非常好的效果。

4) 在應(yīng)用向量表示及深度學(xué)習(xí)模型實(shí)現(xiàn)方面,本文抽取應(yīng)用函數(shù)的序列特征并進(jìn)行向量化表示,使用Siamese LSTM網(wǎng)絡(luò)學(xué)習(xí)應(yīng)用程序的語義特征。在未來的工作中,研究其他深度學(xué)習(xí)模型在重打包應(yīng)用檢測(cè)方面的應(yīng)用,例如深信念網(wǎng)絡(luò)等。

7 結(jié)束語

針對(duì)目前Android重打包應(yīng)用檢測(cè)方法存在依賴于專家定義特征和漏報(bào)率高的問題,本文提出了一種基于深度學(xué)習(xí)的Android重打包應(yīng)用檢測(cè)方法。該方法以應(yīng)用函數(shù)為基本的分析與檢測(cè)單元,通過程序的控制流與數(shù)據(jù)流分析,獲取應(yīng)用函數(shù)的序列特征表示,利用詞向量模型生成應(yīng)用的向量表示,然后輸入Siamese LSTM網(wǎng)絡(luò)中自動(dòng)地學(xué)習(xí)應(yīng)用程序的語義特征,通過程序代碼的相似性度量實(shí)現(xiàn)重打包應(yīng)用的檢測(cè)。實(shí)驗(yàn)結(jié)果表明,本文方法不依賴于專家定義應(yīng)用的特征表示,并且能夠有效地檢測(cè)Android重打包應(yīng)用,相比于傳統(tǒng)的基于特征定義的檢測(cè)方法,本文方法可以明顯地降低檢測(cè)的漏報(bào)率。

本文工作表明,深度學(xué)習(xí)可以有效地應(yīng)用于Android重打包應(yīng)用檢測(cè)以及程序分析等相關(guān)領(lǐng)域。在未來工作中,準(zhǔn)備將深度學(xué)習(xí)方法應(yīng)用于其他類型的Android惡意軟件檢測(cè)中,如隱私泄露、權(quán)限濫用等,目前,這類惡意軟件的檢測(cè)依然依賴于復(fù)雜的靜態(tài)分析或動(dòng)態(tài)分析等方法。

[1] ZHOU W, ZHOU Y J, JIANG X X, et al. Detecting repackaged smartphone applications in third-party Android marketplaces[C]//The Second ACM Conference on Data and Application Security and Privacy. 2012: 317-326.

[2] 卿斯?jié)h. Android 安全研究進(jìn)展[J]. 軟件學(xué)報(bào), 2016, 27(1): 45-71. QING S H. Research progress on Android security[J]. Journal of Software, 2016, 27(1): 45-71.

[3] 文偉平, 梅瑞, 寧戈, 等. Android 惡意軟件檢測(cè)技術(shù)分析和應(yīng)用研究[J]. 通信學(xué)報(bào), 2014, 35(8): 78-86. WEN W P, MEI R, NING G, et al. Malware detection technology analysis and applied research of Android platform[J]. Journal on Communications, 2014, 35(8): 78-86.

[4] 張玉清, 王凱, 楊歡, 等. Android安全綜述[J]. 計(jì)算機(jī)研究與發(fā)展, 2014, 51(7): 1385-1396. ZHANG Y Q, WANG K, YANG H, et al. Survey of Android OS security[J]. Journal of Computer Research and Development, 2014, 51(7): 1385-1396.

[5] 張玉清, 方喆君, 王凱, 等. Android 安全漏洞挖掘技術(shù)綜述[J]. 計(jì)算機(jī)研究與發(fā)展, 2015, 52(10): 2167-2177. ZHANG Y Q, FANG Z J, WANG K, et al. Survey of Android vulnerability detection[J]. Journal of Computer Research and Development, 2015, 52(10): 2167-2177.

[6] 楊威, 肖旭生, 李鄧鋒, 等. 移動(dòng)應(yīng)用安全解析學(xué): 成果與挑戰(zhàn)[J]. 信息安全學(xué)報(bào), 2016, 1(2): 1-14. YANG W, XIAO X S, LI D F, et al. Security analytics for mobile apps: achievements and challenges[J]. Journal of Cyber Security, 2016, 1(2): 1-14.

[7] 劉新宇, 翁健, 張悅, 等. 基于APK簽名信息反饋的 Android 惡意應(yīng)用檢測(cè)[J]. 通信學(xué)報(bào), 2017, 38(5): 190-198. LIU X Y, WENG J, ZHANG Y, et al. Android malware detection based on APK signature information feedback[J]. Journal on Communications, 2017, 38(5): 190-198.

[8] 楊歡, 張玉清, 胡予濮, 等. 基于多類特征的 Android 應(yīng)用惡意行為檢測(cè)系統(tǒng)[J]. 計(jì)算機(jī)學(xué)報(bào), 2014, 37(1): 15-27. YANG H, ZHANG Y Q, HU Y P, et al. A malware behavior detection system of Android applications based on multi-class features[J]. Chinese Journal of Computers, 2014, 37(1): 15-27.

[9] SADEGHI A, BAGHERI H, GARCIA J, et al. A taxonomy and qualitative comparison of program analysis techniques for security assessment of Android software[J]. IEEE Transactions on Software Engineering, 2017, 43(6): 492-530.

[10] TIAN K, YAO D D, RYDER B G, et al. Detection of repackaged Android malware with code-heterogeneity features[J]. IEEE Transactions on Dependable and Secure Computing, 2017, PP(99): 1.

[11] FAN M, LIU J, WANG W, et al. DAPASA: detecting Android piggybacked apps through sensitive subgraph analysis[J]. IEEE Transactions on Information Forensics and Security, 2017, 12(8): 1772-1785.

[12] LI L, LI D, BISSYANDé T F, et al. Understanding Android app piggybacking: a systematic study of malicious code grafting[J]. IEEE Transactions on Information Forensics and Security, 2017, 12(6): 1269-1284.

[13] ZHOU W, ZHOU Y J, GRACE M, et al. Fast, scalable detection of piggybacked mobile applications[C]//The Third ACM Conference on Data and Application Security and Privacy. 2013: 185-196.

[14] LI L, LI D, BISSYANDé T F, et al. Automatically locating malicious packages in piggybacked Android apps[C]//The 4th International Conference on Mobile Software Engineering and Systems. 2017: 170-174.

[15] ANDERSON H S, KHARKAR A, FILAR B, et al. Evading machine learning malware detection[C]//Black Hat USA. 2017.

[16] DEMONTIS A, MELIS M, BIGGIO B, et al. Yes, machine learning can be more secure! a case study on Android malware detection[J]. IEEE Transactions on Dependable and Secure Computing, 2017, doi: 10.1109/TDSC.2017.2700270.

[17] YANG W, KONG D, XIE T, et al. Malware detection in adversarial settings: exploiting feature evolutions and confusions in Android apps[C]//The 33rd Annual Computer Security Applications Conference. 2017: 288-302.

[18] 劉劍, 蘇璞睿, 楊珉, 等. 軟件與網(wǎng)絡(luò)安全研究綜述[J].軟件學(xué)報(bào), 2018, 29(1): 42-68. LIU J, SU P R, YANG M, et al. Software and cyber security-a survey[J]. Journal of Software, 2018, 29(1): 42-68

[19] LECUN Y, BENGIO Y, HINTON G. Deep learning[J]. Nature, 2015, 521(7553): 436-444.

[20] HE K, ZHANG X, REN S, et al. Deep residual learning for image recognition[C]//The IEEE Conference on Computer Vision and Pattern Recognition. 2016: 770-778.

[21] HINTON G, DENG L, YU D, et al. Deep neural networks for acoustic modeling in speech recognition: the shared views of four research groups[J]. IEEE Signal Processing Magazine, 2012, 29(6): 82-97.

[22] PENNINGTON J, SOCHER R, MANNING C. Glove: global vectors for word representation[C]//The 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). 2014: 1532-1543.

[23] LI Z, ZOU D Q, XU S H, et al. VulDeePecker: a deep learning-based system for vulnerability detection[C]//NDSS. 2018.

[24] YUAN Z, LU Y, WANG Z, et al. Droid-Sec: deep learning in Android malware detection[J]. ACM SIGCOMM Computer Communication Review, 2014, 44(4): 371-372.

[25] WANG S, LIU T, TAN L. Automatically learning semantic features for defect prediction[C]//The 38th International Conference on Software Engineering. 2016: 297-308.

[26] PRADEL M, SEN K. Deep learning to find bugs. technical report[R]. TU Darmstadt, Department of Computer Science. 2017.

[27] SHIN E, SONG D, MOAZZEZI R. Recognizing functions in binaries with neural networks[C]//The 24th USENIX Conference on Security Symposium. 2015: 611-626.

[28] CHUA Z L, SHEN S, SAXENA P, et al. Neural nets can learn function type signatures from binaries[C]//The 26th USENIX Conference on Security Symposium. 2017: 99-116.

[29] XU X, LIU C, FENG Q, et al. Neural network-based graph embedding for cross-platform binary code similarity detection[C]//The 2017 ACM SIGSAC Conference on Computer and Communications Security. 2017: 363-376.

[30] KOLOSNJAJI B, ZARRAS A, WEBSTER G, et al. Deep learning for classification of malware system call sequences[C]//Australasian Joint Conference on Artificial Intelligence. 2016: 137-149.

[31] DAVID O E, NETANYAHU N S. Deepsign: deep learning for automatic malware signature generation and classification[C]//2015 International Joint Conference on Neural Networks (IJCNN). 2015: 1-8.

[32] HOU S, SAAS A, CHEN L, et al. Deep4maldroid: a deep learning framework for Android malware detection based on linux kernel system call graphs[C]//Web Intelligence Workshops (WIW). 2016: 104-111.

[33] ALLIX K, BISSYANDE T F, KLEIN J, et al. AndroZoo: collecting millions of Android apps for the research community[C]//The 13th Working Conference on Mining Software Repositories. 2016: 468-471.

[34] CRUSSELL J, GIBLER C, CHEN H. Attack of the clones: detecting cloned applications on Android markets[C]//European Symposium on Research in Computer Security. 2012: 37-54.

[35] CRUSSELL J, GIBLER C, CHEN H. Andarwin: scalable detection of semantically similar Android applications[C]//European Symposium on Research in Computer Security. 2013: 182-199.

[36] CHEN K, LIU P, ZHANG Y. Achieving accuracy and scalability simultaneously in detecting application clones on Android markets[C]//The 36th International Conference on Software Engineering. 2014: 175-186.

[37] CHEN K, WANG P, LEE Y, et al. Finding unknown malice in 10 seconds: mass vetting for new threats at the google-play scale[C]//The 24th USENIX Conference on Security Symposium. 2015: 659-674.

[38] WANG H Y, GUO Y, MA Z, et al. Wukong: a scalable and accurate two-phase approach to Android app clone detection[C]//The 2015 International Symposium on Software Testing and Analysis. 2015: 71-82.

[39] 王浩宇, 王仲禹, 郭耀, 等. 基于代碼克隆檢測(cè)技術(shù)的Android應(yīng)用重打包檢測(cè)[J]. 中國科學(xué):信息科學(xué), 2014, 44: 142-157. WANG H Y, WANG Z Y, GUO Y, et al. Detecting repackaged Android applications based on code clone detection technique[J]. Science China Information Sciences, 2014, 44(1): 142-157.

[40] ZHANG F, HUANG H, ZHU S, et al. ViewDroid: towards obfuscation-resilient mobile application repackaging detection[C]//The 2014 ACM conference on Security and Privacy in Wireless & Mobile Networks. 2014: 25-36.

[41] SUN M, LI M, LUI J. Droideagle: seamless detection of visually similar Android apps[C]//The 8th ACM Conference on Security & Privacy in Wireless and Mobile Networks. 2015: 1-9.

[42] SHAO Y, LUO X, QIAN C, et al. Towards a scalable resource-driven approach for detecting repackaged Android applications[C]//The 30th Annual Computer Security Applications Conference. 2014: 56-65.

[43] SOH C, TAN H B K, ARNATOVICH Y L, et al. Detecting clones in Android applications through analyzing user interfaces[C]//The 2015 IEEE 23rd International Conference on Program Comprehension. 2015: 163-173.

[44] ZHANG M, DUAN Y, YIN H, et al. Semantics-aware Android malware classification using weighted contextual API dependency graphs[C]//The 2014 ACM SIGSAC Conference on Computer and Communications Security. 2014: 1105-1116.

[45] AAFER Y, DU W, YIN H. Droidapiminer: mining api-level features for robust malware detection in Android[C]//International Conference on Security and Privacy in Communication Systems. 2013: 86-103.

[46] VALLEE-RAI R, HENDREN L J. Jimple: simplifying Java bytecode for analyses and transformations[R]. Technical Report, Sable Group, McGill University, Montreal, Canada, 1998.

[47] MUELLER J, THYAGARAJAN A. Siamese recurrent architectures for learning sentence similarity[C]//AAAI. 2016: 2786-2792.

[48] BROMLEY J, GUYON I, LECUN Y, et al. Signature verification using a “siamese” time delay neural network[C]//Advances in Neural Information Processing Systems. 1994: 737-744.

[49] LI L, BISSYANDé T F, KLEIN J, et al. An investigation into the use of common libraries in Android apps[C]//The 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER). 2016: 403-414.

[50] 汪潤, 王麗娜, 唐奔宵, 等. SPRD:基于應(yīng)用UI和程序依賴圖的Android重打包應(yīng)用快速檢測(cè)方法[J]. 通信學(xué)報(bào), 2018, 39(3): 159-171. WANG R, WANG L N, TANG B X, et al. SPRD: fast application repackaging detection approach in Android based on application’s UI and program dependency graph[J]. Journal on Communications, 2018, 39(3): 159-171.

DeepRD: LSTM-based Siamese network for Android repackaged applications detection

WANG Run1,2, TANG Benxiao1,2, WANG Li’na1,2

1. Key Laboratory of Aerospace Information Security and Trusted Computing Ministry of Education, Wuhan University, Wuhan 430072, China 2. School of Cyber Science and Engineering, Wuhan University, Wuhan 430072, China

The state-of-art techniques in Android repackaging detection relied on experts to define features, however, these techniques were not only labor-intensive and time-consuming, but also the features were easily guessed by attackers. Moreover, the feature representation of applications which defined by experts cannot perform well to the common types of repackaging detection, which caused a high false negative rate in the real detection scenario. A deep learning-based repackaged applications detection approach was proposed to learn the program semantic features automatically for addressing the above two issues. Firstly, control and data flow analysis were taken for applications to form a sequence feature representation. Secondly, the sequence features were transformed into vectors based on word embedding model to train a Siamese LSTM network for automatically program feature learning. Finally, repackaged applications were detected based on the similarity measurement of learned program features. Experimental results show that the proposed approach achieves a precision of 95.7% and false negative rate of 6.2% in an open sourced dataset AndroZoo.

repackaging, deep learning, Siamese network, LSTM, security and privacy

TP309.1

A

10.11959/j.issn.1000?436x.2018148

汪潤(1991?),男,安徽安慶人,武漢大學(xué)博士生,主要研究方向?yàn)锳ndroid安全與隱私、AI安全等。

唐奔宵(1991?),男,湖北黃石人,武漢大學(xué)博士生,主要研究方向?yàn)橐苿?dòng)安全與隱私、系統(tǒng)安全等。

王麗娜(1964?),女,遼寧營口人,博士,武漢大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)榫W(wǎng)絡(luò)安全、信息隱藏、AI安全等。

2018?04?03;

2018?06?28

王麗娜,lnwang@whu.edu.cn

國家自然科學(xué)基金資助項(xiàng)目(No.U1536204);中央高?;究蒲袠I(yè)務(wù)費(fèi)專項(xiàng)資金資助項(xiàng)目(No.2042018kf1028);國家高技術(shù)研究發(fā)展計(jì)劃(“863”計(jì)劃)基金資助項(xiàng)目(No.2015AA016004)

The National Natural Science Foundation of China (No.U1536204), The Central University Basic Business Expenses Special Funding for Scientific Research Project (No.2042018kf1028), The National High Technology Research and Development Program of China (863 Program) (No.2015AA016004)

猜你喜歡
程序代碼漏報(bào)相似性
一類上三角算子矩陣的相似性與酉相似性
淺析當(dāng)代中西方繪畫的相似性
計(jì)算機(jī)網(wǎng)絡(luò)信息安全未來發(fā)展趨勢(shì)
基于圖元裝接模式由程序流程圖自動(dòng)生成源代碼
軟件工程(2016年11期)2017-01-17 16:56:57
各類氣體報(bào)警器防誤報(bào)漏報(bào)管理系統(tǒng)的應(yīng)用
低滲透黏土中氯離子彌散作用離心模擬相似性
傳染病漏報(bào)原因分析及對(duì)策
日本廠商在美漏報(bào)事故千余起被指管理疏漏
歷次人口普查中低年齡組人口漏報(bào)研究
V4國家經(jīng)濟(jì)的相似性與差異性
乐至县| 克山县| 南召县| 周宁县| 乌苏市| 吴旗县| 泰和县| 朝阳区| 汝南县| 灌云县| 白沙| 嫩江县| 中牟县| 伊宁县| 涿州市| 黑龙江省| 易门县| 兴安盟| 临西县| 化隆| 舟曲县| 嘉黎县| 芒康县| 崇义县| 搜索| 广东省| 象山县| 饶阳县| 泸水县| 平阳县| 龙山县| 科技| 招远市| 花莲县| 浦江县| 陇西县| 宣化县| 育儿| 化隆| 屯门区| 千阳县|