本篇论文提出了一种新的漏洞源代码数据集——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(软件弱点分类)

最低0.47元/天 解锁文章
1207

被折叠的 条评论
为什么被折叠?



