1. 引言
研究背景:代码漏洞的普遍存在是现代软件系统安全风险的主要原因。作为应对措施,人们已经投入大量努力通过检测和修复软件漏洞来帮助保护这些系统。大多数这些工作都采用了数据驱动的方法(例如基于机器学习和深度学习)。事实上,近年来这些方法的发展势头持续增强,根据最初的实验结果显示出潜在的良好性能。大量工作基于机器学习实现软件漏洞的检测与修复
现存问题:目前,高质量的漏洞数据集的匮乏已成为进一步推动这些数据驱动防御技术的关键障碍。如果没有接受这类数据集的训练,这些技术通常无法在现实场景中表现良好(特别针对大型、复杂的现实世界软件的检测)。最近的研究强调了对真实漏洞数据集的迫切需求。这种数据集的可用性能够帮助改善漏洞检测技术的性能和鲁棒性,以更好地适应复杂的实际应用场景。建立高质量漏洞数据集成为目前亟待解决的关键问题
虽然目前已经存在一些漏洞数据集,但现有的漏洞数据集并不能很好地代表现实世界的漏洞,而且这些数据集中存在很大的不准确性和噪声。这些问题突显了在漏洞数据集获取和质量方面仍然存在挑战,需要进一步的努力来解决,以支持有效的漏洞检测和防御技术的发展。现有漏洞数据集一方面不能代表真实世界漏洞,另一方面存在噪声问题
现有技术:为了实现高质量漏洞数据集的构建,研究人员提出了一些数据生成方法。基于静态代码分析的方法可以实现特点漏洞类型数据的生成,但在数据生成的过程中仍存在很大的模糊性(粒度过粗或粒度过细)。基于深度学习的方法则受制于数据短缺问题,无法实现高质量数据集的有效生成。基于静态代码分析与基于深度学习的数据生成方法都存在问题
尽管漏洞修复和漏洞生成在概念上是相互对立的,最初为漏洞修复的方法可以适用于漏洞生成(例如,Getafix)。但需要注意,漏洞生成相较于漏洞修复其实更具有挑战性,因为它需要更多有缺陷的样本。漏洞修复领域的研究成功可以迁移到漏洞生成领域,但仍存在样本不足的问题
研究内容:论文提出一种新颖的自动数据生成方法 VULGEN,旨在通过模式挖掘与深度学习的结合,生成真实的漏洞。在训练阶段,VULGEN 基于现有的漏洞库提取漏洞模式,生成用于漏洞模式表示的代码编辑,同时在同一数据集上训练一个用于定位漏洞注入点的深度学习模型。在生成阶段,VULGEN 首先通过 深度学习模型实现目标程序漏洞注入点的确定,之后针对提取到的注入点生成对应的代码编辑。最终结合注入点与对应的代码编辑,实现目标文件的漏洞注入。
VULGEN 的核心思想是通过确定性过程(基于模式识别)和概率过程(基于深度学习)的协作,实现目标文件漏洞的有效注入。具体来说,概率过程指导确定性过程以实现代码编辑的有效生成,确定性过程指导概率过程以实现注入点