论文学习_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 代码并未开源。
相关文章:

论文学习_An Empirical Study of Deep Learning Models for Vulnerability Detection
1. 引言 研究背景:近年来,深度学习漏洞检测工具取得了可喜的成果。最先进的模型报告了 0.9 的 F1 分数,并且优于静态分析器。结果令人兴奋,因为深度学习可能会给软件保障带来革命性的变化。因此,IBM、谷歌和亚马逊等行业公司非常感兴趣,并投入巨资开发此类工具和数据集。…...

ctfshow-web入门-文件上传(web166、web167)(web168-web170)免杀绕过
目录 1、web166 2、web167 3、web168 4、web169 5、web170 1、web166 查看源码,前端只让传 zip 上传 zip 成功后可以进行下载 随便搞一个压缩包,使用记事本编辑,在其内容里插入一句话木马: 上传该压缩包,上传成功…...
Jitsi Meet指定用户成为主持人
前言 在Jitsi Meet进行会议的时候,我们有可能会使用到预约会议的这一个功能,预约会议的时候,我们希望我预约的会议,我就是主持人,而不希望其他人是主持人。 但是Jitsi Meet默认会认为第一个进入房间的是主持人&#…...
MySQL慢查询日志详解与性能优化指南
1. 什么是慢查询日志 慢查询日志是MySQL提供的一种日志记录功能,它能够记录执行时间超过预设阈值的SQL查询语句,并将这些信息写入到日志文件中。 2. 查看慢查询日志的设置和状态 2.1 慢查询日志的开启状态和日志文件位置 通过以下命令可以查看慢查询…...
xml CDATA
]]>之间的任何内容标记为字符数据。内容不会被解释为标记。 <![CDATA[这里的任何文本,即使是也被解释为文本而不是起始标签]]> 这是什么意思? 这段描述解释了XML中CDATA部分的作用和用法。让我来详细解释一下: CDATA(Character Da…...
C++的线程管理
C的线程管理 线程类(Thread)线程构造器约定构造器初始化构造器复制构造器移动构造器 多线程atomiccondition_variable应用实列 futurepromise应用实列 future应用实列 线程类(Thread) 执行线程是一个指令序列,它可以在…...

捷配笔记-如何设计PCB板布线满足生产标准?
PCB板布线是铺设连接各种设备与通电信号的路径的过程。PCB板布线是铺设连接各种设备与通电信号的路径的过程。 在PCB设计中,布线是完成产品设计的重要步骤。可以说,之前的准备工作已经为它做好了。在整个PCB设计中,布线设计过程具有最高的极限…...

【Java数据结构】初识线性表之一:顺序表
使用Java简单实现一个顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 线性表大致包含如下的一些方法: public class MyArrayList { private int[] array; pri…...

对接高德开放平台API
高德开放平台API: https://lbs.amap.com/ 一、天气查询 天气查询: https://lbs.amap.com/api/webservice/guide/api/weatherinfo adcode城市码表下载: https://lbs.amap.com/api/webservice/download Component public class WeatherUtil {Resourceprivate GdCon…...

Linux 初识
目录 编辑 1.Linux发展史 1.1UNIX发展历史 1.2Linux发展历史 2.Linux的开源属性 2.1 开源软件的定义 2.2 Linux的开源许可证 2.3 开源社区与协作 3.Linux的企业应用现状 3.1 服务器 3.1.1 Web服务器 3.1.2 数据库服务器 3.1.3 文件服务器 3.1.4 电子邮件服务器 …...

CSS技巧专栏:一日一例 4.纯CSS实现两款流光溢彩的酷炫按钮特效
大家好,今天是 CSS技巧专栏:一日一例 第三篇《纯CSS实现两款流光溢彩的酷炫按钮特效》 先看图: 特此说明: 本专题专注于讲解如何使用CSS制作按钮特效。前置的准备工作和按钮的基本样式,都在本专栏第一篇文章中又详细…...

int类型变量表示范围的计算原理
文章目录 1. 了解2. 为什么通常情况下int类型整数的取值范围是-2147483648 ~ 21474836473. int类型究竟占几个字节4. 推荐 1. 了解 通常情况下int类型变量占4个字节,1个字节有8位,每位都有0和1两种状态,所以int类型变量一共可以表示 2^32 种状…...

STM32崩溃问题排查
文章目录 前言1. 问题说明2. STM32(Cortex M4内核)的寄存器3. 崩溃问题分析3.1 崩溃信息的来源是哪里?3.2 崩溃信息中的每个关键字代表的含义3.3 利用崩溃信息去查找造成崩溃的点3.4 keil5中怎么根据地址找到问题点3.5 keil5上编译时怎么输出…...

CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
CSS 样式选择器,用于选中页面中的 html 元素,以便添加 CSS 样式。 按渲染性能由高到低 依次是: ID 选择器 #id 通过元素的 id 属性选中元素,区分大小写 <p id"p1" >第一段</p>#p1{color: red; }但不推荐使…...
CMakeLists.txt编写思路
近期在linux编写CMakeLists.txt文件,整理了一些思路。 一、编写CMakeLists.txt的基本步骤和思路: 初始化CMake: 使用cmake_minimum_required指令指定CMake的最小版本要求,以确保兼容性。使用project指令定义项目名称和可选的语言…...

红日靶场----(三)2.漏洞利用
上期的通过一句话木马实现对目标主机的持久后门 我使用的是蚁剑,蚁剑安装及使用参考: 下载地址: GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 安装即使用: 1. 快速入门 语雀 通过YXCMS的后台GETSHELL 利用…...
LeetCode HOT100(三)滑动窗口
子数组最大平均数 I (非hot100,但是滑动窗口的思想可以很好的体现,入门滑动窗口很好的题) 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数…...

数学系C++ 排序算法简述(八)
目录 排序 选择排序 O(n2) 不稳定:48429 归并排序 O(n log n) 稳定 插入排序 O(n2) 堆排序 O(n log n) 希尔排序 O(n log2 n) 图书馆排序 O(n log n) 冒泡排序 O(n2) 优化: 基数排序 O(n k) 快速排序 O(n log n)【分治】 不稳定 桶排序 O(n…...

记一下blender曲线阵列
先说一下如何正常使用这个 这一次我是用来贴瓷砖 随便创建一个mesh 然后添加一个阵列修改器,然后再给他添加一个curve修改器,使用constant offset去偏移他 这里有个小细节 我第一次创建的curve 我选取之后,死活无法沿着曲线阵列ÿ…...

Windows电脑安装Python结合内网穿透轻松搭建可公网访问私有网盘
文章目录 前言1.本地文件服务器搭建1.1.Python的安装和设置1.2.cpolar的安装和注册 2.本地文件服务器的发布2.1.Cpolar云端设置2.2.Cpolar本地设置 3.公网访问测试4.结语 前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言,在自己的电脑上搭建…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...