999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于雙向數(shù)據(jù)流分析與圖抽象嵌入的漏洞檢測(cè)方法

2025-07-28 00:00:00曹子亨何立風(fēng)賈鷗張夢(mèng)穎劉玉郭奕辰
關(guān)鍵詞:深度學(xué)習(xí)網(wǎng)絡(luò)安全

關(guān)鍵詞:深度學(xué)習(xí);漏洞檢測(cè);數(shù)據(jù)流分析;圖神經(jīng)網(wǎng)絡(luò);網(wǎng)絡(luò)安全

中圖分類號(hào):TP319 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):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 引言

近年來,高級(jí)持續(xù)性威脅(APT)攻擊頻發(fā)\",網(wǎng)絡(luò)空間安全已然成為國家安全不可或缺的核心部分,更是推動(dòng)新時(shí)代經(jīng)濟(jì)高質(zhì)量發(fā)展的戰(zhàn)略基石。軟件漏洞作為威脅軟件系統(tǒng)安全的首要隱患,往往是構(gòu)成各類重大安全事件的根源[2,3]。如何高效、精準(zhǔn)地檢測(cè)軟件代碼中的潛在漏洞,已成為網(wǎng)絡(luò)安全領(lǐng)域亟待攻克的前沿難題和研究焦點(diǎn)。

早期漏洞檢測(cè)主要依賴于傳統(tǒng)程序分析方法。這些方法[4.5]主要包括靜態(tài)分析、動(dòng)態(tài)分析與符號(hào)執(zhí)行。比如,Luo等人[4提出了一種上下文敏感的跨過程靜態(tài)污點(diǎn)分析工具TChecker,可用于檢測(cè)PHP應(yīng)用程序中的污點(diǎn)式漏洞。Mues等人5提出了一種基于Java程序的動(dòng)態(tài)符號(hào)執(zhí)行框架Jaint,通過用戶定義的動(dòng)態(tài)污點(diǎn)分析實(shí)現(xiàn)更靈活的漏洞檢測(cè)。Jaint引入了領(lǐng)域特定語言,使得用戶能夠?yàn)镴avaWeb應(yīng)用程序定義特定基于污點(diǎn)的安全分析規(guī)則。盡管傳統(tǒng)方法在一定程度上能夠揭示程序中的潛在漏洞,但也存在著諸如人工自定義復(fù)雜規(guī)則、漏洞模式難以捕獲等諸多局限性。

隨著人工智能技術(shù)的迅猛發(fā)展,基于深度學(xué)習(xí)的漏洞檢測(cè)模型在漏洞語義特征提取與檢測(cè)方面顯現(xiàn)出巨大的潛力[6\~8],因其無須專家手動(dòng)定義漏洞檢測(cè)規(guī)則、檢測(cè)效率高等優(yōu)勢(shì)[9,10],迅速引起了研究人員與安全廠商的廣泛關(guān)注。通過廣泛收集代碼中的漏洞樣本構(gòu)建數(shù)據(jù)集,這些方法能夠基于深度學(xué)習(xí)算法有效提取漏洞的語義特征,從而實(shí)現(xiàn)精準(zhǔn)的漏洞檢測(cè)[11],尤其是圖結(jié)構(gòu)所承載的豐富語義結(jié)構(gòu)特征[12],使得基于圖神經(jīng)網(wǎng)絡(luò)的漏洞檢測(cè)模型在性能上明顯優(yōu)于傳統(tǒng)基于token的模型。比如,Zhou等人[13]提出了基于通用圖神經(jīng)網(wǎng)絡(luò)的模型Devign。該模型通過融合抽象語法樹、數(shù)據(jù)流圖、控制流圖和鄰接上下文語句的圖表示來提取圖級(jí)特征,從而進(jìn)行有效的漏洞檢測(cè)。Chakraborty等人[14]提出了一種基于代碼屬性圖的通用漏洞檢測(cè)框架ReVeal,并指出現(xiàn)有最先進(jìn)的模型在真實(shí)世界數(shù)據(jù)集上性能顯著下降的現(xiàn)象,這一發(fā)現(xiàn)引發(fā)了對(duì)漏洞檢測(cè)模型魯棒性的深入探討。Wen等人[15]提出了一種新型漏洞檢測(cè)框架Ample,結(jié)合圖簡(jiǎn)化和增強(qiáng)圖表示學(xué)習(xí),通過對(duì)代碼屬性圖的簡(jiǎn)化,使用改進(jìn)的圖卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,以進(jìn)一步提升檢測(cè)性能。

盡管在漏洞檢測(cè)領(lǐng)域現(xiàn)有研究取得了一定進(jìn)展,但漏洞語義特征提取與跨過程漏洞分析仍然是該領(lǐng)域的主要挑戰(zhàn)[16,17]。現(xiàn)有的漏洞檢測(cè)方法主要聚焦于代碼的表層特征,缺乏對(duì)跨過程語義信息的建模能力。尤其是程序中包含豐富的動(dòng)態(tài)數(shù)據(jù)流信息(如變量活躍狀態(tài)的傳播及定義的到達(dá)性)與漏洞檢測(cè)任務(wù)的相關(guān)性較高,但并未被充分挖掘和利用,難以滿足真實(shí)世界復(fù)雜漏洞場(chǎng)景下的高效檢測(cè)需求[18-21]。因此,迫切需要一種能夠充分捕捉跨過程復(fù)雜語義與動(dòng)態(tài)數(shù)據(jù)流特征的新方法。

通過深入探究數(shù)據(jù)流分析與圖神經(jīng)網(wǎng)絡(luò)消息傳遞的相似性,本文提出了一種基于LLVMIR與雙向門控圖神經(jīng)網(wǎng)絡(luò)的雙向數(shù)據(jù)流分析的漏洞檢測(cè)方法BiG-BiD。該方法首先使用LLVM編譯源代碼生成LLVMIR,并構(gòu)建過程間控制流圖ICFG,從而引入跨過程的漏洞語義信息。此外,本文設(shè)計(jì)了一種結(jié)合抽象數(shù)據(jù)流與LLVMIR行級(jí)漏洞屬性特征嵌入的ICFG抽象嵌入方法DLAE,使用屬性圖定義的方式結(jié)合抽象數(shù)據(jù)流狀態(tài)、節(jié)點(diǎn)信息、邊的信息構(gòu)造適合圖神經(jīng)網(wǎng)絡(luò)輸入的圖級(jí)向量形式,以精確表征代碼潛在的漏洞模式特征。最后,鑒于到達(dá)定義分析在變量定義的傳播過程中能夠有效捕獲空指針解引用、未初始化變量等常見漏洞,活躍變量分析通過反向傳播分析變量生命周期,幫助發(fā)現(xiàn)資源泄露、死代碼等漏洞。通過引入后向邊訓(xùn)練Bi-GGNN的方式,在ICFG中動(dòng)態(tài)模擬到達(dá)定義分析與活躍變量分析,實(shí)現(xiàn)在訓(xùn)練迭代中動(dòng)態(tài)傳播與更新抽象數(shù)據(jù)流信息,兩種分析方法相輔相成,以此建模更加全面的數(shù)據(jù)流相關(guān)的過程間漏洞語義特征。在 Big-Vul 、Reveal數(shù)據(jù)集上的實(shí)驗(yàn)表明,相較于傳統(tǒng)靜態(tài)分析工具和其他基于深度學(xué)習(xí)的方法,本文BiG-BiD不僅能夠捕捉復(fù)雜的過程間漏洞語義,還能夠通過消息傳遞更新機(jī)制有效模擬數(shù)據(jù)流的動(dòng)態(tài)更新與傳播,從而提高了漏洞檢測(cè)的覆蓋率和準(zhǔn)確性。本文的主要貢獻(xiàn)如下:

