專利名稱:一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種移動互聯(lián)網(wǎng)應(yīng)用技術(shù),尤其涉及一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法。
背景技術(shù):
隨著移動互聯(lián)網(wǎng)終端的普及應(yīng)用,移動互聯(lián)網(wǎng)業(yè)務(wù)得到了前所未有的快速發(fā)展,相關(guān)的移動業(yè)務(wù)應(yīng)用軟件也被越來越多的個人或企業(yè)用于處理各種私密信息、敏感信息和高價值信息,例如個人隱私、商務(wù)談判信息等,這使得移動業(yè)務(wù)應(yīng)用軟件日益成為企圖獲取這些信息的攻擊者的攻擊目標(biāo)。軟件代碼編寫階段引入的安全漏洞是最常見的安全漏洞,如何設(shè)計一種有效的代碼安全測試方法,以檢測存在于源代碼中的潛在威脅是非常有必要的,且迫切的?!?br>
軟件代碼的漏洞主要通過靜態(tài)方法和動態(tài)方法進(jìn)行檢測。雖然動態(tài)方法對代碼的規(guī)模沒有限制,可以對大型程序進(jìn)行檢測,但不足之處是檢測的效果嚴(yán)重依賴輸入方法,只有當(dāng)特定的輸入使代碼執(zhí)行到危險點時,漏洞才會被發(fā)現(xiàn),所以這種方法漏報率較高?;诩s束分析和模型檢驗的代碼安全漏洞檢測方法(申請?zhí)?00910086938. 9)提出一種約束分析的模型檢測的方法對緩沖區(qū)溢出漏洞進(jìn)行驗證,通過謂詞公理系統(tǒng)進(jìn)行模型求解,判斷和分析安全漏洞以及引發(fā)路徑,可以一定程度上地降低漏報率,但這是以犧牲大量計算資源為代價的,另外,該方法沒有考慮到移動應(yīng)用業(yè)務(wù)更加靈活、接入方式多樣化等特點,很難直接應(yīng)用到移動應(yīng)用軟件中。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于提供了一種可以掃描出300多種漏洞,實現(xiàn)了代碼的低漏報率的測試方法。為解決上述技術(shù)問題,本發(fā)明通過以下方案來實現(xiàn)一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,所述方法主要針對移動應(yīng)用軟件的代碼安全需求,給出了代碼解析模塊、數(shù)據(jù)流分析模塊、控制流分析模塊、結(jié)構(gòu)分析模塊和安全分析模塊等功能模塊構(gòu)成的測試系統(tǒng),所述測試系統(tǒng)包括代碼解析器、代碼分析引擎、報告生成器以及安全規(guī)則模塊、用戶接口模塊組成,各模塊主要功能如下所述代碼解析器與代碼分析引擎連接,是負(fù)責(zé)對源程序進(jìn)行詞法語法分析,并轉(zhuǎn)換成中間表示,并根據(jù)后續(xù)分析模塊的需要,生成特定的語法樹結(jié)構(gòu);所述代碼分析引擎包括數(shù)據(jù)流分析器、控制流分析器、結(jié)構(gòu)分析器、安全分析器;所述報告生成器是對代碼分析的結(jié)果進(jìn)行分析并提交給用戶,并生成相應(yīng)的審核 艮告;所述安全規(guī)則模塊負(fù)責(zé)為代碼分析引擎提供代碼分析規(guī)則支持;所述用戶接口模塊負(fù)責(zé)與用戶進(jìn)行交互,一方面可以接受用戶掃描源代碼的請求,另一方面則將掃描分析的結(jié)果輸出給用戶。
所述數(shù)據(jù)流分析器是在代碼解析的基礎(chǔ)上,提取程序的數(shù)據(jù)流信息。所述控制流分析器主要是在代碼解析的基礎(chǔ)上,提取程序的控制流信息,控制流分析器根據(jù)規(guī)則,通過遍歷AST (抽象語法樹),生成對應(yīng)的程序控制依賴圖,并向安全分析調(diào)度模塊提供接口以讀取信息。所述結(jié)構(gòu)分析器的目標(biāo)是在代碼分析引擎提取出的語法樹的基礎(chǔ)上,根據(jù)安全規(guī)則模塊提供的代碼分析規(guī)則,提取程序的主要結(jié)構(gòu)。
所述安全分析器根據(jù)安全規(guī)則模塊提供的信息,調(diào)度結(jié)構(gòu)分析器進(jìn)行安全性分析,并生成報告表,提供接口供報告生成器調(diào)用。本發(fā)明的優(yōu)點是本發(fā)明給出了一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,主要針對移動應(yīng)用軟件的代碼安全需求,給出了代碼解析、數(shù)據(jù)流分析、控制流分析、結(jié)構(gòu)分析和安全分析等功能模塊,支持 Android、^Windows MobiIePhone、Symbian、HP-UX llvl、IBM AIX 5. 2、Linux Red Hat ES4/5、Linux FedoraCore 7、Linux Novelle SUSE 10、SunSolaris8/9/10等操作系統(tǒng),可以掃描出300多種漏洞,實現(xiàn)了代碼的低漏報率測試。
以下結(jié)合附圖對本發(fā)明作詳細(xì)說明。圖I為本發(fā)明系統(tǒng)架構(gòu)設(shè)計示意圖;圖2為本發(fā)明代碼解析器功能實現(xiàn)流程圖;圖3為本發(fā)明數(shù)據(jù)流分析器功能實現(xiàn)流程圖;圖4為本發(fā)明結(jié)構(gòu)分析器功能實現(xiàn)流程圖;圖5為本發(fā)明安全分析器功能實現(xiàn)流程圖;圖6為本發(fā)明系統(tǒng)處理流程圖。
圖7為本發(fā)明Main方法的控制流程示意 圖8為本發(fā)明label語法結(jié)構(gòu)示意 圖 9 為本發(fā)明 break, continue, return, goto, exit ()和 abort ()語法結(jié)構(gòu)不意圖;
圖10為本發(fā)明if語法結(jié)構(gòu)示意 圖11為本發(fā)明switch-case語法結(jié)構(gòu)示意 圖12為本發(fā)明while循環(huán)語法結(jié)構(gòu)示意 圖13為本發(fā)明for語法結(jié)構(gòu)示意 圖14為本發(fā)明do-while循環(huán)語法結(jié)構(gòu)示意 圖15為本發(fā)明虛分支結(jié)構(gòu)示意圖。
具體實施例方式如圖I所示,一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,所述方法主要針對移動應(yīng)用軟件的代碼安全需求,給出了代碼解析模塊、數(shù)據(jù)流分析模塊、控制流分析模塊、結(jié)構(gòu)分析模塊和安全分析模塊等功能模塊構(gòu)成的測試系統(tǒng),所述測試系統(tǒng)包括代碼解析器
I、代碼分析引擎2、報告生成器3以及安全規(guī)則模塊4、用戶接口模塊5組成,各模塊主要功能如下I)、代碼解析器I是負(fù)責(zé)對源程序進(jìn)行詞法語法分析,并轉(zhuǎn)換成中間表示,并根據(jù)后續(xù)分析模塊的需要,生成特定的語法樹結(jié)構(gòu),為后繼分析提供便利,數(shù)據(jù)流分析器21是在代碼解析器I的基礎(chǔ)上,提取程序的數(shù)據(jù)流信息。其實現(xiàn)流程如圖2所示,源代碼經(jīng)分析調(diào)度、詞法分析、語法分析等預(yù)處理,連接若干處理線程,詞法分析帶有AST緩沖池。2)、所述代碼分析引擎2包括數(shù)據(jù)流分析器21、控制流分析器22、結(jié)構(gòu)分析器23、安全分析器24,如圖3所示數(shù)據(jù)流分析器21功能實現(xiàn)流程圖,數(shù)據(jù)流分析器21通過遍歷AST (抽象語法樹),提取出需要的數(shù)據(jù)信息,并根據(jù)用戶規(guī)則,對這些信息進(jìn)行刷選,并向程序分析模塊提供接口以讀取這些信息,其實現(xiàn)原理為假設(shè)變量X的定值是一個語句,它賦值或可能賦值給X。最普通的定值是對X的賦值或讀值到X的語句。這些語句真正對X定值,稱為X的無二義定植。還有一些語句,它們可能對X定值,稱為二義定植。稱a定值d到達(dá)程序點P,若存在路徑從緊跟d的點到達(dá)P,且在這條路徑上d沒·有被注銷。如果沿著這條路徑的某兩點間是讀a或?qū)的賦值,那么我們注銷變量a的那個定值。直觀上,如果某個變量a的定值d到達(dá)點P,那么P引用a的最新定值可能在d點。只有a的無二義定值注銷a的其它定值。這樣,一個點可以由一條路徑上的無二義定值和同一個變量出現(xiàn)在無二義定值之后的二義定值到達(dá)??刂屏鞣治銎?2主要是在代碼解析器I的基礎(chǔ)上,提取程序的控制流信息??刂屏鞣治銎?2根據(jù)規(guī)則,通過遍歷AST (抽象語法樹),生成對應(yīng)的程序控制依賴圖,并向安全分析調(diào)度模塊提供接口以讀取這些信息??刂屏鞣治銎?2的實現(xiàn)如下程序的控制流程圖是由上述節(jié)點和分支組成的,對程序控制流程的一種抽象的圖形表示。以上Main方法的控制流程圖可以表示為如圖7所示的圖形??刂屏鞒虉D中的分支數(shù)就是圖中所有分支數(shù)之和。實際上,分支數(shù)也等于所有節(jié)點的“流出”分支數(shù)之和。因此,一種簡便的分支數(shù)計算方法是計算程序中每個節(jié)點的“流出”分支數(shù)之和。下表給出每種語法及其對應(yīng)的分支點的“流出”分支數(shù)的計算方法。
mm具體說明圖形表示
label語法結(jié)每個label語句有一個-hnmR
構(gòu)匯聚點,引出I個分支___
權(quán)利要求
1.一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,其特征在于所述方法主要針對移動應(yīng)用軟件的代碼安全需求,給出了代碼解析模塊、數(shù)據(jù)流分析模塊、控制流分析模塊、結(jié)構(gòu)分析模塊和安全分析模塊等功能模塊構(gòu)成的測試系統(tǒng),所述測試系統(tǒng)包括代碼解析器(I)、代碼分析引擎(2)、報告生成器(3)以及安全規(guī)則模塊(4)、用戶接口模塊(5)組成,各模塊主要功能如下 所述代碼解析器(I)與代碼分析引擎(2)連接,是負(fù)責(zé)對源程序進(jìn)行詞法語法分析,并轉(zhuǎn)換成中間表示,并根據(jù)后續(xù)分析模塊的需要,生成特定的語法樹結(jié)構(gòu); 所述代碼分析引擎(2)包括數(shù)據(jù)流分析器(21)、控制流分析器(22)、結(jié)構(gòu)分析器(23)、安全分析器(24); 所述報告生成器(3)是對代碼分析的結(jié)果進(jìn)行分析并提交給用戶,并生成相應(yīng)的審核 艮告; 所述安全規(guī)則模塊(4)負(fù)責(zé)為代碼分析引擎(2)提供代碼分析規(guī)則支持; 所述用戶接口模塊(5)負(fù)責(zé)與用戶進(jìn)行交互,一方面可以接受用戶掃描源代碼的請求,另一方面則將掃描分析的結(jié)果輸出給用戶。
2.按照權(quán)利要求I所述的一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,其特征在于所述數(shù)據(jù)流分析器(21)是在代碼解析的基礎(chǔ)上,提取程序的數(shù)據(jù)流信息。
3.按照權(quán)利要求I所述的一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,其特征在于所述控制流分析器(22)主要是在代碼解析的基礎(chǔ)上,提取程序的控制流信息,控制流分析器(22)根據(jù)規(guī)則,通過遍歷AST(抽象語法樹),生成對應(yīng)的程序控制依賴圖,并向安全分析調(diào)度模塊提供接口以讀取信息。
4.按照權(quán)利要求I所述的一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,其特征在于所述結(jié)構(gòu)分析器(23)的目標(biāo)是在代碼分析引擎(2)提取出的語法樹的基礎(chǔ)上,根據(jù)安全規(guī)則模塊(4)提供的代碼分析規(guī)則,提取程序的主要結(jié)構(gòu)。
5.按照權(quán)利要求I所述的一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,其特征在于所述安全分析器(24)根據(jù)安全規(guī)則模塊(4)提供的信息,調(diào)度結(jié)構(gòu)分析器(23)進(jìn)行安全性分析,并生成報告表,提供接口供報告生成器(3)調(diào)用。
全文摘要
本發(fā)明公開了一種用于移動互聯(lián)網(wǎng)應(yīng)用的代碼安全測試方法,所述方法主要針對移動應(yīng)用軟件的代碼安全需求,給出了代碼解析模塊、數(shù)據(jù)流分析模塊、控制流分析模塊、結(jié)構(gòu)分析模塊和安全分析模塊等功能模塊構(gòu)成的測試系統(tǒng),支持Android、、Windows Mobile Phone、Symbian、HP-UX 11v1、IBM AIX 5.2、Linux Red Hat ES4/5、Linux Fedora Core 7、Linux Novelle SUSE 10、Sun Solaris8/9/10等操作系統(tǒng),可以掃描出300多種漏洞,實現(xiàn)了代碼的低漏報率測試。
文檔編號G06F11/36GK102945203SQ201210421258
公開日2013年2月27日 申請日期2012年10月26日 優(yōu)先權(quán)日2012年10月26日
發(fā)明者羅時龍, 覃志武, 薛亞, 沈晨, 胡建光, 李軍, 殷杰, 包先雨, 方凱彬 申請人:深圳出入境檢驗檢疫局信息中心, 深圳市檢驗檢疫科學(xué)研究院