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

基于關系圖卷積網絡的源代碼漏洞檢測

2022-07-05 10:08:08文敏王榮存姜淑娟
計算機應用 2022年6期
關鍵詞:檢測方法模型

文敏,王榮存,姜淑娟

基于關系圖卷積網絡的源代碼漏洞檢測

文敏1,2,王榮存1,2,3*,姜淑娟1,2

(1.礦山數字化教育部工程研究中心(中國礦業大學),江蘇 徐州 221116; 2.中國礦業大學計算機科學與技術學院,江蘇 徐州 221116; 3.高安全系統的軟件開發與驗證技術工業和信息化部重點實驗室(南京航空航天大學),南京 211106)(*通信作者電子郵箱rcwang@cumt.edu.cn)

軟件安全的根源在于軟件開發人員開發的源代碼,但隨著軟件規模和復雜性不斷提高,僅靠人工檢測漏洞代價高昂且難以擴展,而現有的代碼分析工具有較高的誤報率與漏報率。為此,提出一種基于關系圖卷積網絡(RGCN)的自動化漏洞檢測方法以進一步提高漏洞檢測的精度。首先將程序源代碼轉換為包含語法、語義特征信息的CPG;然后使用RGCN對圖結構進行表示學習;最后訓練神經網絡模型預測程序源代碼中的漏洞。為驗證所提方法的有效性,在真實的軟件漏洞樣本上開展了實驗驗證,結果表明所提方法的漏洞檢測結果的召回率和F1值分別達到了80.27%和63.78%。與Flawfinder、VulDeepecker和基于圖卷積網絡(GCN)的同類方法相比,所提方法的F1值分別提高了182%、12%和55%,可見所提方法能有效提高漏洞檢測能力。

漏洞檢測;代碼屬性圖;關系圖卷積網絡;深度學習;預測模型

0 引言

如今,計算機軟件已經滲透到生活的方方面面。不安全的軟件可能造成用戶的人身傷害和財產損失,甚至嚴重威脅國家安全。軟件變得愈加復雜,且規模也不斷增加;與此同時,安全漏洞的數量一直在逐年增加。漏洞也稱為脆弱性,是指軟件中的特定缺陷或疏忽[1]。攻擊者可以利用這些漏洞進行惡意操作,暴露或更改敏感信息,破壞或控制計算機系統,對信息安全產生極大的威脅。2017年,WanaCry病毒勒索軟件利用了一個源自服務器消息塊的漏洞,導致了全球約80億美元的損失。鑒于現代軟件項目的規模和復雜度在不斷提高,通過人工方式開展漏洞檢測代價高昂,且難以擴展,因此使用工具自動檢測軟件漏洞輔助代碼審計是一個重要研究方向。根據是否依賴程序運行,傳統的漏洞分析方法[2]分為靜態方法和動態方法。靜態分析方法[3]根據預定義的漏洞規則對源程序進行掃描,以便獲取詞法、語法、控制流和數據流等信息后進行模式匹配來發現漏洞。該類方法無需搭建運行環境,但是需要源代碼,常常應用于設計開發階段。典型的靜態分析工具有Coverity、Flawfinder、RATS。動態分析方法通過收集軟件運行過程中程序狀態和運行路徑等信息進行分析。該類方法需要構造大量測試輸入,以覆蓋盡可能多的程序輸出和執行路徑,常應用于調試、測試階段。常見的動態分析工具有KLEE[4]、S2E[5]、libFuzzer、AFL等。

然而,現有的代碼分析工具在檢測漏洞方面不夠有效。靜態分析工具往往依賴于專家知識人工構造的漏洞模式庫。隨著軟件復雜性持續增加,人工構造漏洞模式庫的成本高昂,且人的主觀性會影響漏洞檢測的誤報率和漏報率。在動態方法中,符號執行[6]策略面臨著路徑爆炸、約束求解困難、代價高昂、內存建模與并行處理復雜、難以擴展到大規模程序等問題。同樣的,模糊測試[7]面臨著覆蓋率低、依賴種子生成質量、測試冗余、測試攻擊面模糊、難以發現訪問控制漏洞和設計邏輯錯誤等問題。

漏洞產生的根源是軟件開發人員開發的不安全代碼。軟件的長期運行積累了大量的歷史數據,因此可以利用機器學習方法學習并挖掘與軟件漏洞相關的歷史數據。與靜態分析檢測漏洞方法相比,基于機器學習的漏洞檢測方法能有效降低漏洞的漏報率。與符號執行等動態分析方法相比,基于機器學習的漏洞檢測方法成本更低、更具擴展性。同時機器學習結果還可以用于指導模糊測試中的路徑覆蓋和種子生成,有助于解決傳統漏洞分析方法的局限性。因此研究基于機器學習的代碼脆弱性識別方法,解決漏洞挖掘的自動化、效率、代碼覆蓋率、代碼深度等問題,降低人工參與度,實現智慧型脆弱性知識挖掘和系統級大規模脆弱性挖掘具有重要的現實意義。

