ReposVul: A Repository-Level High-Quality Vulnerability Dataset 论文阅读

本文发表于 ICSE2024 会议中。

引入

在过去的漏洞数据库中,主要存在以下几种问题:

  1. 无效补丁(Tangled Patches):针对某个漏洞的补丁无法正确修复该漏洞
  2. 缺乏跨函数漏洞(Inter-procedural Vulnerabilities)
  3. 过时补丁(Outdated Patches):修复了该漏洞的补丁造成了全新的漏洞,导致该补丁过时
    本文通过下面的方法构建一个解决了上述问题的数据库 ReposVul。

框架

本文设计的框架主要由以下四个部分所构成:原始数据获取,无效补丁判定,多粒度依赖关系分析,基于时间线的过时补丁过滤。

在这里插入图片描述

原始数据获取

本文收集的漏洞数据来自 Mend 这一漏洞数据库,对于 CWE 的漏洞数据则还收集了 CWE 漏洞编号和漏洞说明。本文分析所用的补丁则来自于 Github,还有一部分来自 Google 代码仓库 Android 和 Chrome。对于一个补丁,为了更好的分析函数间的修复情况,本文主要收集它的 commit ID、commit 信息、修改文件名以及它所修改的前后代码。

无效补丁判定

本文主要采用大模型和静态分析工具共同分析一个补丁是否有效。对于大模型,本文使用 prompt 预设大模型是一个漏洞分析专家,提供原始代码、漏洞修复代码等让大模型回答是或否以判定该修复是否有效。

同时为了更加准确的判定该补丁是否有效,本文针对不同的语言采用了不同的静态分析工具,如 C/C++ 使用 Cppcheck、Flawfinder、RATS、Semgrep 工具检测,Python 则使用 RATS 和 Semgrep,而 Java 则仅用 Semgrep。对于一个漏洞补丁是否有效,本文采用了首先对原始代码进行静态分析检测,随后将修复后的代码再次检测的方式来判定该补丁是否有效,如果同一漏洞依然存在则判定补丁无效。

最后将大模型和静态分析工具的检测结果进行合并,仅当二者判定均为有效或无效的时候才采用该补丁数据。

多粒度依赖关系分析

本文针对每个漏洞都进行了多层次的漏洞信息分析,主要分为以下四个层次:

  1. 仓库级:对于每个与漏洞修复相关的文件,本文提取整个仓库中漏洞之间的程序调用关系链。
  2. 文件级:本文将代码更改前后的与漏洞修复相关的文件分别视为易受攻击和不易受攻击。对于与漏洞修复无关的文件,将代码更改前后的文件都视为不易受攻击。
  3. 函数级:对于每个受代码更改影响的函数,如果该函数在漏洞修复相关文件中有定义,本文将代码更改前后的函数分别视为易受攻击和不易受攻击;如果该函数在漏洞修复无关的文件中有定义,本文将代码更改前后的函数都视为不易受攻击。
  4. 行级:提取该行的修改。

对于仓库级别的函数调用树(callerTree)和函数被调用树(calleeTree),使用如下算法分析获取:对于与漏洞修复相关的文件中每个变化的代码片段,首先识别出调用树和被调用树的根函数,分别命名为 callerRoot 和 calleeRoot。随后,使用特定的静态分析工具从 callerRoot 构建调用树,从 calleeRoot 构建被调用树。对于不同的编程语言,我们使用不同的工具:C/C++ 使用 CFlow,Java-all-call-graph 用于Java,Python 则使用 PyCG。

基于时间线的过时补丁过滤

本文首先将所有的 commit 过滤,清除掉对数据、日志文件或者说明文件的修改提交,仅关注某一单一文件的修改历史,对比最新当前版本和修改后的补丁是否一致,仅保留修改后和当前最新版本一致的补丁。

数据分析

