本發(fā)明涉及軟件漏洞檢測,特別是涉及基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法、系統(tǒng)及產(chǎn)品。
背景技術(shù):
1、在軟件漏洞檢測領(lǐng)域,傳統(tǒng)方法依賴于靜態(tài)分析工具和模式匹配算法,這些方法雖然能在一定程度上識(shí)別已知類型的漏洞,但面對(duì)日益復(fù)雜的新型漏洞時(shí)顯得力不從心。而現(xiàn)有的基于機(jī)器學(xué)習(xí)的方法盡管有所改進(jìn),但仍存在顯著的局限性。例如,傳統(tǒng)的漏洞檢測方法通常采用單向門控圖神經(jīng)網(wǎng)絡(luò)進(jìn)行處理,其僅支持單向邊的信息傳遞機(jī)制,然而代碼中的許多邏輯關(guān)系和潛在漏洞往往跨越多個(gè)函數(shù)、模塊或類,依賴于全局上下文的理解,因此傳統(tǒng)的漏洞檢測方法無法有效利用節(jié)點(diǎn)的輸入(入邊)和輸出(出邊)信息,這使得上下文信息在傳播過程中可能丟失或受限,特別是在處理代碼中的復(fù)雜依賴關(guān)系時(shí)表現(xiàn)尤為明顯,從而導(dǎo)致軟件漏洞檢測準(zhǔn)確性有所降低。
技術(shù)實(shí)現(xiàn)思路
1、基于此,有必要針對(duì)現(xiàn)有基于機(jī)器學(xué)習(xí)的漏洞檢測方法會(huì)導(dǎo)致上下文信息在傳播過程中丟失或受限的問題,提供一種基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法、系統(tǒng)及產(chǎn)品。
2、第一方面,本發(fā)明提出了一種基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其包括以下步驟:
3、s1、將源代碼解析為代碼屬性圖cpg;其中,cpg包括m個(gè)節(jié)點(diǎn)v,第m個(gè)v表征源代碼的第m個(gè)語法單元;m∈[1,m];
4、s2、提取第m個(gè)v的類型特征,得到類型特征向量
5、提取第m個(gè)v的語義特征,得到語義特征向量
6、將和進(jìn)行拼接,得到第m個(gè)v的初始特征向量
7、s3、先將根據(jù)cpg中邊的連接關(guān)系進(jìn)行k輪前向傳播和k輪后向傳播,分別得到第k輪的前向消息和后向消息k為最大輪數(shù);
8、再將和融合得到融合特征進(jìn)行第k+1輪的前向傳播和后向傳播;
9、迭代至第k輪后,更新為最終的融合特征
10、遍歷m個(gè)v,得到m個(gè)最終的融合特征
11、將進(jìn)行逐維相加,得到圖向量hgraph以用于表征源代碼的全局特征;
12、s4、將hgraph輸入訓(xùn)練好的多層感知機(jī)中進(jìn)行處理,得到二分類結(jié)果0或1;其中,0表示沒有漏洞,1表示有漏洞。
13、第二方面,本發(fā)明還提出了一種基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測系統(tǒng),其使用第一方面中的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法。該基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測系統(tǒng)包括生成模塊、特征提取模塊、傳播模塊和神經(jīng)網(wǎng)絡(luò)模塊。
14、其中,生成模塊,其用于將源代碼解析為代碼屬性圖cpg。
15、特征提取模塊,其用于提取cpg節(jié)點(diǎn)v的類型特征向量和語義特征向量并將和進(jìn)行拼接,得到v的初始特征向量
16、傳播模塊,其用于將根據(jù)cpg中邊的連接關(guān)系進(jìn)行k輪前向傳播和k輪后向傳播,分別得到第k輪的前向消息和后向消息再將和融合得到融合特征進(jìn)行第k+1輪的前向傳播和后向傳播;迭代至第k輪后,更新為最終的融合特征還用于遍歷m個(gè)v,得到m個(gè)最終的融合特征將進(jìn)行逐維相加,得到圖向量hgraph。
17、神經(jīng)網(wǎng)絡(luò)模塊,其用于對(duì)hgraph進(jìn)行處理,得到二分類結(jié)果0或1;其中,0表示沒有漏洞,1表示有漏洞。
18、第三方面,本發(fā)明還提出了一種軟件程序產(chǎn)品,該軟件程序產(chǎn)品包括程序指令,當(dāng)其在電子設(shè)備上運(yùn)行時(shí),使得電子設(shè)備執(zhí)行第一方面中的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法的步驟。
19、本發(fā)明的有益效果包括:
20、1、本發(fā)明引入了雙向門控圖神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),通過雙向消息傳遞機(jī)制,既能捕捉前向依賴關(guān)系,也能捕捉后向依賴關(guān)系。與傳統(tǒng)單向圖神經(jīng)網(wǎng)絡(luò)相比,本發(fā)明增強(qiáng)了對(duì)代碼上下文和全局依賴的理解能力,確保信息得到充分共享和更新,避免了上下文信息在傳播過程中丟失或受限,從而提升了漏洞檢測的準(zhǔn)確性、魯棒性和檢測精度。
21、2、本發(fā)明通過對(duì)所采用的模型的訓(xùn)練樣本集進(jìn)行數(shù)據(jù)重采樣,能夠識(shí)別少數(shù)類樣本中的關(guān)鍵樣本,并基于這些群體生成合成樣本,從而避免冗余和噪聲的生成,以應(yīng)對(duì)漏洞樣本與非漏洞樣本數(shù)量不平衡的問題,生成類別分布均衡的高質(zhì)量訓(xùn)練數(shù)據(jù)集。與傳統(tǒng)的重采樣技術(shù),如smote相比,本發(fā)明能夠有效平衡數(shù)據(jù)集中的漏洞代碼與非漏洞代碼比例,提高了模型在處理不平衡數(shù)據(jù)時(shí)的學(xué)習(xí)能力,能夠顯著提升模型對(duì)漏洞代碼(少數(shù)類樣本)的識(shí)別能力。
22、3、傳統(tǒng)的漏洞檢測方法通常使用低維嵌入模型,如word2vec來表示代碼特征。然而,低維模型僅能捕捉代碼的較為表層的語義信息,難以有效捕捉代碼中細(xì)致的邏輯和深層次的依賴關(guān)系。本發(fā)明采用了graphcodebert模型對(duì)代碼節(jié)點(diǎn)進(jìn)行深層語義嵌入,能夠?qū)⒚總€(gè)代碼節(jié)點(diǎn)映射為837維的特征向量,能夠全面捕捉代碼中的復(fù)雜邏輯和依賴關(guān)系。通過使用高維特征表示,本發(fā)明顯著提升了模型的特征表達(dá)能力,在復(fù)雜漏洞檢測任務(wù)中展現(xiàn)出了顯著的優(yōu)勢。
1.一種基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,其包括以下步驟:
2.根據(jù)權(quán)利要求1所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,s1中,cpg由抽象語法樹、控制流圖和程序依賴圖融合而成;
3.根據(jù)權(quán)利要求1所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,s2中,采用獨(dú)熱編碼得到
4.根據(jù)權(quán)利要求1所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,s3中,第k輪的前向傳播過程中,由其所有前向鄰居節(jié)點(diǎn)μn→的特征聚合得到,其計(jì)算公式為:
5.根據(jù)權(quán)利要求1所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,s3中,通過門控機(jī)制融合和得到其融合方法包括以下步驟:
6.根據(jù)權(quán)利要求1所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,s4中,多層感知機(jī)的訓(xùn)練樣本集包括用于表征漏洞數(shù)據(jù)的少數(shù)類樣本集dmin和用于表征非漏洞數(shù)據(jù)的多數(shù)類樣本集dmaj;
7.根據(jù)權(quán)利要求6所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,數(shù)據(jù)重采樣的方法包括以下步驟:
8.根據(jù)權(quán)利要求7所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法,其特征在于,s12中,對(duì)xnew的生成數(shù)量進(jìn)行聚類優(yōu)化,其包括以下步驟:
9.一種基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測系統(tǒng),其特征在于,其使用如權(quán)利要求1至8中任一項(xiàng)所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法;
10.一種軟件程序產(chǎn)品,其特征在于,該軟件程序產(chǎn)品包括程序指令,當(dāng)其在電子設(shè)備上運(yùn)行時(shí),使得電子設(shè)備執(zhí)行如權(quán)利要求1至8中任意一項(xiàng)所述的基于雙向門控圖神經(jīng)網(wǎng)絡(luò)的軟件漏洞檢測方法的步驟。