關(guān)鍵詞:深度學(xué)習(xí);漏洞檢測;數(shù)據(jù)流分析;圖神經(jīng)網(wǎng)絡(luò);網(wǎng)絡(luò)安全
中圖分類號:TP319 文獻標(biāo)志碼:A 文章編號:1001-3695(2025)07-034-2176-08
doi:10.19734/j. issn.1001-3695.2024.10.0436
Abstract:Ascyberatacksandcybercrimesbecome increasinglysevere,theaccuracyandcomprehensivenessofsoftware vulnerabilitydetection faces significant challenges.To addressissuessuch as the dificultyofcapturing complex semanticsof interproceduralVulnerabilies,theincompleteanalysisofdataflowinformation,andthechallengesinextractingvulnerability paternfeatures,thispaperintroducedabidirectionaldataflowanalysis vulnerabilitydetectionmethodbasedonLLVMIRand Bi-GGNN—BiG-BiD(Bi-GGNNbasedonbidirectionalDFA).Firstly,it generatedLLVMIRbycompiling sourcecode with LLVM,andconstructedanICFG(interproceduralcontrolflowgaph)toincorporateinterproceduralvulnerabilitysemantics.In addition,this paper proposeda novelICFG abstract embedding method,called DLAE (DFA line-level abstract embedding), combiningabstractdataflowwithLLVMIRline-levelvulnerabilityfeatureembeddngtoaccuratelyrepresenpotentialvulnerabilitypatersinhecode.Finally,ittrainedBi-GGNNtodynamicallsimulatereachingdefinitionanalysisandlivevariable analysis withintheICFG,enableddynamic propagationandupdatingof abstractdataflows.ExperimentalresultsontheBigVul and Reveal public datasets show that BiG-BiD achieves a recall rate of 73.7% ,outperforming existing static analysis tools and deep learning-based vulnerability detection models by 5%~38% . Additionally,this method successfully detects 23 CVE vulnerabilitiesacrossfouropen-source projects,,thathaveneverseenbefore,,1Oof the vulnerabilitiesremainunpatched,demonstrating the effctivenessand generalization of the proposed method on vulnerability detection tasks.
KeyWords:deep learning;vulnerability detection;data flow analysis;GNN;cyber security
0 引言
近年來,高級持續(xù)性威脅(APT)攻擊頻發(fā)\",網(wǎng)絡(luò)空間安全已然成為國家安全不可或缺的核心部分,更是推動新時代經(jīng)濟高質(zhì)量發(fā)展的戰(zhàn)略基石。軟件漏洞作為威脅軟件系統(tǒng)安全的首要隱患,往往是構(gòu)成各類重大安全事件的根源[2,3]。如何高效、精準(zhǔn)地檢測軟件代碼中的潛在漏洞,已成為網(wǎng)絡(luò)安全領(lǐng)域亟待攻克的前沿難題和研究焦點。
早期漏洞檢測主要依賴于傳統(tǒng)程序分析方法。這些方法[4.5]主要包括靜態(tài)分析、動態(tài)分析與符號執(zhí)行。比如,Luo等人[4提出了一種上下文敏感的跨過程靜態(tài)污點分析工具TChecker,可用于檢測PHP應(yīng)用程序中的污點式漏洞。Mues等人5提出了一種基于Java程序的動態(tài)符號執(zhí)行框架Jaint,通過用戶定義的動態(tài)污點分析實現(xiàn)更靈活的漏洞檢測。Jaint引入了領(lǐng)域特定語言,使得用戶能夠為JavaWeb應(yīng)用程序定義特定基于污點的安全分析規(guī)則。盡管傳統(tǒng)方法在一定程度上能夠揭示程序中的潛在漏洞,但也存在著諸如人工自定義復(fù)雜規(guī)則、漏洞模式難以捕獲等諸多局限性。
隨著人工智能技術(shù)的迅猛發(fā)展,基于深度學(xué)習(xí)的漏洞檢測模型在漏洞語義特征提取與檢測方面顯現(xiàn)出巨大的潛力[6\~8],因其無須專家手動定義漏洞檢測規(guī)則、檢測效率高等優(yōu)勢[9,10],迅速引起了研究人員與安全廠商的廣泛關(guān)注。通過廣泛收集代碼中的漏洞樣本構(gòu)建數(shù)據(jù)集,這些方法能夠基于深度學(xué)習(xí)算法有效提取漏洞的語義特征,從而實現(xiàn)精準(zhǔn)的漏洞檢測[11],尤其是圖結(jié)構(gòu)所承載的豐富語義結(jié)構(gòu)特征[12],使得基于圖神經(jīng)網(wǎng)絡(luò)的漏洞檢測模型在性能上明顯優(yōu)于傳統(tǒng)基于token的模型。比如,Zhou等人[13]提出了基于通用圖神經(jīng)網(wǎng)絡(luò)的模型Devign。該模型通過融合抽象語法樹、數(shù)據(jù)流圖、控制流圖和鄰接上下文語句的圖表示來提取圖級特征,從而進行有效的漏洞檢測。Chakraborty等人[14]提出了一種基于代碼屬性圖的通用漏洞檢測框架ReVeal,并指出現(xiàn)有最先進的模型在真實世界數(shù)據(jù)集上性能顯著下降的現(xiàn)象,這一發(fā)現(xiàn)引發(fā)了對漏洞檢測模型魯棒性的深入探討。Wen等人[15]提出了一種新型漏洞檢測框架Ample,結(jié)合圖簡化和增強圖表示學(xué)習(xí),通過對代碼屬性圖的簡化,使用改進的圖卷積神經(jīng)網(wǎng)絡(luò)進行特征提取,以進一步提升檢測性能。
盡管在漏洞檢測領(lǐng)域現(xiàn)有研究取得了一定進展,但漏洞語義特征提取與跨過程漏洞分析仍然是該領(lǐng)域的主要挑戰(zhàn)[16,17]?,F(xiàn)有的漏洞檢測方法主要聚焦于代碼的表層特征,缺乏對跨過程語義信息的建模能力。尤其是程序中包含豐富的動態(tài)數(shù)據(jù)流信息(如變量活躍狀態(tài)的傳播及定義的到達性)與漏洞檢測任務(wù)的相關(guān)性較高,但并未被充分挖掘和利用,難以滿足真實世界復(fù)雜漏洞場景下的高效檢測需求[18-21]。因此,迫切需要一種能夠充分捕捉跨過程復(fù)雜語義與動態(tài)數(shù)據(jù)流特征的新方法。
通過深入探究數(shù)據(jù)流分析與圖神經(jīng)網(wǎng)絡(luò)消息傳遞的相似性,本文提出了一種基于LLVMIR與雙向門控圖神經(jīng)網(wǎng)絡(luò)的雙向數(shù)據(jù)流分析的漏洞檢測方法BiG-BiD。該方法首先使用LLVM編譯源代碼生成LLVMIR,并構(gòu)建過程間控制流圖ICFG,從而引入跨過程的漏洞語義信息。此外,本文設(shè)計了一種結(jié)合抽象數(shù)據(jù)流與LLVMIR行級漏洞屬性特征嵌入的ICFG抽象嵌入方法DLAE,使用屬性圖定義的方式結(jié)合抽象數(shù)據(jù)流狀態(tài)、節(jié)點信息、邊的信息構(gòu)造適合圖神經(jīng)網(wǎng)絡(luò)輸入的圖級向量形式,以精確表征代碼潛在的漏洞模式特征。最后,鑒于到達定義分析在變量定義的傳播過程中能夠有效捕獲空指針解引用、未初始化變量等常見漏洞,活躍變量分析通過反向傳播分析變量生命周期,幫助發(fā)現(xiàn)資源泄露、死代碼等漏洞。通過引入后向邊訓(xùn)練Bi-GGNN的方式,在ICFG中動態(tài)模擬到達定義分析與活躍變量分析,實現(xiàn)在訓(xùn)練迭代中動態(tài)傳播與更新抽象數(shù)據(jù)流信息,兩種分析方法相輔相成,以此建模更加全面的數(shù)據(jù)流相關(guān)的過程間漏洞語義特征。在 Big-Vul 、Reveal數(shù)據(jù)集上的實驗表明,相較于傳統(tǒng)靜態(tài)分析工具和其他基于深度學(xué)習(xí)的方法,本文BiG-BiD不僅能夠捕捉復(fù)雜的過程間漏洞語義,還能夠通過消息傳遞更新機制有效模擬數(shù)據(jù)流的動態(tài)更新與傳播,從而提高了漏洞檢測的覆蓋率和準(zhǔn)確性。本文的主要貢獻如下:
a)本文結(jié)合抽象數(shù)據(jù)流與LLVMIR行級漏洞屬性特征嵌入,設(shè)計了一種ICFG抽象嵌入方法DLAE,能夠更好地表征跨過程漏洞模式。b)本文設(shè)計了BiG-BiD方法,通過在模型訓(xùn)練迭代中動態(tài)模擬雙向數(shù)據(jù)流分析,實現(xiàn)在動態(tài)更新與傳遞過程中可以深度捕獲漏洞語義特征,為有效結(jié)合數(shù)據(jù)流信息提供了一種新思路。c)通過上述方法實現(xiàn),在Big-Vul、Reveal兩個真實數(shù)據(jù)集上的實驗證明了該方法的有效性。在四個知名開源項目中成功檢測出23個CVE漏洞,其中10個漏洞仍未被修復(fù),證明了該方法的泛化性。
1相關(guān)理論
1.1基于LLVMIR的過程間控制流圖
在程序靜態(tài)分析中,分析對象通常為抽象語法樹(AST)或代碼中間表示(IR)。盡管抽象語法樹能夠較好地反映程序的語法結(jié)構(gòu),但其層次化的樹型結(jié)構(gòu)引入了大量的節(jié)點和邊,導(dǎo)致漏洞語義提取與分析變得更加復(fù)雜。此外,AST不具備控制流信息,難以利用程序控制信息進行有效的數(shù)據(jù)流分析。
相比之下,IR作為一種更接近底層的線性中間表示形式,能夠更簡潔、直接地描述程序的控制流和數(shù)據(jù)流,特別是在結(jié)合調(diào)用流信息時展現(xiàn)出其獨特的優(yōu)勢。因此,本文選擇LLVMIR作為分析對象,LLVMIR是LLVM編譯器框架中的核心中間表示語言,處于高級語言代碼和底層機器代碼之間。
過程間控制流圖是一種用于表示程序中各個過程之間控制流關(guān)系的圖結(jié)構(gòu),包含了跨函數(shù)調(diào)用的控制流信息[22]。在漏洞檢測任務(wù)中,跨函數(shù)漏洞屢見不鮮。通過引人ICFG,研究人員可以充分挖掘跨函數(shù)的漏洞語義信息,從而提高漏洞檢測的全面性與準(zhǔn)確性[23]
如圖1所示,以階乘函數(shù)為例,基于LLVMIR構(gòu)造過程間控制流圖ICFG。在構(gòu)建過程間控制流圖時,首先從程序語句中提取函數(shù)調(diào)用關(guān)系,并在控制流圖中添加一條從調(diào)用點指向被調(diào)用函數(shù)入口的有向邊,以表示調(diào)用指令與被調(diào)用函數(shù)之間的關(guān)系。其次,需在圖中添加從函數(shù)返回指令到調(diào)用指令的調(diào)用邊,表示函數(shù)執(zhí)行完畢后控制流將返回至調(diào)用點。
此外,對于在當(dāng)前分析范圍內(nèi)不可見的外部函數(shù),需引入一個特殊的外部節(jié)點。所有對外部函數(shù)的調(diào)用都與該節(jié)點相連,以確保能夠捕捉到與外部函數(shù)的交互關(guān)系。最后,對于那些在當(dāng)前函數(shù)內(nèi)未定義但被調(diào)用的函數(shù),則創(chuàng)建一個包含單個指令節(jié)點的虛擬函數(shù),并通過顯式添加調(diào)用邊來表示對該函數(shù)的調(diào)用。這一系列構(gòu)建步驟有效增強了ICFG的表達能力,使其能夠全面捕捉程序的控制流信息。
1.2 數(shù)據(jù)流分析
數(shù)據(jù)流分析是程序靜態(tài)分析中最為關(guān)鍵的技術(shù)之一,旨在通過對程序控制流的深人分析,推斷程序中變量、表達式及程序狀態(tài)隨時間的變化[24]。該技術(shù)可用于洞察不同程序點上變量的潛在值或狀態(tài),從而有效地發(fā)現(xiàn)潛在錯誤、優(yōu)化代碼,或確保程序的正確性。
數(shù)據(jù)流分析的實現(xiàn)依賴于控制流圖中相鄰節(jié)點間的數(shù)據(jù)流信息傳播與更新。具體而言,它通過聚合函數(shù)從相鄰節(jié)點匯聚數(shù)據(jù)流信息,并使用傳遞函數(shù)利用節(jié)點內(nèi)部可用的信息對數(shù)據(jù)流進行傳播。此過程持續(xù)迭代,直至到達不動點,從而確保數(shù)據(jù)流信息的收斂[25]。這種動態(tài)的分析機制使得數(shù)據(jù)流分析能夠在復(fù)雜的程序結(jié)構(gòu)中高效地識別潛在的漏洞與錯誤。
數(shù)據(jù)流分析的一個典型實例是到達定義分析。在這一過程中,程序中的賦值操作通常被視作一個定義 d 對于程序中某個特定點 p ,如果一個變量定義 d 可以沿著某條控制流路徑從定義點傳播到該點 p ,并且在此路徑上沒有對該變量的重新定義,則稱該定義 d 在程序點 p 可到達。
在漏洞檢測任務(wù)中,到達定義分析可以基于漏洞的根本原因進行有效檢測。比如,當(dāng)NULL指針的定義到達指針解引用操作時,將會觸發(fā)空指針解引用漏洞。這一分析方法同樣適用于檢測其他類型的漏洞,如緩沖區(qū)溢出、整數(shù)溢出、未初始化變量及重復(fù)釋放指針等。到達定義分析通過聚合函數(shù)和傳遞函數(shù)不斷迭代,實現(xiàn)數(shù)據(jù)流的前向傳播和更新。聚合函數(shù)和傳遞函數(shù)公式如下:
IN[B]=?P∈pred(B)OUT[P]
OUT (2)其中:
分別是當(dāng)前節(jié)點 B 的輸入和輸出; oUT[P] 是 B 前驅(qū)節(jié)點的輸出; pred(B) 是 B 的所有前驅(qū)節(jié)點; KIIL[B] 是節(jié)點 B 處被覆蓋的定義;GEN[B]是節(jié)點 B 處新生成的定義。
數(shù)據(jù)流分析的另一個典型實例是活躍變量分析。在這一分析中,如果一個變量 v 從某個程序點 p 開始,沿著控制流圖的某條路徑進行傳播,在該路徑上 v 被使用,且在此之前變量 v 沒有被重新定義,那么稱變量 v 在程序點 p 處是活躍變量。
在漏洞檢測任務(wù)中,活躍變量分析能夠根本性地識別死代碼、資源泄露以及未初始化變量等問題。特別是在跨過程數(shù)據(jù)流分析中,結(jié)合活躍變量分析可以有效輔助檢測未正確傳遞的參數(shù)或潛在的未定義行為。這一分析方法通過以下聚合函數(shù)和傳遞函數(shù)的公式不斷迭代,實現(xiàn)對數(shù)據(jù)流的后向傳播與更新。
其中: IN[B] 、 oUT[B] 分別是當(dāng)前節(jié)點 B 的輸人和輸出;IN[S] 是 B 后繼節(jié)點的輸人; succ(B) 是 B 的所有后繼節(jié)點;USE[B] 是節(jié)點 B 處被使用的變量; DEF[B] 是節(jié)點 B 處新定義的變量。
1.3圖神經(jīng)網(wǎng)絡(luò)與數(shù)據(jù)流分析的相似性
在圖神經(jīng)網(wǎng)絡(luò)中,消息傳遞是核心操作。其通過局部節(jié)點信息交換與聚合,學(xué)習(xí)到每個節(jié)點的有效表示,從而捕捉圖結(jié)構(gòu)的豐富信息。在這一過程中,主要包含聚合操作和更新操作兩個重要操作。
在聚合操作中,節(jié)點 B 在第 k 層的聚合消息 mB(k) 源自其鄰居節(jié)點的信息。該過程通過計算所有鄰居節(jié)點的表示來實現(xiàn)。計算公式為
mB(k)=agoregate({hj(k-1)|j∈N(B)})
其中: N(B) 表示節(jié)點 B 的所有鄰居節(jié)點 是鄰居節(jié)點 j 在第k-1層的表示。
在更新操作中,節(jié)點 B 在第 k 層的表示 hB(k) 由其 k-1 層的表示 hB(k-1) 與當(dāng)前層的聚合消息 mB(k) 更新得到,計算公式為
圖神經(jīng)網(wǎng)絡(luò)通過多次迭代聚合和更新操作完成消息傳遞,迭代結(jié)束后,通過組合所有節(jié)點和邊信息來生成圖特征表示。
如圖2所示,雙向數(shù)據(jù)流分析在邏輯上與Bi-GGNN具有高度的相似性。在前向和后向的數(shù)據(jù)流分析過程中,其聚合函數(shù)和傳遞函數(shù)的功能與雙向圖神經(jīng)網(wǎng)絡(luò)中的聚合函數(shù)和更新函數(shù)相似。盡管它們在具體實現(xiàn)上有所不同,但在功能上,雙向數(shù)據(jù)流分析與Bi-GGNN的消息傳遞機制展現(xiàn)出了高度的共通性。
在雙向數(shù)據(jù)流分析中,聚合函數(shù)通過從控制流圖中的相鄰節(jié)點傳播和更新數(shù)據(jù)流信息,以推導(dǎo)程序中變量及狀態(tài)的變化。相應(yīng)地,在Bi-GGNN中,消息傳遞過程通過鄰居節(jié)點的聚合信息來更新節(jié)點狀態(tài),進而有效捕捉圖中潛在的關(guān)系。這一相似性不僅強調(diào)了兩種技術(shù)在信息處理上的一致性,也突顯了它們在捕捉復(fù)雜語義與動態(tài)數(shù)據(jù)流方面的潛力。
2基于雙向數(shù)據(jù)流分析和圖抽象嵌入漏洞檢測方法
本文提出的基于LLVMIR和Bi-GGNN的雙向數(shù)據(jù)流分析的漏洞檢測方法總體結(jié)構(gòu)如圖3所示。首先,使用LLVM對源代碼進行編譯,并過濾掉漏洞語義無關(guān)的系統(tǒng)信息等噪聲,生成簡化后的LLVMIR。再解析LLVMIR的控制流信息,構(gòu)建控制流圖,按照一定規(guī)則融合調(diào)用流邊,生成包含跨過程語義信息的過程間控制流圖ICFG。其次,設(shè)計DLAE圖抽象嵌入方法將ICFG進行嵌入,以引入動態(tài)數(shù)據(jù)流信息。輸人DLAE生成的抽象嵌人訓(xùn)練Bi-GGNN,以動態(tài)地模擬前向分析的到達定義分析和后向分析的活躍變量分析。最后,通過帶有softmax層的MLP輸出預(yù)測結(jié)果,以進行漏洞檢測。
2.1 圖抽象嵌入方法—DLAE
傳統(tǒng)圖嵌入方法如token生成連接等,往往缺乏漏洞特定屬性的表征能力。為此,本文設(shè)計了一種結(jié)合抽象數(shù)據(jù)流與LLVMIR行級漏洞屬性特征嵌入的ICFG抽象嵌入方法DLAE,使用屬性圖定義的形式結(jié)合抽象數(shù)據(jù)流狀態(tài)、節(jié)點信息、邊的信息構(gòu)造適合圖神經(jīng)網(wǎng)絡(luò)輸入的圖級向量形式,以精確表征代碼潛在漏洞模式特征。
為了將ICFG表示為適合圖神經(jīng)網(wǎng)絡(luò)輸入的向量形式,將ICFG定義為
G=(V,E,λ,μ)
其中: V∈{VCFG,Vexternal,Vvirtual} 表示節(jié)點集合,包括控制流圖節(jié)
點、虛擬函數(shù)節(jié)點和外部節(jié)點; E∈{ECFG,ECG} 表示邊集合,包括控制流邊和調(diào)用邊。具體來說,調(diào)用邊集合為
λ:E?{CFG,CG} 表示賦予每條邊的標(biāo)簽,用于區(qū)分控制流邊和調(diào)用邊 sμ:(V∪E)×K?S 表示賦予節(jié)點和邊的鍵值對屬性函數(shù),其中 K 和 s 分別是鍵和值的集合。
在程序靜態(tài)分析中,常用的一種數(shù)據(jù)抽象方式是將分析對象轉(zhuǎn)換為位向量形式。位向量由0和1組成,其長度與全局對象域的大小相等。數(shù)據(jù)流分析通過迭代更新位向量,直至到達不動點停止迭代,得到最終結(jié)果。這種位向量的抽象方式極其適合圖神經(jīng)網(wǎng)絡(luò)對輸入向量形式的要求。
本文提出的DLAE圖抽象嵌入方法如圖4所示,在ICFG的每個節(jié)點添加前置狀態(tài)和后置狀態(tài)兩個屬性,對應(yīng)值是抽象數(shù)據(jù)流的狀態(tài)位向量。為每個圖設(shè)置全局向量,以表示數(shù)據(jù)流分析中的數(shù)據(jù)抽象全局表示,由于本文結(jié)合了到達定義分析和活躍變量分析兩種數(shù)據(jù)流分析方法,所以每個節(jié)點的前置狀態(tài)和后置狀態(tài)分別由兩個獨立表示組成。
對于到達定義分析,針對每個函數(shù)收集LLVMIR中的變量定義,構(gòu)建到達定義全局向量,并將每個節(jié)點的狀態(tài)初始化為0,作為初始狀態(tài)。當(dāng)某個節(jié)點處于可到達狀態(tài)時,相應(yīng)狀態(tài)位置設(shè)置為1。每個節(jié)點的狀態(tài)向量表示可到達該節(jié)點的定義;而對于活躍變量分析,分析對象是函數(shù)中的所有變量,收集這些變量作為活躍變量全局向量,并將圖中每個節(jié)點的狀態(tài)初始化為1,作為初始狀態(tài)。若在某個節(jié)點處一個變量處于活躍狀態(tài),則將對應(yīng)狀態(tài)位置為0。每個節(jié)點的狀態(tài)向量表示在該節(jié)點處于活躍狀態(tài)的變量。
這些全局定義和全局變量通過對節(jié)點局部的輕量級分析得到。通過到達定義分析和活躍變量分析的狀態(tài)向量,可以有效編碼與漏洞相關(guān)的程序語義特征。
通過分析大量漏洞代碼語句,針對LLVMIR設(shè)計了變量名、變量類型、操作符和API調(diào)用四個行級漏洞表征屬性。通過對數(shù)據(jù)集中這四種屬性對應(yīng)的詞元進行統(tǒng)計,構(gòu)建了一個預(yù)定義大小的詞典。接著,對每條語句的每種屬性分別進行獨熱編碼,最終將這些編碼組合成一個矩陣,作為該賦值語句的抽象表示。
通過DLAE方法得到的固定大小的語句抽象嵌入形式,極大地增強了模型在處理不同大小和復(fù)雜度程序時的一致性和魯棒性。通過這一方法,可以有效地過濾掉與漏洞無關(guān)的噪聲和信息,保留與漏洞檢測密切相關(guān)的關(guān)鍵屬性特征,確保模型更專注于捕捉漏洞的語義模式。例如,在處理除法或取模操作時,模型可以識別出潛在的除零漏洞,這類問題通常是導(dǎo)致程序崩潰或運行異常的原因。由于模型通過DLAE方法生成了固定大小的語句表示,能夠更好地提取和學(xué)習(xí)這些賦值語句中的重要信息。這種一致性的表示不僅減少了模型對輸入數(shù)據(jù)的依賴,還使得模型在面對不同的數(shù)據(jù)集時具備更強的泛化能力。
此外,DLAE的一個關(guān)鍵優(yōu)勢在于,它幫助模型識別不同賦值語句間的關(guān)聯(lián)和模式。隨著數(shù)據(jù)集規(guī)模的增加,模型依舊能夠從這些抽象表示中提取規(guī)律并進行有效的漏洞檢測。在大型數(shù)據(jù)集上,這種方法通過降低輸入維度和增強模型對關(guān)鍵特征的關(guān)注,進一步提升了訓(xùn)練效率和檢測精度。
2.2基于Bi-GGNN的雙向數(shù)據(jù)流分析方法一 BiG-BiD
在構(gòu)建ICFG并進行DLAE圖抽象嵌人之后,本文引入后向邊構(gòu)建并訓(xùn)練Bi-GGNN來學(xué)習(xí)包含抽象數(shù)據(jù)流信息的節(jié)點嵌入漏洞語義。具體來說,在Bi-GGNN中,對于每一條邊 k 所連接的一對節(jié)點 (u,v) ,同時考慮其前向邊 (u,v) 和后向邊(,u )。為了實現(xiàn)這一點,原始的前向邊構(gòu)建的鄰接矩陣通過轉(zhuǎn)置操作生成對稱矩陣,以表示后向邊。這樣,圖神經(jīng)網(wǎng)絡(luò)中消息傳遞不僅可以沿著控制流圖的前向邊進行,還能夠通過這些對稱的后向邊反向傳播信息,從而形成雙向的消息傳遞機制。
這種雙向消息傳遞機制與數(shù)據(jù)流分析中的前向分析和后向分析過程高度相似。因此能夠在前向傳播和后向傳播時結(jié)合更多語義信息,這使得模型能夠更全面地捕捉跨過程的數(shù)據(jù)流特征,從而提高對復(fù)雜漏洞模式的識別能力。此外,雙向門控機制還允許Bi-GGNN更靈活地控制信息流動的方式,通過門控操作調(diào)節(jié)信息的傳遞強度,確保模型在學(xué)習(xí)過程中關(guān)注那些更具重要性的節(jié)點和邊,進而提升漏洞檢測的準(zhǔn)確性。
Bi-GGNN通過前向與后向傳播來模擬程序中的雙向數(shù)據(jù)流分析。具體來說,在前向傳播中,當(dāng)數(shù)據(jù)流信息到達ICFG中某個分支的合并點時,使用aggregate聚合函數(shù)進行信息聚合。這類似于數(shù)據(jù)流分析中的聚合函數(shù),負責(zé)匯聚來自多個前驅(qū)節(jié)點的信息。在Bi-GGNN中,aggregate函數(shù)是一個多層感知機(MLP),它通過計算相鄰前驅(qū)節(jié)點表示的加權(quán)和,生成一個新的單一向量表示。這與到達定義分析中將多個前驅(qū)數(shù)據(jù)流匯聚在一起的方式一致。當(dāng)數(shù)據(jù)流信息到達一個新節(jié)點時,應(yīng)用update函數(shù)更新當(dāng)前節(jié)點的狀態(tài)。這個update函數(shù)基于門控循環(huán)單元(GRU),通過結(jié)合當(dāng)前節(jié)點的狀態(tài)和來自前驅(qū)節(jié)點的聚合結(jié)果來計算新的狀態(tài)。GRU能夠選擇性地遺忘舊的狀態(tài)并結(jié)合新的輸入信息,這與數(shù)據(jù)流分析中傳遞函數(shù)所做的操作類似,即根據(jù)當(dāng)前信息執(zhí)行集合的并/差操作來更新狀態(tài)。因此,update函數(shù)模擬了數(shù)據(jù)流分析中的傳遞函數(shù)。
由于活躍變量分析是一個后向分析過程,類似的情形也發(fā)生在消息傳遞的后向傳播中。通過訓(xùn)練時同時執(zhí)行前向和后向傳播,可以分別模擬到達定義分析和活躍變量分析的過程。在前向和后向消息傳遞中,節(jié)點的抽象嵌入會根據(jù)來自相鄰節(jié)點的數(shù)據(jù)流信息進行更新和傳遞。
其中,aggregate和update操作在每次消息傳遞迭代時都會更新節(jié)點的狀態(tài)表示,消息傳遞的迭代次數(shù) T 作為超參數(shù)進行設(shè)置,控制模型的傳播深度。在迭代完成后,使用全局注意力池化將所有學(xué)習(xí)到的節(jié)點嵌入組合成一個圖級表示。這一步將整個圖的信息匯總,并生成一個用于分類的整體表示。最終,這個圖級表示會被傳遞到分類器,預(yù)測當(dāng)前函數(shù)是否含有漏洞。在訓(xùn)練過程中,aggregate和update函數(shù)是可學(xué)習(xí)的參數(shù),而不是數(shù)據(jù)流分析中的固定公式。
Bi-GGNN的雙向消息傳遞機制可完整模擬到達定義分析和活躍變量分析,從而捕獲全局動態(tài)數(shù)據(jù)流漏洞模式。通過從數(shù)據(jù)流信息迭代中學(xué)習(xí)漏洞特征,本文提供了一種解決一般數(shù)據(jù)流分析需要手動定義復(fù)雜漏洞檢測規(guī)則的問題。通過從訓(xùn)練示例中學(xué)習(xí),分類器可以捕獲表示各種類型漏洞的數(shù)據(jù)流信息模式,并為漏洞檢測選擇相關(guān)數(shù)據(jù)流信息,以此來實現(xiàn)高效的漏洞檢測。
3 實驗與分析
3.1 實驗設(shè)置
實驗使用數(shù)據(jù)集是漏洞檢測領(lǐng)域廣泛采用的Big-Vul[26]以及Reveal[14]。Big-Vul是一個由真實漏洞函數(shù)組成的高質(zhì)量漏洞數(shù)據(jù)集,涵蓋了2002年至2019年在348個不同開源項目中的CVE條目,共有 11834 個包含漏洞的函數(shù)以及253096個不含漏洞的正常函數(shù);Reveal是從Chromium和Debian項目中收集的漏洞數(shù)據(jù)集,包含2240個包含漏洞的函數(shù)和20494個正常函數(shù)。它們反映了現(xiàn)實世界中代碼漏洞的不平衡分布。
為了處理數(shù)據(jù)集的類不平衡問題,采用SMOTE算法來合成漏洞樣本并對不含漏洞的樣本進行隨機刪除,直至正負樣本比例趨于平衡。將數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)集、驗證數(shù)據(jù)集和測試數(shù)據(jù)集,比例分別為 80%,10%,10% 。
實驗選擇三個靜態(tài)分析工具Checkmark[27]、FlawFind-er[28] 、RATS[29]以及三個性能先進的漏洞檢測模型Devign[13]Reveal[14] Ample[15] 作為比較對象,分析對比它們在漏洞檢測任務(wù)上的性能表現(xiàn)。
實驗設(shè)置的超參數(shù):隱藏層大小為32,批量大小為256;學(xué)習(xí)率為0.00015;優(yōu)化器為ADAMAX;dropout為0.2;GNN迭代次數(shù) T 為6。
考慮訓(xùn)練過程中隨機因素對模型性能的影響,實驗中對每個方法使用相同的超參數(shù)進行多次訓(xùn)練迭代,直至性能穩(wěn)定后進行測試。
為了評估模型的有效性,本文采用最流行的評價指標(biāo),如表1所示。其中:TP(truepositive)表示正確預(yù)測為包含漏洞的樣本數(shù)量;TN(truenegative)表示正確預(yù)測為不包含漏洞的樣本數(shù)量;FP(1positive)表示錯誤預(yù)測為包含預(yù)測的樣本數(shù)量;FN(1negative)表示錯誤預(yù)測為不包含漏洞的樣本數(shù)量?;谝陨纤姆N二值分類的輸出,計算準(zhǔn)確率、精確率、召回率 分數(shù)。準(zhǔn)確率是漏洞樣本和正常樣本覆蓋率的度量,反映正確預(yù)測樣本的能力;精確率表示預(yù)測為包含漏洞的樣本中真實包含漏洞樣本的比例,反映模型的誤報比例;召回率是漏洞樣本覆蓋率的度量,反映模型的漏報比例; F1 分數(shù)表示同時考慮精確率和召回率的模型總體有效性的度量。
3.2 實驗結(jié)果分析
為了驗證本文BiG-BiD的有效性,在兩個真實數(shù)據(jù)集上進行了對比實驗,并對實驗數(shù)據(jù)進行可視化,結(jié)果如表2和圖5所示。從中可以看出,傳統(tǒng)靜態(tài)分析工具的漏洞檢測效果并不理想,特別是在召回率方面均低于 40% ,表明這些工具存在較高的漏報率。最直觀的原因是靜態(tài)分析工具通過專家定義的漏洞模式規(guī)則來檢測漏洞。然而,這種規(guī)則只能檢測最簡單的漏洞樣本,往往難以覆蓋復(fù)雜的真實環(huán)境。而與三種基于深度學(xué)習(xí)的方法相比,本文BiG-BiD在召回率上提高了 5%~28% 。產(chǎn)生這一差距的原因主要在于,Devign、Reveal、Ample并沒有考慮動態(tài)數(shù)據(jù)流信息以及過程間的漏洞語義,且它們的代碼圖都是基于源代碼構(gòu)建,源代碼中包含著大量與漏洞語義無關(guān)的信息。而代碼屬性圖過于龐大,包含的節(jié)點和邊過多,導(dǎo)致模型難以專注于學(xué)習(xí)與漏洞相關(guān)的模式特征。而本文方法基于LLVMIR構(gòu)建ICFG,通過DLAE進行抽象嵌入,并結(jié)合了動態(tài)的抽象數(shù)據(jù)流信息,使得模型能夠聚焦漏洞語義相關(guān)的關(guān)鍵信息,精確捕捉數(shù)據(jù)動態(tài)流動過程中的漏洞模式特征。另一方面,由于到達定義分析和活躍變量分析追求盡可能全面地覆蓋漏洞,使得BiG-BiD更側(cè)重于提高漏洞的召回率即盡可能少地漏報,導(dǎo)致Ample在精確率上略高于BiG-BiD。
圖6和7是數(shù)據(jù)集中截取的兩個簡短跨函數(shù)且與數(shù)據(jù)流相關(guān)的漏洞,均需要通過跨函數(shù)以及數(shù)據(jù)流分析的方法來檢測,因此只有本文BiG-BiD成功檢測出了這兩個漏洞。
圖6是一個緩沖區(qū)溢出漏洞,在receive_input函數(shù)中,數(shù)據(jù)流從input流入,strcpy函數(shù)將input的內(nèi)容復(fù)制到buffer中,但沒有檢測input大小。在main函數(shù)調(diào)用receive_input時,觸發(fā)緩沖區(qū)溢出漏洞。若只是通過receive_input的控制流圖并不能直接判斷該函數(shù)存在緩沖區(qū)溢出漏洞,只有結(jié)合過程間調(diào)用信息以及數(shù)據(jù)流分析,才可以判斷該漏洞的存在。
圖7是一個更為復(fù)雜的空指針解引用漏洞,該漏洞跨四個函數(shù),指針變量具有較長的生命周期。為了便于理解,在ini-tializeData函數(shù)中使用硬編碼作為條件來初始化指針data。在handleRequest函數(shù)中,指針data被傳遞給initializeData函數(shù),該函數(shù)可能將指針置為1ptr。隨后,指針被傳遞到process-Data函數(shù),后者未檢查指針是否為空,直接解引用了它。這種跨函數(shù)的數(shù)據(jù)流未經(jīng)過有效性驗證,會導(dǎo)致空指針解引用漏洞,從而引發(fā)程序崩潰。此漏洞可以通過到達定義分析來檢測,跟蹤指針的傳遞路徑并識別潛在的空指針問題。
為了探究BiG-BiD動態(tài)模擬雙向數(shù)據(jù)流分析的迭代次數(shù)T 對模型性能的影響,在保持其他超參數(shù)不變的情況下,分別設(shè)置不同的迭代次數(shù)進行實驗并評估模型性能。實驗結(jié)果如圖8所示。從中可以看出,迭代次數(shù)在1\~6時,隨迭代次數(shù)增加, F1 分數(shù)不斷上升。迭代次數(shù)為6或7時,模型性能達到了穩(wěn)定的最佳水平,性能差異不大。而隨著迭代次數(shù)繼續(xù)增加,模型性能出現(xiàn)了一定程度的下降。分析其原因,在數(shù)據(jù)流分析中,迭代次數(shù)過少,迭代不充分,數(shù)據(jù)流狀態(tài)不能到達不動點。相似地,在動態(tài)模擬數(shù)據(jù)流分析的圖神經(jīng)網(wǎng)絡(luò)中,較少的迭代次數(shù)下,數(shù)據(jù)流信息不能充分地傳播和更新,導(dǎo)致模型不能很好地學(xué)習(xí)數(shù)據(jù)流傳播過程中的漏洞語義特征。而當(dāng)?shù)螖?shù)過多時,數(shù)據(jù)流信息已經(jīng)得到了充分傳播和更新,此時繼續(xù)迭代不再帶來有效信息的增益,反而可能引入噪聲或不相關(guān)的特征。
這些額外的信息干擾了模型對漏洞特征的學(xué)習(xí),導(dǎo)致模型性能下降。因此,適當(dāng)?shù)牡螖?shù)對于模型的性能至關(guān)重要。設(shè)置合適的迭代次數(shù)能夠確保模型有效捕捉雙向數(shù)據(jù)流分析中的漏洞特征,而不會因為迭代過少或過多而影響最終的模型表現(xiàn)。在實際訓(xùn)練中,經(jīng)過驗證,選擇6次左右的迭代次數(shù)為最佳,這平衡了信息傳播的充分性且避免過度迭代帶來的噪聲干擾。
為了進一步驗證本文BiG-BiD動態(tài)模擬雙向數(shù)據(jù)流分析的有效性,對不同數(shù)據(jù)流處理模式進行實驗。實驗結(jié)果如表3所示。其中Bef-DFA表示對程序分別進行到達定義分析和活躍變量分析,到達不動點后的狀態(tài)作為Bi-GGNN的輸人,即使用靜態(tài)數(shù)據(jù)流信息作為輸人訓(xùn)練模型;Def-DFA表示在Bi-GGNN中只進行動態(tài)地模擬到達定義分析,而不包括活躍變量分析;Val-DFA表示在Bi-GGNN中只動態(tài)地模擬活躍變量分析,而不包括到達定義分析。從結(jié)果可以看出,使用動態(tài)模擬數(shù)據(jù)流分析的方法Def-DFA、Val-DFA、BiG-BiD顯然比到達不動點后的靜態(tài)數(shù)據(jù)流狀態(tài)作為輸入的方法Bef-DFA效果更好,且使用到達定義分析和活躍變量分析結(jié)合BiG-BiD的效果明顯優(yōu)于單獨一種數(shù)據(jù)流分析方法Def-DFA、Val-DFA。這是因為在圖神經(jīng)網(wǎng)絡(luò)中動態(tài)模擬數(shù)據(jù)流分析過程中,通過多次迭代傳播數(shù)據(jù)流信息,能夠捕捉程序執(zhí)行過程中數(shù)據(jù)流的動態(tài)變化。這種動態(tài)傳播更新機制使得模型可以更深人地學(xué)習(xí)數(shù)據(jù)流傳播過程中的漏洞語義特征,尤其是在復(fù)雜場景中,能夠更有效地識別出隱藏的漏洞模式。而靜態(tài)數(shù)據(jù)流信息(Bef-DFA)僅表示不動點狀態(tài),無法充分反映程序中的潛在漏洞語義。而每種數(shù)據(jù)流分析方法各自能夠檢測的漏洞類型不同。例如,到達定義分析可以捕捉到變量定義未被正確使用的漏洞,而活躍變量分析則更擅長發(fā)現(xiàn)未初始化或無效變量使用的漏洞。因此,單一的數(shù)據(jù)流分析方法(Def-DFA或Val-DFA)無法全面覆蓋所有漏洞類型。BiG-BiD結(jié)合了兩種數(shù)據(jù)流分析方法,通過前向和后向的雙向傳播,能夠更好地學(xué)習(xí)到完整的漏洞語義特征,顯著提升了模型的檢測能力。
為了進一步探究不同數(shù)據(jù)流分析方法對模型性能的影響,本文將到達定義分析替換為另一種前向數(shù)據(jù)流分析方法 一可用表達式分析,進行了實驗。實驗結(jié)果如表4所示。從結(jié)果可以發(fā)現(xiàn),使用可用表達式分析和活躍變量分析結(jié)合的方法Exp+Val 的性能明顯弱于本文提出的結(jié)合到達定義分析和活躍變量分析的方法BiG-BiD。深人分析其原因,可用表達式分析的主要功能在于消除代碼冗余和優(yōu)化死代碼,它通過確定在程序的某些執(zhí)行路徑中某些表達式的計算結(jié)果是否已知,來減少不必要的重復(fù)計算。這種分析更適用于代碼優(yōu)化和性能提升,而不擅長發(fā)現(xiàn)復(fù)雜的漏洞。相比之下,到達定義分析直接處理變量定義及其在程序中是否有效或可能引發(fā)錯誤的使用,能更有效地捕捉復(fù)雜漏洞模式形成的根本原因。因此,本文BiG-BiD方法能夠更好地捕捉漏洞特征,顯著提升模型的漏洞檢測性能。
為了進一步評估本文BiG-BiD在現(xiàn)實世界中的有效性及泛化性,本文選擇了四個知名的開源項目LinuxKernel-5.10、QEMU-6.2.0、Apache-2.4.54、OpenSSL-3.0.5進行漏洞檢測。如表5所示,成功檢測出23個新的漏洞,其中LinuxKernel9個,QEMU4個,Apache7個,OpenSSL3個。值得注意的是,檢測到的漏洞中有10個漏洞尚未得到修復(fù),這進一步表明了BiG-BiD在檢測漏洞方面的有效性和泛化性。
4結(jié)束語
本文提出了一種基于LLVMIR與Bi-GGNN雙向數(shù)據(jù)流分析的漏洞檢測方法。基于LLVMIR構(gòu)建ICFG引入跨過程語義,設(shè)計了一種結(jié)合抽象數(shù)據(jù)流與LLVMIR行級漏洞屬性特征嵌入的ICFG抽象嵌入方法DLAE,使用屬性圖定義的方式結(jié)合抽象數(shù)據(jù)流狀態(tài)、節(jié)點信息、邊的信息構(gòu)造適合圖神經(jīng)網(wǎng)絡(luò)輸入的圖級向量形式。最后,通過引入后向邊訓(xùn)練Bi-GGNN,實現(xiàn)在ICFG中動態(tài)模擬到達定義分析與活躍變量分析,以動態(tài)傳播與更新抽象數(shù)據(jù)流信息。實驗結(jié)果證明了該方法的有效性和泛化性。綜合看來,BiG-BiD是一種性能表現(xiàn)優(yōu)異的結(jié)合動態(tài)數(shù)據(jù)流分析的方法,提供了一種結(jié)合多種動態(tài)數(shù)據(jù)流進行跨過程漏洞檢測的思路。
盡管本文方法能夠有效提升漏洞檢測的效果,但是不同的數(shù)據(jù)流分析方法所針對的漏洞類型不同,不同的圖神經(jīng)網(wǎng)絡(luò)在漏洞檢測任務(wù)中的效果也并不相同,因此如何結(jié)合更多的數(shù)據(jù)流分析方法和其他的靜態(tài)分析方法以盡可能全面地覆蓋漏洞類型以及如何選擇更加有效的圖神經(jīng)網(wǎng)絡(luò),將是未來研究考慮解決的問題。
參考文獻:
[1]Arefin S,Chowdhury M,Parvez R,et al.Understanding APT detection using machine learning algorithms: is superior accuracy a thing? [C]/Proc of IEEE International Conference on Electro Information Technology.Piscataway,NJ: IEEE Press,2024:532-537.
[2]唐成華,蔡維嘉,林和,等.軟件漏洞模糊測試的關(guān)鍵分支探索 及熱點更新算法[J].計算機應(yīng)用研究,2024,41(7):2179- 2183.(Tang Chenghua, Cai Weijia,Lin He,et al. Algorithm of key branch explorationand hotspot update for software vulnerability fuzzy testing[J].Application Research of Computers,2024,41(7): 2179-2183.)
[3]張國棟,劉子龍,靳卓,等.用于漏洞檢測的中間語言表示方法 [J].計算機應(yīng)用研究,2023,40(11):3377-3381,3393. (Zhang Guodong,Liu Zilong,Jin Zhuo,et al. Intermediate language representation for vulnerability detection [J].Application Research of Computers,2023,40(11): 3377-3381,3393.)
[4]Luo Changhua,Li Penghui,Meng Wei. Tchecker:precise static inter-proceduralanalysis fordetecting taint-stylevulnerabilities in php applications [C]// Proc of ACM SIGSAC Conference on Computer and Communications Security.New York :ACM Press,2022:2175-2188.
[5]Mues M ,Schallau T,Howar F. Jaint:a framework for user-defined dynamic taint-analysesbased on dynamic symbolic execution of Java programs [M]/Λ Dongol B,Troubitsyna E.Integrated Formal Methods.Cham:Springer,2020:123-140.
[6]楊盡能,李汶珊,何俊江,等.基于雙注意力機制和改進對抗訓(xùn) 練的漏洞分類方法[J].計算機應(yīng)用研究,2024,41(11):3447- 3454.(Yang Jinneng,Li Wenshan,He Junjiang,et al.Vulnerabilityclassificationmethod based on double-attention mechanism and adversarial training [J].Application Research of Computers, 2024,41(11):3447-3454.)
[7]袁子龍,吳秋新,劉韌,等.一種基于改進差分進化算法的源碼 漏洞檢測模型的冷啟動方法[J].計算機應(yīng)用研究,2023,40 (7): 2170-2178.(Yuan Zilong,Wu Qiuxin,Liu Ren,et al.Cold start method for source code vulnerability detection model based on improved differential evolutionalgorithm[J].Application Research ofComputers,2023,40(7):2170-2178.)
[8]許健,陳平華,熊建斌.融合滑動窗口和哈希函數(shù)的代碼漏洞檢 測模型[J].計算機應(yīng)用研究,2021,38(8):2394-2400.(Xu Jian,Chen Pinghua,Xiong Jianbin.Code vulnerability detection model based on slidingwindowand hash function[J].Application Research ofComputers,2021,38(8):2394-2400.)
[9]Wu Fang,Wang Jigang,Liu Jiqiang,et al.Vulnerability detection with deep learning[C]//Proc of the 3rd IEEE Intermational Conference on Computer and Communications. Piscataway,NJ:IEEE Press,2017:1298-1302.
[10]HarerJA,KimLY,Russell RL,etal.Automated software vulnerability detection with machine learning[EB/OL].(2018).https:// arxiv.org/abs/1803.04497.
[11]Li Zhen,Zou Deqing,Xu Shouhuai,et al.VulPecker:an automated vulnerability detectionsystem based on code similarity analysis[C]// Proc of the 32nd Annual Conference on Computer Security Applications.New York:ACM Press,2016:201-213.
[12]Li Yi,Wang Shaohua,Nguyen TN.Vulnerability detection with fine-grained interpretations [C]//Proc of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on theFoundations of Software Engineering.New York:ACM Press, 2021:292-303.
[13]Zhou Yaqin,Liu Shangqing,Siow J,et al.Devign: effctive vulnerability identification by learning comprehensive program semantics via graph neural networks [C]/′ Procof the 33rdInternational Conference on Neural Information ProcessingSystems.Red Hook,NY: Curran Associates Inc., 2019:article No. 915.
[14]Chakraborty S,Krishna R,DingY,etal.Deep learningbased vulnerability detection:are we there yet?[J].IEEE Trans on Software Engineering,2022,48(9):3280-3296.
[15]Wen Xincheng,Chen Yupan,Gao Cuiyun,et al.Vulnerability detection with graph simplification and enhanced graph representation learning [C]//Proc of the 45th IEEE/ACM International Conference on Software Engineering. Piscataway,NJ: IEEE Press,2023:2275-2286.
[16]Wang Huanting,Ye Guixin,Tang Zhanyong,etal.Combining graph-based learning with automated data colection for code vulnerability detection[J]. IEEE Trans on Information Forensics and Security,2020,16:1943-1958.
[17]Hin D,Kan A,Chen Huaming,et al. LineVD: statement-level vulnerability detection using graph neural networks[C]//Proc of the 19th IEEE/ACM International Conference on Mining Software Repositories.Piscataway,NJ: IEEE Press,2022:596-607.
[18] Zou Deqing,Wang Sujuan,Xu Shouhuai, et al. μVulDeePecker:a. deep learning-based system for multiclass vulnerability detection[J]. IEEE Trans on Dependable and Secure Computing,2021,18 (5): 2224-2236.
[19]Steenhoek B,Gao Hongyang,Le Wei.Dataflow analysis-inspired deep learning for efficient vulnerability detection [C]//Proc of the 46th IEEE/ACM International Conference on Software Engineering. New York:ACM Press,2024:1-13.
[20] Cao Sicong,Sun Xiaobing,Bo Lili,et al. BGNN4VD:constructing bidirectional graph neural-network for vulnerability detection[J]. Information and Software Technology,2021,136:106576.
[21]SteenhoekB,RahmanMM,JilesR,etal.Anempirical studyof deep learning models forvulnerability detection[C]//Proc of the 45th IEEE/ACM International Conferenceon Software Engineering. Piscataway,NJ: IEEE Press,2023: 2237-2248.
[22] Cummins C,F(xiàn)isches ZV,Ben-Nun T,et al.ProGraML:a graphbased program representation for data flow analysis and compiler optimizations [C]//Proc of International Conference on Machine Learning. 2021:2244-2253.
[23] Zhou Minmin,Chen Jinfu,Liu Yisong,et al. A method for software vulnerability detection based on improved control flow graph[J]. Wuhan University Joumal of Natural Sciences,2019,24(2): 149-160.
[24]Kim HY, Kim JH,Oh H K,et al. DAPP:automatic detection and analysis of prototype pollution vulnerability in Node.js modules[J]. International Journal of Information Security,2022,21(1):1-23.
[25]Choi J,Kim D,KimS,et al. SMARTIAN: enhancing smart contract fuzzing with static and dynamic data-flow analyses [C]//Proc of the 36th IEEE/ACM International Conference on Automated Software Engineering.Piscataway,NJ:IEEE Press,2021:227-239.
[26]Fan Jiahao,Li Yi, Wang Shaohua, et al.A C/C++ code vulnerability dataset with code changes and CVE summaries [C]//Proc of the 17th IEEE/ACM International Conference on Mining Software Repositories.Piscataway,NJ: IEEE Press,202O:508-512.
[27] Checkmarx Ltd.Checkmarx [EB/OL].[2024-10-01].https:// www.checkmarx.com/.
[28]Wheeler D A.Flawfinder[EB/OL].[2024-10-01]. http://www. dwheeler.com/flawfinder.
[29]Secure Software Inc.RATS[EB/OL].[2024-10-01].https:// code.google.com/archive/p/rough-auditing-tool-for-security/.