本文的数据集相较于其他的漏洞数据集有如下的优点:

  1. 多粒度信息:与其他仅包含线级、函数级和文件级漏洞的数据集相比,ReposVul 包含了更全面的粒度,包括仓库级、文件级、函数级和线级漏洞,考虑了跨程序漏洞,并提供了比单一补丁更多的信息。ReposVul 包含了来自 6897 个补丁的 14706 个文件,包含了 212790 个 C 语言函数,20302 个 C++ 函数,2816 个 Java 函数,26308 个 Python 函数。
  2. 广泛的 CWE 覆盖:ReposVul 涵盖了比所有其他数据集更多的 CWE 类型。ReposVul 在 C 语言中涵盖了 149 个 CWE 类型,在 C++ 中涵盖了 105 个,在Java中涵盖了 129 个,在 Python 中涵盖了 159 个。ReposVul 涵盖了跨越各种编程语言的 CWE 类型,因为一些 CWE 类型不是特定于语言的。这表明 ReposVul 提供的数据比现有的基准测试更为全面。
  3. 有效的标记方法:之前的工作通过当前的标记方法识别了现有数据集中的噪声数据问题。在本文中,ReposVul 提出了一个用于提高漏洞数据质量的漏洞解绑模块。它涉及静态分析工具中的漏洞规则和领域知识以及 LLMs 的强上下文理解能力。
  4. 识别过时的补丁:当前的漏洞数据集无法区分过时的补丁。ReposVul采用基于轨迹的过滤模块来识别潜在的过时补丁。基于轨迹的过滤模块整合了基于文件路径的过滤器和基于提交时间的过滤器,以提供过时补丁的标签。
  5. 额外信息的特定丰富性:ReposVul 包含最丰富的额外信息,包括 CVE 描述、CVSS 和补丁提交历史,以及静态分析信息。关于漏洞的全面信息使开发者和研究人员能够采取有效的措施进行漏洞检测。
  6. 标签更为准确:在最先进的开源软件(OSS)漏洞数据集中,20-71% 的漏洞标签是不准确的。ReposVul 在 C、C++、Java 和 Python 上的标签准确率分别为 85%、90%、85% 和 80%。与现有OSS漏洞数据集相比,ReposVul实现了相对更高的准确率。在四种编程语言中,特别是 C++ 编程语言,其准确率高达 90%。我们的观察表明,由于大模型的上下文理解能力和静态分析工具的领域知识的整合,ReposVul 的标签质量优于以前的数据集。

本文还就不同大模型的漏洞识别能力进行了对比,结果如下:
不同模型的漏洞识别准确度对比
模型使用不同的 Prompt 和信息提示的准确度对比
本文的数据集在如下两个方面还可改进:

  1. 数据来源丰富度不足:在收集过程中,本文从 GitHub、Google Git 和 bugs.chromium 收集 ReposVul,这导致了一些在ReposVul 中托管在其他平台上的项目被遗漏。
  2. 编程语言种类不够丰富:本文只提取了四种广泛使用的编程语言的仓库级依赖。然而,其他语言也存在漏洞,例如 JavaScript、Go 和 PHP。
  3. 漏洞时间跨度不够长:本文只从 2010 年开始收集 CVE 漏洞,之前的 CVE 漏洞没有包含在 ReposVul 中,这导致一些漏洞可能在之前几年被发现并修复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8622.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【图解版】力扣第70题:爬楼梯

推理出状态表达式 f(5)表示到达第5层,所有可能的方法数。 到达第5层,有可能是从第4层走一步上来,也有可能是从第3层走两步上来。所以我们可以慢慢延伸,画出上面👆🏻的图。 从图中,我们可以看到…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…

QT——自定义控件绘图

一.QPaintEvent绘图事件 QPaintEvent是QT中一个重要的类,专门用于绘图事件。当QT视图组件需要重绘制自己的一部分时,就会产生该事件,通常发生在以下几种情况。 窗口第一次显示时:当窗口或控件第一次出现在屏幕中,系统…

Java项目实战II基于Java+Spring Boot+MySQL的高校办公室行政事务管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在高等教育…

非计算机背景但是想从事医学AI研究,需要掌握的编程语言|个人观点·24-11-08

小罗碎碎念 目前,我们从事医学AI研究的,接触的最多的两种编程语言应该就是R和Python了。那么初学者很容易提出一个疑问,**我想从事医学AI相关的研究的话,应该学哪些编程语言呢?**在文章的开头,我可以先给出…

arkUI:Flex弹性布局的各个属性

arkUI:Flex弹性布局的简单使用 1 主要内容说明2 相关内容2.1 Flex弹性布局的方向2.1.1 源码1的简答说明2.1.2 源码1 (Flex弹性布局的方向)2.1.3 源码1运行效果2.1.3.1 当direction: FlexDirection.RowReverse2.1.3.2 当direction: FlexDirect…

高效Web测试:构建Pytest、Allure和Jenkins的自动化测试生态

Pytest介绍 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:简单灵活、容易上手、文档丰富;支持参数化,可以细粒度地控制被测用例;能够支持简单的单元测试和复杂的功能测试,还可以用来…

ros入门:topic话题通信(c++)

准备工作 创建工作空间 mkdir -p demo02_pub/src/ 生成依赖文件 cd demo02_pub/ catkin_make 进入src目录执行 catkin_create_pkg ros_pub_sub/ roscpp rospy std__msgs 发布者实现 消息发布代码编写 cd demo02_pub/src/ros_pub_sub/src 创建代码文件demo01_pub.cc …

重建大师7.0 | 质效全面提升,塑造更优质的实景三维重建

