DIVERSEVUL: A New Vulnerable Source Code Dataset for Deep Learning Based Vulnerability Detection

本篇论文提出了一种新的漏洞源代码数据集——DIVERSEVUL,并通过爬取安全问题网站、提取修复漏洞的提交和源代码等方法进行构建。该数据集包含18,945个脆弱函数,覆盖了150个CWE(软件漏洞分类)和330,492个非脆弱函数,来自7,514个提交。与之前的数据集相比,该数据集涵盖了更多的项目。此外,作者还分析了使用深度学习检测软件漏洞所面临的挑战和有前途的研究方向。他们评估了11种模型架构,属于4个家族,结果表明深度学习在检测漏洞时仍存在高误报率、低F1分数和难以检测硬CWE等问题。同时,作者还提出了大型语言模型(LLMs)和针对特定源代码的预训练目标是未来的研究方向,可以提高漏洞检测性能。

方法描述

该研究旨在收集高质量的漏洞修复提交,并关注来自真实世界的项目。他们选择了从安全问题中收集数据,因为这些反映了社区开发人员和安全分析师提供的高质量标签。首先,他们识别了29个安全问题网站,并从中缩小到具有最多git系统提交的两个网站。然后,他们从这些网站中爬取了问题标题、正文以及相关git提交URL。由于开发者的讨论可能会引用漏洞修复提交和引入漏洞的提交,因此他们使用两种启发式方法来排除引入漏洞的提交。首先,他们排除所有在包含关键词“introduced”和“first included”的评论中提到的commit URL;其次,他们手动检查至少更改了10个函数的所有提交,并排除那些引入漏洞的提交。最后,他们保留了剩余的提交作为他们的数据集。

接下来,他们解析git提交URL以提取项目和提交ID。然后,他们克隆了项目并从这些项目中提取提交。接着,他们在提交中识别与C/C++相关的代码文件,并提取了这些文件中发生变化的函数以及未发生变化的函数。他们将被修改函数的先前版本标记为脆弱,而修改后的版本则标记为非脆弱。他们还将相关代码文件中的未受影响函数标记为非脆弱。像之前的工作一样,他们通过MD5哈希值去重函数,并在去重前不归一化代码。他们在处理函数时跟踪唯一MD5集合。他们先处理所有脆弱函数,然后再处理非脆弱函数。如果函数的MD5已经存在于这个集合中,则不会再次包括该函数。总共,他们从797个项目中收集了7,514个提交,导致18,945个脆弱函数和330,492个非脆弱函数,涵盖了150个CWE(软件弱点分类)。

对于提及CVE编号的问题标题,他们查询National Vulnerability Database API以获取问题和相应提交的CWE信息。对于带有开发者注释的漏洞类别的问题,他们手动将其映射到最流行的25个CWE中。大约85%的数据可以映射到150个CWE类别。他们没有专门处理层次化的CWE。根据NVD数据库的查询结果,一个CVE编号可能映射到多个CWE。

方法改进

本研究的方法改进在于其数据采集过程更加全面和精确。作者们不仅考虑了安全问题本身,还考虑了提交的提交记录,从而能够更好地捕捉漏洞修复的过程。此外,他们使用了多种启发式方法来排除引入漏洞的提交,从而提高了数据的质量。

解决问题

本研究解决了从实际项目中收集高质量漏洞修复提交的问题。他们的方法可以帮助研究人员更好地理解漏洞修复的过程,并提供更准确的漏洞修复模型。同时,他们的数据集也可以用于评估漏洞修复工具的效果。

论文实验

本文主要介绍了使用不同模型架构和数据集对C/C++代码中的漏洞检测性能的影响,并通过实验结果得出了一些结论。

在实验中,作者选择了四种不同的模型架构,包括GPT-2家族的三个模型(GPT-2 Base、CodeT5 Base和NatGen)、以及RoBERTa家族的一个模型(CodeBERT)。同时,作者还使用了四个数据集,包括Devign、REVEAL、BigVul和CrossVul,以及一个由这些数据集中项目合并而成的数据集(Previous+ DIVERSEVuL)。