鑒于已有的基于靜態分析的漏洞檢測方法存在精度不高的問題,本文提出了一種基于關系圖卷積網絡( Relational Graph Convolution Network, RGCN)的自動化漏洞檢測方法。首先將程序源代碼轉換為包含語法語義特征信息的代碼屬性圖(Code Property Graph, CPG),然后使用RGCN對圖進行表示學習后進行漏洞預測。最后,在真實世界的軟件漏洞樣本上開展了實驗驗證,并比較了三種基線方法。實驗結果表明,與基線方法相比,本文方法能進一步提高漏洞檢測能力。

1 相關工作

基于機器學習的漏洞檢測方法[8-9]通過挖掘軟件漏洞歷史數據,使用機器學習模型進行漏洞檢測。已有的研究可大致分為基于軟件度量的漏洞檢測和基于模式學習的漏洞檢測。

基于軟件度量的漏洞檢測往往依賴于專家定義的特征,其思想主要借鑒了軟件質量和可靠性領域的缺陷預測。軟件度量信息包含代碼度量和過程度量等,其中代碼度量主要描述源碼的靜態特征。如Shin等[10]研究了基于代碼復雜度和執行復雜度等傳統缺陷預測度量能否用來預測漏洞,并嘗試了多種分類模型。Younis等[11]選取了代碼行數、圈復雜度、嵌套層數等八個代碼度量指標描述代碼特征,實驗驗證了三種不同的特征選擇方法和四種不同的分類算法預測可被利用的漏洞。Walden等[12]首次將文本挖掘相關方法應用于軟件組件漏洞預測,與基于軟件度量的學習模型相比具有更高的召回率和準確率。過程度量主要描述了從版本管理系統中收集的代碼開發過程中的各種變化信息。如Shin等[13]研究了開發者活動度量元與漏洞間的聯系,構建貝葉斯網絡預測易受攻擊的文件。Bosu等[14]針對易受攻擊代碼的更改特征進行了實證研究,分析了10個開源項目中超過260 000個代碼修改請求。王飛雪等[15]基于漏洞披露報告定義了一組特征,如修復時間、漏洞嚴重性、開發人員信息、更改文件數等,并使用四種機器學習方法進行了漏洞分類。

盡管上述研究使用了不同類型的統計度量指標,但這些度量僅是開發人員根據經驗而設計的統計特征,并非漏洞的直接指示,與漏洞關聯性不強。因此,上述方法無法有效地捕捉到豐富的程序語義、語法結構信息,從而限制了機器學習分類模型對程序行為進行推理的能力。從這個意義上說,僅依賴于軟件度量指標構建預測模型進行漏洞檢測的效果不夠理想。

基于模式學習的漏洞檢測常結合不同的程序分析技術如靜態分析、動態分析、詞法分析和語法分析等輔助模型學習。如Yamaguchi等[16]提出了一種名叫“漏洞外推”(Vulnerability Extrapolation)的方法進行漏洞檢測。該方法從漏洞函數中提取抽象語法樹(Abstract Syntax Tree, AST),將其映射到向量空間,進而尋找結構上相似的函數。Russell等[17]編譯了一個包含數百萬個開源函數的龐大數據集,使用三個不同的靜態分析器進行了標記,經詞法分析和向量化編碼后使用卷積神經網絡(Convolutional Neural Network, CNN)和循環神經網絡(Recurrent Neural Network, RNN)模型進行特征提取,最后使用隨機森林對所學習到的特征進行分類,證明了利用深度學習進行漏洞檢測的可行性。Duan等[18]將程序代碼節點之間的關系編碼為144維的特征張量,充分提取了程序的語義特征,并利用注意力機制的神經網絡來學習程序不同區域的注意力權重,實現對漏洞的細粒度檢測,以解決檢測細粒度漏洞準確率低的問題。Li等[19]提出的基于深度學習的漏洞檢測系統VulDeepecker通過對庫/API調用進行語義切片后組合成code gadget,再對其進行向量化編碼成固定長度后使用雙向長短期記憶(Bi-directional Long-Short Term Memory, BLSTM)神經網絡進行學習和預測。但BLSTM神經網絡只適合線性序列,只能學習淺層表示,無法捕獲程序深層的結構和語義。基于圖的表示形式包含了代碼中更豐富的語義語法和結構特征,因此將代碼轉換成基于圖的中間表示對其進行學習成為當下研究熱點。孔維星等[20]在對源碼進行程序分析構造出代碼圖的鄰接矩陣和特征矩陣后,輸入到圖卷積網絡(Graph Convolution Network, GCN)模型進行學習。該學習模型只專注于代碼節點之間是否存在連接,將代碼節點之間不同的類型邊融合成了一條,沒有考慮不同類型邊對于漏洞檢測效果的影響。為此有必要結合多種類型的代碼圖,對不同語義、語法邊分別進行學習,以捕獲脆弱性和非脆弱性語句之間潛在和細微的語義、語法差距,學習更多的漏洞類型和模式。本文使用結合了AST、控制流圖(Control Flow Graph, CFG)和程序依賴圖(Program Dependence Graph, PDG)等多種語義、語法邊的CPG,利用RGCN模型對包含不同類型邊的CPG進行學習以識別漏洞。

