基于程序分析的應(yīng)用程序惡意行為檢測(cè)_第1頁(yè)
基于程序分析的應(yīng)用程序惡意行為檢測(cè)_第2頁(yè)
基于程序分析的應(yīng)用程序惡意行為檢測(cè)_第3頁(yè)
基于程序分析的應(yīng)用程序惡意行為檢測(cè)_第4頁(yè)
基于程序分析的應(yīng)用程序惡意行為檢測(cè)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于程序分析的應(yīng)用程序惡意行為檢測(cè)

1基于程序分析的惡意行為檢測(cè)近年來,移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展導(dǎo)致了智能設(shè)備的需求和日益增長(zhǎng)。根據(jù)Gartner提供的數(shù)據(jù),智能終端數(shù)量在2011年第三季度已達(dá)1.49億豐富的智能終端應(yīng)用程序也是智能終端流行的一大原因。為了便于應(yīng)用程序開發(fā)者發(fā)布應(yīng)用程序和用戶下載安裝應(yīng)用程序,出現(xiàn)了很多應(yīng)用程序商店,其中最著名的兩個(gè)應(yīng)用程序商店為Google的AndroidPlayPiOS針對(duì)使用Android系統(tǒng)提供的內(nèi)部機(jī)制所開發(fā)的惡意應(yīng)用程序,本文提出一種基于程序分析的方法,對(duì)未知的應(yīng)用程序進(jìn)行惡意行為檢測(cè),進(jìn)而分析應(yīng)用程序的安全性。通過對(duì)應(yīng)用程序在不同粒度上的模擬執(zhí)行,對(duì)應(yīng)用程序進(jìn)行分析。在指令級(jí)別上的模擬執(zhí)行計(jì)算函數(shù)摘要,針對(duì)不同的函數(shù)設(shè)計(jì)原子函數(shù)摘要和組合函數(shù)摘要來滿足分析需要。在函數(shù)級(jí)別上的模擬執(zhí)行進(jìn)行應(yīng)用程序的惡意行為檢測(cè),通過惡意行為檢測(cè)完成對(duì)應(yīng)用程序的安全性評(píng)估。2設(shè)計(jì)了眾多的機(jī)制,引起研究利用。在現(xiàn)代管理Android系統(tǒng)為了簡(jiǎn)化應(yīng)用程序的開發(fā)以及各種軟硬件資源和權(quán)限的管理,設(shè)計(jì)了很多的機(jī)制,例如廣播與監(jiān)聽機(jī)制、服務(wù)機(jī)制等等。從開發(fā)和管理的角度上說,這些機(jī)制的確使開發(fā)和管理變得簡(jiǎn)單;但是,從用戶安全的角度上說,這些機(jī)制卻將使用應(yīng)用程序的用戶暴露于極大的安全隱患之中。2.1廣播監(jiān)聽器的使用在Android系統(tǒng)中存在各種各樣的廣播,比如電池的使用狀態(tài)的改變、電話的接聽和短信的接收都會(huì)產(chǎn)生一個(gè)廣播,應(yīng)用程序開發(fā)者可以監(jiān)聽這些廣播并做出相應(yīng)的處理。應(yīng)用程序在安裝時(shí)便會(huì)向Android系統(tǒng)注冊(cè)所使用的廣播監(jiān)聽器,Android系統(tǒng)接收到廣播時(shí)便通知注冊(cè)了該廣播的應(yīng)用程序執(zhí)行相應(yīng)的廣播監(jiān)聽器。惡意應(yīng)用開發(fā)者可以在開發(fā)的應(yīng)用程序中注冊(cè)比較常用的廣播監(jiān)聽器,比如電話和短信的廣播,當(dāng)監(jiān)聽到Android系統(tǒng)發(fā)送這類廣播時(shí),就可以在廣播處理事件中做一些有害于用戶的行為,例如獲取用戶的通訊錄信息,并通過網(wǎng)絡(luò)發(fā)送出去。使用這種方法的應(yīng)用程序的惡意行為比較隱蔽,只有在監(jiān)聽到特定廣播才會(huì)觸發(fā),而此時(shí)已對(duì)用戶造成了損失。2.2本地服務(wù)(actity)服務(wù)是不可見的,主要是在后臺(tái)運(yùn)行。服務(wù)機(jī)制一般用于支持比較耗時(shí)或者長(zhǎng)時(shí)間運(yùn)行的操作。服務(wù)分為兩種:本地服務(wù)和遠(yuǎn)程服務(wù)。本地服務(wù)一般用于應(yīng)用程序內(nèi)部一些耗時(shí)的任務(wù),比如查詢升級(jí)信息等,并不占用應(yīng)用程序比如Activity服務(wù)可以提供很多方式供惡意應(yīng)用程序開發(fā)者開發(fā)惡意應(yīng)用。例如,一個(gè)惡意應(yīng)用程序在運(yùn)行時(shí)并不需要任何與外界交互的權(quán)限,比如發(fā)送短信或訪問網(wǎng)絡(luò)的權(quán)限,而只要通過一個(gè)具有以上權(quán)限的服務(wù),就可以將非法收集到的用戶隱私信息發(fā)送出去。2.3)基于高效的id系統(tǒng)在Android系統(tǒng)中主要存在三種本地代碼:shell命令、本地庫(kù)文件(.SO)以及字節(jié)碼文件(.JAR和.DEX)。Android系統(tǒng)為shell命令提供了exec接口;為將本地庫(kù)加載到當(dāng)前應(yīng)用程序內(nèi)存中提供了load和loadLibrary兩個(gè)接口,本地庫(kù)文件可以使用NDK(NativeDevelopmentKit)本地代碼的執(zhí)行具有極大的靈活性,且方式多樣。應(yīng)用程序開發(fā)者可以在發(fā)布應(yīng)用程序時(shí),不將存在惡意代碼的文件放入安裝文件中,而是在用戶使用時(shí)再將這些代碼文件從網(wǎng)絡(luò)上下載,這加大了對(duì)應(yīng)用程序進(jìn)行檢測(cè)分析的難度。3函數(shù)調(diào)用圖構(gòu)建針對(duì)上述Android系統(tǒng)提供的機(jī)制存在的安全問題,本文給出了一種惡意行為的檢測(cè)方法。本方法不需要安裝應(yīng)用程序,直接在PC上對(duì)應(yīng)用程序的字節(jié)碼文件進(jìn)行靜態(tài)分析,主要包括如下四個(gè)步驟:程序結(jié)構(gòu)恢復(fù)、函數(shù)調(diào)用圖重構(gòu)、函數(shù)摘要構(gòu)建以及惡意行為檢測(cè),如圖1所示。程序結(jié)構(gòu)恢復(fù)是在內(nèi)存中對(duì)當(dāng)前應(yīng)用程序中類的結(jié)構(gòu)的恢復(fù),恢復(fù)的結(jié)構(gòu)信息主要包括類的繼承關(guān)系、類中的屬性以及類中的方法等;函數(shù)調(diào)用圖重構(gòu)是針對(duì)Android系統(tǒng)以消息為驅(qū)動(dòng)方式以及使用面向?qū)ο蟮腏ava編程語(yǔ)言設(shè)計(jì)的,完成函數(shù)調(diào)用的唯一性確定以及控件消息處理事件的調(diào)用,重構(gòu)出近似于函數(shù)運(yùn)行時(shí)的調(diào)用圖;函數(shù)摘要構(gòu)建是結(jié)合恢復(fù)的程序結(jié)構(gòu)和重構(gòu)的函數(shù)調(diào)用圖,對(duì)函數(shù)中字節(jié)碼指令進(jìn)行模擬執(zhí)行,求解出函數(shù)的輸入與輸出之間的語(yǔ)義邏輯關(guān)系;惡意行為檢測(cè)通過在已計(jì)算出的函數(shù)摘要信息上使用靜態(tài)污點(diǎn)傳播算法,檢測(cè)函數(shù)調(diào)用路徑上的惡意行為。Android應(yīng)用程序主要使用Java語(yǔ)言開發(fā)。Java是一種面向?qū)ο蟮恼Z(yǔ)言,存在大量的類和對(duì)象。但是,與一般的Java程序相比,Android應(yīng)用程序不存在主入口函數(shù)main,例如存在界面的Android應(yīng)用程序的主入口函數(shù)一般是一個(gè)Activity組件的onCreate函數(shù),該信息可以從AndroidManifest.xml文件中獲取。AndroidManifest.xml文件中定義了本應(yīng)用程序需使用的Activity組件、Service組件、Receiver組件以及所需要的權(quán)限列表等。這些組件的啟動(dòng)函數(shù)都可以作為分析的入口。在Android系統(tǒng)中,應(yīng)用程序的運(yùn)行是以消息為驅(qū)動(dòng)的。在對(duì)應(yīng)用程序進(jìn)行分析檢測(cè)的時(shí)候,對(duì)于應(yīng)用程序分析過程中存在消息響應(yīng)的控件,在該控件對(duì)象生成時(shí),就對(duì)該控件的消息處理事件進(jìn)行分析。因?yàn)榇蟛糠值氖录桥c用戶交互形成的,而這些控件對(duì)象初始化之后,就已經(jīng)具備了完成相應(yīng)消息處理事件所必須的信息。3.1)對(duì)方法名和屬性名進(jìn)行反匯分析Android應(yīng)用程序一般是用Java語(yǔ)言開發(fā)的,存在著大量的類和對(duì)象。在對(duì)函數(shù)進(jìn)行分析的過程中,需要確定被調(diào)用函數(shù)以及屬性的歸屬,這些都需要程序結(jié)構(gòu)的支撐。結(jié)構(gòu)的恢復(fù)需要依賴應(yīng)用程序安裝包中的.DEX文件。對(duì)該文件進(jìn)行反匯編,目前已有很多可以使用的Dalvik字節(jié)碼的反匯編工具,例如baksmali類中的方法和屬性的恢復(fù)是通過對(duì)方法名和屬性名進(jìn)行解析完成的。IDAPro對(duì)方法名和屬性名反匯編出的命名是規(guī)則的。方法名一般格式為:包名$類名$內(nèi)部類名.函數(shù)名@返回值及形參列表類型。返回值及形參列表的類型一般用一個(gè)字母表示一種類型,例如void用V表示。屬性名一般格式為:包名$類名$類部類名_屬性名。根據(jù)這些命名規(guī)則,可以解析出方法和屬性的類名,再根據(jù)解析出的類名將這些方法和屬性劃分到各自原本的類中。默認(rèn)情況下,所有類的父類為Object類,而構(gòu)建類的繼承關(guān)系,主要是構(gòu)建類直接繼承過來的父類。直接繼承的父類需要通過分析特定的指令獲取,Dalvik字節(jié)碼中有兩個(gè)指令(INVOKE_SU-PER和INVOKE_SUPER_RANGE)指定調(diào)用父類中同名的函數(shù),從而可以分析出該函數(shù)所在類的父類。Dalvik字節(jié)碼指令是通過INVOKE_XXX指令進(jìn)行函數(shù)調(diào)用的,可以根據(jù)這類指令信息構(gòu)建出整個(gè)應(yīng)用程序的函數(shù)調(diào)用圖。3.2)android應(yīng)用程序組件Android系統(tǒng)中存在組件的生命周期、消息的驅(qū)動(dòng)以及類的繼承等,使得“程序結(jié)構(gòu)恢復(fù)”階段構(gòu)建函數(shù)時(shí)得出的函數(shù)調(diào)用圖不完整或存在錯(cuò)誤,因此必須進(jìn)行修復(fù)和重構(gòu)。Android應(yīng)用程序由Activity、Service以及Receiver等組件組成,這些組件是Android應(yīng)用程序所特有的,每個(gè)組件各有一個(gè)完整的生命周期,不同組件的生命周期差別很大,在整個(gè)生命周期使用的函數(shù)都是由系統(tǒng)進(jìn)行調(diào)用的,它們?cè)诤瘮?shù)調(diào)用圖中是沒有前驅(qū)節(jié)點(diǎn)的,在系統(tǒng)實(shí)際運(yùn)行中遵循一定的調(diào)用順序,該調(diào)用順序可以從Android應(yīng)用程序開發(fā)文檔中獲取。以ActivityAndroid應(yīng)用程序存在大量的控件,例如按鈕、輸入框等??丶氖录幚砗瘮?shù)是由Android系統(tǒng)確定調(diào)用的,在對(duì)應(yīng)用程序進(jìn)行分析的過程中需要適當(dāng)?shù)卣{(diào)用這些函數(shù)。例如,按鈕控件有個(gè)點(diǎn)擊事件,即onClick事件,當(dāng)用戶點(diǎn)擊按鈕時(shí)才會(huì)觸發(fā),而在靜態(tài)分析過程中不存在與用戶的交互,可以根據(jù)前述方法,將點(diǎn)擊事件處理函數(shù)在按鈕初始化。3.3數(shù)調(diào)用函數(shù)函數(shù)摘要是對(duì)函數(shù)的一種抽象解釋。Android應(yīng)用程序中存在類的繼承、接口的實(shí)現(xiàn)等面向?qū)ο缶幊烫卣?基于這些特征可以將函數(shù)的摘要分為兩類,即原子函數(shù)摘要和組合函數(shù)摘要。定義1原子函數(shù)摘要:所摘要的函數(shù)不存在子函數(shù)調(diào)用,或者雖然存在子函數(shù)調(diào)用,但這些子函數(shù)調(diào)用都是可以唯一確定的。定義2組合函數(shù)摘要:所摘要的函數(shù)存在子函數(shù)調(diào)用,且至少有一個(gè)子函數(shù)調(diào)用在該函數(shù)體內(nèi)不能唯一確定。函數(shù)摘要構(gòu)建是在指令級(jí)別上對(duì)函數(shù)體中的指令進(jìn)行模擬執(zhí)行的過程。算法1是函數(shù)摘要構(gòu)建的算法,語(yǔ)句5~8處理函數(shù)調(diào)用指令,從重構(gòu)的函數(shù)調(diào)用圖callGrpah中獲取被調(diào)函數(shù)function信息,并在局部參數(shù)localVariables中查找該被調(diào)函數(shù)的實(shí)參,存放到實(shí)參列表arguments中,最后將實(shí)參列表arguments和被調(diào)函數(shù)function信息保存到函數(shù)摘要summary,即在函數(shù)摘要中構(gòu)建一條函數(shù)調(diào)用信息(下稱函數(shù)調(diào)用點(diǎn));語(yǔ)句9~14處理函數(shù)間的調(diào)用關(guān)系,將被調(diào)函數(shù)對(duì)形參funParameters的影響傳遞給主調(diào)函數(shù)中的實(shí)參arguments;語(yǔ)句15~16處理函數(shù)返回指令(包括拋出異常的指令),合并所有影響形參值的變量信息,將結(jié)果保存到形參中;語(yǔ)句17~19處理既不是函數(shù)返回指令又不是函數(shù)調(diào)用指令的指令,對(duì)這種指令根據(jù)Dalvik字節(jié)碼的語(yǔ)義進(jìn)行模擬,并更新相應(yīng)局部變量的狀態(tài)。例如,指令new-instancev6,〈t:Sms〉是新建一個(gè)Sms對(duì)象,將該對(duì)象放入v6中。在模擬執(zhí)行過程中,則會(huì)構(gòu)建一個(gè)與Sms相對(duì)應(yīng)的對(duì)象保存Sms的信息。算法1函數(shù)摘要構(gòu)建算法3.4被調(diào)函數(shù)的確定Android應(yīng)用程序沒有像Java應(yīng)用程序存在一個(gè)統(tǒng)一的入口函數(shù)main,在對(duì)存在多個(gè)組件的Android應(yīng)用程序進(jìn)行分析時(shí)會(huì)帶來不便。為了解決這個(gè)問題,在對(duì)應(yīng)用程序進(jìn)行分析之前,對(duì)應(yīng)用程序先構(gòu)建一個(gè)虛擬的main函數(shù),將每個(gè)組件按其生命周期構(gòu)建函數(shù)的執(zhí)行序列,同一個(gè)組件共享同一個(gè)this對(duì)象。惡意行為檢測(cè)是建立在已經(jīng)構(gòu)建好的函數(shù)摘要基礎(chǔ)上的。從上述虛擬main函數(shù)開始,在計(jì)算的函數(shù)摘要上進(jìn)行函數(shù)級(jí)別上的模擬執(zhí)行,在執(zhí)行過程中組合摘要中的占位函數(shù)需要結(jié)合已恢復(fù)的程序結(jié)構(gòu)和函數(shù)調(diào)用時(shí)所傳入的this對(duì)象來確定。在檢測(cè)過程中,需要用到源函數(shù)模式庫(kù)和危險(xiǎn)函數(shù)模式庫(kù),以及惡意行為模式庫(kù),這些模式庫(kù)都是來源于人工分析的經(jīng)驗(yàn)積累。源函數(shù)模式庫(kù)包含引入污染數(shù)據(jù)的函數(shù),這可以是訪問手機(jī)中的隱私數(shù)據(jù),比如用戶的通訊錄等,也可以是啟動(dòng)手機(jī)的某個(gè)功能模塊,比如地理位置定位系統(tǒng)等。危險(xiǎn)函數(shù)模式庫(kù)包含可以與外界交互的函數(shù),例如訪問網(wǎng)絡(luò)、發(fā)送短信等。惡意行為模式庫(kù)包含源函數(shù)與危險(xiǎn)函數(shù)相結(jié)合后所產(chǎn)生的危害行為模式,例如啟動(dòng)地理位置定位系統(tǒng)與發(fā)送短信結(jié)合,則可能屬于遠(yuǎn)程控制設(shè)備的行為。檢測(cè)惡意行為的步驟主要如下:(1)設(shè)置分析入口。廣播與監(jiān)聽機(jī)制和服務(wù)機(jī)制有特定的入口函數(shù),可將其構(gòu)建到虛擬main函數(shù)中。然而本地代碼執(zhí)行機(jī)制并沒有固定的入口函數(shù),則根據(jù)已重構(gòu)好的函數(shù)調(diào)用圖,在某個(gè)圖中如果存在本地調(diào)用特征的函數(shù),則將這個(gè)函數(shù)調(diào)用的真實(shí)入口加入到虛擬main函數(shù)中。(2)標(biāo)記污染信息。從虛擬main函數(shù)開始,根據(jù)每個(gè)函數(shù)已構(gòu)建的函數(shù)摘要,將函數(shù)調(diào)用點(diǎn)的函數(shù)信息與源函數(shù)模式庫(kù)匹配,標(biāo)記出污染變量中的污染信息。(3)污染信息傳播。將污染信息通過函數(shù)的實(shí)參傳入被調(diào)函數(shù)中,計(jì)算傳入信息對(duì)被調(diào)函數(shù)各個(gè)函數(shù)調(diào)用點(diǎn)的影響,依次遞歸進(jìn)行。(4)惡意行為匹配。在過程(3)中結(jié)合危險(xiǎn)函數(shù)模式庫(kù),若匹配到一個(gè)危險(xiǎn)函數(shù)時(shí),并且污染信息也傳播到這個(gè)危險(xiǎn)函數(shù),再根據(jù)惡意行為模式庫(kù)中的惡意行為信息進(jìn)行匹配,如果匹配成功,則報(bào)告一條危險(xiǎn)行為及其相關(guān)信息。4數(shù)據(jù)的導(dǎo)入結(jié)果根據(jù)上述方法,本文實(shí)現(xiàn)了一個(gè)原型系統(tǒng)。系統(tǒng)包含2.2萬行Java代碼和1650行python代碼,可以直接對(duì)Android應(yīng)用程序安裝包的字節(jié)碼進(jìn)行靜態(tài)分析。主要包含三個(gè)模塊:預(yù)處理、核心分析引擎以及檢測(cè)結(jié)果,如圖3所示。預(yù)處理模塊將Android應(yīng)用程序安裝包中的字節(jié)碼信息導(dǎo)入數(shù)據(jù)庫(kù)中??焖龠^濾部分,通過分析應(yīng)用程序安裝包中的AndroidManifest.xml文件中的權(quán)限列表,快速篩除肯定不存在惡意行為的應(yīng)用程序。由于不同應(yīng)用程序的安裝包存在相同的字節(jié)碼文件,在將字節(jié)碼信息導(dǎo)入數(shù)據(jù)庫(kù)之前,首先計(jì)算DEX文件的MD5值,如果數(shù)據(jù)庫(kù)中不存在該MD5值的應(yīng)用程序,才會(huì)將應(yīng)用程序的字節(jié)碼通過IDAPro進(jìn)行反匯編,再導(dǎo)入到數(shù)據(jù)庫(kù)中。反匯編和導(dǎo)入數(shù)據(jù)庫(kù)功能使用腳本自動(dòng)實(shí)現(xiàn)的,不需要人工參與。-核心分析引擎通過對(duì)導(dǎo)入數(shù)據(jù)庫(kù)中的字節(jié)碼信息進(jìn)行分析,恢復(fù)出應(yīng)用程序結(jié)構(gòu)以及近似運(yùn)行時(shí)的函數(shù)調(diào)用圖,并進(jìn)一步構(gòu)建出每一個(gè)函數(shù)的摘要信息,最后通過惡意行為檢測(cè)分析出應(yīng)用程序的惡意行為。檢測(cè)結(jié)果模塊根據(jù)惡意行為檢測(cè)獲取的信息,剔除惡意行為中存在與用戶交互的惡意行為,將沒有與用戶交互的惡意行為作為最終的檢測(cè)結(jié)果(即Android系統(tǒng)機(jī)制相關(guān)的惡意行為)輸出。我們使用了文獻(xiàn)[18]中使用的惡意應(yīng)用程序數(shù)據(jù)庫(kù),含有1260個(gè)惡意應(yīng)用程序樣本。我們將這些惡意程序樣本導(dǎo)入數(shù)據(jù)庫(kù),由于樣本中存在DEX文件的MD5值相同,最終導(dǎo)入數(shù)據(jù)庫(kù)的惡意樣本數(shù)為866個(gè)。使用上述原型系統(tǒng)對(duì)數(shù)據(jù)庫(kù)中的樣本進(jìn)行分析,其中有650個(gè)樣本在使用系統(tǒng)機(jī)制時(shí)添加惡意行為;而有216個(gè)樣本在使用系統(tǒng)機(jī)制時(shí)沒有添加惡意行為,但是不排除在非系統(tǒng)機(jī)制代碼部分添加了惡意行為,但是本文不關(guān)注這個(gè)方面,分析結(jié)果如圖4所示。在這650個(gè)樣本中,總共檢測(cè)出4313條惡意行為,廣播與監(jiān)聽機(jī)制中出現(xiàn)惡意行為的個(gè)數(shù)為380,占9%;本地代碼執(zhí)行機(jī)制中出現(xiàn)惡意行為的個(gè)數(shù)為464,占11%;服

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論