本技術(shù)涉及軟件測(cè)試,尤其涉及一種漏洞檢測(cè)方法、系統(tǒng)、計(jì)算設(shè)備集群、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以及計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
1、在軟件測(cè)試領(lǐng)域,漏洞也稱作脆弱性vulnerability,是指計(jì)算機(jī)系統(tǒng)安全方面的缺陷,使得系統(tǒng)或其應(yīng)用數(shù)據(jù)的保密性、完整性、可用性、訪問控制等面臨威脅。漏洞挖掘?qū)τ谲浖踩?、軟件質(zhì)量和軟件創(chuàng)新都具有重要意義,它可以幫助發(fā)現(xiàn)和修復(fù)漏洞,防止?jié)撛诘墓?,提高軟件質(zhì)量,推動(dòng)安全創(chuàng)新和研究。通過漏洞挖掘,可以建立更安全和可信的軟件生態(tài)系統(tǒng)。
2、自動(dòng)化的漏洞挖掘工具或技術(shù)加速了漏洞發(fā)現(xiàn)的過程,提高了漏洞挖掘的效率和準(zhǔn)確性。一種典型的自動(dòng)化漏洞挖掘工具為模糊測(cè)試工具。模糊測(cè)試工具通過向目標(biāo)應(yīng)用程序輸入大量隨機(jī)或半隨機(jī)的數(shù)據(jù)以尋找潛在的漏洞。模糊測(cè)試工具可以利用各種技術(shù),如變異生成、符號(hào)執(zhí)行和模式識(shí)別等,來提高測(cè)試用例的覆蓋率。
3、然而,上述模糊測(cè)試工具通常以提高覆蓋率為目標(biāo),對(duì)于漏洞挖掘很難有所建樹,漏洞挖掘效率較低,難以滿足業(yè)務(wù)需求。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)提供了一種漏洞檢測(cè)方法,該方法對(duì)受檢代碼中特定應(yīng)用程序編程接口(application?programming?interface,api)的特定分支(即目標(biāo)分支)進(jìn)行飽和模糊測(cè)試,可以達(dá)到快速觸發(fā)漏洞的目標(biāo),實(shí)現(xiàn)針對(duì)漏洞挖掘場(chǎng)景的高效模糊測(cè)試,提高漏洞挖掘效率。本技術(shù)還提供了與上述漏洞檢測(cè)方法對(duì)應(yīng)的漏洞檢測(cè)系統(tǒng)、計(jì)算設(shè)備集群、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以及計(jì)算機(jī)程序產(chǎn)品。
2、第一方面,本技術(shù)提供一種漏洞檢測(cè)方法。該方法可以由漏洞檢測(cè)系統(tǒng)執(zhí)行。漏洞檢測(cè)系統(tǒng)可以是軟件系統(tǒng)。該軟件系統(tǒng)可以是獨(dú)立的軟件系統(tǒng),以完整的漏洞檢測(cè)平臺(tái)的形式提供給用戶(如開發(fā)者)使用?;蛘?,該軟件系統(tǒng)也可以是軟件開發(fā)工具(softwaredevelopment?kit,sdk)、插件、功能模塊的形式集成于其他軟件系統(tǒng),提供接口以便調(diào)用。上述軟件系統(tǒng)可以部署在計(jì)算設(shè)備集群中,計(jì)算設(shè)備集群執(zhí)行軟件系統(tǒng)的程序代碼,從而執(zhí)行本技術(shù)的漏洞檢測(cè)方法。在一些可能的實(shí)現(xiàn)方式中,漏洞檢測(cè)系統(tǒng)也可以是硬件系統(tǒng),該硬件系統(tǒng)可以是具有漏洞檢測(cè)功能的計(jì)算設(shè)備集群。該硬件系統(tǒng)運(yùn)行時(shí),執(zhí)行本技術(shù)的漏洞檢測(cè)方法。
3、具體地,漏洞檢測(cè)系統(tǒng)獲取受檢代碼中目標(biāo)api的目標(biāo)分支,目標(biāo)分支為目標(biāo)api中的至少一個(gè)分支,然后根據(jù)漏洞api的證明信息生成目標(biāo)api的測(cè)試用例,目標(biāo)api的測(cè)試用例用于測(cè)試目標(biāo)api是否存在漏洞,確定用于對(duì)目標(biāo)api的目標(biāo)分支進(jìn)行模糊測(cè)試的原始種子,接著將原始種子輸入目標(biāo)api的測(cè)試用例,通過輸入原始種子的測(cè)試用例對(duì)目標(biāo)分支進(jìn)行測(cè)試,根據(jù)測(cè)試結(jié)果篩選種子,將篩選的種子進(jìn)行變異后輸入目標(biāo)api的測(cè)試用例,通過輸入變異后的種子的測(cè)試用例對(duì)目標(biāo)分支進(jìn)行下一輪測(cè)試,以檢測(cè)受檢代碼中的漏洞。
4、在該方法中,目標(biāo)api和目標(biāo)分支是受檢代碼中有較高概率產(chǎn)生漏洞的api和分支,通過對(duì)該特定api的特定分支(即目標(biāo)分支)進(jìn)行飽和模糊測(cè)試,可以達(dá)到快速觸發(fā)漏洞的目標(biāo),實(shí)現(xiàn)針對(duì)漏洞挖掘場(chǎng)景的高效模糊測(cè)試,提高漏洞挖掘效率。
5、在一些可能的實(shí)現(xiàn)方式中,當(dāng)通過輸入原始種子或變異后的種子的測(cè)試用例對(duì)目標(biāo)分支的測(cè)試過程中觸發(fā)漏洞,漏洞檢測(cè)系統(tǒng)還可以保存漏洞信息,該漏洞信息包括漏洞類型、漏洞路徑或觸發(fā)漏洞的測(cè)試用例中的至少一項(xiàng)。
6、該方法通過保存漏洞信息,以便于基于漏洞信息進(jìn)行及時(shí)的預(yù)警、驗(yàn)證。此外,還可以基于挖掘到的漏洞的漏洞信息進(jìn)行后續(xù)的漏洞挖掘。
7、在一些可能的實(shí)現(xiàn)方式中,當(dāng)通過輸入所述原始種子或變異后的種子的測(cè)試用例對(duì)所述目標(biāo)分支的測(cè)試過程中未觸發(fā)漏洞,漏洞挖掘系統(tǒng)還可以對(duì)目標(biāo)api執(zhí)行基于覆蓋率的模糊測(cè)試。
8、在該方法中,基于覆蓋率的模糊測(cè)試可以作為分支模糊測(cè)試的補(bǔ)充,在分支模糊測(cè)試未觸發(fā)漏洞的情況下,通過基于覆蓋率的模糊測(cè)試,對(duì)目標(biāo)api的各個(gè)分支均進(jìn)行測(cè)試,以盡可能地挖掘出漏洞。
9、在一些可能的實(shí)現(xiàn)方式中,所述目標(biāo)分支的條件為目標(biāo)變量落入目標(biāo)取值集合,原始種子、變異后的種子覆蓋所述目標(biāo)取值集合。例如,目標(biāo)取值集合可以是區(qū)間[1000,2000],原始種子可以為1000,1100,1200,1300…2000],一輪變異后的種子可以包括[1501,1551,1601……1951,1999]。
10、通過輸入上述原始種子、變異后的種子的測(cè)試用例對(duì)目標(biāo)分支進(jìn)行測(cè)試,可以實(shí)現(xiàn)針對(duì)目標(biāo)分支的飽和性模糊測(cè)試,進(jìn)而可以快速觸達(dá)漏洞,提高漏洞挖掘效率。
11、在一些可能的實(shí)現(xiàn)方式中,漏洞檢測(cè)系統(tǒng)可以根據(jù)所述目標(biāo)api的測(cè)試用例以及所述測(cè)試用例的路徑進(jìn)行約束求解,獲得原始種子。漏洞檢測(cè)系統(tǒng)也可以將所述漏洞api的證明信息中的目標(biāo)數(shù)據(jù)與語料庫或字典匹配,獲得原始種子,其中,原始種子為所述語料庫或所述字典中與所述目標(biāo)數(shù)據(jù)匹配的原始數(shù)據(jù)。在實(shí)際應(yīng)用時(shí),漏洞檢測(cè)系統(tǒng)也可以通過不同方式分別獲取部分原始種子,將不同方式獲取的原始種子進(jìn)行混合。
12、該方法支持通過不同方式獲取原始種子,一方面可以豐富原始種子,提升多樣性,另一方面可以提高可用性,能夠適用于不同場(chǎng)景。
13、在一些可能的實(shí)現(xiàn)方式中,漏洞檢測(cè)系統(tǒng)可以將受檢代碼中的至少一個(gè)api與漏洞api進(jìn)行匹配,確定目標(biāo)api。其中,目標(biāo)api與漏洞api的相似度滿足第一設(shè)定條件。然后漏洞檢測(cè)系統(tǒng)可以將所述目標(biāo)api中的至少一個(gè)分支與所述漏洞api中觸發(fā)漏洞的分支進(jìn)行匹配,確定目標(biāo)分支。目標(biāo)分支與所述漏洞api中觸發(fā)漏洞的分支滿足第二設(shè)定條件。上述設(shè)定條件(如第一設(shè)定條件、第二設(shè)定條件)可以是相似度大于閾值(如第一閾值、第二閾值)或相似度最大。
14、該方法通過基于api的相似性、分支的相似性,確定與漏洞api相似度滿足設(shè)定條件的目標(biāo)api,并從目標(biāo)api的分支路徑中確定與觸發(fā)漏洞的分支相似度滿足設(shè)定條件的分支,由此實(shí)現(xiàn)確定最有可能觸發(fā)漏洞的路徑,提升漏洞挖掘效率。
15、在一些可能的實(shí)現(xiàn)方式中,漏洞檢測(cè)系統(tǒng)還可以向用戶呈現(xiàn)所述受檢代碼中與所述漏洞api滿足第一設(shè)定條件的至少一個(gè)api,然后響應(yīng)于所述用戶的選中操作,將所述用戶從所述至少一個(gè)api中選中的api確定為目標(biāo)api。
16、如此可以實(shí)現(xiàn)針對(duì)用戶感興趣的相似api(例如是用戶結(jié)合經(jīng)驗(yàn)確定的有較高概率觸發(fā)漏洞的相似api)進(jìn)行飽和性模糊測(cè)試,進(jìn)一步提升漏洞挖掘效率。
17、在一些可能的實(shí)現(xiàn)方式中,所述受檢代碼包括增量代碼、用戶的代碼倉庫中的代碼或代碼平臺(tái)中的代碼。例如,漏洞檢測(cè)集成于漏洞預(yù)警平臺(tái),受檢代碼可以為代碼平臺(tái)中的全量代碼,相應(yīng)地漏洞檢測(cè)系統(tǒng)可以對(duì)全量代碼進(jìn)行分析實(shí)現(xiàn)漏洞檢測(cè)。又例如,漏洞檢測(cè)系統(tǒng)集成于代碼檢查平臺(tái),受檢代碼可以為用戶的代碼倉庫中的代碼,漏洞檢測(cè)系統(tǒng)可以對(duì)用戶的代碼倉庫中的代碼進(jìn)行分析實(shí)現(xiàn)漏洞檢測(cè)。還例如,漏洞檢測(cè)系統(tǒng)可以集成于代碼托管平臺(tái),對(duì)提交代碼合入請(qǐng)求時(shí)的增量代碼進(jìn)行分析實(shí)現(xiàn)漏洞檢測(cè)。如此可以滿足不同場(chǎng)景的漏洞檢測(cè)需求,實(shí)現(xiàn)按需進(jìn)行漏洞挖掘。
18、第二方面,本技術(shù)提供一種漏洞檢測(cè)系統(tǒng)。所述系統(tǒng)包括:
19、相似性分析子系統(tǒng),用于獲取受檢代碼中目標(biāo)應(yīng)用程序編程接口api的目標(biāo)分支,所述目標(biāo)分支為所述目標(biāo)api中的至少一個(gè)分支;
20、模糊測(cè)試子系統(tǒng),用于根據(jù)漏洞api的證明信息生成所述目標(biāo)api的測(cè)試用例,所述目標(biāo)api的測(cè)試用例用于測(cè)試所述目標(biāo)api是否存在漏洞,確定用于對(duì)所述目標(biāo)api的目標(biāo)分支進(jìn)行模糊測(cè)試的原始種子,將所述原始種子輸入所述目標(biāo)api的測(cè)試用例,通過輸入所述原始種子的測(cè)試用例對(duì)所述目標(biāo)分支進(jìn)行測(cè)試,根據(jù)測(cè)試結(jié)果篩選種子,將篩選的種子進(jìn)行變異后輸入所述目標(biāo)api的測(cè)試用例,通過輸入變異后的種子的測(cè)試用例對(duì)所述目標(biāo)分支進(jìn)行下一輪測(cè)試,以檢測(cè)所述受檢代碼中的漏洞。
21、在一些可能的實(shí)現(xiàn)方式中,所述模糊測(cè)試子系統(tǒng)還用于:
22、當(dāng)通過輸入所述原始種子或變異后的種子的測(cè)試用例對(duì)所述目標(biāo)分支的測(cè)試過程中觸發(fā)漏洞,保存漏洞信息,所述漏洞信息包括漏洞類型、漏洞路徑或觸發(fā)所述漏洞的測(cè)試用例中的至少一項(xiàng)。
23、在一些可能的實(shí)現(xiàn)方式中,所述模糊測(cè)試子系統(tǒng)還用于:
24、當(dāng)通過輸入所述原始種子或變異后的種子的測(cè)試用例對(duì)所述目標(biāo)分支的測(cè)試過程中未觸發(fā)漏洞,對(duì)所述目標(biāo)api執(zhí)行基于覆蓋率的模糊測(cè)試。
25、在一些可能的實(shí)現(xiàn)方式中,所述目標(biāo)分支的條件為目標(biāo)變量落入目標(biāo)取值集合,所述原始種子、所述變異后的種子覆蓋所述目標(biāo)取值集合。
26、在一些可能的實(shí)現(xiàn)方式中,所述模糊測(cè)試子系統(tǒng)具體用于:
27、根據(jù)所述目標(biāo)api的測(cè)試用例以及所述測(cè)試用例的路徑進(jìn)行約束求解,獲得原始種子;和/或,
28、將所述漏洞api的證明信息中的目標(biāo)數(shù)據(jù)與語料庫或字典匹配,獲得原始種子,所述原始種子為所述語料庫或所述字典中與所述目標(biāo)數(shù)據(jù)匹配的原始數(shù)據(jù)。
29、在一些可能的實(shí)現(xiàn)方式中,所述相似性分析子系統(tǒng)具體用于:
30、將受檢代碼中的至少一個(gè)api與漏洞api進(jìn)行匹配,確定目標(biāo)api,所述目標(biāo)api與漏洞api的相似度滿足第一設(shè)定條件;
31、將所述目標(biāo)api中的至少一個(gè)分支與所述漏洞api中觸發(fā)漏洞的分支進(jìn)行匹配,確定目標(biāo)分支,所述目標(biāo)分支與所述漏洞api中觸發(fā)漏洞的分支滿足第二設(shè)定條件。
32、在一些可能的實(shí)現(xiàn)方式中,所述相似性分析子系統(tǒng)具體用于:
33、向用戶呈現(xiàn)所述受檢代碼中與所述漏洞api滿足第一設(shè)定條件的至少一個(gè)api;
34、響應(yīng)于所述用戶的選中操作,將所述用戶從所述至少一個(gè)api中選中的api確定為目標(biāo)api。
35、在一些可能的實(shí)現(xiàn)方式中,所述受檢代碼包括增量代碼、用戶的代碼倉庫中的代碼或代碼平臺(tái)中的代碼。
36、第三方面,本技術(shù)提供一種計(jì)算設(shè)備集群。所述計(jì)算設(shè)備集群包括至少一臺(tái)計(jì)算設(shè)備,所述至少一臺(tái)計(jì)算設(shè)備包括至少一個(gè)處理器和至少一個(gè)存儲(chǔ)器。所述至少一個(gè)處理器、所述至少一個(gè)存儲(chǔ)器進(jìn)行相互的通信。所述至少一個(gè)處理器用于執(zhí)行所述至少一個(gè)存儲(chǔ)器中存儲(chǔ)的指令,以使得計(jì)算設(shè)備或計(jì)算設(shè)備集群執(zhí)行如第一方面或第一方面的任一種實(shí)現(xiàn)方式所述的漏洞檢測(cè)方法。
37、第四方面,本技術(shù)提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有指令,所述指令指示計(jì)算設(shè)備或計(jì)算設(shè)備集群執(zhí)行上述第一方面或第一方面的任一種實(shí)現(xiàn)方式所述的漏洞檢測(cè)方法。
38、第五方面,本技術(shù)提供了一種包含指令的計(jì)算機(jī)程序產(chǎn)品,當(dāng)其在計(jì)算設(shè)備或計(jì)算設(shè)備集群上運(yùn)行時(shí),使得計(jì)算設(shè)備或計(jì)算設(shè)備集群執(zhí)行上述第一方面或第一方面的任一種實(shí)現(xiàn)方式所述的漏洞檢測(cè)方法。
39、本技術(shù)在上述各方面提供的實(shí)現(xiàn)方式的基礎(chǔ)上,還可以進(jìn)行進(jìn)一步組合以提供更多實(shí)現(xiàn)方式。