亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Android應(yīng)用漏洞檢測方法與流程

文檔序號:12064204閱讀:1144來源:國知局
一種Android應(yīng)用漏洞檢測方法與流程

本發(fā)明涉及一種基于靜態(tài)Dalvik虛擬機(jī)的Android應(yīng)用漏洞檢測方法。



背景技術(shù):

2007年Google公司正式發(fā)布了Android智能手機(jī)操作系統(tǒng),并逐漸成為智能手機(jī)的主流操作系統(tǒng),Android系統(tǒng)的應(yīng)用數(shù)量突破百萬個(gè)。隨著Android應(yīng)用數(shù)量的激增,安全研究員、黑客也越來越重視Android應(yīng)用的漏洞挖掘,越來越多的應(yīng)用被爆出存在安全漏洞,導(dǎo)致用戶的隱私數(shù)據(jù)被盜取、手機(jī)中木馬病毒,甚至導(dǎo)致嚴(yán)重的經(jīng)濟(jì)損失。目前Android應(yīng)用的常見漏洞包括敏感信息泄露、權(quán)限泄露、拒絕服務(wù)、Webview遠(yuǎn)程代碼執(zhí)行、不安全地加載鏈接庫、本地密碼學(xué)誤用等類型,大多數(shù)漏洞在于程序員對Android系統(tǒng)和框架API使用不當(dāng)和配置不當(dāng)、組件權(quán)限設(shè)置不當(dāng)/輸入數(shù)據(jù)處理不當(dāng)、應(yīng)用邏輯和API(本地及遠(yuǎn)端)使用不當(dāng)、或者使用有漏洞的第三方組件等等。

早期Android應(yīng)用的漏洞檢測主要通過反編譯應(yīng)用APK文件,然后人工審計(jì)反編譯來發(fā)現(xiàn)安全漏洞。人工審計(jì)的方法主要缺點(diǎn)是速度慢、效率低、覆蓋率低,主要依靠安全人員的經(jīng)驗(yàn)知識來檢測漏洞。隨著安全研究的深入及應(yīng)用數(shù)量的激增,國內(nèi)逐漸出現(xiàn)Android應(yīng)用自動化審計(jì)工具,主要使用靜態(tài)分析和關(guān)鍵詞匹配技術(shù)。這些自動化審計(jì)工具主要檢測的應(yīng)用漏洞包括:明文保存敏感信息、文件權(quán)限問題、日志信息泄露、組件權(quán)限問題、明文傳輸、拒絕服務(wù)等,大部分是漏洞特征比較明顯的漏洞,對于比較復(fù)雜的漏洞則無法檢測。同時(shí),由于靜態(tài)分析和關(guān)鍵詞匹配缺少上下文分析和可達(dá)性分析,檢測到的漏洞可能根本不會調(diào)用到,所以會產(chǎn)生大量誤報(bào)。

除了靜態(tài)分析漏洞檢測工具,也有基于動態(tài)分析的漏洞檢測工具,例如Drozer和IntentFuzzer。IntentFuzzer只能夠動態(tài)檢測應(yīng)用在處理Intent時(shí)是不是存在漏洞,Drozer可以通過命令行交互動態(tài)檢測應(yīng)用漏洞,但是只能檢測到部分可以交互的漏洞,并且需要較多人工工作。動態(tài)分析相比靜態(tài)分析的優(yōu)點(diǎn)是準(zhǔn)確率更高,但是缺點(diǎn)是速度較慢、效率較低、無法覆蓋所有執(zhí)行路徑。



技術(shù)實(shí)現(xiàn)要素:

為了克服現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明提供了一種基于靜態(tài)Dalvik虛擬機(jī)的Android應(yīng)用漏洞檢測方法,針對目前Android應(yīng)用漏洞檢測在靜態(tài)分析及動態(tài)分析存在的缺點(diǎn),本方法在Android應(yīng)用靜態(tài)反編譯的基礎(chǔ)上,結(jié)合正則匹配及過濾引擎、函數(shù)調(diào)用圖及數(shù)據(jù)流分析技術(shù),解決了傳統(tǒng)靜態(tài)分析關(guān)鍵詞匹配的誤報(bào)問題,通過部分模擬Dalvik虛擬機(jī)代碼執(zhí)行動態(tài)分析漏洞代碼,大大提升了Android應(yīng)用漏洞檢測的準(zhǔn)確率及檢測效率。

本發(fā)明所采用的技術(shù)方案是:一種Android應(yīng)用漏洞檢測方法,包括如下步驟:

步驟一、提取漏洞檢測向量中的漏洞特征;