通过对这些模型在测试集上的表现进行比较,作者得出了以下结论:

  1. 当训练数据量较大时,大型语言模型比基于图神经网络的REVEAL模型表现更好。具体来说,在训练数据量较大的情况下,LLM模型的表现要优于REVEAL模型,而在训练数据量较小的情况下,REVEAL模型则表现更好。

  2. 在LLM模型中,T5 Base模型在漏洞检测任务上表现最好。这表明,具有编码器-解码器结构的模型可能更适合于漏洞检测任务。

  3. 在预训练模型方面,仅使用自然语言处理任务的模型(如CodeBERT、GraphCodeBERT和CodeGPT)与使用预训练模型的模型(如CodeT5和NatGen)相比,没有显著提高漏洞检测性能。

  4. 在预训练任务方面,使用特定于代码的任务(如CodeT5和NatGen)可以显著提高漏洞检测性能,而使用自然语言处理任务的模型则无法达到同样的效果。

  5. 对于相同的训练数据集,收集更多的数据集并不能进一步提高模型的性能。

综上所述,本文的实验结果表明,选择适当的模型架构和预训练任务对于提高C/C++代码中的漏洞检测性能非常重要。此外,收集更多的数据集并不能总是带来更好的性能提升。

文章优点

  • 该论文提出了一种新的C/C++漏洞源代码数据集DIvERSEVuL,并使用该数据集研究了各种深度学习架构在检测软件漏洞方面的有效性。
  • 通过比较不同的模型架构和训练数据量,该论文得出了许多有价值的结论,例如:使用大型语言模型(如RoBERTa、GPT-2和T5)可能比使用基于结构特征的图神经网络更有效;预训练任务对于提高性能非常重要等。
  • 论文还探讨了一些挑战和限制,例如:模型需要大量的训练数据才能达到最佳效果;模型的泛化能力仍然有限,难以处理未见过的项目等。

方法创新点

  • 该论文提出了一个新的C/C++漏洞源代码数据集DIvERSEVuL,该数据集是目前最大的、最多样化的数据集之一。
  • 该论文使用了多种深度学习模型来检测软件漏洞,并比较了它们的效果。
  • 该论文还提出了一些新的思路和方向,例如:开发针对代码理解的任务特定预训练技术,以进一步提高模型性能。

未来展望

  • 该论文提出的DIvERSEVuL数据集为后续的研究提供了有价值的基础资源,可以用于探索更多关于深度学习模型在软件漏洞检测中的应用。
  • 该论文提出的一些新思路和方向值得进一步深入研究和实践,例如:如何更好地设计和实施针对代码理解的任务特定预训练技术,以及如何解决模型泛化能力不足的问题。
  • 该论文所涉及的挑战和限制也需要更多的研究和探索,以便更好地理解和应对这些问题。
该是一个在 Kaggle 上发布的数据集,专注于 2024 年出现的漏洞(CVE)信息。以下是关于该数据集的详细介绍:该数据集收集了 2024 年记录在案的各类漏洞信息,涵盖了漏洞的利用方式(Exploits)、通用漏洞评分系统(CVSS)评分以及受影响的操作系统(OS)。通过整合这些信息,研究人员和安全专家可以全面了解每个漏洞的潜在威胁、影响范围以及可能的攻击途径。数据主要来源于权威的漏洞信息平台,如美国国家漏洞数据库(NVD)等。这些数据经过整理和筛选后被纳入数据集,确保了信息的准确性和可靠性。数据集特点:全面性:涵盖了多种操作系统(如 Windows、Linux、Android 等)的漏洞信息,反映了不同平台的安全状况。实用性:CVSS 评分提供了漏洞严重程度的量化指标,帮助用户快速评估漏洞的优先级。同时,漏洞利用信息(Exploits)为安全研究人员提供了攻击者可能的攻击手段,有助于提前制定防御策略。时效性:专注于 2024 年的漏洞数据,反映了当前网络安全领域面临的新挑战和新趋势。该数据集可用于多种研究和实践场景: 安全研究:研究人员可以利用该数据集分析漏洞的分布规律、攻击趋势以及不同操作系统之间的安全差异,为网络安全防护提供理论支持。 机器学习与数据分析:数据集中的结构化信息适合用于机器学习模型的训练,例如预测漏洞的 CVSS 评分、识别潜在的高危漏洞等。 企业安全评估:企业安全团队可以参考该数据集中的漏洞信息,结合自身系统的实际情况,进行安全评估和漏洞修复计划的制定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值