- A+
漏洞检测这个方向最近几年尤为热门,尤其是与深度学习技术相结合的研究,同时一些公开可用的数据集的出现也进一步推动了这些技术的发展。本篇文章总结归纳了目前在 C/C++ 源代码漏洞检测方向的一些公开数据集以及相关文献。
1 Devign (FFmpeg+Qemu)
简介:Zhou 等人[1] 从 4 个大型 C 语言开源项目(包括 Linux Kernel、Qemu、Wireshark 和 FFmpeg)中收集并人工标注函数,构成了该数据集,它包含 12460 个存在漏洞的函数和 14858 个不存在漏洞的函数,属于一个较为平衡的数据集。
- 数据集链接:function.json - Google 云端硬盘
- 标注级别:函数级
- 类别:真实项目数据集
- 数据文件:function.json
- 项目地址:原作者没有开源项目,这里列出第三方复现代码:GitHub - epicosy/devign: Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks
2 Reveal (Chrome + Debian)
简介:Saikat 等人[2] 从 Chromium 和 Debian 项目的开发者/用户报告的漏洞中整理出一个真实世界数据集,它包含 2240 个存在漏洞的函数和 20494 个不存在漏洞的函数,更接近于漏洞代码在真实世界中的分布情况。
- 数据集链接:Chromium_And_Debian_Vulnerability_Data - Google 云端硬盘
- 标注级别:函数级
- 类别:真实项目数据集
- 数据文件:vulnerables.json(漏洞样本)和 non-vulnerables.json(非漏洞样本)
- 项目地址:GitHub - VulDetProject/ReVeal
3 BigVul
简介:Fan 等人[3] 从 348 个开源 Github 项目中收集,包括从 2002 年到 2019 年的 91 个不同的 CWE,188636 个 C/C++ 函数。其中漏洞函数比例为 5.7%(即 10,900 个漏洞函数),以及 5,060,449 个 LOC,漏洞行比例为 0.88%(即 44,603 条漏洞行)。在这 10,900 个易受攻击的功能中,易受攻击线路的比率从 2.5%(第一四分位数)到 20%(第三四分位数)不等,中位数为 7%。
- 数据集链接:MSR_20_Code_vulnerability_CSV_Dataset/all_c_cpp_release2.0.csv at master · ZeoVan/MSR_20_Code_vulnerability_CSV_Dataset · GitHub
- 标注级别:行号级
- 类别:真实项目数据集
- 数据格式:all_c_cpp_release2.0.csv
- 项目地址:GitHub - ZeoVan/MSR_20_Code_vulnerability_CSV_Dataset: A C/C++ Code Vulnerability Dataset with Code Changes and CVE Summaries
4 SecVulEval
SecVulEval 是一个 C/C++ 漏洞数据集。该数据集包含 5,867 个 CVE 漏洞、10,998 个易受攻击的漏洞函数和 14,442 个非易受攻击的函数。除其他相关元数据外,该数据集还包含在语句级别上的漏洞修复更改以及与易受攻击语句相关的上下文信息。
- 数据集链接:arag0rn/SecVulEval · Datasets at Hugging Face
- 数据格式:.parquet
- 项目地址:basimbd/SecVulEval: SecVulEval is a dataset of C/C++ vulnerabilities.
5 CVEFixes
CVEfixes 是一个全面的漏洞数据集,它自动从美国国家漏洞数据库 (NVD) 中的通用漏洞与暴露 (CVE) 记录中收集并整理而成。其目标是通过提供不同抽象级别(例如提交级别、文件级别、方法级别以及存储库级别和 CVE 级别)的详细信息,支持基于 NVD 中 CVE 修复相关源代码和源代码指标的数据驱动型安全研究。最新版本 v1.0.8 涵盖了截至 2024 年 7 月 23 日的所有已发布的 CVE。所有在此期间在 NVD 的 CVE 记录中报告且拥有公开 Git 存储库的开源项目均已提取并纳入此漏洞数据集的构建考量。该数据集采用关系数据库的形式组织,涵盖 4249 个开源项目中的 12107 个漏洞修复提交,共计 11873 个 CVE,涵盖 272 种不同的常见漏洞枚举 (CWE) 类型。数据集包含 51342 个文件和 138974 个函数更改前后的源代码。此次收集工作耗时 48 小时,由 4 名工作人员完成。
- 数据集链接:CVEfixes Dataset: Automatically Collected Vulnerabilities and Their Fixes from Open-Source Software
- 项目地址:secureIT-project/CVEfixes: CVEfixes: Automated Collection of Vulnerabilities and Their Fixes from Open-Source Software
6 DiverseVul
通过爬取安全问题网站,收集漏洞报告,提取每个漏洞的漏洞修复提交,克隆相应的项目,并从中提取易受攻击和不易受攻击的源代码。该数据集包含从 7,514 个commits中提取的 18,945 个易受攻击的漏洞函数和 330,492 个不易受攻击的函数,涵盖 150 个 CWE。这比之前规模最大、多样性最高的数据集 CVEFixes 中 C/C++ 数据的两倍多。该数据集更加多样化,涵盖的项目数量比之前所有已发布的数据集的总和多出近 50%。
- 数据集链接:
1. diversevul_20230702.json: diversevul_20230702.json - Google 云端硬盘
2. diversevul_20230702_metadata.json: diversevul_20230702_metadata.json - Google 云端硬盘 - 数据格式:.json
- 项目地址:wagner-group/diversevul: DiverseVul: A New Vulnerable Source Code Dataset for Deep Learning Based Vulnerability Detection (RAID 2023) https://surrealyz.github.io/files/pubs/raid23-diversevul.pdf
7 Real-Vul
该数据集基于 Big-Vul 构建,选取了漏洞数量最多的前10个项目,且运用了一些数据增强技术,确保了数据集的多样性和代表性,同时解决了标签不一致问题,更贴近实际使用场景。该数据集共包含 5528 个漏洞函数和 1682713 个不确定函数。
1. 数据集链接:realvul/RealVul · Datasets at Hugging Face
2. 标注:行号级
3. 类别:真实项目数据集
4. 数据格式: .csv
8 SARD+NVD
简介:Li 等人[4] 从国家漏洞数据库 (NVD) 和软件保障参考数据集 (SARD)中收集了 15150 个程序,包括 2821 个真实世界程序和 12329 个人工合成程序。从 NVD 中收集到的程序附有差异(diff)文件,以程序在修补相关漏洞前后的差异代码的位置作为漏洞行号标签;从 SARD 收集到的程序附有标签,标明这些程序是否存在漏洞。该数据集过滤了代码长度少于 500 行的程序,因为这些程序过于简单,对于真实漏洞检测任务不太适用。
- 数据集链接:VulDeeLocator/data/programs at master · VulDeeLocator/VulDeeLocator · GitHub
- 标注:函数级和行号级
- 类别:人工合成,真实项目数据集
- 数据格式:.C / .CPP 源文件
- 项目地址:GitHub - VulDeeLocator/VulDeeLocator
9 Juliet C/C++ 1.3.1
简介:一个由美国国家标准与技术研究院(NIST)创建的脆弱数据集,该数据集共包含 64099 个源程序测试用例,这些测试用例覆盖了 118 个不同的 CWE 漏洞类型。
- 数据集链接:Juliet C/C++ 1.3.1 with extra support - NIST Software Assurance Reference Dataset
- 标注:行号级别
- 类别:人工合成数据集
- 数据格式:.C / .CPP 源文件
- 项目地址:无
10 NVD-New
该数据集源自16个开源项目,包含大量与内存安全相关的漏洞。通过筛选符合研究目标的样本,共获得623个样本,其中包含340个漏洞样本和283个非漏洞样本,涵盖资源泄露、越界访问、空指针引用等多种漏洞类型。
- 数据集链接:PacVD/data at main · DoeSEResearch/PacVD
- 数据格式:.pkl
- 项目地址:DoeSEResearch/PacVD
11 MVD
该数据集针对内存相关漏洞,涵盖 13 个常见内存相关漏洞(包括 CWE119、-120、-121、-122、-124、-125、-126、-401、-415、-416、-476、-787 和 -824)。基于两个广泛采用的来源:SARD 以及 CVE。采用漏洞类型(即 CWE-ID )作为搜索条件,从 SARD 和 CVE 中收集与内存相关的漏洞。对于真实漏洞,仅考虑包含源代码的 CVE,并从中收集易受攻击的函数及其对应的修补函数。对于 SARD,收集所有标记为“bad”的测试用例。CVE 中包含 1,208 个真实漏洞,涵盖 10 个被先前研究广泛用作目标项目的开源 C/C++ 项目;SARD 中包含 3,145 个易受攻击的样本(即测试用例)。
- 数据集链接:https://github.com/MVDetection/MVD/blob/main/data.7z
- 数据格式:.C / .CPP 源文件
- 项目地址:MVDetection/MVD
12 D2A
简介:Zheng 等人[5] 基于差异分析的方法,用于标记静态分析工具报告的问题。D2A 数据集是通过分析来自多个开源项目的版本对来构建的。从每个项目中,选择错误修复提交,并对此类提交之前和之后的版本运行静态分析。如果在 before-commit 版本中检测到的一些问题在相应的 after-commit 版本中消失,那么它们被视为提交修复的真实 bug。
- 数据集链接:D2A - Differential Analysis Dataset - IBM Developer
- 标注:函数级
- 类别:真实项目数据集
- 数据格式:.pickle / .json
- 项目地址:GitHub - IBM/D2A: This repository is to support contributions for tools and new data entries for the D2A dataset hosted in DAX
13 DBGBENCH
简介:DbgBench[6] 由一组现实世界中存在错误的 C 程序组成,专业软件工程师对这些程序进行了分析和修复。该数据集由 12 位专业软件工程师,一起花了一个月的时间来定位、解释和修复这些错误。并且该数据集可以准确确定开发人员将哪些陈述定位为错误,开发人员如何诊断和解释错误,以及开发人员如何修复错误。
14 CodeXGLUE
简介:微软构建的代码智能基准数据集[7],包括一组代码智能任务和一个用于模型评估和比较的平台。CodeXGLUE 代表 code 的一般语言理解评估基准,其中包括 14 个数据集,用于 10 个多样化的代码智能任务,涵盖以下场景:
- 代码-代码(克隆检测、缺陷检测、完形填空测试、代码完成、代码修复和代码到代码转换);
- 文本-代码(自然语言代码搜索、文本到代码生成)
- 代码-文本(代码摘要)
- 文本-文本(文档翻译)
- 数据集链接:Hugging Face – The AI community building the future.
- 项目地址:GitHub - microsoft/CodeXGLUE: CodeXGLUE
15 参考
- [1] Zhou Y, Liu S, Siow J, et al. Devign: Effective vulnerability identification by learning comprehensive program semantics via graph neural networks[J]. Advances in neural information processing systems, 2019, 32.
- [2] Chakraborty S, Krishna R, Ding Y, et al. Deep learning based vulnerability detection: Are we there yet?[J]. IEEE Transactions on Software Engineering, 2021, 48(9): 3280-3296.
- [3] Fan J, Li Y, Wang S, et al. AC/C++ code vulnerability dataset with code changes and CVE summaries[C]//Proceedings of the 17th International Conference on Mining Software Repositories. 2020: 508-512.
- [4] Li Z, Zou D, Xu S, et al. Vuldeelocator: a deep learning-based fine-grained vulnerability detector[J]. IEEE Transactions on Dependable and Secure Computing, 2021, 19(4): 2821-2837.
- [5] Zheng Y, Pujar S, Lewis B, et al. D2a: A dataset built for ai-based vulnerability detection methods using differential analysis[C]//2021 IEEE/ACM 43rd International Conference on Software Engineering: Software Engineering in Practice (ICSE-SEIP). IEEE, 2021: 111-120.
- [6] Böhme M, Soremekun E O, Chattopadhyay S, et al. Where is the bug and how is it fixed? an experiment with practitioners[C]//Proceedings of the 2017 11th joint meeting on foundations of software engineering. 2017: 117-128.
- [7] Lu S, Guo D, Ren S, et al. Codexglue: A machine learning benchmark dataset for code understanding and generation[J]. arXiv preprint arXiv:2102.04664, 2021.