步驟二、判斷漏洞特征是否涉及函數(shù)調(diào)用:如否,則根據(jù)反編譯的smali代碼和應(yīng)用配置文件AndroidManifest.xml文件進(jìn)行匹配;如是,則進(jìn)入步驟三;

步驟三、根據(jù)反編譯的smali代碼確定函數(shù)調(diào)用圖特征、函數(shù)簽名特征和函數(shù)參數(shù)特征;

步驟四、如果漏洞檢測向量中的函數(shù)調(diào)用圖特征、函數(shù)簽名特征和函數(shù)參數(shù)特征均能成功匹配,則檢測到安全漏洞。

與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果是:

本發(fā)明設(shè)計(jì)的基于靜態(tài)Dalvik虛擬機(jī)的Android應(yīng)用漏洞檢測技術(shù)結(jié)合了傳統(tǒng)靜態(tài)分析速度快、效率高的優(yōu)點(diǎn),在靜態(tài)反編譯Android應(yīng)用為smali代碼的基礎(chǔ)上,結(jié)合正則匹配及過濾引擎、函數(shù)調(diào)用圖關(guān)聯(lián)及數(shù)據(jù)流分析技術(shù),大大降低了傳統(tǒng)靜態(tài)分析的誤報(bào)率。同時(shí),本發(fā)明結(jié)合大量Android應(yīng)用安全漏洞的專家知識經(jīng)驗(yàn),采用插架化可擴(kuò)展架構(gòu)設(shè)計(jì),可方便地進(jìn)行漏洞檢測擴(kuò)充,大大提高了Android應(yīng)用漏洞檢測的先進(jìn)性。同時(shí),本發(fā)明基于靜態(tài)Dalvik虛擬機(jī)模擬指令執(zhí)行,針對關(guān)鍵代碼進(jìn)行動態(tài)模擬來檢測應(yīng)用漏洞,大大提高了漏洞檢測的準(zhǔn)確率及覆蓋率。

本發(fā)明結(jié)合了傳統(tǒng)Android應(yīng)用漏洞檢測中靜態(tài)分析與動態(tài)分析的優(yōu)點(diǎn),能夠快速、準(zhǔn)確地檢測出Android應(yīng)用存在的安全漏洞,可以提高Android應(yīng)用安全研究人員的漏洞挖掘效率,同時(shí)也可以為應(yīng)用開發(fā)者提供全面的安全漏洞檢測信息,協(xié)助修補(bǔ)安全漏洞,降低用戶的使用風(fēng)險(xiǎn)。

附圖說明

本發(fā)明將通過例子并參照附圖的方式說明,其中:

圖1為本發(fā)明的原理框圖;

圖2為基于靜態(tài)Dalvik虛擬機(jī)的漏洞檢測流程圖;

圖3為漏洞檢測向量的函數(shù)調(diào)用特征示意圖;

圖4為函數(shù)調(diào)用的另一實(shí)例示意圖。

具體實(shí)施方式

本發(fā)明的原理如圖1所示,首先基于大量Android應(yīng)用安全漏洞經(jīng)驗(yàn)知識提取漏洞檢測向量,每個(gè)漏洞檢測向量包含了漏洞的檢測特征信息,然后根據(jù)漏洞檢測向量及基于靜態(tài)Dalvik虛擬機(jī)的漏洞檢測技術(shù)來檢測Android應(yīng)用的安全漏洞。在進(jìn)行漏洞檢測的時(shí)候,首先將Android應(yīng)用反編為smali代碼,然后采用靜態(tài)模擬Dalvik虛擬機(jī)執(zhí)行來匹配漏洞檢測向量,如果匹配到漏洞檢測向量則表示檢測到安全漏洞。

漏洞檢測向量主要由安全專家基于大量Android應(yīng)用安全漏洞經(jīng)驗(yàn)知識庫進(jìn)行人工總結(jié)、提取,并不斷更新,覆蓋了所有常見的Android應(yīng)用安全漏洞,保證了漏洞檢測向量的全面性和時(shí)效性。漏洞檢測向量主要分為兩類:1.不涉及函數(shù)調(diào)用的一般配置錯(cuò)誤類漏洞;2.涉及一個(gè)或多個(gè)函數(shù)調(diào)用的漏洞。漏洞檢測向量主要包含以下信息:漏洞標(biāo)題、危險(xiǎn)等級;漏洞描述、修復(fù)建議;漏洞特征:漏洞的函數(shù)調(diào)用、參數(shù)設(shè)置、配置信息。