a)本文結(jié)合抽象數(shù)據(jù)流與LLVMIR行級(jí)漏洞屬性特征嵌入,設(shè)計(jì)了一種ICFG抽象嵌入方法DLAE,能夠更好地表征跨過程漏洞模式。b)本文設(shè)計(jì)了BiG-BiD方法,通過在模型訓(xùn)練迭代中動(dòng)態(tài)模擬雙向數(shù)據(jù)流分析,實(shí)現(xiàn)在動(dòng)態(tài)更新與傳遞過程中可以深度捕獲漏洞語義特征,為有效結(jié)合數(shù)據(jù)流信息提供了一種新思路。c)通過上述方法實(shí)現(xiàn),在Big-Vul、Reveal兩個(gè)真實(shí)數(shù)據(jù)集上的實(shí)驗(yàn)證明了該方法的有效性。在四個(gè)知名開源項(xiàng)目中成功檢測(cè)出23個(gè)CVE漏洞,其中10個(gè)漏洞仍未被修復(fù),證明了該方法的泛化性。

1相關(guān)理論

1.1基于LLVMIR的過程間控制流圖

在程序靜態(tài)分析中,分析對(duì)象通常為抽象語法樹(AST)或代碼中間表示(IR)。盡管抽象語法樹能夠較好地反映程序的語法結(jié)構(gòu),但其層次化的樹型結(jié)構(gòu)引入了大量的節(jié)點(diǎn)和邊,導(dǎo)致漏洞語義提取與分析變得更加復(fù)雜。此外,AST不具備控制流信息,難以利用程序控制信息進(jìn)行有效的數(shù)據(jù)流分析。

相比之下,IR作為一種更接近底層的線性中間表示形式,能夠更簡(jiǎn)潔、直接地描述程序的控制流和數(shù)據(jù)流,特別是在結(jié)合調(diào)用流信息時(shí)展現(xiàn)出其獨(dú)特的優(yōu)勢(shì)。因此,本文選擇LLVMIR作為分析對(duì)象,LLVMIR是LLVM編譯器框架中的核心中間表示語言,處于高級(jí)語言代碼和底層機(jī)器代碼之間。

過程間控制流圖是一種用于表示程序中各個(gè)過程之間控制流關(guān)系的圖結(jié)構(gòu),包含了跨函數(shù)調(diào)用的控制流信息[22]。在漏洞檢測(cè)任務(wù)中,跨函數(shù)漏洞屢見不鮮。通過引人ICFG,研究人員可以充分挖掘跨函數(shù)的漏洞語義信息,從而提高漏洞檢測(cè)的全面性與準(zhǔn)確性[23]

如圖1所示,以階乘函數(shù)為例,基于LLVMIR構(gòu)造過程間控制流圖ICFG。在構(gòu)建過程間控制流圖時(shí),首先從程序語句中提取函數(shù)調(diào)用關(guān)系,并在控制流圖中添加一條從調(diào)用點(diǎn)指向被調(diào)用函數(shù)入口的有向邊,以表示調(diào)用指令與被調(diào)用函數(shù)之間的關(guān)系。其次,需在圖中添加從函數(shù)返回指令到調(diào)用指令的調(diào)用邊,表示函數(shù)執(zhí)行完畢后控制流將返回至調(diào)用點(diǎn)。

此外,對(duì)于在當(dāng)前分析范圍內(nèi)不可見的外部函數(shù),需引入一個(gè)特殊的外部節(jié)點(diǎn)。所有對(duì)外部函數(shù)的調(diào)用都與該節(jié)點(diǎn)相連,以確保能夠捕捉到與外部函數(shù)的交互關(guān)系。最后,對(duì)于那些在當(dāng)前函數(shù)內(nèi)未定義但被調(diào)用的函數(shù),則創(chuàng)建一個(gè)包含單個(gè)指令節(jié)點(diǎn)的虛擬函數(shù),并通過顯式添加調(diào)用邊來表示對(duì)該函數(shù)的調(diào)用。這一系列構(gòu)建步驟有效增強(qiáng)了ICFG的表達(dá)能力,使其能夠全面捕捉程序的控制流信息。

1.2 數(shù)據(jù)流分析

數(shù)據(jù)流分析是程序靜態(tài)分析中最為關(guān)鍵的技術(shù)之一,旨在通過對(duì)程序控制流的深人分析,推斷程序中變量、表達(dá)式及程序狀態(tài)隨時(shí)間的變化[24]。該技術(shù)可用于洞察不同程序點(diǎn)上變量的潛在值或狀態(tài),從而有效地發(fā)現(xiàn)潛在錯(cuò)誤、優(yōu)化代碼,或確保程序的正確性。

數(shù)據(jù)流分析的實(shí)現(xiàn)依賴于控制流圖中相鄰節(jié)點(diǎn)間的數(shù)據(jù)流信息傳播與更新。具體而言,它通過聚合函數(shù)從相鄰節(jié)點(diǎn)匯聚數(shù)據(jù)流信息,并使用傳遞函數(shù)利用節(jié)點(diǎn)內(nèi)部可用的信息對(duì)數(shù)據(jù)流進(jìn)行傳播。此過程持續(xù)迭代,直至到達(dá)不動(dòng)點(diǎn),從而確保數(shù)據(jù)流信息的收斂[25]。這種動(dòng)態(tài)的分析機(jī)制使得數(shù)據(jù)流分析能夠在復(fù)雜的程序結(jié)構(gòu)中高效地識(shí)別潛在的漏洞與錯(cuò)誤。

數(shù)據(jù)流分析的一個(gè)典型實(shí)例是到達(dá)定義分析。在這一過程中,程序中的賦值操作通常被視作一個(gè)定義 d 對(duì)于程序中某個(gè)特定點(diǎn) p ,如果一個(gè)變量定義 d 可以沿著某條控制流路徑從定義點(diǎn)傳播到該點(diǎn) p ,并且在此路徑上沒有對(duì)該變量的重新定義,則稱該定義 d 在程序點(diǎn) p 可到達(dá)。