2 背景介紹

2.1 代碼屬性圖

CPG是由Yamaguchi等[21]為了查找漏洞而提出的一種新的源代碼表示形式。該圖將AST、CFG和PDG這三種經典的代碼表示圖合并到一個聯合數據結構中,以對程序進行更加全面的建模,并實現了原型工具Joern。代碼表示圖的解析生成通常需要搭建編譯工作環境,包含所有頭文件。與以往的分析器不同,Joern是一個基于island grammar[22]構建的分析器,可以在不檢查所提供文本的全部語法的情況下進行模糊解析。在將代碼解析成一系列節點和代表節點間關系的邊后存儲在Neo4j圖數據庫,使用圖遍歷語言Gremlin設計漏洞模板進行漏洞查找,可以識別如緩沖區溢出、整數溢出、格式化字符串漏洞和內存泄露等。以下文給出的整數溢出的代碼樣本為例介紹每種代碼的表示形式。

AST是表示源代碼抽象語法信息的有序樹形結構,是代碼解析器用來理解程序基本結構和檢查語法錯誤的第一個中間表示。AST是構成許多其他代碼表示的基礎,它忽略了解析樹包含的一些語法信息,以便能更簡潔地表示源代碼中的語法信息。圖1(a)給出了前文代碼示例的AST。從根節點開始,代碼被分解成代碼塊、語句、聲明、表達式等,內部節點表示運算符(例如加法或賦值),葉節點表示操作數(例如常量或標識符),有向邊表示AST的父子關系。雖然AST已被用于識別語義相似的代碼,但是無法用作進行更深層的代碼語義分析(例如檢測未初始化的變量、未正確釋放的變量),因為這種代碼表示缺乏控制流和數據流信息。

CFG表示語句的執行順序,描述了程序在執行過程中所有可能遍歷的路徑以及需要滿足的條件。CFG基于AST構建,首先要考慮結構化控制語句如if、for和switch語句來構建初步CFG,其次再考慮諸如goto、break和continue等非結構化控制語句修正CFG。圖1(b)給出了前文代碼示例的CFG,流從入口節點進入到出口節點離開,語句和條件表示成節點,有向邊表示控制的轉移和路徑的派生。CFG封裝了基本塊信息,有助于理解程序,定位程序的不可達代碼,查找循環等語法結構。CFG已被廣泛用于各種安全應用中,如檢測惡意程序、指導模糊測試等,但是CFG無法提供數據流信息,這意味著無法識別易受攻擊者影響的數據。

PDG是為了執行程序切片縮小程序分析范圍而提出的一種圖表示,能夠明確地表示語句和謂詞間的數據依賴和控制依賴關系。通過確定定義的變量集和每個語句使用的變量集,然后計算每個語句和謂詞的可達性,可以從CFG中計算PDG的邊。圖1(c)給出了前文代碼示例的PDG:虛線C邊表示控制依賴,流向條件分支下的所有語句;實線D邊表示數據依賴,下標表示所涉及的變量,數據依賴邊表示對該變量的后續訪問或修改。例如,變量x用于if條件和賦值語句。

圖1 代碼的圖表示

圖2 代碼屬性圖

2.2 深度學習模型

近年來,CNN被廣泛應用于不同領域的模式分類中,尤其是在計算機視覺領域取得了革命性的突破。CNN能夠提取多尺度局部特征,但是只能對常規歐幾里得數據如圖像、文本等進行操作。基于CNN和網絡嵌入的啟發,Kipf等[23]提出了圖卷積網絡(Graph Convolutional Network, GCN)來對圖(Graph)數據進行處理,以深入發掘其特征和規律。Gilmer等[24]立足于節點間的信息傳播和聚合,提出了GCN的通用計算框架——消息傳遞神經網絡(Message Passing Neural Network, MPNN)。Schlichtkrull等[25]提出的RGCN模型是對GCN在關系圖域上的一種擴展,適用于諸如知識圖譜之類的多關系數據進行編碼。如圖3所示,RGCN根據邊類型和方向將圖拆分成不同的子圖,在每個子圖上獨立地進行信息傳播后,節點聚合來自不同子圖的結果并經過激活函數作為下一層網絡的輸入,為了保留原節點信息還可以添加自環self-loop。節點在整個圖中共享參數,可以并行計算同步更新。

圖3 RGCN模型

3 本文方法

本文方法的框架如圖4所示。該方法主要包括三個階段:1)提取源代碼的語法和語義信息,生成CPG;2)對圖進行編碼,作為關系圖卷積網絡的輸入;3)使用RGCN對圖進行表示學習,在經過卷積和池化進一步提取節點特征后,聚合所有節點特征饋入全連接神經網絡,經激活函數分類獲得最終的標簽,0為無漏洞,1為有漏洞。

