C/C++漏洞数据集的特点

C/C++漏洞数据集的特点
foresta.yang关于数据集,文献[1]发现了一些问题:
-
深度学习模型在漏洞检测上能够成功的一个重要条件是庞大的漏洞代码数据样本的支撑,我们需要大规模数据集来可靠评估深度学习方法对漏洞检测的影响,随着可用培训数据量的增加,不同架构的相对性能会发生根本性变化。
-
LLMs比GNNs更能够利用大规模数据集:**更大的数据集仅轻微提高了ReVeal的表现,但显著提高了LLMs的表现。**然而,我们的实验表明,通过收集更多数据来提高性能可能已经停滞。**与普遍认为对于LLMs表现良好,模型大小是最重要因素不同,我们的结果显示,最重要的因素可能是LLM的训练方式。**在代码理解任务的预训练似乎能够带来很大的改善。我们认为开发更好的代码特定预训练任务是改善基于深度学习的漏洞检测的一个有前途的研究方向。
-
此外,我们**确定了一个部署基于深度学习模型的重要泛化挑战。**要部署一个模型,我们需要检测新软件项目中的漏洞,这些漏洞在训练集中没有出现。我们发现,在这种情况下,深度学习模型表现非常糟糕。然而,在实践中,我们经常希望在新项目上运行漏洞检测工具,因此在训练集中不会有该项目的任何漏洞。所有模型在未见项目上的性能显著下降,例如,在已见项目上的F1分数从49%降至未见项目上的仅9.4%。原因不明;也许模型过度拟合了特定于出现在训练集中的特定项目的模式或编码习惯。
Synthetic Datasets (合成数据集)
SATE IV Juliet [2] 和 SARD [3] 是之前论文中使用的常见合成数据集。**SARD 扩展了Juliet v1.0 测试套件,包含多种编程语言的测试用例。**这些测试用例的准确性很高,而且包含各种 CWE。不过,这些测试用例是利用已知的易受攻击模式孤立构建的,旨在评估静态和动态分析工具。它们并不能完全捕捉真实世界项目中的复杂漏洞。VulDeePecker数据集只关注两个 CWE。他们根据国家漏洞数据库(NVD)[4] 中的 CVE 信息从 19 个项目中选取了漏洞,并将这两个 CWE 中的SARD测试用例合并在一起。VulDeePecker 和 SARD 都是半合成数据集。
Static Analyzer Labels
Draper [5] 数据集是使用来自三个静态分析器(Clang、Cppcheck和Flawfinder)的警告生成的标签。**一些类别的警告被标记为脆弱,而一些被映射为非脆弱。**标记的数据集是在函数级别进行的。标签的质量未知,但静态分析器的标签准确度往往较低。 D2A [6] 对静态分析器(Infer)在六个开源存储库上输出的差异分析。对于github存储库的成千上万个版本对,如果静态分析器为git提交前的版本生成警告,但在提交之后不生成警告,则D2A将该提交视为修复漏洞。对于其余的警告,D2A将它们标记为与漏洞无关。
Manual Labeling
Devign [7] 数据集由三名安全研究人员进行标记。他们首先使用关键词从四个存储库中查找可能修复漏洞和与漏洞无关的提交。然后,对于第一类别,三名安全研究人员通过多数票手动审查这些提交,确定哪些修复了安全漏洞。给定每个提交的标签后,Devign提取提交前的更改函数作为数据样本,并根据提交的标签将其标记为易受攻击或非易受攻击。Devign的作者发布了两个存储库,FFMPeg和Qemu的数据。**这个数据集具有高质量的标签,但手动标记非常昂贵,**耗费了大约600人时。
Security Issues
先前的几个数据集是通过爬取安全问题来生成的,以识别漏洞修复提交。ReVeal[8]数据集是使用来自Chromium安全问题和Debian安全跟踪器的补丁进行标记的。ReVeal将安全补丁(提交)前的更改函数视为易受攻击的,补丁后的函数视为不易受攻击,所有未更改的函数被视为不易受攻击。
BigVul[9],CrossVul [10]和CVEfixes [11]从NVD [4:1]的通用漏洞和漏洞记录中收集漏洞修复提交。特别是,CVEFixes涵盖截至2022年8月27日的所有已发布CVE。CVEfixes和CrossVul数据集涵盖多种编程语言,这三个数据集涵盖了广泛的项目和CWEs。
其他一些 C/C++ 漏洞源代码数据集没有提供漏洞函数,因此我们没有将其纳入实验。例如,AOSP [12] 从 Android 开源项目(AOSP)的安全公告中收集了修复 CVE 的提交,其中包含 Android 操作系统、Linux 内核和芯片上系统制造商的漏洞补丁。
PatchDB [13] 提供了补丁信息,即代码差异,但没有提供足够的信息来识别它来自哪个项目或 git 仓库,因此无法让我们重建更改功能的完整代码。
DiverseVul
要想让深度学习取得成功,我们需要一个大型的漏洞源代码数据集。我们发布了一个新的开放式 C/C++ 漏洞数据集 DiverseVul。为了整理这个数据集,我们抓取安全问题网站,收集漏洞报告,提取每个漏洞的漏洞修复提交,克隆相应的项目,并从中提取有漏洞和无漏洞的源代码。我们的数据集包含从 7,514 次提交中提取的 18,945 个易受攻击函数和 330,492 个非易受攻击函数,涵盖 150 个 CWE。这比之前最大、最多样化的数据集 CVEFixes [11:1] 中的 C/C++ 数据量大两倍多。
我们的数据集更加多样化,涵盖的项目比之前发布的所有数据集的总和多出近 50%。我们向社区公开发布了 DiverseVul 数据集,网址是 https://github.com/wagner-group/diversevul。
References
DiverseVul: A New Vulnerable Source Code Dataset for Deep Learning Based Vulnerability Detection. ↩︎
Vadim Okun, Aurelien Delaitre, Paul E Black, et al. 2013. Report on the static analysis tool exposition (sate) iv. NIST Special Publication 500 (2013), 297. ↩︎
National Institute of Standards and Technology. Last accessed on March 19, 2023. NIST Software Assurance Reference Dataset. https://samate.nist.gov/SARD ↩︎
National Institute of Standards and Technology. Last accessed on March 19, 2023. National Vulnerability Database. https://nvd.nist.gov/ ↩︎ ↩︎
Rebecca Russell, Louis Kim, Lei Hamilton, Tomo Lazovich, Jacob Harer, Onur Ozdemir, Paul Ellingwood, and Marc McConley. 2018. Automated vulnerability detection in source code using deep representation learning. In 2018 17th IEEE international conference on machine learning and applications (ICMLA). IEEE, 757–762. ↩︎
Yunhui Zheng, Saurabh Pujar, Burn Lewis, Luca Buratti, Edward Epstein, Bo Yang, Jim Laredo, Alessandro Morari, and Zhong Su. 2021. D2A: a dataset built for AI-based vulnerability detection methods using differential analysis. In 2021 IEEE/ACM 43rd International Conference on Software Engineering: Software Engineering in Practice (ICSE-SEIP). IEEE, 111–120. ↩︎
Yaqin Zhou, Shangqing Liu, Jingkai Siow, Xiaoning Du, and Yang Liu. 2019. Devign: Effective vulnerability identification by learning comprehensive program semantics via graph neural networks. Advances in neural information processing systems 32 (2019). ↩︎
Saikat Chakraborty, Rahul Krishna, Yangruibo Ding, and Baishakhi Ray. 2021. Deep learning based vulnerability detection: Are we there yet. IEEE Transactions on Software Engineering (2021). ↩︎
Jiahao Fan, Yi Li, Shaohua Wang, and Tien N Nguyen. 2020. A C/C++ code vulnerability dataset with code changes and CVE summaries. In Proceedings of the 17th International Conference on Mining Software Repositories. 508–512. ↩︎
Georgios Nikitopoulos, Konstantina Dritsa, Panos Louridas, and Dimitris Mitropoulos. 2021. CrossVul: a cross-language vulnerability dataset with commit data. In Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. 1565–1569. ↩︎
Guru Bhandari, Amara Naseer, and Leon Moonen. 2021. CVEfixes: automated collection of vulnerabilities and their fixes from open-source software. In Proceedings of the 17th International Conference on Predictive Models and Data Analytics in Software Engineering. 30–39. ↩︎ ↩︎
Alexis Challande, Robin David, and Guénaël Renault. 2022. Building a Commitlevel Dataset of Real-world Vulnerabilities. In Proceedings of the Twelveth ACM Conference on Data and Application Security and Privacy. 101–106. ↩︎
Xinda Wang, Shu Wang, Pengbin Feng, Kun Sun, and Sushil Jajodia. 2021. Patchdb: A large-scale security patch dataset. In 2021 51st Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN). IEEE, 149–160. ↩︎