本發(fā)明涉及計(jì)算機(jī)安全,尤其涉及一種代碼檢測(cè)方法、裝置、存儲(chǔ)介質(zhì)、程序產(chǎn)品和設(shè)備。
背景技術(shù):
1、隨著互聯(lián)網(wǎng)技術(shù)快速發(fā)展,信息系統(tǒng)的網(wǎng)絡(luò)安全風(fēng)險(xiǎn)持續(xù)增加,威脅挑戰(zhàn)日益嚴(yán)峻,密碼安全是信息安全的重要基礎(chǔ),可以用于有效保障網(wǎng)絡(luò)信息系統(tǒng)的數(shù)據(jù)安全,密碼技術(shù)是保障網(wǎng)絡(luò)信息系統(tǒng)的核心技術(shù)和重要手段。
2、為了提前發(fā)現(xiàn)應(yīng)用軟件中的密碼安全風(fēng)險(xiǎn),因此需要有相關(guān)技術(shù)對(duì)應(yīng)用軟件進(jìn)行密碼安全性檢測(cè)。目前對(duì)應(yīng)用軟件的密碼安全性檢測(cè)主要包括靜態(tài)安全檢測(cè)方式、動(dòng)態(tài)安全檢測(cè)方式以及動(dòng)靜態(tài)結(jié)合的安全性檢測(cè)方式。其中,靜態(tài)安全檢測(cè)主要是對(duì)應(yīng)用軟件的源代碼或反編譯后的源代碼及中間代碼進(jìn)行分析,輸出分析報(bào)告,但這種方式無(wú)法確認(rèn)這些高風(fēng)險(xiǎn)密碼算法是否被調(diào)用,從而會(huì)產(chǎn)生大量的誤報(bào),需要人工處理,比如高風(fēng)險(xiǎn)的密碼算法實(shí)際是測(cè)試代碼,在正常運(yùn)行時(shí)并不會(huì)被調(diào)用,或者這些高風(fēng)險(xiǎn)的密碼算法是算法庫(kù)中保存的但不再使用的密碼算法等。
技術(shù)實(shí)現(xiàn)思路
1、為解決現(xiàn)有存在的技術(shù)問題,本發(fā)明實(shí)施例提供一種代碼檢測(cè)方法、裝置、存儲(chǔ)介質(zhì)、程序產(chǎn)品和設(shè)備。
2、為達(dá)到上述目的,本發(fā)明實(shí)施例的技術(shù)方案是這樣實(shí)現(xiàn)的:
3、第一方面,本發(fā)明實(shí)施例提供一種代碼檢測(cè)方法,包括:
4、獲取待檢測(cè)的目標(biāo)代碼,確定所述目標(biāo)代碼中包含的至少部分函數(shù)對(duì)應(yīng)的函數(shù)調(diào)用關(guān)系;
5、根據(jù)所述至少部分函數(shù)確定一個(gè)或多個(gè)存在安全風(fēng)險(xiǎn)的目標(biāo)函數(shù);
6、基于所述函數(shù)調(diào)用關(guān)系確定每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑;其中,每條函數(shù)調(diào)用路徑的調(diào)用目的函數(shù)均為對(duì)應(yīng)的目標(biāo)函數(shù);
7、根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況,基于各個(gè)目標(biāo)函數(shù)的可觸發(fā)情況獲得所述目標(biāo)代碼的檢測(cè)結(jié)果。
8、上述方案中,所述確定所述目標(biāo)代碼中包含的至少部分函數(shù)對(duì)應(yīng)的函數(shù)調(diào)用關(guān)系,包括:將預(yù)設(shè)的第一函數(shù)庫(kù)中的各函數(shù)作為調(diào)用關(guān)系的最小分析對(duì)象,對(duì)所述目標(biāo)代碼進(jìn)行靜態(tài)分析,獲得所述至少部分函數(shù)對(duì)應(yīng)的函數(shù)調(diào)用關(guān)系。
9、上述方案中,所述根據(jù)所述至少部分函數(shù)確定一個(gè)或多個(gè)存在安全風(fēng)險(xiǎn)的目標(biāo)函數(shù),包括:基于第二函數(shù)庫(kù)對(duì)所述至少部分函數(shù)進(jìn)行模式匹配,根據(jù)匹配結(jié)果確定所述一個(gè)或多個(gè)存在安全風(fēng)險(xiǎn)的目標(biāo)函數(shù);所述第二函數(shù)庫(kù)包括確定存在安全風(fēng)險(xiǎn)的多種函數(shù)。
10、上述方案中,所述函數(shù)調(diào)用關(guān)系至少包括調(diào)用關(guān)系圖,所述調(diào)用關(guān)系圖中的節(jié)點(diǎn)表征所述至少部分函數(shù),所述調(diào)用關(guān)系圖中的有向邊表征所述有向邊連接的兩個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的函數(shù)之間的調(diào)用關(guān)系。
11、上述方案中,所述有向邊表征所連接的源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)對(duì)所連接的目的節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)進(jìn)行調(diào)用;所述基于所述函數(shù)調(diào)用關(guān)系確定每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑,包括:將每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的節(jié)點(diǎn)作為搜索起點(diǎn),對(duì)所述調(diào)用關(guān)系圖中的有向邊進(jìn)行由目的節(jié)點(diǎn)至源節(jié)點(diǎn)的回溯搜索,獲得每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑,每條函數(shù)調(diào)用路徑均通過所述調(diào)用關(guān)系圖中的一條或多條有向邊形成調(diào)用目的節(jié)點(diǎn)為所述目標(biāo)函數(shù)對(duì)應(yīng)的節(jié)點(diǎn)的路徑。
12、上述方案中,所述對(duì)所述調(diào)用關(guān)系圖中的有向邊進(jìn)行由目的節(jié)點(diǎn)至源節(jié)點(diǎn)的回溯搜索,包括:基于所述調(diào)用關(guān)系圖確定搜索起點(diǎn)關(guān)聯(lián)的所有調(diào)用邊,每個(gè)調(diào)用邊均為以所述搜索起點(diǎn)為目的節(jié)點(diǎn)的有向邊;將每條調(diào)用邊對(duì)應(yīng)的源節(jié)點(diǎn)作為新的搜索起點(diǎn),重新基于所述調(diào)用關(guān)系圖確定新的搜索起點(diǎn)關(guān)聯(lián)的所有調(diào)用邊,直到新的搜索起點(diǎn)不存在關(guān)聯(lián)的調(diào)用邊或者新的搜索起點(diǎn)為所述目標(biāo)函數(shù)對(duì)應(yīng)的節(jié)點(diǎn)。
13、上述方案中,所述根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況,包括:確定每條函數(shù)調(diào)用路徑關(guān)聯(lián)的各有向邊的源節(jié)點(diǎn),基于預(yù)設(shè)代碼庫(kù)對(duì)各源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)進(jìn)行模式匹配,獲得每條函數(shù)調(diào)用路徑對(duì)應(yīng)的可觸發(fā)情況;所述預(yù)設(shè)代碼庫(kù)中包括用于觸發(fā)函數(shù)運(yùn)行的多種代碼;根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑的可觸發(fā)情況確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況。
14、上述方案中,所述基于預(yù)設(shè)代碼庫(kù)對(duì)各源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)進(jìn)行模式匹配,獲得每條函數(shù)調(diào)用路徑對(duì)應(yīng)的可觸發(fā)情況,包括:在函數(shù)調(diào)用路徑中存在至少一個(gè)源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)與所述預(yù)設(shè)代碼庫(kù)中的代碼匹配的情況下,確定所述函數(shù)調(diào)用路徑為第一類路徑,所述第一類路徑表征存在觸發(fā)情況的路徑;在函數(shù)調(diào)用路徑中的所有源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)與所述預(yù)設(shè)代碼庫(kù)中的代碼均不匹配的情況下,確定所述函數(shù)調(diào)用路徑為第二類路徑,所述第二類路徑表征不存在觸發(fā)情況的路徑。
15、上述方案中,所述根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑的可觸發(fā)情況確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況,包括:在目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑中存在至少一條函數(shù)調(diào)用路徑為所述第一類路徑的情況下,確定所述目標(biāo)函數(shù)存在觸發(fā)情況;在目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑均為第二類路徑的情況下,確定所述目標(biāo)函數(shù)不存在觸發(fā)情況。
16、上述方案中,所述獲取待檢測(cè)的目標(biāo)代碼,包括:獲取目標(biāo)程序,對(duì)所述目標(biāo)程序進(jìn)行反編譯和/或反匯編獲得所述目標(biāo)代碼。
17、上述方案中,所述檢測(cè)結(jié)果至少包括各個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的風(fēng)險(xiǎn)值,所述風(fēng)險(xiǎn)值表征對(duì)應(yīng)的目標(biāo)函數(shù)是否存在觸發(fā)情況;所述方法還包括:基于所述檢測(cè)結(jié)果對(duì)所述目標(biāo)代碼進(jìn)行動(dòng)態(tài)分析。
18、第二方面,本發(fā)明實(shí)施例還提供一種代碼檢測(cè)裝置,包括獲取模塊、確定模塊、搜索模塊和分析模塊;其中,
19、所述獲取模塊,用于獲取待檢測(cè)的目標(biāo)代碼,確定所述目標(biāo)代碼中包含的至少部分函數(shù)對(duì)應(yīng)的調(diào)用關(guān)系圖;
20、所述確定模塊,用于根據(jù)所述至少部分函數(shù)確定一個(gè)或多個(gè)存在安全風(fēng)險(xiǎn)的目標(biāo)函數(shù);
21、所述搜索模塊,用于基于所述函數(shù)調(diào)用關(guān)系確定每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑;其中,每條函數(shù)調(diào)用路徑的調(diào)用目的函數(shù)均為對(duì)應(yīng)的目標(biāo)函數(shù);
22、所述分析模塊,用于根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況,基于各個(gè)目標(biāo)函數(shù)的可觸發(fā)情況獲得所述目標(biāo)代碼的檢測(cè)結(jié)果。
23、第三方面,本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述代碼檢測(cè)方法的步驟。
24、第四方面,本發(fā)明實(shí)施例還提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序在被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述代碼檢測(cè)方法的步驟。
25、第五方面,本發(fā)明實(shí)施例還提供一種電子設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)前述代碼檢測(cè)方法的步驟。
26、本發(fā)明實(shí)施例提供的代碼檢測(cè)方法、裝置、存儲(chǔ)介質(zhì)、程序產(chǎn)品和設(shè)備,根據(jù)目標(biāo)代碼中至少部分函數(shù)的調(diào)用關(guān)系找出目標(biāo)代碼中存在安全風(fēng)險(xiǎn)的一個(gè)或多個(gè)目標(biāo)函數(shù),并針對(duì)目標(biāo)函數(shù)對(duì)應(yīng)的函數(shù)調(diào)用路徑進(jìn)行目標(biāo)函數(shù)的可觸發(fā)性分析,能夠準(zhǔn)確判斷存在安全風(fēng)險(xiǎn)的目標(biāo)函數(shù)是否可被真實(shí)調(diào)用,提高了代碼靜態(tài)檢測(cè)的效率和準(zhǔn)確度,同時(shí)降低了檢測(cè)的誤報(bào)率和人工負(fù)荷,可應(yīng)用于密碼應(yīng)用安全性檢測(cè)領(lǐng)域,具有廣闊的應(yīng)用前景。
1.一種代碼檢測(cè)方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述確定所述目標(biāo)代碼中包含的至少部分函數(shù)對(duì)應(yīng)的函數(shù)調(diào)用關(guān)系,包括:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述至少部分函數(shù)確定一個(gè)或多個(gè)存在安全風(fēng)險(xiǎn)的目標(biāo)函數(shù),包括:
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的方法,其特征在于,所述函數(shù)調(diào)用關(guān)系至少包括調(diào)用關(guān)系圖,所述調(diào)用關(guān)系圖中的節(jié)點(diǎn)表征所述至少部分函數(shù),所述調(diào)用關(guān)系圖中的有向邊表征所述有向邊連接的兩個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的函數(shù)之間的調(diào)用關(guān)系。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述有向邊表征所連接的源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)對(duì)所連接的目的節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)進(jìn)行調(diào)用;所述基于所述函數(shù)調(diào)用關(guān)系確定每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑,包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述對(duì)所述調(diào)用關(guān)系圖中的有向邊進(jìn)行由目的節(jié)點(diǎn)至源節(jié)點(diǎn)的回溯搜索,包括:
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況,包括:
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述基于預(yù)設(shè)代碼庫(kù)對(duì)各源節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)進(jìn)行模式匹配,獲得每條函數(shù)調(diào)用路徑對(duì)應(yīng)的可觸發(fā)情況,包括:
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述根據(jù)每個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的所有函數(shù)調(diào)用路徑的可觸發(fā)情況確定每個(gè)目標(biāo)函數(shù)的可觸發(fā)情況,包括:
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取待檢測(cè)的目標(biāo)代碼,包括:
11.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述檢測(cè)結(jié)果至少包括各個(gè)目標(biāo)函數(shù)對(duì)應(yīng)的風(fēng)險(xiǎn)值,所述風(fēng)險(xiǎn)值表征對(duì)應(yīng)的目標(biāo)函數(shù)是否存在觸發(fā)情況;所述方法還包括:
12.一種代碼檢測(cè)裝置,其特征在于,所述裝置包括獲取模塊、確定模塊、搜索模塊和分析模塊;其中,
13.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,其特征在于,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)權(quán)利要求1至11任一項(xiàng)所述方法的步驟。
14.一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,其特征在于,所述計(jì)算機(jī)程序在被處理器執(zhí)行時(shí)實(shí)現(xiàn)權(quán)利要求1至11任一項(xiàng)所述方法的步驟。
15.一種電子設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,其特征在于,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)權(quán)利要求1至11任一項(xiàng)所述方法的步驟。