圖4 本文方法框架

3.1 生成CPG

本文主要考慮了69種類型的節點和5種語法語義邊。在使用Joern工具生成CPG后將解析結果以純文本形式導出,將節點和邊分別保存至兩個CSV文件中,節點信息包含id、節點類型(如ExpressionStatement、CallStatement等)和節點的代碼內容、所屬函數、所處位置等字段信息;邊信息包含連接的起始節點id和邊類型等字段信息。本文考慮的不同語義語法的類型邊如表1所示。

表1 邊類型

DEF和USE邊關聯的是AST中表示符號的葉子節點與定義和使用符號的語句;REACHES邊連接具有數據依賴關系的語句節點,具有屬性var,值為所關聯的變量名;FLOWS_TO從CFGEntryNode開始,沿著所有程序可執行路徑,一直指向CFGExitNode,具有屬性flowLabel,在相連節點為if條件語句時值為true或false,在相連節點為switch語句時,值為case值;CONTROLS邊或由CFGEntryNode指向函數中所有語句,或由Condition節點流向條件分支的所有語句。

3.2 構造節點的初始化特征向量

算法 節點的初始化表示。

輸入 節點集;

輸出 節點的初始化特征列表。

3.3 訓練圖神經網絡

Deep Graph Library (DGL)是當前主流的圖神經網絡框架之一,提供多種圖神經網絡模型與采樣方法。本文使用DGL作為圖神經網絡后端,在為CPG構造節點特征集和邊集后使用接口方法add_edge,add_node轉換成DGL的圖數據結構DGLGraph,使用RGCN模型來學習異構邊融合圖的聚合信息。該模型傳播公式如下:

與節點級分類任務不同,本文的漏洞檢測目標是進行圖級分類,在不同關系下執行鄰域聚合過程后,將為每個節點學習到一組新的嵌入,再進一步經過卷積和池化提取節點特征,聚合所有節點特征饋入全連接神經網絡,經激活函數分類輸出最終預測的標簽,0為無漏洞,1為有漏洞。

4 實驗和結果分析

本文實驗運行在Google Colab云服務器上,語言環境為Python3.7,深度學習環境為Pytorch1.8.1,cuda10.1,dgl 0.4.1,gensim3.8.3。

4.1 實驗數據集

本文選用的數據集是Zhou等[28]收集和標注的真實世界漏洞數據集,包含了2個流行且多樣化的基于C/C++的開源庫FFmpeg和Qemu。FFmpeg項目是一個包含大量用于處理視頻、音頻以及其他多媒體流文件的庫,報告的主要漏洞類型是緩存溢出。Qemu項目是一款用于執行硬件虛擬化的模擬器,報告的主要的漏洞類型是拒絕服務(Denial of Service, DoS)、溢出引起的代碼執行等。為了確保數據標簽的質量,Zhou等[28]從Github上收集項目的相關提交,首先基于與安全相關的關鍵字(如Out of bound、Overflow等)標記與安全相關的提交,然后由四名專業安全研究人員組成的團隊總共花費了600個工時進行了兩輪數據標記和交叉驗證確認是修復漏洞的提交。最后從非漏洞修復提交中提取修改前的源碼函數作為非漏洞樣本集(Non-vul),從漏洞修復提交中提取修改前的源碼函數作為漏洞樣本集(Vul)。鑒于昂貴的人工成本并沒有對樣本集進行漏洞分類,但從提交信息來看這些漏洞大多是與內存有關的,如緩沖區溢出、內存泄漏、崩潰和損壞。這兩款實現不同功能的開源庫,即使對于相同類型的漏洞,也往往具有不同的形式和成因,為此可以用來驗證模型的泛化能力和有效性。數據集脆弱函數樣本統計數據如表2所示。

表2 漏洞數據集統計

4.2 實驗設置與評價指標

基于漏洞函數數據集生成圖并編碼生成實驗樣本,因為正負樣本數量接近無需作平衡處理,隨機打亂樣本并保持相同的正負樣本比例,并按照8∶1∶1的大小將樣本劃分成訓練集、驗證集和測試集,選擇在驗證集上具有最高F1值的模型為最佳模型。學習率設置為0.001,dropout設置為0.2防止過擬合,batch size設置為128,最大epoch次數為50,patience設置為10,即如果連續10次訓練迭代中驗證集上的F1分數都沒有增加,則停止訓練過程。選用Adam優化器和交叉熵損失函數進行有監督學習訓練模型。

4.3 實驗結果與討論

在先前的研究[14,29-30]中,經典的基于詞法分析的靜態分析工具Flawfinder和具有代表性的基于深度學習的漏洞檢測方法VulDeepecker[19]被廣泛地用作基準比較方法。為了驗證本文方法的有效性,與之前的研究一樣,本文也選用了Flawfinder和VulDeepecker作為基準方法進行了實驗對比。同時也選用孔維星等[20]提出的基于圖卷積模型的方法作為基準進行比較。

