一種Android程序漏洞檢測(cè)方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種計(jì)算機(jī)技術(shù),特別是涉及一種Android程序漏洞檢測(cè)方法及系 統(tǒng)。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)和智能移動(dòng)終端在人們生活中的日益普及,移動(dòng)安全問(wèn)題和安全隱患 也隨之愈來(lái)愈嚴(yán)重。目前在移動(dòng)終端上植入惡意代碼進(jìn)行網(wǎng)絡(luò)犯罪的事件呈增長(zhǎng)趨勢(shì),移 動(dòng)終端的用戶正在面臨前所未有的安全風(fēng)險(xiǎn)。尤其是Android系統(tǒng)的智能手機(jī),基于源代 碼的開(kāi)源性,其開(kāi)發(fā)的應(yīng)用程序存在的風(fēng)險(xiǎn)更是備受人們關(guān)注。
[0003] 為了檢測(cè)應(yīng)用程序中所存在的安全隱患,已經(jīng)出現(xiàn)了不少Android程序漏洞檢測(cè) 方法,主要是通過(guò)對(duì)Android應(yīng)用程序反編譯后的Dalvik字節(jié)碼進(jìn)行靜態(tài)分析。Android程 序漏洞檢測(cè)方法具體包括:1,采用構(gòu)造控制流圖(CFG,Control Flow Graph)技術(shù),另外結(jié) 合一些靜態(tài)污點(diǎn)分析或數(shù)據(jù)流分析的技術(shù)以提高檢測(cè)的準(zhǔn)確率。檢測(cè)程序通過(guò)對(duì)Android 應(yīng)用程序反編譯后的Dalvik字節(jié)碼建立控制流圖來(lái)確定可能的執(zhí)行路徑,然后采用數(shù)據(jù) 流分析技術(shù)對(duì)以上結(jié)果作進(jìn)一步精簡(jiǎn)得到可能觸發(fā)權(quán)限泄露的路徑集。2,檢測(cè)程序反編 譯后的Java源代碼靜態(tài)分析,從Manifest文件中提取疑似權(quán)限泄露的Android組件列 表,然后從每個(gè)組件對(duì)應(yīng)的Java程序入口開(kāi)始構(gòu)造 CFG,同時(shí)結(jié)合靜態(tài)污點(diǎn)分析技術(shù),定位 導(dǎo)致權(quán)限泄露的系統(tǒng)調(diào)用點(diǎn)。3,通過(guò)Android應(yīng)用中的隱私泄露與數(shù)據(jù)污染漏洞,對(duì)反編 譯后的Java源代碼進(jìn)行靜態(tài)分析,生成函數(shù)調(diào)用圖和程序控制流圖,SQLite數(shù)據(jù)庫(kù)操作 函數(shù)的程序執(zhí)行流,確定出存在漏洞的應(yīng)用。4,通過(guò)分析待檢測(cè)Android應(yīng)用的Content Provider接口特征,判斷其是否可能存在隱私泄露漏洞;如果可能存在,針對(duì)可能存在隱 私泄露漏洞的待檢測(cè)Android應(yīng)用,通過(guò)對(duì)Android系統(tǒng)中相關(guān)API函數(shù)的監(jiān)控,對(duì)待檢測(cè) Android應(yīng)用的公開(kāi)可訪問(wèn)URI進(jìn)行SQL注入漏洞測(cè)試和路徑遍歷漏洞測(cè)試,檢測(cè)被動(dòng)數(shù)據(jù) 泄露安全風(fēng)險(xiǎn)。這些方法都是在應(yīng)用程序編譯后的靜態(tài)檢測(cè)方法,而對(duì)于編寫(xiě)的Android 應(yīng)用程序,其中的漏洞在該程序編譯前就存在了。如果能在編譯前就檢測(cè)到這些漏洞,不僅 能降低漏洞檢測(cè)的工作量,更快的發(fā)現(xiàn)并消除漏洞,而且也避免了現(xiàn)有的漏洞檢測(cè)方法對(duì) Java反編譯工具準(zhǔn)確和完整性的依賴。
[0004] 鑒于此,如何找到一種不依賴于Java反編譯工具的Android程序檢測(cè)漏洞的方法 及系統(tǒng)就成為了本領(lǐng)域技術(shù)人員亟待解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0005] 鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種Android程序漏洞檢 測(cè)方法及系統(tǒng),用于解決現(xiàn)有技術(shù)中Android程序檢測(cè)漏洞方法通常需依賴于Java反編譯 工具的的問(wèn)題。
[0006] 為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種Android程序漏洞檢測(cè)方法, 所述Android程序漏洞檢測(cè)方法包括:對(duì)Android程序的AndroidManifest. xml進(jìn)行解析, 確定所述Android程序的組件構(gòu)成以及繼承類(lèi)關(guān)系;對(duì)所述繼承類(lèi)進(jìn)行檢測(cè),當(dāng)檢測(cè)到所 述繼承類(lèi)的接口不符合相應(yīng)的接口編碼規(guī)范,則提醒所述繼承類(lèi)存在類(lèi)接口漏洞。
[0007] 可選地,所述Android程序漏洞檢測(cè)方法還包括:當(dāng)檢測(cè)到所述組件由不安全類(lèi) 構(gòu)成時(shí),提醒所述組件存在類(lèi)安全漏洞。
[0008] 可選地,所述Android程序漏洞檢測(cè)方法還包括:對(duì)所述提醒對(duì)所述組件存在類(lèi) 安全漏洞進(jìn)行處理,所述處理包括:修改所述組件,重新對(duì)所述組件進(jìn)行漏洞檢測(cè)。
[0009] 可選地,所述Android程序漏洞檢測(cè)方法還包括:對(duì)所述提醒所述繼承類(lèi)存在類(lèi) 接口漏洞進(jìn)行處理,所述處理包括:修改所述類(lèi)接口編碼,重新對(duì)所述繼承類(lèi)接口進(jìn)行漏洞 檢測(cè)。
[0010] 可選地,所述接口編碼規(guī)范包括:對(duì)類(lèi)接口成員的可訪問(wèn)性進(jìn)行限制。
[0011] 可選地,所述Android程序漏洞檢測(cè)方法還包括:構(gòu)建相應(yīng)的程序漏洞探測(cè)類(lèi)實(shí) 現(xiàn)對(duì)所述Android程序漏洞檢測(cè)。
[0012] 本發(fā)明提供一種Android程序漏洞檢測(cè)系統(tǒng),應(yīng)用于Android程序開(kāi)發(fā)中, 所述Android程序漏洞檢測(cè)系統(tǒng)包括:程序漏洞探測(cè)模塊,用于獲取Android程序的 AndroidManifest. xml進(jìn)行解析,確定所述Android程序的組件構(gòu)成以及繼承類(lèi)關(guān)系;對(duì)所 述繼承類(lèi)進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述繼承類(lèi)的接口不符合相應(yīng)的接口編碼規(guī)范時(shí),則提醒所 述繼承類(lèi)存在類(lèi)接口漏洞。
[0013] 可選地,所述程序漏洞探測(cè)模塊還用于:對(duì)所述組件進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述組件 由不安全類(lèi)構(gòu)成時(shí),提醒所述組件存在類(lèi)安全漏洞。
[0014] 可選地,所述Android程序漏洞檢測(cè)系統(tǒng)還包括程序漏洞處理模塊,用于對(duì)所述 組件存在類(lèi)安全漏洞進(jìn)行修改。
[0015] 可選地,所述Android程序漏洞檢測(cè)系統(tǒng)還包括程序漏洞處理模塊,用于對(duì)所述 繼承類(lèi)存在類(lèi)接口漏洞進(jìn)行修改。
[0016] 可選地,所述接口編碼規(guī)范包括:對(duì)類(lèi)接口成員的可訪問(wèn)權(quán)限進(jìn)行限制。
[0017] 可選地,所述程序漏洞探測(cè)模塊的功能通過(guò)構(gòu)建相應(yīng)的程序漏洞探測(cè)類(lèi)實(shí)現(xiàn)。
[0018] 如上所述,本發(fā)明的Android程序漏洞檢測(cè)方法及系統(tǒng),具有以下有益效果:在 Android應(yīng)用程序還沒(méi)有生成相應(yīng)的APK程序前及程序還沒(méi)有正式編譯之前,不是針對(duì) java語(yǔ)言本身的安全機(jī)制,而是對(duì)應(yīng)用程序以及源代碼的一種安全規(guī)范集合審查機(jī)制。為 盡早發(fā)現(xiàn)Android應(yīng)用中隱私泄露與數(shù)據(jù)類(lèi)安全漏洞提供了有力支持。在還沒(méi)有編譯的時(shí) 候,也就是應(yīng)用程序還沒(méi)有生成APK的時(shí)候,對(duì)程序員的代碼進(jìn)行深度掃描,發(fā)現(xiàn)程序員編 寫(xiě)程序的不規(guī)范代碼,以及相應(yīng)的權(quán)限機(jī)制進(jìn)行自審查機(jī)制。本發(fā)明的技術(shù)方案不依賴于 Java反編譯工具的準(zhǔn)確性和完整性,同時(shí)也不受Java的多態(tài)這一動(dòng)態(tài)特征的影響。
【附圖說(shuō)明】
[0019] 圖1顯示為本發(fā)明的Android程序漏洞檢測(cè)方法的一實(shí)施例的流程示意圖。
[0020] 圖2顯示為本發(fā)明的Android程序漏洞檢測(cè)方法的一實(shí)施例的流程示意圖。
[0021] 圖3顯示為本發(fā)明的Android程序漏洞檢測(cè)系統(tǒng)的一實(shí)施例的模塊示意圖。
[0022] 元件標(biāo)號(hào)說(shuō)明
[0023] I Android程序漏洞檢測(cè)系統(tǒng)
[0024] 11 程序漏洞探測(cè)模塊
[0025] 12 程序漏洞處理模塊
[0026] Sl ~S2 步驟
【具體實(shí)施方式】
[0027] 以下通過(guò)特定的具體實(shí)例說(shuō)明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說(shuō)明書(shū) 所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過(guò)另外不同的具體實(shí) 施方式加以實(shí)施或應(yīng)用,本說(shuō)明書(shū)中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒(méi)有背離 本發(fā)明的精神下進(jìn)行各種修飾或改變。
[0028] 需要說(shuō)明的是,本實(shí)施例中所提供的圖示僅以示意方式說(shuō)明本發(fā)明的基本構(gòu)想, 遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪 制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可 能更為復(fù)雜。
[0029] 本發(fā)明提供一種Android程序漏洞檢測(cè)方法。在一個(gè)實(shí)施例中,如圖1所示,所述 Android程序漏洞檢測(cè)方法包括:
[0030] 步驟Sl,對(duì)Android程序的AndroidManifest. xml進(jìn)行解析,確定所述Android程 序的組件構(gòu)成以及繼承類(lèi)關(guān)系。在一個(gè)實(shí)施例中,AndroidManifest. xml的組件中有活動(dòng) 組件〈activityX/activity〉,服務(wù)接收器〈receiverX/receiver〉服務(wù)組件〈serviceX/ service〉等,這些組件所包含的類(lèi),代表相應(yīng)的類(lèi),
[0031]
【主權(quán)項(xiàng)】
1. 一種Android程序漏洞檢測(cè)方法,其特征在于,所述Android程序漏洞檢測(cè)方法包 括: 對(duì)Android程序的AndroidManifest. xml進(jìn)行解析,確定所述Android程序的組件構(gòu) 成以及繼承類(lèi)關(guān)系; 對(duì)所述繼承類(lèi)進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述繼承類(lèi)的接口不符合相應(yīng)的接口編碼規(guī)范,則 提醒所述繼承類(lèi)存在類(lèi)接口漏洞。
2.根據(jù)權(quán)利要求1所述的Android程序漏洞檢測(cè)方法,其特征在于:所述Android程 序漏洞檢測(cè)方法還包括:對(duì)所述組件進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述組件由不安全類(lèi)構(gòu)成時(shí),提醒 所述組件存在類(lèi)安全漏洞。
3.根據(jù)權(quán)利要求2所述的Android程序漏洞檢測(cè)方法,其特征在于:所述Android程 序漏洞檢測(cè)方法還包括:對(duì)所述提醒對(duì)所述組件存在類(lèi)安全漏洞進(jìn)行處理,所述處理包括: 修改所述組件,重新對(duì)所述組件進(jìn)行漏洞檢測(cè)。
4.根據(jù)權(quán)利要求1所述的Android程序漏洞檢測(cè)方法,其特征在于:所述Android程 序漏洞檢測(cè)方法還包括:對(duì)所述提醒所述繼承類(lèi)存在類(lèi)接口漏洞進(jìn)行處理,所述處理包括: 修改所述類(lèi)接口編碼,重新對(duì)所述繼承類(lèi)接口進(jìn)行漏洞檢測(cè)。
5.根據(jù)權(quán)利要求1所述的Android程序漏洞檢測(cè)方法,其特征在于:所述接口編碼規(guī) 范包括:對(duì)類(lèi)接口成員的可訪問(wèn)性進(jìn)行限制。
6.根據(jù)權(quán)利要求1所述的Android程序漏洞檢測(cè)方法,其特征在于:所述Android程 序漏洞檢測(cè)方法還包括:構(gòu)建相應(yīng)的程序漏洞探測(cè)類(lèi)實(shí)現(xiàn)對(duì)所述Android程序漏洞檢測(cè)。
7. -種Android程序漏洞檢測(cè)系統(tǒng),其特征在于:應(yīng)用于Android程序開(kāi)發(fā)中,所述 Android程序漏洞檢測(cè)系統(tǒng)包括: 程序漏洞探測(cè)模塊,用于獲取Android程序的AndroidManifest. xml進(jìn)行解析,確定所 述Android程序的組件構(gòu)成以及繼承類(lèi)關(guān)系;對(duì)所述繼承類(lèi)進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述繼承 類(lèi)的接口不符合相應(yīng)的接口編碼規(guī)范,則提醒所述繼承類(lèi)存在類(lèi)接口漏洞。
8.根據(jù)權(quán)利要求7所述的Android程序漏洞檢測(cè)系統(tǒng),其特征在于:所述程序漏洞探 測(cè)模塊還用于:對(duì)所述組件進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述組件由不安全類(lèi)構(gòu)成時(shí),提醒所述組件 存在類(lèi)安全漏洞。
9.根據(jù)權(quán)利要求8所述的Android程序漏洞檢測(cè)系統(tǒng),其特征在于:所述Android程 序漏洞檢測(cè)系統(tǒng)還包括程序漏洞處理模塊,用于對(duì)所述組件存在類(lèi)安全漏洞進(jìn)行修改。
10.根據(jù)權(quán)利要求7所述的Android程序漏洞檢測(cè)系統(tǒng),其特征在于:所述Android程 序漏洞檢測(cè)系統(tǒng)還包括程序漏洞處理模塊,用于對(duì)所述繼承類(lèi)存在類(lèi)接口漏洞進(jìn)行修改。
11.根據(jù)權(quán)利要求7所述的Android程序漏洞檢測(cè)系統(tǒng),其特征在于:所述接口編碼規(guī) 范包括:對(duì)類(lèi)接口成員的可訪問(wèn)權(quán)限進(jìn)行限制。
12.根據(jù)權(quán)利要求7所述的Android程序漏洞檢測(cè)系統(tǒng),其特征在于:所述程序漏洞探 測(cè)模塊的功能通過(guò)構(gòu)建相應(yīng)的程序漏洞探測(cè)類(lèi)實(shí)現(xiàn)。
【專(zhuān)利摘要】本發(fā)明提供一種Android程序漏洞檢測(cè)方法及系統(tǒng)。所述Android程序漏洞檢測(cè)系統(tǒng),應(yīng)用于Android程序開(kāi)發(fā)中,所述Android程序漏洞檢測(cè)系統(tǒng)包括:程序漏洞探測(cè)模塊,用于獲取Android程序的AndroidManifest.xml進(jìn)行解析,確定所述Android程序的組件構(gòu)成以及繼承類(lèi)關(guān)系;對(duì)所述繼承類(lèi)進(jìn)行檢測(cè),當(dāng)檢測(cè)到所述繼承類(lèi)的接口不符合相應(yīng)的接口編碼規(guī)范時(shí),則提醒所述繼承類(lèi)存在類(lèi)接口漏洞。本發(fā)明的Android程序漏洞檢測(cè)方法及系統(tǒng),基于軟件編碼的錯(cuò)誤會(huì)導(dǎo)致系統(tǒng)軟件的安全漏洞為原型出發(fā),構(gòu)建相應(yīng)的程序漏洞檢測(cè)方案,能夠檢測(cè)出由不規(guī)范的編程引起的程序的漏洞。
【IPC分類(lèi)】G06F21-56
【公開(kāi)號(hào)】CN104732146
【申請(qǐng)?zhí)枴緾N201510158271
【發(fā)明人】金果
【申請(qǐng)人】上海斐訊數(shù)據(jù)通信技術(shù)有限公司
【公開(kāi)日】2015年6月24日
【申請(qǐng)日】2015年4月3日