在漏洞檢測(cè)任務(wù)中,到達(dá)定義分析可以基于漏洞的根本原因進(jìn)行有效檢測(cè)。比如,當(dāng)NULL指針的定義到達(dá)指針解引用操作時(shí),將會(huì)觸發(fā)空指針解引用漏洞。這一分析方法同樣適用于檢測(cè)其他類型的漏洞,如緩沖區(qū)溢出、整數(shù)溢出、未初始化變量及重復(fù)釋放指針等。到達(dá)定義分析通過聚合函數(shù)和傳遞函數(shù)不斷迭代,實(shí)現(xiàn)數(shù)據(jù)流的前向傳播和更新。聚合函數(shù)和傳遞函數(shù)公式如下:

IN[B]=?P∈pred(B)OUT[P]

OUT (2)其中: 分別是當(dāng)前節(jié)點(diǎn) B 的輸入和輸出; oUT[P] 是 B 前驅(qū)節(jié)點(diǎn)的輸出; pred(B) 是 B 的所有前驅(qū)節(jié)點(diǎn); KIIL[B] 是節(jié)點(diǎn) B 處被覆蓋的定義;GEN[B]是節(jié)點(diǎn) B 處新生成的定義。

圖1以階乘函數(shù)為例構(gòu)建ICFGFig.1Constructing ICFG using the factorial function as an exampl"

數(shù)據(jù)流分析的另一個(gè)典型實(shí)例是活躍變量分析。在這一分析中,如果一個(gè)變量 v 從某個(gè)程序點(diǎn) p 開始,沿著控制流圖的某條路徑進(jìn)行傳播,在該路徑上 v 被使用,且在此之前變量 v 沒有被重新定義,那么稱變量 v 在程序點(diǎn) p 處是活躍變量。

在漏洞檢測(cè)任務(wù)中,活躍變量分析能夠根本性地識(shí)別死代碼、資源泄露以及未初始化變量等問題。特別是在跨過程數(shù)據(jù)流分析中,結(jié)合活躍變量分析可以有效輔助檢測(cè)未正確傳遞的參數(shù)或潛在的未定義行為。這一分析方法通過以下聚合函數(shù)和傳遞函數(shù)的公式不斷迭代,實(shí)現(xiàn)對(duì)數(shù)據(jù)流的后向傳播與更新。

其中: IN[B] 、 oUT[B] 分別是當(dāng)前節(jié)點(diǎn) B 的輸人和輸出;IN[S] 是 B 后繼節(jié)點(diǎn)的輸人; succ(B) 是 B 的所有后繼節(jié)點(diǎn);USE[B] 是節(jié)點(diǎn) B 處被使用的變量; DEF[B] 是節(jié)點(diǎn) B 處新定義的變量。

1.3圖神經(jīng)網(wǎng)絡(luò)與數(shù)據(jù)流分析的相似性

在圖神經(jīng)網(wǎng)絡(luò)中,消息傳遞是核心操作。其通過局部節(jié)點(diǎn)信息交換與聚合,學(xué)習(xí)到每個(gè)節(jié)點(diǎn)的有效表示,從而捕捉圖結(jié)構(gòu)的豐富信息。在這一過程中,主要包含聚合操作和更新操作兩個(gè)重要操作。

在聚合操作中,節(jié)點(diǎn) B 在第 k 層的聚合消息 mB(k) 源自其鄰居節(jié)點(diǎn)的信息。該過程通過計(jì)算所有鄰居節(jié)點(diǎn)的表示來實(shí)現(xiàn)。計(jì)算公式為

mB(k)=agoregate({hj(k-1)|j∈N(B)})

其中: N(B) 表示節(jié)點(diǎn) B 的所有鄰居節(jié)點(diǎn) 是鄰居節(jié)點(diǎn) j 在第k-1層的表示。

在更新操作中,節(jié)點(diǎn) B 在第 k 層的表示 hB(k) 由其 k-1 層的表示 hB(k-1) 與當(dāng)前層的聚合消息 mB(k) 更新得到,計(jì)算公式為

圖神經(jīng)網(wǎng)絡(luò)通過多次迭代聚合和更新操作完成消息傳遞,迭代結(jié)束后,通過組合所有節(jié)點(diǎn)和邊信息來生成圖特征表示。

如圖2所示,雙向數(shù)據(jù)流分析在邏輯上與Bi-GGNN具有高度的相似性。在前向和后向的數(shù)據(jù)流分析過程中,其聚合函數(shù)和傳遞函數(shù)的功能與雙向圖神經(jīng)網(wǎng)絡(luò)中的聚合函數(shù)和更新函數(shù)相似。盡管它們?cè)诰唧w實(shí)現(xiàn)上有所不同,但在功能上,雙向數(shù)據(jù)流分析與Bi-GGNN的消息傳遞機(jī)制展現(xiàn)出了高度的共通性。

在雙向數(shù)據(jù)流分析中,聚合函數(shù)通過從控制流圖中的相鄰節(jié)點(diǎn)傳播和更新數(shù)據(jù)流信息,以推導(dǎo)程序中變量及狀態(tài)的變化。相應(yīng)地,在Bi-GGNN中,消息傳遞過程通過鄰居節(jié)點(diǎn)的聚合信息來更新節(jié)點(diǎn)狀態(tài),進(jìn)而有效捕捉圖中潛在的關(guān)系。這一相似性不僅強(qiáng)調(diào)了兩種技術(shù)在信息處理上的一致性,也突顯了它們?cè)诓蹲綇?fù)雜語義與動(dòng)態(tài)數(shù)據(jù)流方面的潛力。

2基于雙向數(shù)據(jù)流分析和圖抽象嵌入漏洞檢測(cè)方法

本文提出的基于LLVMIR和Bi-GGNN的雙向數(shù)據(jù)流分析的漏洞檢測(cè)方法總體結(jié)構(gòu)如圖3所示。首先,使用LLVM對(duì)源代碼進(jìn)行編譯,并過濾掉漏洞語義無關(guān)的系統(tǒng)信息等噪聲,生成簡(jiǎn)化后的LLVMIR。再解析LLVMIR的控制流信息,構(gòu)建控制流圖,按照一定規(guī)則融合調(diào)用流邊,生成包含跨過程語義信息的過程間控制流圖ICFG。其次,設(shè)計(jì)DLAE圖抽象嵌入方法將ICFG進(jìn)行嵌入,以引入動(dòng)態(tài)數(shù)據(jù)流信息。輸人DLAE生成的抽象嵌人訓(xùn)練Bi-GGNN,以動(dòng)態(tài)地模擬前向分析的到達(dá)定義分析和后向分析的活躍變量分析。最后,通過帶有softmax層的MLP輸出預(yù)測(cè)結(jié)果,以進(jìn)行漏洞檢測(cè)。