Flawfinder是一個簡單和快速的靜態分析器,通過掃描C/C++源代碼進行文本匹配以查找典型易受攻擊的庫函數的調用,如有緩沖區溢出風險的庫函數(gets、strcpy、strcat等)、容易受到字符串格式化攻擊的庫函數(sprintf、fprintf等)。然后檢查函數參數以估計風險,并生成一個按風險級別排序的潛在安全漏洞列表。它對于在程序發布之前快速查找和消除一些安全問題非常有用。

VulDeepecker是當下具有代表性的基于深度學習的漏洞檢測方法,通過對與漏洞相關的庫/API調用進行語義切片后組合成代碼小片段(code gadget),在對其進行向量化編碼成固定長度后使用BLSTM進行學習和分類。

孔維星等[20]使用Eclipse CDT編譯器進行代碼圖解析,設計提取了7種關系邊。在AST上提取Child邊和Next邊,Child邊連接AST上的父子節點,Next邊按代碼順序連接AST上的葉子節點。在進行數據流分析后提取源碼中變量間的數據依賴關系,ComputeFrom邊連接變量節點在修改時用到的其他變量節點;LastLexicalUse連接被if語句的條件節點使用的變量節點;GuardedBy連接if語句的條件節點和then語句中出現的變量節點;GuardedByNegation連接if語句的條件節點和else語句中出現的變量節點;Jump邊連接具有控制依賴關系的變量節點。在使用GCN進行節點更新后,聚合特征饋入全連接神經網絡進行預測。

根據4.2節設置的實驗參數,在開源項目FFmpeg和QEMU上進行了實驗。考慮計算效率,刪除了節點個數超過200的樣本。經不同方法處理后的樣本集統計數據如表3所示。因為文獻[20]的方法包含了AST上的所有分支節點和葉子節點,為此過濾了大量的樣本,而本文方法只保留了語句節點和變量節點,可以在有限的計算資源內分析更多樣本。

表3 不同方法生成的樣本集

觀察表4可以看出,基于深度學習的漏洞檢測方法的效果都明顯優于Flawfinder的靜態分析方法。Flawfinder方法的召回率只有14.65%,主要原因是Flawfinder是依靠專家定義規則,根據詞法分析對漏洞代碼進行模式匹配來挖掘漏洞,定義的規則無法覆蓋復雜多變的漏洞模式,作為一個快速掃描器,在搜索潛在漏洞和估計風險級別時不使用有關控制流或數據流等信息,為此容易漏報很多漏洞。本文方法的召回率最高可達80.27%,F1值也比VulDeepecker的F1值高出12%。分析原因是由于VulDeepecker在對代碼進行了切片且對嵌入向量進行了截斷,丟失了一些關鍵的代碼信息。

在表4中,將文獻[20]方法和本文方法拆分成圖編碼和圖學習模型兩部分進行比較。其中,CDT表示文獻[20]的圖編碼方法,GCN表示文獻[20]的圖學習模型,Joern表示本文的圖編碼方法,RGCN表示本文的圖學習模型。觀察可以得出,在CDT方法生成的樣本集上,RGCN模型的F1值比GCN模型的F1值高33.55%;在Joern方法生成的樣本集上,RGCN模型的F1值比GCN模型的F1值高39.08%。可見RGCN在對不同語義邊分別學習后能有效提高漏洞檢測結果。對于圖編碼方法,Joern方法在GCN和RGCN兩種模型上的F1值比CDT高出11%和16%,可見本文圖編碼方法的有效性。本文圖編碼方法關注的節點是語句節點和對語句具有依賴的變量節點,關注的邊是語句之間的依賴邊和語句與變量之間的依賴邊。文獻[20]的方法包含了AST上的所有分支節點和葉子節點,保留了AST上的所有語法邊,考慮的語義邊是變量之間的依賴關系。盡管該方法的分析粒度更細,但可能包含過多冗余的語法信息,反而不利于模型對于漏洞模式的學習。

圖5是本文方法和基準方法的受試者工作特征(Receiver Operating Characteristic, ROC)曲線,ROC是在不同的分類閾值下,以假陽率(False Positive Rate, FPR)為橫坐標,真陽率(True Positive Rate, TPR)為縱坐標繪制的曲線,ROC曲線與坐標軸圍成的面積即為曲線下面積(Area Under Curve, AUC),AUC值越大表示分類器的效果越好。本文方法的AUC值為0.671,高于文獻[20]方法的0.548和VulDeepecker的0.586。RGCN模型在兩種圖編碼方法生成樣本集上的AUC值分別是0.671和0.618,高于GCN模型的0.525和0.548。由此可見,本文的圖編碼方法和圖學習模型在漏洞檢測方面更加有效。

表4 不同方法的性能對比 單位: %

圖5 ROC曲線

