論文學習_An Empirical Study of Deep Learning Models for Vulnerability Detection

1. 引言

研究背景:近年來,深度學習漏洞檢測工具取得了可喜的成果。最先進的模型報告了 0.9 的 F1 分數,并且優于靜態分析器。結果令人興奮,因為深度學習可能會給軟件保障帶來革命性的變化。因此,IBM、谷歌和亞馬遜等行業公司非常感興趣,并投入巨資開發此類工具和數據集。

現存問題:盡管深度學習漏洞檢測在前景上很有潛力,但目前尚未達到計算機視覺和自然語言處理的水平。目前大部分研究重點是嘗試新興的深度學習模型,并將其應用于類似 Devign 或 MSR 數據集的數據集。然而,對于模型本身,我們了解甚少,例如,模型能否有效處理哪種類型的程序,我們是否應為每種漏洞類型建立模型,或者應該為所有漏洞類型構建一個統一模型,好的訓練數據集是什么樣的,以及模型在做出決策時使用了哪些信息。了解這些問題的答案可以幫助我們更好地開發、調試和應用模型。然而,考慮到深度學習的黑盒特性,這些問題很難回答。論文的目的不是提供這些問題的完整解決方案,而是探討這些目標。

科學問題:在本文中,論文對一系列最先進的深度學習漏洞檢測模型進行了調查和重現,并建立了研究問題,以便理解這些模型,旨在從中汲取經驗教訓和指導,以更好地設計和調試未來的模型。論文構建了研究問題,并將其分為三個領域,即模型能力訓練數據模型解釋。具體來說,論文的首要目標是了解深度學習在漏洞檢測問題中的處理能力,特別關注以下研究問題:

  • 問題 1:不同模型在漏洞檢測上是否能達成共識?不同模型之間存在哪些差異?
  • 問題 2:某些類型的漏洞是否更容易檢測? 應該為每種類型的漏洞構建模型,還是應該構建一個可以檢測所有漏洞的模型?
  • 問題 3:是否存在一些模型難以預測的代碼模式?如果存在這種代碼模式,這是怎樣的一種代碼模式?

論文的第二項研究重點是訓練數據。論文的目標是了解訓練數據的規模和組成是否以及如何影響模型性能。具體來說,論文構建了以下研究問題:

  • 問題 4:增加數據集大小是否有助于提高漏洞檢測的模型性能?
  • 問題 5:訓練數據集中的項目組成如何影響模型的性能?

最后,論文的第三個研究領域是模型解釋。 論文使用SOTA模型解釋工具來調查:

  • 問題 6:模型用于預測的源代碼信息是什么? 模型對重要特征是否一致?

研究內容:為了回答上述問題,論文調查了最先進的深度學習模型,并在它們的原始數據集上成功重現了 11 個模型。這些模型采用了不同的深度學習架構,例如 GNN、RNN、LSTM、CNN 和 Transformers。為了比較這些模型,論文設法讓 9 個模型與 Devign 和 MSR 這兩個流行的數據集一起運行。論文選擇這兩個數據集的原因是:(1) 這兩個數據集都包含真實世界的項目和漏洞;(2) 大多數論文中的模型都是使用 Devign 數據集進行評估和調優的;(3) MSR 數據集包含 310 個項目,其中數據有漏洞類型的注釋,這對我們的研究問題至關重要。通過精心設計的實驗和對威脅的考慮,論文發現了 6 個研究問題的結果。總的來說,論文的研究貢獻包括:

  • 貢獻 1:論文對深度學習漏洞檢測模型進行了全面調查。
  • 貢獻 2:論文提供了一個代碼倉庫,其中包含 11 個具有各種研究設置的 SOTA 深度學習框架的訓練模型和數據集。
  • 貢獻 3:論文設計了 6 個科學問題來理解模型能力、訓練數據和模型解釋。
  • 貢獻 4:論文構建了研究并通過實驗獲得了所提科學問題的結果。
  • 貢獻 5:論文準備了有趣的例子和數據,以進一步研究模型的可解釋性。

2. 模型復現

為了收集最先進的深度學習模型,論文研究了 2018 年至 2022 年的論文,并參考了微軟的 CodeXGLUE 排行榜以及 IBM 的缺陷檢測 D2A 排行榜。論文使用了所有可獲取的開源模型,并成功復現了 11 個模型。論文的數據復制包中包含了完整的模型列表,以及我們未能重現某些模型的原因。