2.1 圖抽象嵌入方法—DLAE

傳統(tǒng)圖嵌入方法如token生成連接等,往往缺乏漏洞特定屬性的表征能力。為此,本文設(shè)計(jì)了一種結(jié)合抽象數(shù)據(jù)流與LLVMIR行級(jí)漏洞屬性特征嵌入的ICFG抽象嵌入方法DLAE,使用屬性圖定義的形式結(jié)合抽象數(shù)據(jù)流狀態(tài)、節(jié)點(diǎn)信息、邊的信息構(gòu)造適合圖神經(jīng)網(wǎng)絡(luò)輸入的圖級(jí)向量形式,以精確表征代碼潛在漏洞模式特征。

為了將ICFG表示為適合圖神經(jīng)網(wǎng)絡(luò)輸入的向量形式,將ICFG定義為

G=(V,E,λ,μ)

其中: V∈{VCFG,Vexternal,Vvirtual} 表示節(jié)點(diǎn)集合,包括控制流圖節(jié)

點(diǎn)、虛擬函數(shù)節(jié)點(diǎn)和外部節(jié)點(diǎn); E∈{ECFG,ECG} 表示邊集合,包括控制流邊和調(diào)用邊。具體來說,調(diào)用邊集合為

λ:E?{CFG,CG} 表示賦予每條邊的標(biāo)簽,用于區(qū)分控制流邊和調(diào)用邊 sμ:(V∪E)×K?S 表示賦予節(jié)點(diǎn)和邊的鍵值對(duì)屬性函數(shù),其中 K 和 s 分別是鍵和值的集合。

在程序靜態(tài)分析中,常用的一種數(shù)據(jù)抽象方式是將分析對(duì)象轉(zhuǎn)換為位向量形式。位向量由0和1組成,其長度與全局對(duì)象域的大小相等。數(shù)據(jù)流分析通過迭代更新位向量,直至到達(dá)不動(dòng)點(diǎn)停止迭代,得到最終結(jié)果。這種位向量的抽象方式極其適合圖神經(jīng)網(wǎng)絡(luò)對(duì)輸入向量形式的要求。

本文提出的DLAE圖抽象嵌入方法如圖4所示,在ICFG的每個(gè)節(jié)點(diǎn)添加前置狀態(tài)和后置狀態(tài)兩個(gè)屬性,對(duì)應(yīng)值是抽象數(shù)據(jù)流的狀態(tài)位向量。為每個(gè)圖設(shè)置全局向量,以表示數(shù)據(jù)流分析中的數(shù)據(jù)抽象全局表示,由于本文結(jié)合了到達(dá)定義分析和活躍變量分析兩種數(shù)據(jù)流分析方法,所以每個(gè)節(jié)點(diǎn)的前置狀態(tài)和后置狀態(tài)分別由兩個(gè)獨(dú)立表示組成。

對(duì)于到達(dá)定義分析,針對(duì)每個(gè)函數(shù)收集LLVMIR中的變量定義,構(gòu)建到達(dá)定義全局向量,并將每個(gè)節(jié)點(diǎn)的狀態(tài)初始化為0,作為初始狀態(tài)。當(dāng)某個(gè)節(jié)點(diǎn)處于可到達(dá)狀態(tài)時(shí),相應(yīng)狀態(tài)位置設(shè)置為1。每個(gè)節(jié)點(diǎn)的狀態(tài)向量表示可到達(dá)該節(jié)點(diǎn)的定義;而對(duì)于活躍變量分析,分析對(duì)象是函數(shù)中的所有變量,收集這些變量作為活躍變量全局向量,并將圖中每個(gè)節(jié)點(diǎn)的狀態(tài)初始化為1,作為初始狀態(tài)。若在某個(gè)節(jié)點(diǎn)處一個(gè)變量處于活躍狀態(tài),則將對(duì)應(yīng)狀態(tài)位置為0。每個(gè)節(jié)點(diǎn)的狀態(tài)向量表示在該節(jié)點(diǎn)處于活躍狀態(tài)的變量。

這些全局定義和全局變量通過對(duì)節(jié)點(diǎn)局部的輕量級(jí)分析得到。通過到達(dá)定義分析和活躍變量分析的狀態(tài)向量,可以有效編碼與漏洞相關(guān)的程序語義特征。

通過分析大量漏洞代碼語句,針對(duì)LLVMIR設(shè)計(jì)了變量名、變量類型、操作符和API調(diào)用四個(gè)行級(jí)漏洞表征屬性。通過對(duì)數(shù)據(jù)集中這四種屬性對(duì)應(yīng)的詞元進(jìn)行統(tǒng)計(jì),構(gòu)建了一個(gè)預(yù)定義大小的詞典。接著,對(duì)每條語句的每種屬性分別進(jìn)行獨(dú)熱編碼,最終將這些編碼組合成一個(gè)矩陣,作為該賦值語句的抽象表示。

通過DLAE方法得到的固定大小的語句抽象嵌入形式,極大地增強(qiáng)了模型在處理不同大小和復(fù)雜度程序時(shí)的一致性和魯棒性。通過這一方法,可以有效地過濾掉與漏洞無關(guān)的噪聲和信息,保留與漏洞檢測(cè)密切相關(guān)的關(guān)鍵屬性特征,確保模型更專注于捕捉漏洞的語義模式。例如,在處理除法或取模操作時(shí),模型可以識(shí)別出潛在的除零漏洞,這類問題通常是導(dǎo)致程序崩潰或運(yùn)行異常的原因。由于模型通過DLAE方法生成了固定大小的語句表示,能夠更好地提取和學(xué)習(xí)這些賦值語句中的重要信息。這種一致性的表示不僅減少了模型對(duì)輸入數(shù)據(jù)的依賴,還使得模型在面對(duì)不同的數(shù)據(jù)集時(shí)具備更強(qiáng)的泛化能力。

此外,DLAE的一個(gè)關(guān)鍵優(yōu)勢(shì)在于,它幫助模型識(shí)別不同賦值語句間的關(guān)聯(lián)和模式。隨著數(shù)據(jù)集規(guī)模的增加,模型依舊能夠從這些抽象表示中提取規(guī)律并進(jìn)行有效的漏洞檢測(cè)。在大型數(shù)據(jù)集上,這種方法通過降低輸入維度和增強(qiáng)模型對(duì)關(guān)鍵特征的關(guān)注,進(jìn)一步提升了訓(xùn)練效率和檢測(cè)精度。

2.2基于Bi-GGNN的雙向數(shù)據(jù)流分析方法一 BiG-BiD

