本申請涉及測試領(lǐng)域,特別涉及一種基于代碼審計(jì)的漏洞挖掘中生成概念驗(yàn)證數(shù)據(jù)的方法及系統(tǒng)。
背景技術(shù):
漏洞挖掘,指的是在軟件代碼編譯完成之后,針對代碼所存在漏洞進(jìn)行發(fā)現(xiàn)的過程。漏洞挖掘有多種方式可以實(shí)現(xiàn),模糊測試(fuzzing)是其中一種常見的方法。模糊測試是一種通過向目標(biāo)程序提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法,通過模糊測試可以生成目標(biāo)程序的概念驗(yàn)證數(shù)據(jù)(poc數(shù)據(jù))。
技術(shù)實(shí)現(xiàn)要素:
但是發(fā)明人在研究過程中發(fā)現(xiàn),現(xiàn)有技術(shù)即便發(fā)現(xiàn)了存在安全漏洞的程序代碼段,也不能有效且快速的構(gòu)造出poc數(shù)據(jù),因?yàn)槎鄶?shù)程序的調(diào)用結(jié)構(gòu)非常復(fù)雜,需要跟隨數(shù)據(jù)的傳遞關(guān)系逐層逆向反推,有些數(shù)據(jù)之間有存在依賴和制約關(guān)系,找出影響這些調(diào)用結(jié)構(gòu)的關(guān)鍵數(shù)據(jù)與初始輸入數(shù)據(jù)之間的關(guān)系,進(jìn)而構(gòu)造出poc數(shù)據(jù)是一個(gè)非常復(fù)雜的事情,因此,構(gòu)造poc數(shù)據(jù)的效率較低。
基于此,本申請?zhí)峁┝嗽诼┒赐诰蛑凶詣由筛拍铗?yàn)證數(shù)據(jù)的方法,用以解決現(xiàn)有技術(shù)中構(gòu)造poc數(shù)據(jù)的效率較低的問題。
本申請還提供了一種生成概念驗(yàn)證數(shù)據(jù)的系統(tǒng),用以保證上述方法在實(shí)際中的實(shí)現(xiàn)及應(yīng)用。
本申請公開了一種生成概念驗(yàn)證數(shù)據(jù)的方法,該方法包括:
根據(jù)目標(biāo)程序的代碼中存在漏洞的漏洞代碼段,獲取所述漏洞代碼段在所述目標(biāo)程序中的調(diào)用路徑;
根據(jù)所述調(diào)用路徑和輸入數(shù)據(jù)對所述目標(biāo)程序進(jìn)行測試;
獲取所述目標(biāo)程序出現(xiàn)異常時(shí)對應(yīng)的輸入數(shù)據(jù),作為所述概念驗(yàn)證數(shù)據(jù)。
本申請公開了一種生成概念驗(yàn)證數(shù)據(jù)的系統(tǒng),包括:
獲取路徑裝置,用于根據(jù)目標(biāo)程序的代碼中存在漏洞的漏洞代碼段,獲取所述漏洞代碼段在所述目標(biāo)程序中的調(diào)用路徑;
測試裝置,用于根據(jù)所述調(diào)用路徑和輸入數(shù)據(jù)對所述目標(biāo)程序進(jìn)行測試;
獲取數(shù)據(jù)裝置,用于獲取所述目標(biāo)程序出現(xiàn)異常時(shí)對應(yīng)的輸入數(shù)據(jù),作為所述概念驗(yàn)證數(shù)據(jù)。
與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點(diǎn):
在本申請實(shí)施例中,通過先確定出漏洞代碼段在目標(biāo)程序中的調(diào)用路徑的方式,可以結(jié)合該調(diào)用路徑涉及的各個(gè)分支路徑,以及隨著目標(biāo)程序運(yùn)行而不斷變異的輸入數(shù)據(jù),來對目標(biāo)程序進(jìn)行模糊測試,從而通過分析目標(biāo)程序異常結(jié)束時(shí)對應(yīng)的輸入數(shù)據(jù),來找出該目標(biāo)程序的漏洞代碼段的概念驗(yàn)證數(shù)據(jù)。因此,本申請實(shí)施例因?yàn)轭A(yù)先確定出了漏洞代碼段,并且可以在目標(biāo)程序自動運(yùn)行的過程中通過判斷是否觸發(fā)了漏洞代碼段在目標(biāo)程序中的調(diào)用路徑而確定出poc數(shù)據(jù),所以本申請實(shí)施例無需人工參與,即可自動生成概念驗(yàn)證數(shù)據(jù),能夠提高生成概念驗(yàn)證數(shù)據(jù)的效率。
當(dāng)然,實(shí)施本申請的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
為了更清楚地說明本申請實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請的生成概念驗(yàn)證數(shù)據(jù)的方法實(shí)施例的流程圖;
圖2是本申請?jiān)趯?shí)際應(yīng)用中的功能模塊的架構(gòu)圖;
圖3是本申請的生成概念驗(yàn)證數(shù)據(jù)的系統(tǒng)實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。
定義:
poc(proofofconcept,概念驗(yàn)證):可以是對某些想法的一個(gè)不完整的實(shí)現(xiàn),以證明其可行性,示范其原理,其目的是為了驗(yàn)證一些概念或理論。在計(jì)算機(jī)安全術(shù)語中,概念驗(yàn)證經(jīng)常被用來作為exploit的別名。(通常指并沒有充分利用這個(gè)漏洞的exploit)。
poc數(shù)據(jù):可以是一種能夠觸發(fā)或?qū)е鲁绦虺霈F(xiàn)異常的輸入數(shù)據(jù)或流程,用以證明目標(biāo)程序存在某種缺陷或安全問題。
cfg(controlflowgraph,程序控制流程圖),可以包含一個(gè)程序所有可能的分支結(jié)構(gòu)。
代碼審計(jì):可以通過分析源代碼的方式理解程序邏輯和實(shí)現(xiàn),從而進(jìn)一步發(fā)現(xiàn)程序的內(nèi)部邏輯或安全問題。
覆蓋率導(dǎo)向的模糊測試原理:覆蓋率導(dǎo)向的fuzz主要是利用實(shí)時(shí)監(jiān)測目標(biāo)程序的運(yùn)行分支覆蓋情況來調(diào)整輸入數(shù)據(jù)的結(jié)構(gòu),從而實(shí)現(xiàn)最大分支覆蓋的fuzz。
漏洞:可以是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問或破壞系統(tǒng)。
漏洞代碼段:可以是通過人工審計(jì)或者漏洞分析工具對程序進(jìn)行分析,而得到的包含漏洞的代碼段。
調(diào)用路徑:可以是漏洞代碼段在其所屬程序中從程序的起始位置到漏洞的cfg,調(diào)用路徑包括了所有的cfg分支路徑。
樣本隊(duì)列:可以是為了存放目標(biāo)程序的輸入數(shù)據(jù)的一個(gè)數(shù)據(jù)隊(duì)列。
參考圖1,示出了本申請一種生成概念驗(yàn)證數(shù)據(jù)的方法實(shí)施例的流程圖,本實(shí)施例可以包括以下步驟:
步驟101:根據(jù)目標(biāo)程序的代碼中存在漏洞的漏洞代碼段,獲取所述漏洞代碼段在所述目標(biāo)程序中的調(diào)用路徑。
在本實(shí)施例中,對于一個(gè)存在漏洞需要進(jìn)行漏洞發(fā)掘的目標(biāo)程序,從該目標(biāo)程序的代碼中確定出存在漏洞的漏洞代碼段,進(jìn)而針對該漏洞代碼段獲取到漏洞代碼段中存在漏洞的代碼在目標(biāo)程序中的調(diào)用路徑。其中,該調(diào)用路徑可以是cfg分支路徑,該cfg分支路徑以函數(shù)名或類名為最小單位均可。本步驟可以通過人工代碼審計(jì)的方式實(shí)現(xiàn),或采用自動化代碼分析工具實(shí)現(xiàn)。
步驟102:根據(jù)所述調(diào)用路徑和輸入數(shù)據(jù)對所述目標(biāo)程序進(jìn)行測試。
在本步驟中,具體可以將輸入數(shù)據(jù)作為所述目標(biāo)程序的輸入,根據(jù)所述目標(biāo)程序在運(yùn)行過程中是否觸發(fā)了所述調(diào)用路徑對所述目標(biāo)程序進(jìn)行測試。具體實(shí)現(xiàn)時(shí),可以為目標(biāo)程序生成一個(gè)初始輸入數(shù)據(jù),該初始輸入數(shù)據(jù)可以作為目標(biāo)程序的輸入數(shù)據(jù)而觸發(fā)目標(biāo)程序運(yùn)行,以便在目標(biāo)程序運(yùn)行過程中判斷是否觸發(fā)了調(diào)用路徑,從而實(shí)現(xiàn)對目標(biāo)程序的模糊測試(fuzz)。其中,該初始輸入數(shù)據(jù)保存時(shí)可以存放在一個(gè)樣本隊(duì)列中。具體實(shí)現(xiàn)時(shí),可以結(jié)合調(diào)用路徑的各個(gè)分支路徑,將輸入數(shù)據(jù)作為目標(biāo)程序的輸入觸發(fā)目標(biāo)程序運(yùn)行,從而在運(yùn)行過程中獲取到能夠?qū)е履繕?biāo)程序異常結(jié)束的當(dāng)前輸入數(shù)據(jù),就是本實(shí)施例中目標(biāo)程序的漏洞代碼段的poc數(shù)據(jù)。
具體的,本步驟的實(shí)現(xiàn)可以包括步驟a1~步驟a5:
步驟a1:確定樣本隊(duì)列中能被目標(biāo)程序接收作為輸入的初始輸入數(shù)據(jù)。
首先為目標(biāo)程序確定一個(gè)能夠作為其輸入而接收的初始輸入數(shù)據(jù),該初始輸入數(shù)據(jù)存儲在樣本隊(duì)列中。其中,該初始輸入數(shù)據(jù)的形式和內(nèi)容均不限定,只要能被目標(biāo)程序接收作為輸入數(shù)據(jù)的任何形式和內(nèi)容的初始輸入數(shù)據(jù),都能實(shí)現(xiàn)本申請實(shí)施例。
步驟a2:對該初始輸入數(shù)據(jù)進(jìn)行變異,得到變異輸入數(shù)據(jù)。
對該初始輸入數(shù)據(jù)進(jìn)行隨機(jī)變異,得到第一次隨機(jī)變異后的變異輸入數(shù)據(jù)。本步驟中對初始輸入數(shù)據(jù)的任意變異方式均可,只要變異后的輸入數(shù)據(jù)與變異前的輸入數(shù)據(jù)不同即可。因此,本申請實(shí)施例中不對變異的具體方式做限定。
具體的,在對初始輸入數(shù)據(jù)進(jìn)行變異時(shí),也可以參考目標(biāo)程序的實(shí)現(xiàn)功能或性能參數(shù)進(jìn)行有針對性的變異。例如,假設(shè)目標(biāo)程序是實(shí)現(xiàn)mp3的播放的,或者目標(biāo)程序是mp3播放器,則可以優(yōu)先設(shè)置初始輸入數(shù)據(jù)為一個(gè)mp3文件,并且朝著mp3文件相應(yīng)的方向變異輸入數(shù)據(jù)。
步驟a3:將所述變異輸入數(shù)據(jù)作為所述目標(biāo)程序的輸入,觸發(fā)所述目標(biāo)程序的運(yùn)行。
將步驟a2中變異得到的變異輸入數(shù)據(jù)作為目標(biāo)程序的輸入,觸發(fā)目標(biāo)程序開始運(yùn)行。
步驟a4:在所述目標(biāo)程序的運(yùn)行過程中判斷是否觸發(fā)了所述調(diào)用路徑,如果是,則返回步驟a2繼續(xù)變異,直至所述目標(biāo)程序的運(yùn)行出現(xiàn)異常;如果否,則進(jìn)入步驟a5。
在本步驟中,如果判斷得到目標(biāo)程序的運(yùn)行路徑觸發(fā)了調(diào)用路徑,則返回步驟a2對第一次變異得到的變異輸入數(shù)據(jù)繼續(xù)變異,從而繼續(xù)觸發(fā)目標(biāo)程序的運(yùn)行,直至目標(biāo)程序出現(xiàn)異常而結(jié)束運(yùn)行。
具體的,步驟a4可以包括步驟b1~步驟b2:
步驟b1:確定所述調(diào)用路徑涉及的各個(gè)分支路徑。
具體的,在判斷目標(biāo)程序的運(yùn)行是否觸發(fā)了調(diào)用路徑的時(shí)候,可以首先確定出調(diào)用路徑涉及的各個(gè)cfg分支路徑。
步驟b2:判斷所述目標(biāo)程序的運(yùn)行路徑是否與任意一個(gè)所述分支路徑相匹配。
然后結(jié)合目標(biāo)程序的運(yùn)行路徑,來判斷該運(yùn)行路徑是否與任意一個(gè)步驟b1得到的分支路徑相匹配。例如,假設(shè)某一個(gè)分支路徑是“執(zhí)行第1、2和5行程序代碼”,而本步驟中目標(biāo)程序的運(yùn)行路徑為“執(zhí)行第1、2和5行程序代碼”,即,目標(biāo)程序的運(yùn)行路徑和分支路徑完全相同,則可以認(rèn)為相匹配?;蛘?,假設(shè)某一個(gè)分支路徑是“執(zhí)行第1、2和5行程序代碼”,而本步驟中目標(biāo)程序的運(yùn)行路徑為“執(zhí)行第1、2和3行程序代碼”,即,目標(biāo)程序的運(yùn)行路徑和分支路徑部分相同,也可以認(rèn)為相匹配。具體的實(shí)施過程可以由本領(lǐng)域技術(shù)人員自主設(shè)置。
步驟a5:從樣本隊(duì)列中刪除所述初始輸入數(shù)據(jù),并執(zhí)行確定樣本隊(duì)列中的初始輸入數(shù)據(jù)的步驟。
如果第一次變異后的變異輸入數(shù)據(jù)沒有觸發(fā)任何調(diào)用路徑,則可以從樣本隊(duì)列中刪除該初始輸入數(shù)據(jù),并返回步驟a1,繼續(xù)在樣本隊(duì)列中生成新的初始輸入數(shù)據(jù)進(jìn)行模糊測試。
接著進(jìn)入步驟103:獲取所述目標(biāo)程序出現(xiàn)異常時(shí)對應(yīng)的輸入數(shù)據(jù),作為所述概念驗(yàn)證數(shù)據(jù)。
在步驟102進(jìn)行測試的過程中,當(dāng)目標(biāo)程序出現(xiàn)異常而結(jié)束運(yùn)行的時(shí)候,獲取到該目標(biāo)程序?qū)?yīng)的輸入數(shù)據(jù),即對應(yīng)的初始輸入數(shù)據(jù)或者變異輸入數(shù)據(jù),作為概念驗(yàn)證數(shù)據(jù)的內(nèi)容。
參考圖2所示,為本實(shí)施例在實(shí)際應(yīng)用中的功能模塊的架構(gòu)圖。其中,具體實(shí)現(xiàn)時(shí),可以根據(jù)步驟101中確定的調(diào)用路徑來配置覆蓋率監(jiān)測裝置201,具體在配置時(shí)只關(guān)注步驟101中所得的調(diào)用路徑上的覆蓋情況即可,然后再使用模糊測試fuzz裝置202配合配置好的覆蓋率監(jiān)測裝置201來觸發(fā)目標(biāo)程序203的運(yùn)行,從而獲取到能夠?qū)е履繕?biāo)程序異常結(jié)束的輸入數(shù)據(jù),就是本實(shí)施例中目標(biāo)程序的漏洞代碼段的poc數(shù)據(jù)。
具體的,為了方便本領(lǐng)域技術(shù)人員對配置覆蓋檢測裝置201有一個(gè)詳細(xì)的了解,下面以通過clang工具配置覆蓋率監(jiān)測裝置為例進(jìn)行說明。
假設(shè)在步驟101中已經(jīng)通過某個(gè)代碼分析工具確定可能存在安全漏洞的代碼段位于函數(shù)vuln()中,則通過人工審計(jì)分析或者一些已有的靜態(tài)代碼分析工具可以確定該vuln函數(shù)所有可能的調(diào)用路徑。為便于說明,假設(shè)該vuln函數(shù)只有一條調(diào)用路徑,且調(diào)用路徑為:
main()->start()->read()->parsesomething()->allocstruct()->vuln()
該調(diào)用路徑的最小單位是函數(shù)(例如,“main”,“start”等),調(diào)用路徑表示了從目標(biāo)程序的執(zhí)行入口(即main函數(shù))到運(yùn)行到存在漏洞的函數(shù)vuln的函數(shù)調(diào)用順序。
根據(jù)該調(diào)用路徑,利用clang工具向覆蓋率監(jiān)測裝置插入覆蓋率監(jiān)測功能的代碼。其中,clang插件偽代碼如下所示:
因?yàn)閏lang工具是一個(gè)編譯器,因此可以為它編寫插件來讓clang工具有選擇的在編譯目標(biāo)程序的過程中插入覆蓋率監(jiān)測代碼。上述偽代碼的含義為:在編譯過程中循環(huán)遍歷每個(gè)函數(shù),通過判斷當(dāng)前函數(shù)名是否包含于預(yù)設(shè)的調(diào)用路徑之中,來控制是否插入覆蓋率監(jiān)測的代碼。
可見,在本實(shí)施例中,通過先確定出漏洞代碼段在目標(biāo)程序中的調(diào)用路徑的方式,可以結(jié)合該調(diào)用路徑涉及的各個(gè)分支路徑,以及隨著目標(biāo)程序運(yùn)行而不斷變異的輸入數(shù)據(jù),來對目標(biāo)程序進(jìn)行模糊測試,從而通過分析目標(biāo)程序異常結(jié)束時(shí)對應(yīng)的輸入數(shù)據(jù),來找出該目標(biāo)程序的漏洞代碼段的概念驗(yàn)證數(shù)據(jù)。因此,本實(shí)施例因?yàn)轭A(yù)先確定出了漏洞代碼段,并且可以在目標(biāo)程序自動運(yùn)行的過程中通過判斷是否觸發(fā)了漏洞代碼段在目標(biāo)程序中的調(diào)用路徑而確定出poc數(shù)據(jù),所以本申請實(shí)施例無需人工參與,即可自動生成概念驗(yàn)證數(shù)據(jù),能夠提高生成概念驗(yàn)證數(shù)據(jù)的效率。
進(jìn)一步的,本申請實(shí)施例還可以對概念驗(yàn)證數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗(yàn)證,則步驟103之后還可以包括:
步驟c:對所述概念驗(yàn)證數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗(yàn)證。
具體的,可以讓生成的poc數(shù)據(jù)作為目標(biāo)程序的輸入數(shù)據(jù),來觸發(fā)目標(biāo)程序運(yùn)行來實(shí)現(xiàn)對概念驗(yàn)證數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗(yàn)證,如果目標(biāo)程序出現(xiàn)異常的方式和人工發(fā)現(xiàn)的目標(biāo)程序的漏洞一致,則說明生產(chǎn)的poc數(shù)據(jù)是準(zhǔn)確的。通過本步驟的驗(yàn)證過程,可以對自動生成的概念驗(yàn)證數(shù)據(jù)的準(zhǔn)確性進(jìn)行測試,進(jìn)而使本領(lǐng)域技術(shù)人員對概念驗(yàn)證數(shù)據(jù)有更為準(zhǔn)確和清晰的了解。
進(jìn)一步的,本申請實(shí)施例還可以依據(jù)漏洞的特征對目標(biāo)程序中的漏洞代碼段進(jìn)行修復(fù),則步驟103之后還可以包括:
步驟d:依據(jù)所述目標(biāo)程序的異常信息對所述目標(biāo)程序中的漏洞代碼段進(jìn)行修復(fù)。
依據(jù)本實(shí)施例中目標(biāo)程序中出現(xiàn)異常時(shí)的異常情況和成因,進(jìn)而對目標(biāo)程序中出現(xiàn)漏洞的代碼段進(jìn)行相應(yīng)的修改,使修改后的目標(biāo)程序在真正的投入實(shí)際場景運(yùn)行時(shí),不會因?yàn)槁┒炊谶\(yùn)行時(shí)出現(xiàn)異常。
對于前述的方法實(shí)施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動作順序的限制,因?yàn)橐罁?jù)本申請,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動作和模塊并不一定是本申請所必須的。
與上述本申請一種模糊測試中生成概念驗(yàn)證數(shù)據(jù)的方法實(shí)施例所提供的方法相對應(yīng),參見圖3,本申請還提供了本申請一種模糊測試中生成概念驗(yàn)證數(shù)據(jù)的系統(tǒng)實(shí)施例,在本實(shí)施例中,該系統(tǒng)可以包括:
獲取路徑裝置301,用于根據(jù)目標(biāo)程序的代碼中存在漏洞的漏洞代碼段,獲取所述漏洞代碼段在目標(biāo)程序中的調(diào)用路徑。
測試裝置302,用于根據(jù)所述調(diào)用路徑和輸入數(shù)據(jù)對所述目標(biāo)程序進(jìn)行測試。
其中,所述輸入數(shù)據(jù)可以為:樣本隊(duì)列中包括的、能被所述目標(biāo)程序接收作為輸入的樣本數(shù)據(jù),所述測試裝置302具體可以用于:將輸入數(shù)據(jù)作為所述目標(biāo)程序的輸入,根據(jù)所述目標(biāo)程序在運(yùn)行過程中是否觸發(fā)了所述調(diào)用路徑對所述目標(biāo)程序進(jìn)行測試。所述測試裝置302具體可以包括:
確定初始樣本數(shù)據(jù)模塊,用于確定樣本隊(duì)列中能被目標(biāo)程序接收作為輸入的初始輸入數(shù)據(jù);觸發(fā)程序運(yùn)行模塊,用于將所述初始輸入數(shù)據(jù)作為所述目標(biāo)程序的輸入,觸發(fā)所述目標(biāo)程序的運(yùn)行;判斷模塊,用于在所述目標(biāo)程序的運(yùn)行過程中判斷是否觸發(fā)了所述調(diào)用路徑;變異模塊,用于在所述判斷模塊的結(jié)果為是的情況下,對所述初始輸入數(shù)據(jù)進(jìn)行變異,并將變異后的輸入數(shù)據(jù)作為所述初始輸入數(shù)據(jù),觸發(fā)所述觸發(fā)程序運(yùn)行模塊,直至所述目標(biāo)程序的運(yùn)行出現(xiàn)異常;和,刪除模塊,用于在所述判斷模塊的結(jié)果為否的情況下,從所述樣本隊(duì)列中刪除所述初始輸入數(shù)據(jù),并觸發(fā)所述確定初始樣本數(shù)據(jù)模塊。
其中,所述判斷模塊具體可以包括:
確定子模塊,用于確定所述調(diào)用路徑涉及的各個(gè)分支路徑;和,判斷子模塊,用于判斷所述目標(biāo)程序的運(yùn)行路徑是否與任意一個(gè)所述分支路徑相匹配。
其中,所述變異模塊具體可以用于:參考所述目標(biāo)程序的實(shí)現(xiàn)功能或性能參數(shù)對所述樣本隊(duì)列中的初始輸入數(shù)據(jù)進(jìn)行變異,得到變異輸入數(shù)據(jù)。
獲取數(shù)據(jù)裝置303,用于獲取所述目標(biāo)程序出現(xiàn)異常時(shí)對應(yīng)的輸入數(shù)據(jù),作為所述概念驗(yàn)證數(shù)據(jù)。
進(jìn)一步的,該系統(tǒng)還可以包括:
驗(yàn)證模塊,用于對所述概念驗(yàn)證數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗(yàn)證。
進(jìn)一步的,該系統(tǒng)還可以包括:
修復(fù)模塊,用于依據(jù)所述漏洞的特征對所述目標(biāo)程序中的漏洞代碼段進(jìn)行修復(fù)。
可見,在本實(shí)施例中,通過先確定出漏洞代碼段在目標(biāo)程序中的調(diào)用路徑的方式,可以結(jié)合該調(diào)用路徑涉及的各個(gè)分支路徑,以及隨著目標(biāo)程序運(yùn)行而不斷變異的輸入數(shù)據(jù),來對目標(biāo)程序進(jìn)行模糊測試,從而通過分析目標(biāo)程序異常結(jié)束時(shí)對應(yīng)的輸入數(shù)據(jù),來找出該目標(biāo)程序的漏洞代碼段的概念驗(yàn)證數(shù)據(jù)。因此,本實(shí)施例因?yàn)轭A(yù)先確定出了漏洞代碼段,并且可以在目標(biāo)程序自動運(yùn)行的過程中通過判斷是否觸發(fā)了漏洞代碼段在目標(biāo)程序中的調(diào)用路徑而確定出poc數(shù)據(jù),所以本申請實(shí)施例無需人工參與,即可自動生成概念驗(yàn)證數(shù)據(jù),能夠提高生成概念驗(yàn)證數(shù)據(jù)的效率。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
最后,還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上對本申請所提供的模糊測試中生成概念驗(yàn)證數(shù)據(jù)的方法及系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時(shí),對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實(shí)施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。