漏洞檢測方法及裝置制造方法
【專利摘要】本發(fā)明公開一種漏洞檢測方法及裝置,該方法包括:接收需進(jìn)行漏洞檢測的源代碼;對接收的源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的變量,得到該變量的初始值;分析獲取的變量的初始值為外部可控輸入時,檢測出源代碼存在漏洞;相較于現(xiàn)有技術(shù)中,過于依賴測試用例的動態(tài)黑盒測試,以及通過審計工具進(jìn)行掃描檢測的靜態(tài)白盒測試,本發(fā)明實(shí)施例具體提高漏洞檢測準(zhǔn)確率的有益效果,降低了對源代碼進(jìn)行檢測時的漏洞誤報率。
【專利說明】漏洞檢測方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)領(lǐng)域,還涉及信息安全技術(shù),尤其涉及一種漏洞檢測方法及裝置。
【背景技術(shù)】
[0002]隨著Web應(yīng)用如社交網(wǎng)站、電子商城、門戶網(wǎng)站、論壇的普及和迅速發(fā)展,Web應(yīng)用的安全問題也備受關(guān)注。由于承載web應(yīng)用的硬件設(shè)備、軟件系統(tǒng)、通信協(xié)議等的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在缺陷,web應(yīng)用在開發(fā)過程中也會不可避免地存在漏洞。
[0003]目前常見的檢測Web漏洞的方法主要是動態(tài)黑盒測試和靜態(tài)白盒掃描;動態(tài)黑盒測試是通過構(gòu)造大量畸形的測試用例,訪問Web頁面,然后判斷返回Web頁面的內(nèi)容;根據(jù)返回的Web頁面中存在的數(shù)據(jù),檢測該Web頁面是否存在漏洞。靜態(tài)白盒掃描是通過深入程序內(nèi)部代碼結(jié)構(gòu),利用PHP (Profess1nal Hypertext Preprocessor,服務(wù)器端編程語言)代碼審計工具并結(jié)合設(shè)定的檢測規(guī)則進(jìn)行檢查。動態(tài)黑盒測試過于依賴測試用例,因此很容易造成漏報;而現(xiàn)有的靜態(tài)白盒通過審計工具進(jìn)行掃描來檢測漏洞的方式,對漏洞的誤報率也很高。
【發(fā)明內(nèi)容】
[0004]鑒于此,有必要提供一種漏洞檢測方法及裝置,以降低對源代碼進(jìn)行漏洞檢測的誤報率。
[0005]本發(fā)明實(shí)施例公開了一種漏洞檢測方法,包括以下步驟:
[0006]接收需進(jìn)行漏洞檢測的源代碼;
[0007]對接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;
[0008]解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值;
[0009]分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞。
[0010]本發(fā)明實(shí)施例還公開一種漏洞檢測裝置,包括:
[0011]代碼接收模塊,用于接收需進(jìn)行漏洞檢測的源代碼;
[0012]漏洞檢測模塊,用于:
[0013]接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值;分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞。
[0014]本發(fā)明實(shí)施例接收需進(jìn)行漏洞檢測的源代碼;對接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值;分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞;相較于現(xiàn)有技術(shù)中,過于依賴測試用例的動態(tài)黑盒測試,以及通過審計工具進(jìn)行掃描檢測的靜態(tài)白盒測試,本發(fā)明實(shí)施例具體提高漏洞檢測準(zhǔn)確率的有益效果,降低了對源代碼進(jìn)行檢測時的漏洞誤報率。
【專利附圖】
【附圖說明】
[0015]圖1是本發(fā)明漏洞檢測方法第一實(shí)施例流程示意圖;
[0016]圖2是本發(fā)明漏洞檢測方法第二實(shí)施例流程示意圖;
[0017]圖3是本發(fā)明漏洞檢測裝置第一實(shí)施例功能模塊示意圖;
[0018]圖4是本發(fā)明漏洞檢測裝置第二實(shí)施例功能模塊示意圖。
[0019]本發(fā)明實(shí)施例目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
【具體實(shí)施方式】
[0020]以下結(jié)合說明書附圖及具體實(shí)施例進(jìn)一步說明本發(fā)明的技術(shù)方案。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0021]圖1是本發(fā)明漏洞檢測方法第一實(shí)施例流程示意圖;如圖1所示,本發(fā)明漏洞檢測方法包括以下步驟:
[0022]步驟S01、接收需進(jìn)行漏洞檢測的源代碼;
[0023]漏洞檢測程序接收需進(jìn)行漏洞檢測的源代碼;本實(shí)施例中,漏洞檢測程序接收需進(jìn)行漏洞檢測的源代碼的方式包括但不限于:《eb頁面提交的源代碼,腳本批量提交的源代碼以及由SVN (subvers1n,版本管理)工具定期提交的源代碼。在實(shí)際的應(yīng)用場景中,web頁面提交的源代碼通常是由PHP (Profess1nal Hypertext Preprocessor,超級文本預(yù)處理語言)語言開發(fā)的源代碼。腳本批量提交的源代碼,支持腳本使用CURL的方式提交;其中,QJRL是利用URL (Uniform Resource Locator,統(tǒng)一資源定位符)語法在命令行方式下工作的文件傳輸工具。SVN定期提交是在將SVN項(xiàng)目名稱和路徑存儲在數(shù)據(jù)庫中,每次定期掃描數(shù)據(jù)進(jìn)行漏洞檢測時,漏洞檢測程序從數(shù)據(jù)庫里取SVN項(xiàng)目路徑,進(jìn)行掃描,從而檢測是否存在漏洞。
[0024]步驟S02、對接收的源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;
[0025]漏洞檢測程序通過編譯原理的詞法和語法分析過程,將需檢測的源代碼轉(zhuǎn)成AST(Abstract Syntax Tree,抽象語法樹);在轉(zhuǎn)換的過程中,每個源文件對應(yīng)一個AST文件,該AST文件可以為XML (XExrensible Markup Language,可擴(kuò)展標(biāo)記語言)格式的文件;而每個源文件中的源碼語句將對應(yīng)轉(zhuǎn)換為AST的一個節(jié)點(diǎn)。比如,漏洞檢測程序會將if O {}這一源碼語句轉(zhuǎn)成一個ifStmt的節(jié)點(diǎn);if里面的子語句則對應(yīng)轉(zhuǎn)換到ifStmt下對應(yīng)的子節(jié)點(diǎn);其中,AST中的每個節(jié)點(diǎn)中保存了對應(yīng)的源碼信息,比如行信息等。在詞法和語法的分析過程中,漏洞檢測程序設(shè)置該源代碼的觸發(fā)點(diǎn),即檢測點(diǎn)。
[0026]本實(shí)施例中,對源代碼進(jìn)行詞法、語法分析可以理解為:詞法分析階段是編譯過程的第一個階段,是編譯的基礎(chǔ)。這個階段的任務(wù)是從左到右一個字符一個字符地讀入源程序,即對構(gòu)成源程序的字符流進(jìn)行掃描然后根據(jù)構(gòu)詞規(guī)則識別單詞(也稱單詞符號或符號)。詞法分析程序可以使用Lex等工具自動生成。語法分析則是編譯過程的一個邏輯階段;語法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語法短語,如“程序”、“語句”、“表達(dá)式”等等。語法分析程序判斷源程序在結(jié)構(gòu)上是否正確,源程序的結(jié)構(gòu)由上下文無關(guān)文法描述,語法分析程序可以用YACC (Yet Another Compiler,編譯器編譯器)等工具自動生成。
[0027]步驟S03、解析語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的變量得到該變量的初始值;
[0028]步驟S04、分析獲取的變量的初始值為外部可控輸入時,檢測出源代碼存在漏洞。
[0029]漏洞檢測程序讀取AST信息,解析語法數(shù)信息中配置的各檢測點(diǎn);比如,獲取各檢測點(diǎn)與哪些變量相關(guān),即哪些變量能夠控制該檢測點(diǎn)的行為,然后開始回溯這些變量從哪里來、被其他什么變量所影響等;漏洞檢測程序按照上述規(guī)則一直回溯到該變量的最原始的起頭,即獲取到該變量的初始值。如果發(fā)現(xiàn)變量的初始值為外部可控輸入,即該變量的初始值能夠被使用者控制輸入時,則認(rèn)為存在漏洞。漏洞檢測程序分析獲取的該變量的初始值為外部可控輸入,可以理解為:分析得出該變量的初始值能夠被除了該源代碼合法更改者之外的其他使用控制輸入。比如,在web頁面上輸入用戶名這一操作,設(shè)置的規(guī)則為輸入的用戶名只能為阿拉伯?dāng)?shù)字和英文字母;若能夠被輸入除阿拉伯?dāng)?shù)字和英文字母之外的其他字符作為用戶名,則識別該web頁面存在漏洞。
[0030]本實(shí)施例中,漏洞檢測程序接收需進(jìn)行漏洞檢測的源代碼包括:
[0031]漏洞檢測程序接收到需進(jìn)行漏洞檢測的源代碼后,將接收到的所有源代碼按照預(yù)設(shè)過濾規(guī)則進(jìn)行過濾;該預(yù)設(shè)過濾規(guī)則可以根據(jù)具體檢測的源代碼的類型進(jìn)行設(shè)定,也可以由后臺維護(hù)人員或者檢測人員根據(jù)具體的代碼檢測需求進(jìn)行設(shè)置;比如,設(shè)置該預(yù)設(shè)過濾規(guī)則為,將僅在企業(yè)內(nèi)部使用而不外發(fā)的代碼進(jìn)行過濾;或者,設(shè)置某一類型的代碼不進(jìn)行過濾等;本實(shí)施例對預(yù)設(shè)過濾規(guī)則的具體內(nèi)容不做限定。在具體的應(yīng)用場景中,比如在某企業(yè)內(nèi)部,對于確認(rèn)的內(nèi)部項(xiàng)目,將不進(jìn)行后續(xù)的掃描,直接將內(nèi)部項(xiàng)目所涉及的所有代碼進(jìn)行過濾,提升了代碼的檢測效率,節(jié)省了代碼開發(fā)的處理時間。
[0032]本發(fā)明實(shí)施例接收需進(jìn)行漏洞檢測的源代碼;對接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值;分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞;相較于現(xiàn)有技術(shù)中,過于依賴測試用例的動態(tài)黑盒測試,以及通過審計工具進(jìn)行掃描檢測的靜態(tài)白盒測試,本發(fā)明實(shí)施例具體提高漏洞檢測準(zhǔn)確率的有益效果,降低了對源代碼進(jìn)行檢測時的漏洞誤報率。
[0033]請繼續(xù)參照圖1,如圖1所示,步驟S03中,漏洞檢測程序解析語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量及變量的初始值的過程中,當(dāng)漏洞檢測程序獲取到與某一檢測點(diǎn)相關(guān)聯(lián)的變量后,在回溯該檢測點(diǎn)相關(guān)聯(lián)的變量的初始值的過程中,若存在與預(yù)設(shè)安全規(guī)則匹配的操作,則識別該變量對應(yīng)的檢測點(diǎn)不存在漏洞,并停止回溯即停止繼續(xù)獲取所述變量的初始值的操作。比如,漏洞檢測程序在回溯該檢測點(diǎn)相關(guān)聯(lián)變量的初始值的過程的同時,參考安全API (Applicat1n Programming Interface,應(yīng)用程序接口)過濾規(guī)則,如果回溯過程中檢測到某一中間環(huán)節(jié)有經(jīng)過安全API過濾,則停止回溯,識別該變量對應(yīng)的檢測點(diǎn)不存在漏洞。
[0034]由于本實(shí)施例漏洞檢測程序在回溯檢測點(diǎn)變量的初始值的過程中,識別到存在與預(yù)設(shè)安全規(guī)則匹配的操作,并立刻停止繼續(xù)獲取該變量初始值的操作,因此在提高漏洞檢測準(zhǔn)確率的同時,進(jìn)一步提高了漏洞檢測的效率。
[0035]圖2是本發(fā)明漏洞檢測方法第二實(shí)施例流程示意圖;本實(shí)施例與圖1所述實(shí)施例的區(qū)別是,在步驟S04之后,增加了步驟S05 ;本實(shí)施例僅對步驟S05進(jìn)行具體描述,有關(guān)本發(fā)明漏洞檢測方法所涉及的其他步驟請參照相關(guān)實(shí)施例的具體描述,在此不再贅述。
[0036]基于圖1所述實(shí)施例的具體描述,如圖2所示,本發(fā)明漏洞檢測方法在步驟S04、分析獲取的變量的初始值為外部可控輸入時,檢測出源代碼存在漏洞,之后還包括:
[0037]步驟S05、識別檢測出的存在漏洞的源代碼為誤報時,將誤報為存在漏洞的源代碼進(jìn)行標(biāo)記,得到被標(biāo)記為誤報的漏洞數(shù)據(jù)。
[0038]漏洞檢測程序分析獲取的變量的初始值為外部可控輸入,并檢測出源代碼存在漏洞后,將得到的漏洞數(shù)據(jù)進(jìn)行上報。當(dāng)檢測人員得到上報的漏洞數(shù)據(jù)后,對所有漏洞數(shù)據(jù)進(jìn)行核查,當(dāng)識別檢測出的存在漏洞的源代碼為誤報時,對誤報的漏洞數(shù)據(jù)做出標(biāo)識。漏洞檢測程序響應(yīng)檢測人員的操作,識別檢測人員檢測出的誤報漏洞數(shù)據(jù),并將誤報為存在漏洞的源代碼進(jìn)行標(biāo)記,得到被標(biāo)記為誤報的漏洞數(shù)據(jù)。當(dāng)該漏洞檢測程序接收到需進(jìn)行漏洞檢測的源代碼時,識別該源代碼中是否存在有與預(yù)設(shè)過濾規(guī)則匹配的代碼的同時,識別接收的源代碼中是否存在被標(biāo)記為誤報的漏洞數(shù)據(jù),并將識別出的被標(biāo)記為誤報的漏洞數(shù)據(jù)剔除后,再對剩余的源代碼進(jìn)行漏洞檢測。
[0039]進(jìn)一步地,本實(shí)施例漏洞檢測裝置可以將進(jìn)行漏洞檢測后存在漏洞的源代碼存儲在數(shù)據(jù)庫中,并自行對存在漏洞的源代碼進(jìn)行修復(fù);在修后可對已修復(fù)漏洞后的源代碼再次進(jìn)行漏洞檢測,如此循環(huán),直至該源代碼中不存在漏洞。
[0040]本實(shí)施例中漏洞檢測程序識別需進(jìn)行漏洞檢測的源代碼中是否存在被標(biāo)記為誤報的漏洞數(shù)據(jù),并將識別出的被標(biāo)記為誤報的漏洞數(shù)據(jù)進(jìn)行剔除,同樣達(dá)到了降低漏洞誤報率的有益效果;同時,提高了漏洞檢測的效率。
[0041]基于上述實(shí)施例的具體描述,在具體的應(yīng)用場景中,比如,用戶A在開發(fā)完項(xiàng)目代碼后,想驗(yàn)證項(xiàng)目代碼是否存在安全漏洞,則將代碼提交至漏洞檢測程序,漏洞檢測程序的檢測結(jié)果為發(fā)現(xiàn)有幾個漏洞;則漏洞檢測程序根據(jù)提交代碼測試時登記的負(fù)責(zé)人的信息,將檢測出的漏洞結(jié)果發(fā)給該用戶A。用戶A仔細(xì)對每個漏洞結(jié)果進(jìn)行確認(rèn),對于確定是系統(tǒng)誤報的漏洞結(jié)果,進(jìn)行誤報標(biāo)記,對于確定是漏洞的結(jié)果,可以根據(jù)提供的漏洞修復(fù)方案,對漏洞結(jié)果進(jìn)行修復(fù),修復(fù)完成后,再次將新的代碼提交到至漏洞檢測程序中,則此時漏洞檢測程序檢測出該項(xiàng)目代碼的漏洞結(jié)果變成0,排除了代碼安全隱患。
[0042]又比如,用戶B是負(fù)責(zé)某個部門的項(xiàng)目代碼的質(zhì)檢人員,想了解目前該部門所有項(xiàng)目的項(xiàng)目代碼安全性,則可以根據(jù)該漏洞檢測程序?qū)?yīng)提交方式比如腳本提交方式,根據(jù)提供的腳步模板,編寫簡單的腳本,則漏洞檢測程序便會定期對該部門所有項(xiàng)目的項(xiàng)目代碼進(jìn)行批量提交檢測,對檢測出有漏洞結(jié)果的項(xiàng)目,將結(jié)果推送給相關(guān)開發(fā)負(fù)責(zé)人,開發(fā)負(fù)責(zé)人對漏洞結(jié)果進(jìn)行確認(rèn)和標(biāo)記,并完成修復(fù),下一次定期掃描時,修復(fù)過和標(biāo)記誤報的結(jié)果將不再報出,系統(tǒng)誤報率降低。
[0043]圖3是本發(fā)明漏洞檢測裝置第一實(shí)施例功能模塊示意圖;如圖3所示,本發(fā)明漏洞檢測裝置包括:代碼接收模塊01和漏洞檢測模塊02。
[0044]代碼接收模塊01,用于接收需進(jìn)行漏洞檢測的源代碼;
[0045]代碼接收模塊01接收需進(jìn)行漏洞檢測的源代碼;本實(shí)施例中,代碼接收模塊01接收需進(jìn)行漏洞檢測的源代碼的方式包括但不限于:《eb頁面提交的源代碼,腳本批量提交的源代碼以及由SVN工具定期提交的源代碼。在實(shí)際的應(yīng)用場景中,web頁面提交的源代碼通常是由PHP語言開發(fā)的源代碼。腳本批量提交的源代碼,支持腳本使用CURL的方式提交;其中,CURL是利用URL語法在命令行方式下工作的文件傳輸工具。SVN定期提交是在將SVN項(xiàng)目名稱和路徑存儲在數(shù)據(jù)庫中,每次定期掃描數(shù)據(jù)進(jìn)行漏洞檢測時,漏洞檢測程序從數(shù)據(jù)庫里取SVN項(xiàng)目路徑,進(jìn)行掃描,從而檢測是否存在漏洞。
[0046]漏洞檢測模塊02,用于:接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量及所述變量的初始值;分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞。
[0047]漏洞檢測模塊02通過編譯原理的詞法和語法分析過程,將需檢測的源代碼轉(zhuǎn)成AST ;在轉(zhuǎn)換的過程中,每個源文件對應(yīng)一個AST文件,該AST文件可以為XML格式的文件;而每個源文件中的源碼語句將對應(yīng)轉(zhuǎn)換為AST的一個節(jié)點(diǎn)。比如,漏洞檢測模塊02會將if O {}這一源碼語句轉(zhuǎn)成一個ifStmt的節(jié)點(diǎn);if里面的子語句則對應(yīng)轉(zhuǎn)換到if Stmt下對應(yīng)的子節(jié)點(diǎn);其中,AST中的每個節(jié)點(diǎn)中保存了對應(yīng)的源碼信息,比如行信息等。在詞法和語法的分析過程中,漏洞檢測模塊02設(shè)置該源代碼的觸發(fā)點(diǎn),即檢測點(diǎn)。
[0048]本實(shí)施例中,漏洞檢測模塊02對源代碼進(jìn)行詞法、語法分析可以理解為:詞法分析階段是編譯過程的第一個階段,是編譯的基礎(chǔ)。這個階段的任務(wù)是從左到右一個字符一個字符地讀入源程序,即對構(gòu)成源程序的字符流進(jìn)行掃描然后根據(jù)構(gòu)詞規(guī)則識別單詞(也稱單詞符號或符號)。詞法分析程序可以使用Lex等工具自動生成。語法分析則是編譯過程的一個邏輯階段;語法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語法短語,如“程序”、“語句”、“表達(dá)式”等等。語法分析程序判斷源程序在結(jié)構(gòu)上是否正確,源程序的結(jié)構(gòu)由上下文無關(guān)文法描述,語法分析程序可以用YACCXYet Another Compiler,編譯器編譯器)等工具自動生成。
[0049]漏洞檢測模塊02讀取AST信息,解析語法數(shù)信息中配置的各檢測點(diǎn);比如,漏洞檢測模塊02獲取各檢測點(diǎn)與哪些變量相關(guān),即哪些變量能夠控制該檢測點(diǎn)的行為,然后開始回溯這些變量從哪里來、被其他什么變量所影響等;漏洞檢測模塊02按照上述規(guī)則一直回溯到該變量的最原始的起頭,即獲取到該變量的初始值。如果發(fā)現(xiàn)變量的初始值為外部可控輸入,即該變量的初始值能夠被使用者控制輸入時,漏洞檢測模塊02則認(rèn)為存在漏洞。漏洞檢測模塊02分析獲取的該變量的初始值為外部可控輸入,可以理解為:分析得出該變量的初始值能夠被除了該源代碼合法更改者之外的其他使用控制輸入。比如,在web頁面上輸入用戶名這一操作,設(shè)置的規(guī)則為輸入的用戶名只能為阿拉伯?dāng)?shù)字和英文字母;若能夠被輸入除阿拉伯?dāng)?shù)字和英文字母之外的其他字符作為用戶名,漏洞檢測模塊02則識別該web頁面存在漏洞。
[0050]本實(shí)施例中,代碼接收模塊01接收需進(jìn)行漏洞檢測的源代碼包括:
[0051]代碼接收模塊01接收到需進(jìn)行漏洞檢測的源代碼后,將接收到的所有源代碼按照預(yù)設(shè)過濾規(guī)則進(jìn)行過濾;該預(yù)設(shè)過濾規(guī)則可以根據(jù)具體檢測的源代碼的類型進(jìn)行設(shè)定,也可以由后臺維護(hù)人員或者檢測人員根據(jù)具體的代碼檢測需求進(jìn)行設(shè)置;比如,代碼接收模塊01設(shè)置該預(yù)設(shè)過濾規(guī)則為,將僅在企業(yè)內(nèi)部使用而不外發(fā)的代碼進(jìn)行過濾;或者,代碼接收模塊01設(shè)置某一類型的代碼不進(jìn)行過濾等;本實(shí)施例對預(yù)設(shè)過濾規(guī)則的具體內(nèi)容不做限定。在具體的應(yīng)用場景中,比如在某企業(yè)內(nèi)部,對于確認(rèn)的內(nèi)部項(xiàng)目,將不進(jìn)行后續(xù)的掃描,代碼接收模塊01直接將內(nèi)部項(xiàng)目所涉及的所有代碼進(jìn)行過濾,提升了代碼的檢測效率,節(jié)省了代碼開發(fā)的處理時間。
[0052]本發(fā)明實(shí)施例接收需進(jìn)行漏洞檢測的源代碼;對接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量及所述變量的初始值;分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞;相較于現(xiàn)有技術(shù)中,過于依賴測試用例的動態(tài)黑盒測試,以及通過審計工具進(jìn)行掃描檢測的靜態(tài)白盒測試,本發(fā)明實(shí)施例具體提高漏洞檢測準(zhǔn)確率的有益效果,降低了對源代碼進(jìn)行檢測時的漏洞誤報率。
[0053]請繼續(xù)參照圖3,如圖3所示,漏洞檢測模塊02解析語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量及變量的初始值的過程中,當(dāng)漏洞檢測模塊02獲取到與某一檢測點(diǎn)相關(guān)聯(lián)的變量后,在回溯該檢測點(diǎn)相關(guān)聯(lián)的變量的初始值的過程中,若存在與預(yù)設(shè)安全規(guī)則匹配的操作,則識別該變量對應(yīng)的檢測點(diǎn)不存在漏洞,并停止回溯即停止繼續(xù)獲取所述變量的初始值的操作。比如,漏洞檢測模塊02在回溯該檢測點(diǎn)相關(guān)聯(lián)變量的初始值的過程的同時,參考安全API過濾規(guī)則,如果回溯過程中檢測到某一中間環(huán)節(jié)有經(jīng)過安全API過濾,漏洞檢測模塊02則停止回溯,識別該變量對應(yīng)的檢測點(diǎn)不存在漏洞。
[0054]由于本實(shí)施例漏洞檢測程序在回溯檢測點(diǎn)變量的初始值的過程中,識別到存在與預(yù)設(shè)安全規(guī)則匹配的操作,并立刻停止繼續(xù)獲取該變量初始值的操作,因此在提高漏洞檢測準(zhǔn)確率的同時,進(jìn)一步提高了漏洞檢測的效率。
[0055]圖4是本發(fā)明漏洞檢測裝置第二實(shí)施例功能模塊示意圖;本實(shí)施例與圖3所述實(shí)施例的區(qū)別是,增加了誤報標(biāo)記模塊03。本實(shí)施例僅對誤報標(biāo)記模塊03進(jìn)行具體描述,有關(guān)本發(fā)明漏洞檢測裝置所涉及的其他模塊請參照相關(guān)實(shí)施例的具體描述,在此不再贅述。
[0056]基于圖3所述實(shí)施例的具體描述,如圖4所示,本發(fā)明漏洞檢測裝置還包括誤報標(biāo)記模塊03 ;
[0057]誤報標(biāo)記模塊03用于:識別檢測出的存在漏洞的源代碼為誤報時,將誤報為存在漏洞的所述源代碼進(jìn)行標(biāo)記,得到被標(biāo)記為誤報的漏洞數(shù)據(jù)。
[0058]漏洞檢測模塊02分析獲取的變量的初始值為外部可控輸入,并檢測出源代碼存在漏洞后,將得到的漏洞數(shù)據(jù)進(jìn)行上報。當(dāng)檢測人員得到上報的漏洞數(shù)據(jù)后,對所有漏洞數(shù)據(jù)進(jìn)行核查,當(dāng)識別檢測出的存在漏洞的源代碼為誤報時,對誤報的漏洞數(shù)據(jù)做出標(biāo)識。誤報標(biāo)記模塊03響應(yīng)檢測人員的操作,識別檢測人員檢測出的誤報漏洞數(shù)據(jù),并將誤報為存在漏洞的源代碼進(jìn)行標(biāo)記,得到被標(biāo)記為誤報的漏洞數(shù)據(jù)。當(dāng)代碼接收模塊01接收到需進(jìn)行漏洞檢測的源代碼時,代碼接收模塊01識別該源代碼中是否存在有與預(yù)設(shè)過濾規(guī)則匹配的源代碼的同時,識別接收的源代碼中是否存在被標(biāo)記為誤報的漏洞數(shù)據(jù),并將識別出的被標(biāo)記為誤報的漏洞數(shù)據(jù)剔除后,再對剩余的源代碼進(jìn)行漏洞檢測。
[0059]進(jìn)一步地,本實(shí)施例漏洞檢測裝置可以將進(jìn)行漏洞檢測后存在漏洞的源代碼存儲在數(shù)據(jù)庫中,并自行對存在漏洞的源代碼進(jìn)行修復(fù);在修后可對已修復(fù)漏洞后的源代碼再次進(jìn)行漏洞檢測,如此循環(huán),直至該源代碼中不存在漏洞。
[0060]本實(shí)施例中漏洞檢測程序識別需進(jìn)行漏洞檢測的源代碼中是否存在被標(biāo)記為誤報的漏洞數(shù)據(jù),并將識別出的被標(biāo)記為誤報的漏洞數(shù)據(jù)進(jìn)行剔除,同樣達(dá)到了降低漏洞誤報率的有益效果;同時,提高了漏洞檢測的效率。
[0061]基于上述實(shí)施例的具體描述,在具體的應(yīng)用場景中,比如,用戶A在開發(fā)完項(xiàng)目代碼后,想驗(yàn)證項(xiàng)目代碼是否存在安全漏洞,則將代碼提交至本發(fā)明實(shí)施例所述的漏洞檢測裝置,漏洞檢測裝置的檢測結(jié)果為發(fā)現(xiàn)有幾個漏洞;則漏洞檢測裝置根據(jù)提交代碼測試時登記的負(fù)責(zé)人的信息,將檢測出的漏洞結(jié)果發(fā)給該用戶A。用戶A仔細(xì)對每個漏洞結(jié)果進(jìn)行確認(rèn),對于確定是系統(tǒng)誤報的漏洞結(jié)果,進(jìn)行誤報標(biāo)記,對于確定是漏洞的結(jié)果,可以根據(jù)提供的漏洞修復(fù)方案,對漏洞結(jié)果進(jìn)行修復(fù),修復(fù)完成后,再次將新的代碼提交到至漏洞檢測裝置中,則此時漏洞檢測裝置檢測出該項(xiàng)目代碼的漏洞結(jié)果變成0,排除了代碼安全隱串
■/Q1、O
[0062]又比如,用戶B是負(fù)責(zé)某個部門的項(xiàng)目代碼的質(zhì)檢人員,想了解目前該部門所有項(xiàng)目的項(xiàng)目代碼安全性,則可以根據(jù)該漏洞檢測裝置對應(yīng)提交方式比如腳本提交方式,根據(jù)提供的腳步模板,編寫簡單的腳本,則漏洞檢測裝置便會定期對該部門所有項(xiàng)目的項(xiàng)目代碼進(jìn)行批量提交檢測,對檢測出有漏洞結(jié)果的項(xiàng)目,將結(jié)果推送給相關(guān)開發(fā)負(fù)責(zé)人,開發(fā)負(fù)責(zé)人對漏洞結(jié)果進(jìn)行確認(rèn)和標(biāo)記,并完成修復(fù),下一次定期掃描時,修復(fù)過和標(biāo)記誤報的結(jié)果將不再報出,系統(tǒng)誤報率降低。
[0063]需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
[0064]上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
[0065]通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在圖3或圖4所述漏洞檢測裝置的一個存儲介質(zhì)(如R0M/RAM、磁碟、光盤)中,圖3或圖4所述漏洞檢測裝置包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述的方法。
[0066]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制其專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,直接或間接運(yùn)用在其他相關(guān)的【技術(shù)領(lǐng)域】,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種漏洞檢測方法,其特征在于,包括以下步驟: 接收需進(jìn)行漏洞檢測的源代碼; 對接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息; 解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值; 分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞。
2.如權(quán)利要求1所述的方法,其特征在于,所述分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞,包括: 分析獲取的所述變量的初始值能夠被使用者控制輸入時,檢測出所述變量對應(yīng)的檢測點(diǎn)存在漏洞。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值,包括: 獲取與某一檢測點(diǎn)相關(guān)聯(lián)的變量后,在獲取所述變量的初始值的過程中,若存在與預(yù)設(shè)安全規(guī)則匹配的操作,則識別所述變量對應(yīng)的檢測點(diǎn)不存在漏洞,停止繼續(xù)獲取所述變量的初始值。
4.如權(quán)利要求1或2所述的方法,其特征在于,所述分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞,之后還包括: 識別檢測出的存在漏洞的源代碼為誤報時,將誤報為存在漏洞的所述源代碼進(jìn)行標(biāo)記,得到被標(biāo)記的誤報漏洞數(shù)據(jù)。
5.如權(quán)利要求4所述所述的方法,其特征在于,所述接收需進(jìn)行漏洞檢測的源代碼,包括: 接收已剔除被標(biāo)記的誤報漏洞數(shù)據(jù)后的需進(jìn)行漏洞檢測的源代碼。
6.如權(quán)利要求1或2所述的方法,其特征在于,所述接收需進(jìn)行漏洞檢測的源代碼包括: 接收根據(jù)預(yù)設(shè)過濾規(guī)則過濾后的需進(jìn)行漏洞檢測的源代碼。
7.如權(quán)利要求6所述的方法,其特征在于,所述接收根據(jù)預(yù)設(shè)過濾規(guī)則過濾后的需進(jìn)行漏洞檢測的源代碼,包括: 接收到需進(jìn)行漏洞檢測的源代碼后,按照預(yù)設(shè)過濾規(guī)則對接收到的源代碼進(jìn)行過濾,將符合所述預(yù)設(shè)過濾規(guī)則的源代碼去除,僅保留不符合所述預(yù)設(shè)過濾規(guī)則的源代碼,以對保留的源代碼進(jìn)行后續(xù)的漏洞檢測。
8.如權(quán)利要求1或2所述的方法,其特征在于,所述接收需進(jìn)行漏洞檢測的源代碼包括: 接收web頁面和/或腳本和/或版本管理程序提交的需進(jìn)行漏洞檢測的源代碼。
9.一種漏洞檢測裝置,其特征在于,包括: 代碼接收模塊,用于接收需進(jìn)行漏洞檢測的源代碼; 漏洞檢測模塊,用于: 接收的所述源代碼進(jìn)行詞法語法分析并配置漏洞檢測的檢測點(diǎn),得到對應(yīng)的語法樹信息;解析所述語法樹信息中配置的各檢測點(diǎn),獲取與各檢測點(diǎn)相關(guān)聯(lián)的變量,并通過解析獲取的所述變量得到所述變量的初始值;分析獲取的所述變量的初始值為外部可控輸入時,檢測出所述源代碼存在漏洞。
10.如權(quán)利要求9所述的裝置,其特征在于,所述漏洞檢測模塊用于: 分析獲取的所述變量的初始值能夠被使用者控制輸入時,檢測出所述變量對應(yīng)的檢測點(diǎn)存在漏洞。
11.如權(quán)利要求9或10所述的裝置,其特征在于,所述漏洞檢測模塊還用于: 獲取與某一檢測點(diǎn)相關(guān)聯(lián)的變量后,在獲取所述變量的初始值的過程中,若存在與預(yù)設(shè)安全規(guī)則匹配的操作,則識別所述變量對應(yīng)的檢測點(diǎn)不存在漏洞,停止繼續(xù)獲取所述變量的初始值。
12.如權(quán)利要求9或10所述的裝置,其特征在于,還包括誤報標(biāo)記模塊; 所述誤報標(biāo)記模塊用于:識別檢測出的存在漏洞的源代碼為誤報時,將誤報為存在漏洞的所述源代碼進(jìn)行標(biāo)記,得到被標(biāo)記為誤報的漏洞數(shù)據(jù)。
13.如權(quán)利要求12所述的裝置,其特征在于,所述代碼接收模塊還用于: 接收已剔除被標(biāo)記的誤報漏洞數(shù)據(jù)后的需進(jìn)行漏洞檢測的源代碼。
14.如權(quán)利要求9或10所述的裝置,其特征在于,所述代碼接收模塊還用于: 接收根據(jù)預(yù)設(shè)過濾規(guī)則過濾后的需進(jìn)行漏洞檢測的源代碼。
15.如權(quán)利要求14所述的裝置,其特征在于,所述代碼接收模塊還用于: 接收到需進(jìn)行漏洞檢測的源代碼后,按照預(yù)設(shè)過濾規(guī)則對接收到的源代碼進(jìn)行過濾,將符合所述預(yù)設(shè)過濾規(guī)則的源代碼去除,僅保留不符合所述預(yù)設(shè)過濾規(guī)則的源代碼,以對保留的源代碼進(jìn)行后續(xù)的漏洞檢測。
16.如權(quán)利要求9或10所述的裝置,其特征在于,所述代碼接收模塊還用于: 接收web頁面和/或腳本和/或版本管理程序提交的需進(jìn)行漏洞檢測的源代碼。
【文檔編號】G06F21/57GK104462981SQ201310416757
【公開日】2015年3月25日 申請日期:2013年9月12日 優(yōu)先權(quán)日:2013年9月12日
【發(fā)明者】王培偉, 王金錠, 譚曉光, 陳薇婷, 王岳 申請人:深圳市騰訊計算機(jī)系統(tǒng)有限公司