在構(gòu)建ICFG并進(jìn)行DLAE圖抽象嵌人之后,本文引入后向邊構(gòu)建并訓(xùn)練Bi-GGNN來學(xué)習(xí)包含抽象數(shù)據(jù)流信息的節(jié)點(diǎn)嵌入漏洞語義。具體來說,在Bi-GGNN中,對(duì)于每一條邊 k 所連接的一對(duì)節(jié)點(diǎn) (u,v) ,同時(shí)考慮其前向邊 (u,v) 和后向邊(,u )。為了實(shí)現(xiàn)這一點(diǎn),原始的前向邊構(gòu)建的鄰接矩陣通過轉(zhuǎn)置操作生成對(duì)稱矩陣,以表示后向邊。這樣,圖神經(jīng)網(wǎng)絡(luò)中消息傳遞不僅可以沿著控制流圖的前向邊進(jìn)行,還能夠通過這些對(duì)稱的后向邊反向傳播信息,從而形成雙向的消息傳遞機(jī)制。

這種雙向消息傳遞機(jī)制與數(shù)據(jù)流分析中的前向分析和后向分析過程高度相似。因此能夠在前向傳播和后向傳播時(shí)結(jié)合更多語義信息,這使得模型能夠更全面地捕捉跨過程的數(shù)據(jù)流特征,從而提高對(duì)復(fù)雜漏洞模式的識(shí)別能力。此外,雙向門控機(jī)制還允許Bi-GGNN更靈活地控制信息流動(dòng)的方式,通過門控操作調(diào)節(jié)信息的傳遞強(qiáng)度,確保模型在學(xué)習(xí)過程中關(guān)注那些更具重要性的節(jié)點(diǎn)和邊,進(jìn)而提升漏洞檢測(cè)的準(zhǔn)確性。

Bi-GGNN通過前向與后向傳播來模擬程序中的雙向數(shù)據(jù)流分析。具體來說,在前向傳播中,當(dāng)數(shù)據(jù)流信息到達(dá)ICFG中某個(gè)分支的合并點(diǎn)時(shí),使用aggregate聚合函數(shù)進(jìn)行信息聚合。這類似于數(shù)據(jù)流分析中的聚合函數(shù),負(fù)責(zé)匯聚來自多個(gè)前驅(qū)節(jié)點(diǎn)的信息。在Bi-GGNN中,aggregate函數(shù)是一個(gè)多層感知機(jī)(MLP),它通過計(jì)算相鄰前驅(qū)節(jié)點(diǎn)表示的加權(quán)和,生成一個(gè)新的單一向量表示。這與到達(dá)定義分析中將多個(gè)前驅(qū)數(shù)據(jù)流匯聚在一起的方式一致。當(dāng)數(shù)據(jù)流信息到達(dá)一個(gè)新節(jié)點(diǎn)時(shí),應(yīng)用update函數(shù)更新當(dāng)前節(jié)點(diǎn)的狀態(tài)。這個(gè)update函數(shù)基于門控循環(huán)單元(GRU),通過結(jié)合當(dāng)前節(jié)點(diǎn)的狀態(tài)和來自前驅(qū)節(jié)點(diǎn)的聚合結(jié)果來計(jì)算新的狀態(tài)。GRU能夠選擇性地遺忘舊的狀態(tài)并結(jié)合新的輸入信息,這與數(shù)據(jù)流分析中傳遞函數(shù)所做的操作類似,即根據(jù)當(dāng)前信息執(zhí)行集合的并/差操作來更新狀態(tài)。因此,update函數(shù)模擬了數(shù)據(jù)流分析中的傳遞函數(shù)。

由于活躍變量分析是一個(gè)后向分析過程,類似的情形也發(fā)生在消息傳遞的后向傳播中。通過訓(xùn)練時(shí)同時(shí)執(zhí)行前向和后向傳播,可以分別模擬到達(dá)定義分析和活躍變量分析的過程。在前向和后向消息傳遞中,節(jié)點(diǎn)的抽象嵌入會(huì)根據(jù)來自相鄰節(jié)點(diǎn)的數(shù)據(jù)流信息進(jìn)行更新和傳遞。

其中,aggregate和update操作在每次消息傳遞迭代時(shí)都會(huì)更新節(jié)點(diǎn)的狀態(tài)表示,消息傳遞的迭代次數(shù) T 作為超參數(shù)進(jìn)行設(shè)置,控制模型的傳播深度。在迭代完成后,使用全局注意力池化將所有學(xué)習(xí)到的節(jié)點(diǎn)嵌入組合成一個(gè)圖級(jí)表示。這一步將整個(gè)圖的信息匯總,并生成一個(gè)用于分類的整體表示。最終,這個(gè)圖級(jí)表示會(huì)被傳遞到分類器,預(yù)測(cè)當(dāng)前函數(shù)是否含有漏洞。在訓(xùn)練過程中,aggregate和update函數(shù)是可學(xué)習(xí)的參數(shù),而不是數(shù)據(jù)流分析中的固定公式。

Bi-GGNN的雙向消息傳遞機(jī)制可完整模擬到達(dá)定義分析和活躍變量分析,從而捕獲全局動(dòng)態(tài)數(shù)據(jù)流漏洞模式。通過從數(shù)據(jù)流信息迭代中學(xué)習(xí)漏洞特征,本文提供了一種解決一般數(shù)據(jù)流分析需要手動(dòng)定義復(fù)雜漏洞檢測(cè)規(guī)則的問題。通過從訓(xùn)練示例中學(xué)習(xí),分類器可以捕獲表示各種類型漏洞的數(shù)據(jù)流信息模式,并為漏洞檢測(cè)選擇相關(guān)數(shù)據(jù)流信息,以此來實(shí)現(xiàn)高效的漏洞檢測(cè)。

3 實(shí)驗(yàn)與分析

3.1 實(shí)驗(yàn)設(shè)置

實(shí)驗(yàn)使用數(shù)據(jù)集是漏洞檢測(cè)領(lǐng)域廣泛采用的Big-Vul[26]以及Reveal[14]。Big-Vul是一個(gè)由真實(shí)漏洞函數(shù)組成的高質(zhì)量漏洞數(shù)據(jù)集,涵蓋了2002年至2019年在348個(gè)不同開源項(xiàng)目中的CVE條目,共有 11834 個(gè)包含漏洞的函數(shù)以及253096個(gè)不含漏洞的正常函數(shù);Reveal是從Chromium和Debian項(xiàng)目中收集的漏洞數(shù)據(jù)集,包含2240個(gè)包含漏洞的函數(shù)和20494個(gè)正常函數(shù)。它們反映了現(xiàn)實(shí)世界中代碼漏洞的不平衡分布。

為了處理數(shù)據(jù)集的類不平衡問題,采用SMOTE算法來合成漏洞樣本并對(duì)不含漏洞的樣本進(jìn)行隨機(jī)刪除,直至正負(fù)樣本比例趨于平衡。將數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)集、驗(yàn)證數(shù)據(jù)集和測(cè)試數(shù)據(jù)集,比例分別為 80%,10%,10% 。

