Skip to main content
QUICK REVIEW

[论文解读] D2A: A Dataset Built for AI-Based Vulnerability Detection Methods Using Differential Analysis

Yunhui Zheng, Saurabh Pujar|arXiv (Cornell University)|Feb 16, 2021
Software Engineering Research参考文献 34被引用 10
一句话总结

D2A 提出了一种基于差异分析的方法,利用开源项目中的缺陷修复提交,自动将静态分析报告中的问题标记为真实阳性或虚假阳性,从而生成一个包含超过130万个示例的大型高质量数据集,并附带详细的上下文信息。该方法显著提升了仅依赖静态分析时的标注质量,并可有效训练机器学习模型,以减少漏洞检测中的误报。

ABSTRACT

Static analysis tools are widely used for vulnerability detection as they understand programs with complex behavior and millions of lines of code. Despite their popularity, static analysis tools are known to generate an excess of false positives. The recent ability of Machine Learning models to understand programming languages opens new possibilities when applied to static analysis. However, existing datasets to train models for vulnerability identification suffer from multiple limitations such as limited bug context, limited size, and synthetic and unrealistic source code. We propose D2A, a differential analysis based approach to label issues reported by static analysis tools. The D2A dataset is built by analyzing version pairs from multiple open source projects. From each project, we select bug fixing commits and we run static analysis on the versions before and after such commits. If some issues detected in a before-commit version disappear in the corresponding after-commit version, they are very likely to be real bugs that got fixed by the commit. We use D2A to generate a large labeled dataset to train models for vulnerability identification. We show that the dataset can be used to build a classifier to identify possible false alarms among the issues reported by static analysis, hence helping developers prioritize and investigate potential true positives first.

研究动机与目标

  • 解决现有用于人工智能驱动漏洞检测的数据集的关键局限性,这些数据集普遍存在合成内容、上下文有限或规模较小的问题。
  • 开发一种自动化、可扩展的方法,利用真实世界软件项目中的缺陷修复提交,将静态分析报告中的问题标记为真实阳性或虚假阳性。
  • 生成一个高质量、大规模的数据集,包含详细的上下文信息(如缺陷类型、根本原因、调用轨迹等),以训练鲁棒的机器学习模型。
  • 通过在 D2A 标注数据集上训练模型,实现静态分析中有效减少误报,从而提升开发人员的生产力。

提出的方法

  • 对六个大型开源项目的版本对(修复前与修复后)应用差异分析。
  • 在两个版本上运行静态分析;在‘修复前’版本中存在但在‘修复后’版本中消失的问题被标记为可能的真实阳性。
  • 该方法利用提交历史和过程间静态分析,提取详细的缺陷上下文信息,包括根本原因位置和调用轨迹。
  • 通过在项目间聚合标注示例,构建多项目数据集,并在每个项目中保持训练/验证/测试集的划分。
  • 在 D2A 数据集上训练机器学习模型(如 CatBoost、LightGBM、随机森林、极端梯度提升树),以将静态分析问题分类为真实阳性或虚假阳性。
  • 应用多模型集成投票机制,以提升泛化能力和性能,特别是在跨项目联合评估中表现更优。

实验结果

研究问题

  • RQ1对版本对进行差异分析是否能可靠地识别出静态分析报告中的真实阳性?
  • RQ2大规模自动化标注方法是否能产生比仅依赖静态分析更高的标注质量?
  • RQ3D2A 数据集是否能有效训练机器学习模型,以减少静态分析中的误报?
  • RQ4模型性能在不同软件项目中如何变化?集成方法是否能提升泛化能力?

主要发现

  • D2A 数据集包含来自六个大型开源项目的超过130万个标注示例,附带详细的上下文信息,如缺陷类型、根本原因和调用轨迹。
  • 人工验证表明,与仅使用静态分析相比,D2A 显著提升了标注质量,减少了标注中的模糊性和误报。
  • 基于 D2A 的误报减少模型在联合数据集上的平均 F1 得分为 0.54,误报减少率(FPRR)达到 83.7%,优于单个模型。
  • 通过多个模型(如 CatBoost、LightGBM、随机森林、极端梯度提升树)的集成投票机制,实现了最佳性能,在联合数据集上的 F1 得分为 0.54,FPRR 为 83.7%。
  • 在单个项目上,模型表现优异(如在 libtiff 上 FPRR 达 97.3%,使用 LightGBM 时为 96.6%),表明其在多样化代码库中具有强大性能。
  • 结果表明,D2A 数据集能够有效训练出能够优先识别真实阳性的模型,从而减轻开发人员在分析静态分析报告时的工作负担。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。