本文通過結合不同的代碼表示圖并對其進行編碼,使用RGCN學習區分漏洞代碼和非漏洞代碼,提高了自動檢測漏洞能力。鑒于漏洞通常具有嚴重的危害性,因此較高的召回率對于模型的應用更具有重要的意義。本文方法以函數為單位進行檢測,但是包含漏洞的語句通常只占幾行,真實項目漏洞代碼更為復雜和多變,且訓練的樣本數量有限,學習的參數過多,因此本文方法容易產生過擬合。深度學習方法的性能與網絡架構和超參數有關,這是一個經驗性的任務,需要進一步優化,以提高模型的泛化能力。此外,深度學習方法缺乏可解釋性,這給深度學習在安全方面的應用帶來了困難。

5 結語

為了檢測源碼中的漏洞,本文提出了一種基于關系圖卷積網絡的自動化漏洞檢測方法。通過將程序源代碼建模成保留語法語義信息的代碼屬性圖,對節點和邊進行編碼后使用關系圖卷積網絡對圖結構進行表示學習,最后使用神經網絡進行分類預測。在真實的軟件漏洞樣本上進行了實驗驗證,并與三種經典的漏洞檢測方法進行了對比,結果顯示本文方法的召回率高達80.27%,說明本文方法在自動化檢測源碼上的漏洞是非常有效的。未來將研究更細粒度的漏洞檢測方法,更精確的漏洞代碼表示方法,以及更有效的學習模型,提供除預測結果外的更豐富的輔助信息,如漏洞類型、漏洞定位等。

[1] 吳世忠,郭濤,董國偉,等. 軟件漏洞分析技術進展[J]. 清華大學學報(自然科學版), 2012, 52(10): 1309-1319.(WU S Z, GUO T, DONG G W, et al. Software vulnerability analyses: a road map[J]. Journal of Tsinghua University (Science and Technology), 2012, 52(10): 1309-1319.)

[2] 李舟軍,張俊賢,廖湘科,等. 軟件安全漏洞檢測技術[J]. 計算機學報, 2015, 38(4): 717-732.(LI Z J, ZHANG J X, LIAO X K, et al. Survey of software vulnerability detection techniques[J]. Chinese Journal of Computers, 2015, 38(4): 717-732.)

[3] 李珍,鄒德清,王澤麗,等. 面向源代碼的軟件漏洞靜態檢測綜述[J]. 網絡與信息安全學報, 2019, 5(1): 1-14.(LI Z, ZOU D Q, WANG Z L, et al. Survey on static software vulnerability detection for source code[J]. Chinese Journal of Network and Information Security, 2019, 5(1): 1-14.)

[4] CADAR C, DUNBAR D, ENGLER D. KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs[C]// Proceedings of the 8th USENIX Conference on Operating Systems Design and Implementation. Berkeley: USENIX Association, 2008: 209-224.

[5] CHIPOUNOV V, KUZNETSOV V, CANDEA G. S2E: a platform for in-vivo multi-path analysis of software systems[C]// Proceedings of the 16th International Conference on Architectural Support for Programming Languages and Operating Systems. New York: ACM, 2011: 265-278.

[6] BALDONI R, COPPA E, D’ELIA D C, et al. A survey of symbolic execution techniques[J]. ACM Computing Surveys, 2018, 51(3): No.50.

[7] GODEFROID P, LEVIN M Y, MOLNAR D A. Automated whitebox fuzz testing[C/OL]// Proceedings of the 2008 Network and Distributed System Security Symposium. [2021-03-14]. https://www.ndss-symposium.org/wp-content/uploads/2017/09/Automated-Whitebox-Fuzz-Testing-paper-Patrice-Godefroid.pdf.

[8] 李韻,黃辰林,王中鋒,等. 基于機器學習的軟件漏洞挖掘方法綜述[J]. 軟件學報, 2020, 31(7): 2040-2061.(LI Y, HUANG C L, WANG Z F, et al. Survey of software vulnerability mining methods based on machine learning[J]. Journal of Software, 2020, 31(7): 2040-2061.)

[9] 孫鴻宇,何遠,王基策,等. 人工智能技術在安全漏洞領域的應用[J]. 通信學報, 2018, 39(8): 1-17.(SUN H Y, HE Y, WANG J C, et al. Application of artificial intelligence technology in the field of security vulnerability[J]. Journal on Communications, 2018, 39(8): 1-17.)

[10] SHIN Y, WILLIAMS L. Can traditional fault prediction models be used for vulnerability prediction?[J]. Empirical Software Engineering, 2013, 18(1): 25-59.

[11] YOUNIS A, MALAIYA Y, ANDERSON C, et al. To fear or not to fear that is the question: code characteristics of a vulnerable function with an existing exploit[C]// Proceedings of the 6th ACM Conference on Data and Application Security and Privacy. New York: ACM, 2016: 97-104.

[12] WALDEN J, STUCKMAN J, SCANDARIATO R. Predicting vulnerable components: software metrics vs text mining[C]// Proceedings of the IEEE 25th International Symposium on Software Reliability Engineering. Piscataway: IEEE, 2014: 23-33.

[13] SHIN Y, MENEELY A, WILLIAMS L, et al. Evaluating complexity, code churn, and developer activity metrics as indicators of software vulnerabilities[J]. IEEE Transactions on Software Engineering, 2011, 37(6): 772-787.