實(shí)驗(yàn)選擇三個(gè)靜態(tài)分析工具Checkmark[27]、FlawFind-er[28] 、RATS[29]以及三個(gè)性能先進(jìn)的漏洞檢測(cè)模型Devign[13]Reveal[14] Ample[15] 作為比較對(duì)象,分析對(duì)比它們?cè)诼┒礄z測(cè)任務(wù)上的性能表現(xiàn)。

實(shí)驗(yàn)設(shè)置的超參數(shù):隱藏層大小為32,批量大小為256;學(xué)習(xí)率為0.00015;優(yōu)化器為ADAMAX;dropout為0.2;GNN迭代次數(shù) T 為6。

考慮訓(xùn)練過程中隨機(jī)因素對(duì)模型性能的影響,實(shí)驗(yàn)中對(duì)每個(gè)方法使用相同的超參數(shù)進(jìn)行多次訓(xùn)練迭代,直至性能穩(wěn)定后進(jìn)行測(cè)試。

為了評(píng)估模型的有效性,本文采用最流行的評(píng)價(jià)指標(biāo),如表1所示。其中:TP(truepositive)表示正確預(yù)測(cè)為包含漏洞的樣本數(shù)量;TN(truenegative)表示正確預(yù)測(cè)為不包含漏洞的樣本數(shù)量;FP(1positive)表示錯(cuò)誤預(yù)測(cè)為包含預(yù)測(cè)的樣本數(shù)量;FN(1negative)表示錯(cuò)誤預(yù)測(cè)為不包含漏洞的樣本數(shù)量。基于以上四種二值分類的輸出,計(jì)算準(zhǔn)確率、精確率、召回率 分?jǐn)?shù)。準(zhǔn)確率是漏洞樣本和正常樣本覆蓋率的度量,反映正確預(yù)測(cè)樣本的能力;精確率表示預(yù)測(cè)為包含漏洞的樣本中真實(shí)包含漏洞樣本的比例,反映模型的誤報(bào)比例;召回率是漏洞樣本覆蓋率的度量,反映模型的漏報(bào)比例; F1 分?jǐn)?shù)表示同時(shí)考慮精確率和召回率的模型總體有效性的度量。

表1評(píng)價(jià)指標(biāo)Tab.1Evaluation metrics

3.2 實(shí)驗(yàn)結(jié)果分析

為了驗(yàn)證本文BiG-BiD的有效性,在兩個(gè)真實(shí)數(shù)據(jù)集上進(jìn)行了對(duì)比實(shí)驗(yàn),并對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行可視化,結(jié)果如表2和圖5所示。從中可以看出,傳統(tǒng)靜態(tài)分析工具的漏洞檢測(cè)效果并不理想,特別是在召回率方面均低于 40% ,表明這些工具存在較高的漏報(bào)率。最直觀的原因是靜態(tài)分析工具通過專家定義的漏洞模式規(guī)則來檢測(cè)漏洞。然而,這種規(guī)則只能檢測(cè)最簡(jiǎn)單的漏洞樣本,往往難以覆蓋復(fù)雜的真實(shí)環(huán)境。而與三種基于深度學(xué)習(xí)的方法相比,本文BiG-BiD在召回率上提高了 5%~28% 。產(chǎn)生這一差距的原因主要在于,Devign、Reveal、Ample并沒有考慮動(dòng)態(tài)數(shù)據(jù)流信息以及過程間的漏洞語義,且它們的代碼圖都是基于源代碼構(gòu)建,源代碼中包含著大量與漏洞語義無關(guān)的信息。而代碼屬性圖過于龐大,包含的節(jié)點(diǎn)和邊過多,導(dǎo)致模型難以專注于學(xué)習(xí)與漏洞相關(guān)的模式特征。而本文方法基于LLVMIR構(gòu)建ICFG,通過DLAE進(jìn)行抽象嵌入,并結(jié)合了動(dòng)態(tài)的抽象數(shù)據(jù)流信息,使得模型能夠聚焦漏洞語義相關(guān)的關(guān)鍵信息,精確捕捉數(shù)據(jù)動(dòng)態(tài)流動(dòng)過程中的漏洞模式特征。另一方面,由于到達(dá)定義分析和活躍變量分析追求盡可能全面地覆蓋漏洞,使得BiG-BiD更側(cè)重于提高漏洞的召回率即盡可能少地漏報(bào),導(dǎo)致Ample在精確率上略高于BiG-BiD。

表2各方法實(shí)驗(yàn)結(jié)果Tab.2Experimental resultsof each method1%

圖6和7是數(shù)據(jù)集中截取的兩個(gè)簡(jiǎn)短跨函數(shù)且與數(shù)據(jù)流相關(guān)的漏洞,均需要通過跨函數(shù)以及數(shù)據(jù)流分析的方法來檢測(cè),因此只有本文BiG-BiD成功檢測(cè)出了這兩個(gè)漏洞。

圖6是一個(gè)緩沖區(qū)溢出漏洞,在receive_input函數(shù)中,數(shù)據(jù)流從input流入,strcpy函數(shù)將input的內(nèi)容復(fù)制到buffer中,但沒有檢測(cè)input大小。在main函數(shù)調(diào)用receive_input時(shí),觸發(fā)緩沖區(qū)溢出漏洞。若只是通過receive_input的控制流圖并不能直接判斷該函數(shù)存在緩沖區(qū)溢出漏洞,只有結(jié)合過程間調(diào)用信息以及數(shù)據(jù)流分析,才可以判斷該漏洞的存在。

圖5各方法在Big-Vul和Reveal上的實(shí)驗(yàn)結(jié)果可視化Fig.5Visualization of experimental results of various methodsonBig-Vul andReveal

圖7是一個(gè)更為復(fù)雜的空指針解引用漏洞,該漏洞跨四個(gè)函數(shù),指針變量具有較長的生命周期。為了便于理解,在ini-tializeData函數(shù)中使用硬編碼作為條件來初始化指針data。在handleRequest函數(shù)中,指針data被傳遞給initializeData函數(shù),該函數(shù)可能將指針置為1ptr。隨后,指針被傳遞到process-Data函數(shù),后者未檢查指針是否為空,直接解引用了它。這種跨函數(shù)的數(shù)據(jù)流未經(jīng)過有效性驗(yàn)證,會(huì)導(dǎo)致空指針解引用漏洞,從而引發(fā)程序崩潰。此漏洞可以通過到達(dá)定義分析來檢測(cè),跟蹤指針的傳遞路徑并識(shí)別潛在的空指針問題。