如上表所示,復現的模型涵蓋了各種深度學習架構。Devign 和 ReVeal 在屬性圖上使用了 GNN,融合了控制流、數據依賴性和 AST。ReGVD 在 token 上采用了 GNN。Code2Vec 在 AST 上使用了多層感知器 (MLP)。VulDeeLocator 和 SySeVR 則是基于 RNN 和 Bi-LSTM 的序列模型。最近的深度學習檢測采用了預訓練的 Transformer,包括 CodeBERT、VulBERTa-CNN、VulBERTa-MLP、PLBART 和 LineVul。

針對論文的研究問題,論文選用了 Devign 和 MSR 數據集。論文研究了這 11 個模型在其原始論文中使用的數據集,這些數據集如上表所示。論文發現 Devign 數據集已被用于對 8 個模型進行評估和調整。該數據集是一個平衡數據集,包含大致相同數量的易受攻擊和非易受攻擊的示例,總共有 27,318 個數據點(每個示例也被稱為一個數據點)。LineVul 使用了 MSR 數據集,這是一個近期可用的數據集。該數據集是不平衡的,包含 10,900 個易受攻擊的示例和 177,736 個非易受攻擊的示例。這些示例具有它們的源項目以及常見弱點枚舉(CWE)條目,顯示了漏洞的類型。論文利用這些數據集特征來制定一些研究問題。

論文根據原始數據集和設置復現了模型的結果,如上表所示。其中,A、P、R、F 列代表深度學習漏洞檢測中常用的指標,包括準確率、精確率、召回率和 F1 分數。論文的復現結果與原始論文相比,通常計算誤差在 2% 以內。特殊情況是 ReVeal,作者確認我們的結果糾正了原始論文中的數據泄漏錯誤,以及 Devign,論文使用了第三方復現代碼(Chakaborthy 等人發布的),因為原始 Devign 代碼并未開源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45022.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(8)揭示Python編程精髓:深潛繼承與多態的奇幻之旅

目錄 1. 命名空間與作用域1.1 命名空間概述1.2 作用域1.2.1 局部作用域1.2.2 全局作用域1.2.3 修改全局變量1.2.4 嵌套作用域 2. 繼承3. 多態(Polymorphism) 1. 命名空間與作用域 1.1 命名空間概述 命名空間是一個從名字到對象的映射,它在P…

Qt:19.浮動窗口/子窗口(子窗口介紹、代碼方式創建子窗口、設置子窗口標題、為子窗口添加控件、設置子窗口停靠位置)

目錄 1.子窗口介紹: 2.代碼方式創建子窗口: 3.設置子窗口標題: 4.為子窗口添加控件: 5.設置子窗口停靠位置。 1.子窗口介紹: 在 Qt 中,可以創建和管理子窗口(子窗口體)以實現多窗…

圖片怎么制作成長期可用的活碼?掃碼提供圖片預覽的制作技巧

現在圖片的尺寸和清晰度的質量越來越高,相對應的會占用更多的存儲空間,現在很多人會將圖片存入云端后,通過生成二維碼的方式,掃碼來查看圖片內容。圖片轉換二維碼有利于將圖片分享給其他人查看,還能夠節省更多的空間&a…

SpringBoot自己開發一個starter

提示:本文主要講述如何自行開發一個SpringBoot的starter 文章目錄 目錄 文章目錄 前言 一、Starter是什么 二、創建一個SpringBoot項目 1.創建一個基本的SpringBoot項目 2.選擇要下載的庫 三、設置項目 1.提示 2.配置pom.xml 3.重點代碼 1.創建一個User類…

16.x86游戲實戰-匯編指令push pop pushad popad

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 工具下載: 鏈接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【第29章】MyBatis-Plus之分頁插件

文章目錄 前言一、支持的數據庫二、配置方法三、屬性介紹四、自定義 Mapper 方法中使用分頁五、其他注意事項六、Page 類七、實戰1. 配置類2. 分頁類3. 測試 總結 前言 MyBatis-Plus 的分頁插件 PaginationInnerInterceptor 提供了強大的分頁功能,支持多種數據庫&a…

Windows電腦安裝Python結合內網穿透輕松搭建可公網訪問私有網盤

文章目錄 前言1.本地文件服務器搭建1.1.Python的安裝和設置1.2.cpolar的安裝和注冊 2.本地文件服務器的發布2.1.Cpolar云端設置2.2.Cpolar本地設置 3.公網訪問測試4.結語 前言 本文主要介紹如何在Windows系統電腦上使用python這樣的簡單程序語言,在自己的電腦上搭建…

kubernetes授予用戶指定命名空間的使用權限