[14] BOSU A, CARVER J, HAFIZ M, et al. Identifying the characteristics of vulnerable code changes: an empirical study[C]// Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering. New York: ACM, 2014: 257-268.

[15] 王飛雪,李芳. 基于激活漏洞能力條件的軟件漏洞自動分類框架[J]. 重慶理工大學學報(自然科學版), 2019, 33(5): 154-160.(WANG F X, LI F. Software vulnerability automatic classification framework based on activation vulnerability conditions[J]. Journal of Chongqing University of Technology (Natural Science), 2019, 33(5): 154-160.)

[16] YAMAGUCHI F, LOTTMANN M, RIECK K. Generalized vulnerability extrapolation using abstract syntax trees[C]// Proceedings of the 28th Annual Computer Security Applications Conference. New York: ACM, 2012: 359-368.

[17] RUSSELL R, KIM L, HAMILTON L, et al. Automated vulnerability detection in source code using deep representation learning[C]// Proceedings of the 17th IEEE International Conference on Machine Learning and Applications. Piscataway: IEEE, 2018: 757-762.

[18] DUAN X, WU J Z, JI S L, et al. VulSniper: focus your attention to shoot fine-grained vulnerabilities[C]// Proceedings of the 28th International Joint Conference on Artificial Intelligence. California: ijcai.org, 2019: 4665-4671.

[19] LI Z, ZOU D Q, XU S H, et al. VulDeePecker: a deep learning-based system for vulnerability detection[C/OL]// Proceedings of the 2018 Network and Distributed Systems Security Symposium. [2021-03-14]. https://www.ndss-symposium.org/wp-content/uploads/2018/02/ndss2018_03A-2_Li_paper.pdf.

[20] 孔維星,葉貴鑫,王煥廷,等.一種基于圖卷積網絡的源代碼漏洞檢測方法:中國, 202010168037.0[P]. 2020-07-28.(KONG W X, YE G X, WANG H T, et al. A source code vulnerability detection method based on graph convolution network: CN,202010168037.0[P]. 2020-07-28.)

[21] YAMAGUCHI F, GOLDE N, ARP D, et al. Modeling and discovering vulnerabilities with code property graphs[C]// Proceedings of the 2014 IEEE Symposium on Security and Privacy. Piscataway: IEEE, 2014: 590-604.

[22] MOONEN L. Generating robust parsers using island grammars[C]// Proceedings of the 8th Working Conference on Reverse Engineering. Piscataway: IEEE, 2001: 13-22.

[23] KIPF T N, WELLING M. Semi-supervised classification with graph convolutional networks[EB/OL]. (2017-02-22)[2021-04-14].https://arxiv.org/pdf/1609.02907.pdf.

[24] GILMER J, SCHOENHOLZ S S, RILEY P E, et al. Neural message passing for quantum chemistry[C]// Proceedings of the 34th International Conference on Machine Learning. New York: JMLR.org, 2017: 1263-1272.

[25] SCHLICHTKRULL M, KIPF T N, BLOEM P, et al. Modeling relational data with graph convolutional networks[C]// Proceedings of the 2018 European Semantic Web Conference, LNCS 10843/LNISA 10843. Cham: Springer, 2018: 593-607.

[26] LE Q, MIKOLOV T. Distributed representations of sentences and documents[C]// Proceedings of the 31st International Conference on Machine Learning. New York: JMLR.org, 2014: 1188-1196.

[27] ISPIROVA G, EFTIMOV T, SELJAK B K. Comparing semantic and nutrient value similarities of recipes[C]// Proceedings of the 2019 IEEE International Conference on Big Data. Piscataway: IEEE, 2019: 5131-5139.

[28] ZHOU Y Q, LIU S Q, SIOW J, et al.: effective vulnerability identification by learning comprehensive program semantics via graph neural networks[C/OL]// Proceedings of the 33rd Conference on Neural Information Processing Systems. [2021-01-12].https://proceedings.neurips.cc/paper/2019/file/49265d2447bc3bbfe9e76306ce40a31f-Paper.pdf.

[29] ZOU D Q, WANG S J, XU S H, et al.VulDeePecker: a deep learning-based system for multiclass vulnerability detection[J]. IEEE Transactions on Dependable and Secure Computing, 2021, 18(5): 2224-2236.

[30] LI Z, ZOU D Q, XU S H, et al. SySeVR: a framework for using deep learning to detect software vulnerabilities[J]. IEEE Transactions on Dependable and Secure Computing, 2021(Early Access): 3051525.

Source code vulnerability detection based on relational graph convolution network

WEN Min1,2, WANG Rongcun1,2,3*, JIANG Shujuan1,2

(1,(),221116,;2,,221116,;3,(),211106,)