基于靜態(tài)Dalvik虛擬機(jī)的漏洞檢測技術(shù)主要模擬和追蹤Android系統(tǒng)中關(guān)鍵函數(shù)的調(diào)用及函數(shù)參數(shù)的傳遞,在漏洞檢測過程中主要基于Android應(yīng)用反編譯smali代碼及漏洞檢測向量進(jìn)行檢測,主要流程如圖2所示,包括如下步驟:

1、根據(jù)漏洞檢測向量得到關(guān)鍵的漏洞特征,包括函數(shù)調(diào)用圖特征、參數(shù)特征、配置特征等信息;

2、對于不涉及函數(shù)調(diào)用的配置錯(cuò)誤等漏洞檢測向量,可直接根據(jù)反編譯的smali代碼和應(yīng)用配置文件AndroidManifest.xml文件進(jìn)行匹配。對于涉及函數(shù)調(diào)用的漏洞檢測向量,則根據(jù)應(yīng)用反編譯的smali代碼分析出函數(shù)調(diào)用圖;

3、根據(jù)漏洞檢測向量中的函數(shù)調(diào)用圖及函數(shù)簽名特征搜索反編譯得到的函數(shù)調(diào)用圖,匹配相同的函數(shù)調(diào)用圖;

4、針對匹配到的函數(shù)調(diào)用圖,再根據(jù)漏洞檢測向量中的參數(shù)特征信息來匹配是否有相同的函數(shù)調(diào)用參數(shù);

5、如果漏洞檢測向量中的函數(shù)調(diào)用圖特征、函數(shù)簽名特征和函數(shù)參數(shù)特征都能成功匹配,那么表示成功匹配到該漏洞檢測向量,檢測到該漏洞。

漏洞檢測向量的函數(shù)調(diào)用特征一般包含一個(gè)或多個(gè)關(guān)鍵函數(shù)的組合調(diào)用,如圖3所示,該圖表示漏洞向量的函數(shù)調(diào)用圖特征,F(xiàn)unctionA表示任意函數(shù),Android_API_1函數(shù)及Android_API_2函數(shù)表示Android系統(tǒng)提供的API調(diào)用。我們在匹配函數(shù)調(diào)用特征的時(shí)候,首先匹配Android_API_1函數(shù)的調(diào)用,如果找到調(diào)用Android_API_1的函數(shù)FunctionA,則繼續(xù)在FunctionA函數(shù)的代碼中查找是否存在Android_API_2函數(shù)的調(diào)用,如果存在,則表示匹配到該檢測向量的函數(shù)調(diào)用特征。

函數(shù)簽名的匹配使用smali語法的函數(shù)簽名命令方法,如下所示:

methodName(III)Lpackage/name/ObjectName;

methodName標(biāo)識函數(shù)名,括號中表示參數(shù)類型,這里III表示三個(gè)整形參數(shù),Lpackage/name/ObjectName;表示返回值的類型。通過該函數(shù)簽名可以唯一標(biāo)識一個(gè)函數(shù)。

漏洞檢測向量中函數(shù)的參數(shù)特征對于漏洞的檢測非常重要,本發(fā)明通過靜態(tài)Dalvik虛擬機(jī)技術(shù)來模擬函數(shù)參數(shù)的傳遞及設(shè)定。我們首先通過函數(shù)調(diào)用圖特征和函數(shù)簽名特征定位到反編譯的smali代碼塊,假設(shè)函數(shù)調(diào)用如圖4所示:我們假設(shè)該漏洞檢測向量的函數(shù)參數(shù)特征是Android_API_1(ARG1,ARG2),即第一個(gè)函數(shù)參數(shù)值為ARG1,第二個(gè)參數(shù)值為ARG2。為了檢測是否匹配該漏洞向量,我們必須檢測已經(jīng)匹配到的函數(shù)調(diào)用是否有相同的參數(shù)設(shè)定,步驟如下:

1、首先記錄Android_API_1在FunctionA函數(shù)代碼塊中的位置P1,并得到Android_API_1函數(shù)調(diào)用時(shí)所用到的寄存器,假設(shè)為v0、v1;

2、取出FunctionA從函數(shù)開始到P1之間的所有smali指令;

3、模擬執(zhí)行取出的每條指令,模擬過程中維護(hù)寄存器表,針對每條指令執(zhí)行寄存器表操作,主要是設(shè)置及清除操作,不執(zhí)行其他具體的行為;

4、執(zhí)行完取出的所有指令后,得到寄存器表中v0、v1寄存器的值,如果v0的值為ARG1,v1的值為ARG2,則可以判定匹配到漏洞檢測向量的函數(shù)參數(shù)特征。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1