為了探究BiG-BiD動(dòng)態(tài)模擬雙向數(shù)據(jù)流分析的迭代次數(shù)T 對(duì)模型性能的影響,在保持其他超參數(shù)不變的情況下,分別設(shè)置不同的迭代次數(shù)進(jìn)行實(shí)驗(yàn)并評(píng)估模型性能。實(shí)驗(yàn)結(jié)果如圖8所示。從中可以看出,迭代次數(shù)在1\~6時(shí),隨迭代次數(shù)增加, F1 分?jǐn)?shù)不斷上升。迭代次數(shù)為6或7時(shí),模型性能達(dá)到了穩(wěn)定的最佳水平,性能差異不大。而隨著迭代次數(shù)繼續(xù)增加,模型性能出現(xiàn)了一定程度的下降。分析其原因,在數(shù)據(jù)流分析中,迭代次數(shù)過少,迭代不充分,數(shù)據(jù)流狀態(tài)不能到達(dá)不動(dòng)點(diǎn)。相似地,在動(dòng)態(tài)模擬數(shù)據(jù)流分析的圖神經(jīng)網(wǎng)絡(luò)中,較少的迭代次數(shù)下,數(shù)據(jù)流信息不能充分地傳播和更新,導(dǎo)致模型不能很好地學(xué)習(xí)數(shù)據(jù)流傳播過程中的漏洞語義特征。而當(dāng)?shù)螖?shù)過多時(shí),數(shù)據(jù)流信息已經(jīng)得到了充分傳播和更新,此時(shí)繼續(xù)迭代不再帶來有效信息的增益,反而可能引入噪聲或不相關(guān)的特征。

圖7空指針解引用漏洞代碼Fig.7Null pointer dereferencevulnerabilitycode"

這些額外的信息干擾了模型對(duì)漏洞特征的學(xué)習(xí),導(dǎo)致模型性能下降。因此,適當(dāng)?shù)牡螖?shù)對(duì)于模型的性能至關(guān)重要。設(shè)置合適的迭代次數(shù)能夠確保模型有效捕捉雙向數(shù)據(jù)流分析中的漏洞特征,而不會(huì)因?yàn)榈^少或過多而影響最終的模型表現(xiàn)。在實(shí)際訓(xùn)練中,經(jīng)過驗(yàn)證,選擇6次左右的迭代次數(shù)為最佳,這平衡了信息傳播的充分性且避免過度迭代帶來的噪聲干擾。

為了進(jìn)一步驗(yàn)證本文BiG-BiD動(dòng)態(tài)模擬雙向數(shù)據(jù)流分析的有效性,對(duì)不同數(shù)據(jù)流處理模式進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果如表3所示。其中Bef-DFA表示對(duì)程序分別進(jìn)行到達(dá)定義分析和活躍變量分析,到達(dá)不動(dòng)點(diǎn)后的狀態(tài)作為Bi-GGNN的輸人,即使用靜態(tài)數(shù)據(jù)流信息作為輸人訓(xùn)練模型;Def-DFA表示在Bi-GGNN中只進(jìn)行動(dòng)態(tài)地模擬到達(dá)定義分析,而不包括活躍變量分析;Val-DFA表示在Bi-GGNN中只動(dòng)態(tài)地模擬活躍變量分析,而不包括到達(dá)定義分析。從結(jié)果可以看出,使用動(dòng)態(tài)模擬數(shù)據(jù)流分析的方法Def-DFA、Val-DFA、BiG-BiD顯然比到達(dá)不動(dòng)點(diǎn)后的靜態(tài)數(shù)據(jù)流狀態(tài)作為輸入的方法Bef-DFA效果更好,且使用到達(dá)定義分析和活躍變量分析結(jié)合BiG-BiD的效果明顯優(yōu)于單獨(dú)一種數(shù)據(jù)流分析方法Def-DFA、Val-DFA。這是因?yàn)樵趫D神經(jīng)網(wǎng)絡(luò)中動(dòng)態(tài)模擬數(shù)據(jù)流分析過程中,通過多次迭代傳播數(shù)據(jù)流信息,能夠捕捉程序執(zhí)行過程中數(shù)據(jù)流的動(dòng)態(tài)變化。這種動(dòng)態(tài)傳播更新機(jī)制使得模型可以更深人地學(xué)習(xí)數(shù)據(jù)流傳播過程中的漏洞語義特征,尤其是在復(fù)雜場(chǎng)景中,能夠更有效地識(shí)別出隱藏的漏洞模式。而靜態(tài)數(shù)據(jù)流信息(Bef-DFA)僅表示不動(dòng)點(diǎn)狀態(tài),無法充分反映程序中的潛在漏洞語義。而每種數(shù)據(jù)流分析方法各自能夠檢測(cè)的漏洞類型不同。例如,到達(dá)定義分析可以捕捉到變量定義未被正確使用的漏洞,而活躍變量分析則更擅長發(fā)現(xiàn)未初始化或無效變量使用的漏洞。因此,單一的數(shù)據(jù)流分析方法(Def-DFA或Val-DFA)無法全面覆蓋所有漏洞類型。BiG-BiD結(jié)合了兩種數(shù)據(jù)流分析方法,通過前向和后向的雙向傳播,能夠更好地學(xué)習(xí)到完整的漏洞語義特征,顯著提升了模型的檢測(cè)能力。

表3不同數(shù)據(jù)流處理模式對(duì)比實(shí)驗(yàn)結(jié)果
表4不同數(shù)據(jù)流分析方法對(duì)比實(shí)驗(yàn)結(jié)果

為了進(jìn)一步探究不同數(shù)據(jù)流分析方法對(duì)模型性能的影響,本文將到達(dá)定義分析替換為另一種前向數(shù)據(jù)流分析方法 一可用表達(dá)式分析,進(jìn)行了實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果如表4所示。從結(jié)果可以發(fā)現(xiàn),使用可用表達(dá)式分析和活躍變量分析結(jié)合的方法Exp+Val 的性能明顯弱于本文提出的結(jié)合到達(dá)定義分析和活躍變量分析的方法BiG-BiD。深人分析其原因,可用表達(dá)式分析的主要功能在于消除代碼冗余和優(yōu)化死代碼,它通過確定在程序的某些執(zhí)行路徑中某些表達(dá)式的計(jì)算結(jié)果是否已知,來減少不必要的重復(fù)計(jì)算。這種分析更適用于代碼優(yōu)化和性能提升,而不擅長發(fā)現(xiàn)復(fù)雜的漏洞。相比之下,到達(dá)定義分析直接處理變量定義及其在程序中是否有效或可能引發(fā)錯(cuò)誤的使用,能更有效地捕捉復(fù)雜漏洞模式形成的根本原因。因此,本文BiG-BiD方法能夠更好地捕捉漏洞特征,顯著提升模型的漏洞檢測(cè)性能。

為了進(jìn)一步評(píng)估本文BiG-BiD在現(xiàn)實(shí)世界中的有效性及泛化性,本文選擇了四個(gè)知名的開源項(xiàng)目LinuxKernel-5.10、QEMU-6.2.0、Apache-2.4.54、OpenSSL-3.0.5進(jìn)行漏洞檢測(cè)。如表5所示,成功檢測(cè)出23個(gè)新的漏洞,其中LinuxKernel9個(gè),QEMU4個(gè),Apache7個(gè),OpenSSL3個(gè)。值得注意的是,檢測(cè)到的漏洞中有10個(gè)漏洞尚未得到修復(fù),這進(jìn)一步表明了BiG-BiD在檢測(cè)漏洞方面的有效性和泛化性。