The root cause of software security lies in the source code developed by software developers, but with the continues increasing size and complexity of software, it is costly and difficult to perform vulnerability detection only manually, while the existing code analysis tools have high false positive rate and false negative rate. Therefore, an automatic vulnerability detection method based on Relational Graph Convolution Network (RGCN) was proposed to further improve the accuracy of vulnerability detection. Firstly, the program source code was transformed into CPG containing syntax and semantic information. Then, representation learning was performed to the graph structure by RGCN. Finally, a neural network model was trained to predict the vulnerabilities in the program source code. To verify the effectiveness of the proposed method, an experimental validation was conducted on the real-world software vulnerability samples, and the results show that the recall and F1-measure of vulnerability detection results of the proposed method reach 80.27% and 63.78% respectively. Compared with Flawfinder, VulDeepecker and similar method based on Graph Convolution Network (GCN), the proposed method has the F1-measure increased by 182%, 12% and 55% respectively. It can be seen that the proposed method can effectively improve the vulnerability detection capability.

vulnerability detection; Code Property Graph (CPG); Relational Graph Convolution Network (RGCN); deep learning; prediction model

This work is partially supported by National Natural Science Foundation of China (61673384,618761860), Natural Science Foundation of Jiangsu Province (BK20181353), Open Fund of Key Laboratory of Safety-Critical Software, Ministry of Industry and Information Technology (1015-56XCA18164).

WEN Min, born in 1996, M. S. candidate. Her research interests include vulnerability detection.

WANG Rongcun, born in 1979, Ph. D., associate professor. His research interests include software safety analysis, software testing, software maintenance.

JIANG Shujuan, born in 1966, Ph. D., professor. Her research interests include software analysis and testing, compilation technology.

TP311

A

1001-9081(2022)06-1814-08

10.11772/j.issn.1001-9081.2021091691

2021?09?29;

2021?11?16;

2021?11?17。

國家自然科學基金資助項目(61673384, 618761860);江蘇省自然科學基金資助項目(BK20181353);高安全系統的軟件開發與驗證技術工業和信息化部重點實驗室開放基金資助項目(1015-56XCA18164)。

文敏(1996—),女,湖南邵東人,碩士研究生,主要研究方向:漏洞檢測;王榮存(1979—),男,山東夏津人,副教授,博士,CCF會員,主要研究方向:軟件安全分析、軟件測試、軟件維護;姜淑娟(1966—),女,山東萊陽人,教授,博士,CCF會員,主要研究方向:軟件分析與測試、編譯技術。

猜你喜歡
檢測方法模型
一半模型
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
小波變換在PCB缺陷檢測中的應用
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
主站蜘蛛池模板: 青青久视频| 欧美日韩免费观看| 婷婷六月综合| 国产在线观看一区二区三区| 成人无码一区二区三区视频在线观看| 99久久精品视香蕉蕉| 国产欧美日韩在线一区| 九九九精品视频| 伊人色婷婷| 欧美劲爆第一页| 美女国产在线| 亚洲人视频在线观看| 任我操在线视频| 日韩黄色精品| 爱色欧美亚洲综合图区| 直接黄91麻豆网站| 天天色综合4| 狼友视频国产精品首页| 国产丝袜第一页| 综合色在线| 国产sm重味一区二区三区| 欧洲熟妇精品视频| 亚洲视频四区| 欧美日本一区二区三区免费| 日韩无码视频播放| 午夜视频在线观看免费网站| 日本一本正道综合久久dvd| 亚洲中文字幕久久精品无码一区| 国产成人一区在线播放| 欧美日韩导航| 成人综合久久综合| 日韩高清成人| 永久免费无码日韩视频| 亚洲国产综合精品一区| 97青草最新免费精品视频| 亚洲三级色| 亚洲精品无码人妻无码| 激情国产精品一区| 久久精品最新免费国产成人| 激情无码字幕综合| 国产国拍精品视频免费看| 色婷婷久久| 久久91精品牛牛| 国产xxxxx免费视频| 成人在线观看一区| 激情综合网激情综合| 成人在线观看不卡| 欧美日韩在线亚洲国产人| 中文字幕天无码久久精品视频免费| 国产农村1级毛片| 成人亚洲国产| 久久国产精品夜色| 久青草免费在线视频| 女同久久精品国产99国| 欧美亚洲国产精品第一页| 男人天堂伊人网| 欧美乱妇高清无乱码免费| 欧洲熟妇精品视频| 国产午夜无码片在线观看网站 | 伊人久久综在合线亚洲2019| 人人91人人澡人人妻人人爽| 亚洲高清国产拍精品26u| 国产视频一二三区| 亚洲一区二区约美女探花| 激情综合激情| 特级做a爰片毛片免费69| 欧美中文一区| 精品综合久久久久久97| 美女免费黄网站| 免费在线观看av| 欧美黄网在线| 中文字幕亚洲综久久2021| 亚洲精品第五页| 国产在线视频福利资源站| 亚洲成AV人手机在线观看网站| 人妻丰满熟妇av五码区| 亚洲天堂免费| 国产一区二区福利| 国产日韩欧美一区二区三区在线 | 国产乱人乱偷精品视频a人人澡| 亚洲人成在线精品| 国产成人欧美|