本發(fā)明涉及軟件漏洞檢測,特別涉及一種基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法及系統(tǒng)。
背景技術(shù):
1、軟件漏洞是指軟件系統(tǒng)中存在的可能被攻擊者利用的缺陷或弱點(diǎn)。隨著軟件系統(tǒng)日益復(fù)雜化,漏洞檢測變得越來越具有挑戰(zhàn)性。傳統(tǒng)的靜態(tài)分析和動態(tài)測試方法在處理大規(guī)模復(fù)雜軟件時往往效率低下且誤報(bào)率高。近年來,基于深度學(xué)習(xí)的漏洞檢測方法顯示出了巨大的潛力,但如何有效地表示和學(xué)習(xí)代碼的語法和語義特征仍是一個關(guān)鍵問題。
2、近年來,由于深度學(xué)習(xí)在建模能力和特征學(xué)習(xí)方面的顯著優(yōu)勢,它開始被廣泛應(yīng)用于源代碼漏洞檢測領(lǐng)域幫助人類專家構(gòu)建漏洞特征構(gòu)建和協(xié)助進(jìn)行漏洞檢測方面?;谏疃葘W(xué)習(xí)的源代碼漏洞檢測方法根據(jù)預(yù)處理階段中對源代碼的表征方法進(jìn)行分類,可以包括基于token序列和基于圖的表征方法。
3、基于token的代碼表征雖然貼近源代碼的語義,但無法保留重要的結(jié)構(gòu)信息如控制流和數(shù)據(jù)流,限制了漏洞檢測的效果?,F(xiàn)今的預(yù)處理方法已逐步強(qiáng)化結(jié)構(gòu)信息在token序列中的體現(xiàn),通過各種工具和方法提升代碼表征質(zhì)量。相比之下,基于圖表征的方法能更全面地捕捉源代碼的復(fù)雜結(jié)構(gòu)和語義關(guān)系,適合于深度學(xué)習(xí)模型學(xué)習(xí)程序中的漏洞特征。因此,本發(fā)明選擇基于圖表征的方式對源代碼進(jìn)行表征,以確保對真實(shí)漏洞的精準(zhǔn)檢測。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的是解決現(xiàn)有技術(shù)中存在的問題,提出一種基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法及系統(tǒng),提升了軟件漏洞檢測的準(zhǔn)確率和效率。
2、為實(shí)現(xiàn)上述目的,所采取的技術(shù)方案是:
3、一種基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,包含:
4、對源代碼進(jìn)行預(yù)處理;
5、利用解析器從規(guī)范化代碼中提取代碼屬性圖;
6、使用codebert將代碼屬性圖轉(zhuǎn)化為可學(xué)習(xí)的向量表示;
7、對代碼屬性圖中每個節(jié)點(diǎn)進(jìn)行中心性指標(biāo)的計(jì)算,并將其與節(jié)點(diǎn)特征向量拼接;
8、結(jié)合自適應(yīng)注意力卷積模塊和gcn模塊,學(xué)習(xí)圖的全局特征和局部特征;
9、融合自適應(yīng)注意力卷積模塊和gcn模塊學(xué)習(xí)到的特征輸入全連接層,輸出最終的漏洞檢測結(jié)果。
10、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,對源代碼進(jìn)行預(yù)處理包含:移除源代碼中的無關(guān)信息;將自定義的變量名、函數(shù)名映射為統(tǒng)一的表示。
11、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,利用解析器從規(guī)范化代碼中提取代碼屬性圖包含:首先利用解析器將源代碼轉(zhuǎn)化為抽象語法樹ast,并依據(jù)從ast中提取的控制流信息,構(gòu)建控制流圖cfg;然后分析代碼中的數(shù)據(jù)依賴關(guān)系,生成數(shù)據(jù)依賴圖ddg;分析代碼中的函數(shù)調(diào)用關(guān)系,生成調(diào)用依賴圖cdg,最后將ast、cfg、ddg和cdg進(jìn)行融合,得到代碼屬性圖。
12、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,使用codebert將代碼屬性圖轉(zhuǎn)化為可學(xué)習(xí)的向量表示包含:
13、首先預(yù)處理后的代碼行內(nèi)容作為節(jié)點(diǎn)的標(biāo)簽,將每個節(jié)點(diǎn)的標(biāo)簽作為一個句子提取,然后使用codebert的tokenizer對句子進(jìn)行分詞處理,將句子分解為tokens列表,最后將tokens列表輸入到codebert模型中,獲取每個節(jié)點(diǎn)標(biāo)簽的向量表示;另外,對于代碼屬性圖的邊進(jìn)行向量化表征時,對邊特征直接編碼,以ast、cfg、ddg、cdg的順序針對每條邊生成一個四維向量,取1則表示對應(yīng)兩個節(jié)點(diǎn)之間存在該種類型的邊。
14、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,對代碼屬性圖中每個節(jié)點(diǎn)進(jìn)行中心性指標(biāo)的計(jì)算,并將其與節(jié)點(diǎn)特征向量拼接,包含:
15、對代碼屬性圖中每個節(jié)點(diǎn)利用特征向量中心性函數(shù)、katz中心性函數(shù)和中介中心性函數(shù)分別進(jìn)行中心性指標(biāo)計(jì)算,三個結(jié)果拼接得到節(jié)點(diǎn)的中心性度量向量;并將編碼后節(jié)點(diǎn)標(biāo)簽特征向量與中心性度量向量連接,得到最終的節(jié)點(diǎn)特征矩陣。
16、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,自適應(yīng)注意力卷積模塊首先將輸入的更新后的圖特征進(jìn)行線性變換;然后通過full_attention_conv函數(shù)計(jì)算注意力權(quán)重,得到加權(quán)后的特征;最后通過殘差連接將原始輸入添加到加權(quán)后的特征上。
17、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,利用gcn模塊進(jìn)行節(jié)點(diǎn)特征傳播的過程中,在中間層中添加多個隱藏層進(jìn)行特征深化,每個隱藏層接收來自上一層的節(jié)點(diǎn)特征后,對節(jié)點(diǎn)特征與其鄰居節(jié)點(diǎn)特征進(jìn)行逐層卷積運(yùn)算,從而生成新的節(jié)點(diǎn)特征表示。
18、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,使用加權(quán)和融合或拼接融合的方式結(jié)合自適應(yīng)注意力卷積模塊和gcn模塊的輸出,加權(quán)和融合公式為:
19、x=ω×xgcn+(1-ω)×x自適應(yīng)注意力卷積
20、拼接融合公式:
21、x=concat(xgcn,x自適應(yīng)注意力卷積)
22、其中,ω是融合權(quán)重,x表示拼接后的特征向量,xgcn表示通過gcn模塊提取的特征,x自適應(yīng)注意力卷積表示通過自適應(yīng)注意力卷積模塊提取的特征,concat是拼接函數(shù)。
23、根據(jù)本發(fā)明基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,進(jìn)一步地,將自適應(yīng)注意力卷積模塊和gcn模塊的輸出融合后通過全局平均池化將圖中所有節(jié)點(diǎn)信息整合到一個固定長度的全局特征向量中,然后通過一個全連接層進(jìn)行二分類,判斷源代碼是否存在漏洞。
24、進(jìn)一步地,本發(fā)明還提供一種基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測系統(tǒng),包含:
25、代碼規(guī)范化模塊,用于對源代碼進(jìn)行預(yù)處理;
26、cpg圖提取模塊,用于利用解析器從規(guī)范化代碼中提取代碼屬性圖;
27、圖向量嵌入模塊,用于使用codebert將代碼屬性圖轉(zhuǎn)化為可學(xué)習(xí)的向量表示;
28、圖特征提取模塊,用于對代碼屬性圖中每個節(jié)點(diǎn)進(jìn)行中心性指標(biāo)的計(jì)算,并將其與節(jié)點(diǎn)特征向量拼接;
29、圖神經(jīng)網(wǎng)絡(luò)訓(xùn)練模塊,用于結(jié)合自適應(yīng)注意力卷積模塊和gcn模塊,學(xué)習(xí)圖的全局特征和局部特征;
30、漏洞檢測模塊,用于融合自適應(yīng)注意力卷積模塊和gcn模塊學(xué)習(xí)到的特征輸入全連接層,輸出最終的漏洞檢測結(jié)果。
31、采用上述技術(shù)方案,所取得的有益效果是:
32、本發(fā)明提出一種基于自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的源代碼漏洞檢測方法,該方法基于代碼屬性圖(code?property?graph,cpg)的強(qiáng)大表示能力和自適應(yīng)圖神經(jīng)網(wǎng)絡(luò)的優(yōu)秀學(xué)習(xí)能力,首先使用cpg對源代碼進(jìn)行表征,結(jié)合codebert對cpg節(jié)點(diǎn)進(jìn)行向量化表征,全面捕捉代碼的語法和語義信息;隨后,引入圖中心性分析,提取高層次的圖節(jié)點(diǎn)特征,以捕捉可能與漏洞特征相關(guān)的圖節(jié)點(diǎn)特征,增強(qiáng)模型對代碼整體結(jié)構(gòu)的理解。最后設(shè)計(jì)自適應(yīng)圖神經(jīng)網(wǎng)絡(luò),有效融合了transformer自適應(yīng)注意力機(jī)制的全局依賴捕捉能力和圖卷積網(wǎng)絡(luò)(graphconvolutional?networks,gcn)的局部結(jié)構(gòu)分析能力,實(shí)現(xiàn)對代碼特征的全面學(xué)習(xí)。本發(fā)明提升了軟件漏洞檢測的準(zhǔn)確率和效率。