kubernetes授予用戶指定命名空間的使用權限 問題描述具體實現簽發客戶端證書創建RBAC策略生成kubeconfig文件 問題描述 假如我們部門來了個新同事,他需要使用kubernetes集群,但是因為他剛來,還不熟悉,所以不能直接將kubernetes集…

Spring如何控制Bean加載+執行順序

1. Order 注解和 Ordered 接口 用途:控制組件執行順序或排序,但不控制Bean初始化順序。定義執行順序:通過整數值指定組件優先級,數值越小優先級越高。集合排序:影響自動裝配到集合中的組件排列順序。使用場景&#xf…

77.MySQL的分頁查詢

一、LIMIT關鍵字 LIMIT關鍵字用于限制返回結果集中的行數。其基本語法如下: SELECT * FROM 表名 LIMIT 行數; 例如,要從名為mark_info的表中選擇最新創建的10個工單的信息,可以執行以下查詢: SELECT * FROM mark_info ORDER B…

電力需求預測挑戰賽筆記 Taks1 跑通baseline

#AI夏令營 #Datawhale #夏令營 賽題 一句話介紹賽題任務可以這樣理解賽題: 【訓練時序預測模型助力電力需求預測】 電力需求的準確預測對于電網的穩定運行、能源的有效管理以及可再生能源的整合至關重要。 賽題任務 給定多個房屋對應電力消耗歷史 N 天的相關序列數…

拓撲排序(算法篇)

算法之拓撲排序 拓撲排序 概念: 拓撲排序是對有向無圈圖的頂點的一種排序。排序不必是唯一的,任何合理的排序都是可以的。具體做法是:先找出任意一個沒有入邊的頂點v(就是沒有其他頂點指向的頂點),將頂點v放入隊列,…

element-plus el-table點擊當前行和劃過展示鼠標

在 Element Plus 的 el-table 組件中,設置滑過行時鼠標的樣式可以通過 CSS 來實現。你可以使用 CSS 的 cursor 屬性來定義鼠標懸停時的樣式。以下是一個簡單的例子: 首先,在你的 Vue 組件的 .el-table .el-table__row:hover {cursor: poin…

09.AOP-尚硅谷Spring零基礎入門到進階,一套搞定spring6全套視頻教程(源碼級講解)

現有代碼缺陷 針對帶日志功能的實現類,我們發現有如下缺陷: 對核心業務功能有干擾,導致程序員在開發核心業務功能時分散了精力附加功能分散在各個業務功能方法中,不利于統一維護 解決思路 解決核心:解耦。把附加功能從…

glm-4 聯網搜索 api 測試

今天測試了一下 glm-4 的聯網搜索 web_search tool 調用,發現了 web_search 的網頁檢索返回結果中幾個比較詭異的事情,特此記錄: 有些檢索結果沒有 icon、link、media 字段,但從內容上看確實是聯網搜索出來的結果,不知…

從零開始讀RocketMq源碼(三)Broker存儲Message流程解析

目錄 前言 準備 消息載體CommitLog 文件持久化位置 源碼解析 broker消息對象MessageExtBrokerInner 異步存儲message CommitLog的真相 創建MappedFile文件 加入異步刷盤隊列 Message異步存儲MappedByteBuffer 總結 前言 在面試中我們經常會聽到這樣的回答&#x…

國產化趨勢下源代碼數據防泄密的信創沙盒的方案分享

隨著國產化的大力推進,越來越多的企事業單位在逐步替換Windows、Linux等操作系統的使用。那么什是國產化了?國產化是指在產品或服務中采用國內自主研發的技術和標注,替代過去依賴的他國的產品和服務,國產化又被稱之為“信創”&…

GitLab CI/CD實現項目自動化部署

1 GitLab CI/CD介紹 GitLab CI/CD 是 GitLab 中集成的一套用于軟件開發的持續集成(Continuous Integration)、持續交付(Continuous Delivery)和持續部署(Continuous Deployment)工具。這套系統允許開發團隊…

vue里實現點擊按鈕回到頁面頂部功能,博客必備!

效果 步驟 1-標簽結構 動態綁定樣式style&#xff0c;監聽點擊事件&#xff0c;后續控制opacity透明度。和滾動距離 <div class"toTop" :style"dynamicStyles" click"toTop"><!--<i class"fa fa-arrow-up"></i>…

Django ORM中的F 對象

F 對象非常強大&#xff0c;可以在查詢和更新操作中進行復雜的字段間運算。 假設我們有一個包含商品信息的模型 Product&#xff1a; from django.db import modelsclass Product(models.Model):name models.CharField(max_length100)price models.DecimalField(max_digits…