4結(jié)束語

本文提出了一種基于LLVMIR與Bi-GGNN雙向數(shù)據(jù)流分析的漏洞檢測(cè)方法。基于LLVMIR構(gòu)建ICFG引入跨過程語義,設(shè)計(jì)了一種結(jié)合抽象數(shù)據(jù)流與LLVMIR行級(jí)漏洞屬性特征嵌入的ICFG抽象嵌入方法DLAE,使用屬性圖定義的方式結(jié)合抽象數(shù)據(jù)流狀態(tài)、節(jié)點(diǎn)信息、邊的信息構(gòu)造適合圖神經(jīng)網(wǎng)絡(luò)輸入的圖級(jí)向量形式。最后,通過引入后向邊訓(xùn)練Bi-GGNN,實(shí)現(xiàn)在ICFG中動(dòng)態(tài)模擬到達(dá)定義分析與活躍變量分析,以動(dòng)態(tài)傳播與更新抽象數(shù)據(jù)流信息。實(shí)驗(yàn)結(jié)果證明了該方法的有效性和泛化性。綜合看來,BiG-BiD是一種性能表現(xiàn)優(yōu)異的結(jié)合動(dòng)態(tài)數(shù)據(jù)流分析的方法,提供了一種結(jié)合多種動(dòng)態(tài)數(shù)據(jù)流進(jìn)行跨過程漏洞檢測(cè)的思路。

盡管本文方法能夠有效提升漏洞檢測(cè)的效果,但是不同的數(shù)據(jù)流分析方法所針對(duì)的漏洞類型不同,不同的圖神經(jīng)網(wǎng)絡(luò)在漏洞檢測(cè)任務(wù)中的效果也并不相同,因此如何結(jié)合更多的數(shù)據(jù)流分析方法和其他的靜態(tài)分析方法以盡可能全面地覆蓋漏洞類型以及如何選擇更加有效的圖神經(jīng)網(wǎng)絡(luò),將是未來研究考慮解決的問題。

表5檢測(cè)出的知名開源項(xiàng)目未知漏洞Tab.5Unknown vulnerabilities detected in well-known open source project:

參考文獻(xiàn):

[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]唐成華,蔡維嘉,林和,等.軟件漏洞模糊測(cè)試的關(guān)鍵分支探索 及熱點(diǎn)更新算法[J].計(jì)算機(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]張國棟,劉子龍,靳卓,等.用于漏洞檢測(cè)的中間語言表示方法 [J].計(jì)算機(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]楊盡能,李汶珊,何俊江,等.基于雙注意力機(jī)制和改進(jìn)對(duì)抗訓(xùn) 練的漏洞分類方法[J].計(jì)算機(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ìn)差分進(jìn)化算法的源碼 漏洞檢測(cè)模型的冷啟動(dòng)方法[J].計(jì)算機(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]許健,陳平華,熊建斌.融合滑動(dòng)窗口和哈希函數(shù)的代碼漏洞檢 測(cè)模型[J].計(jì)算機(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/.

猜你喜歡
深度學(xué)習(xí)網(wǎng)絡(luò)安全
網(wǎng)絡(luò)安全知多少?
網(wǎng)絡(luò)安全
網(wǎng)絡(luò)安全人才培養(yǎng)應(yīng)“實(shí)戰(zhàn)化”
上網(wǎng)時(shí)如何注意網(wǎng)絡(luò)安全?
有體驗(yàn)的學(xué)習(xí)才是有意義的學(xué)習(xí)
電子商務(wù)中基于深度學(xué)習(xí)的虛假交易識(shí)別研究
MOOC與翻轉(zhuǎn)課堂融合的深度學(xué)習(xí)場(chǎng)域建構(gòu)
大數(shù)據(jù)技術(shù)在反恐怖主義中的應(yīng)用展望
深度學(xué)習(xí)算法應(yīng)用于巖石圖像處理的可行性研究
基于深度卷積網(wǎng)絡(luò)的人臉年齡分析算法與實(shí)現(xiàn)
軟件工程(2016年8期)2016-10-25 15:47:34
主站蜘蛛池模板: 国产91精选在线观看| 综合色天天| 人妻一区二区三区无码精品一区| 永久免费无码日韩视频| 欧美不卡视频在线| 欧美午夜在线播放| 亚洲国产天堂久久综合| 欧美日韩第二页| 国产精品主播| 亚洲精品va| 一级爆乳无码av| 国产精品一区二区国产主播| 国产成人亚洲精品无码电影| 性色一区| 青青青国产视频| 亚洲视频免| 国产高清在线观看91精品| 九色视频一区| 九色在线观看视频| 日本亚洲成高清一区二区三区| 天天操天天噜| 无码综合天天久久综合网| 狠狠五月天中文字幕| 成人午夜精品一级毛片| 亚洲成人免费在线| 污视频日本| 在线色综合| 国产成人精品一区二区| 首页亚洲国产丝袜长腿综合| 日韩精品免费一线在线观看| 国产精品一区二区在线播放| 日本在线亚洲| 国产va免费精品观看| 中文字幕亚洲精品2页| 国产精品丝袜视频| P尤物久久99国产综合精品| 天堂成人在线| 成人免费视频一区二区三区 | 欧美国产视频| 中文字幕日韩视频欧美一区| 国产95在线 | 99免费在线观看视频| 久久人妻xunleige无码| 国产女人在线观看| 亚洲欧美日本国产综合在线 | 亚洲中文无码av永久伊人| 青青青国产视频| 欧美劲爆第一页| 国产不卡在线看| 国产第一福利影院| 毛片免费视频| 谁有在线观看日韩亚洲最新视频| 欧美特黄一免在线观看| 黄色网页在线观看| 麻豆国产在线观看一区二区| 久久综合色视频| 亚洲第一精品福利| 亚洲天堂久久新| av免费在线观看美女叉开腿| 欧美不卡二区| 成人午夜在线播放| 在线五月婷婷| 91视频青青草| 人妻中文字幕无码久久一区| 狼友视频一区二区三区| 中文字幕人妻无码系列第三区| 国产精品手机在线播放| 欧美α片免费观看| 亚洲综合香蕉| 亚洲综合中文字幕国产精品欧美| 一本视频精品中文字幕| 国内精品久久久久久久久久影视| 无码AV动漫| 国产美女自慰在线观看| 欧美97欧美综合色伦图| 精品国产成人av免费| 国产视频 第一页| 欧美色香蕉| 亚洲免费毛片| 色窝窝免费一区二区三区| 噜噜噜久久| 国产成人a毛片在线|