在大势智慧“AI智算、国产信创”2024秋季新品发布会上,重建大师7.0版以其卓越性能惊艳登场。这一新版本不仅引入了创新的倾斜高斯泼溅方法(OPGS),实现城市级场景的高效三维重建。 针对传统倾斜建模方法,重建大师7.0同…

Unity性能优化5【物理篇】

1.刚体的碰撞检测属性首选离散型 离散碰撞的缺点是小物体快速移动时,有丢失碰撞的风险。此下拉菜单中,越下面的选项碰撞检测频率越高,性能消耗也显著增加。因此在选择碰撞检测类型时尽量选择离散型。 2.优化碰撞矩阵 合理标记碰撞矩阵可以减…

【threejs】创建及管理场景内的后期处理效果(以bloom为例,开箱即用)

场景内使用 //创建后期通道this.effectManager new EffectManager({ renderer, camera, scene, dom })//循环渲染// 动画----------effect为我控制后期特效的开关animate() {requestAnimationFrame(this.animate);let { camera, controls, effectManager, effect } thisif (!…

建立用邻接表表示的无向图

创建一个建立用邻接表表示的无向图 #include<stdio.h> #include<stdlib.h> typedef struct node {int adjvex;struct node *next; }Anode; typedef struct {char vertex;Anode *link; }Unode; typedef struct {Unode adjlist[100];int vexnum,arcnum; }Adjgraph; …

芯片需要按一下keyup或者复位按键虚拟或者下载之后芯片能下载却运行不了或者需要额外供电。

这些问题很有可能是因为外围电路器件幅值与设计不同的存在&#xff0c;导致你需要外部供电才能实现一个正常运行&#xff0c;可以检查一下外围电路在供电区域的电流区&#xff0c;电阻幅值是否和原理图设计时看的一模一样或者直接更换 因为按键会失灵&#xff0c;首先检查复位按…

Java直播系统视频聊天系统小程序源码

直播视频聊天系统✨&#xff1a;打造你的专属互动空间 &#x1f680; 引言&#xff1a;直播视频聊天系统的兴起 在这个快节奏的数字时代&#xff0c;直播和视频聊天已成为我们日常沟通的重要工具。从游戏直播到在线教育&#xff0c;从远程办公到家庭聚会&#xff0c;直播视频…

云轴科技ZStack助力新远科技开启化工行业智能制造新篇章

新远科技基于云轴科技ZStack Cube超融合和ZStack Zaku容器云平台打造了灵活高效的IT基础设施&#xff0c;实现了IaaS和PaaS层的全面覆盖&#xff0c;优化了资源利用率&#xff0c;降低了硬件成本和运维复杂性&#xff0c;同时强化了数据安全和业务连续性。 化工行业的数字化先…

软件测试PO模式

V1&#xff1a;不使用任何设计模式和单元测试框架 V2&#xff1a;使用UnitTest管理用例 V3&#xff1a;使用方法封装的思想&#xff0c;对代码进行优化 V4&#xff1a;采用PO模式的分层思想对代码进行拆分 V5&#xff1a;对PO分层之后的代码继续优化 V6&#xff1a;PO模式深入封…

网页版五子棋——匹配模块(客户端开发)

前一篇文章&#xff1a;网页版五子棋——用户模块&#xff08;客户端开发&#xff09;-CSDN博客 目录 前言 一、前后端交互接口设计 二、游戏大厅页面 1.页面代码编写 2.前后端交互代码编写 3.测试获取用户信息功能 结尾 前言 前面文章介绍完了五子棋项目用户模块的代码…

Spring设计模式

设计模式 是一种软件开发中的解决方案&#xff0c;设计原则。目的是使代码具有扩展性&#xff0c;可维护性&#xff0c;可读性&#xff0c;如&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09; Spring IoC 容器默认会将 Bean 创建为单例&#xff0c;保证一个类…

【设计模式】结构型模式(一):适配器模式、装饰器模式

结构型模式&#xff08;一&#xff09;&#xff1a;适配器模式、装饰器模式 1.适配器模式&#xff08;Adapter&#xff09;2.装饰器模式&#xff08;Decorator&#xff09;2.1 主要特点2.2 组成部分2.3 示例代码2.3.1 Component 组件2.3.2 ConcreteComponent 具体组件2.3.3 Dec…

Go Energy 跨平台(GUI)应用编译和安装包制作

构建打包 energy cli 平台介绍描述windowNSIS安装包制作工具可通过 energy cli 安装linuxdpkg 命令系统自带macosenergy 仅生成 xxx.app系统自带 安装包制作 config/energy_[os].json是初始化应用时自动生成的应用配置文件&#xff0c;在编译和制作应用安装包时使用 Windows…