软件漏洞检测场景中的深度学习模型实证研究
近年来,软件深度学习模型(DLM)在软件漏洞检测领域的漏洞应用探索引起了行业广泛关注 ,在某些情况下,检测利用DLM模型能够获得超越传统静态分析工具的场景检测效果。然而 ,深度实证虽然研究人员对DLM模型的学习价值预测让人惊叹 ,但很多人对这些模型本身的模型特性并不十分清楚。

为了从应用角度对DLM模型在漏洞检测场景下的研究能力与价值进行验证 ,Steenhoek等人发表了《An Empirical Study of Deep Learning Models for Vulnerability Detection》(《漏洞检测的软件深度学习模型实证研究》)论文。该论文全面回顾了近年来公开发表的漏洞DLM在源代码漏洞检测方面的高防服务器相关研究,并实际复现了多个SOTA深度学习模型(见表1) 。检测通过将这些模型在两个广泛使用的场景漏洞检测数据集上进行充分实验,论文作者从模型能力、深度实证训练数据和模型解释等方面进行了6个专项课题的学习研究分析。

为了验证模型的模型准确性,作者使用了与原始资料中相同的数据集和参数设置,对这些模型的运行结果进行了再次测试验证(见表 II)。其中A、P 、R、建站模板F分别代表深度学习中常见的准确率(accuracy)、精确度(precision) 、召回率(recall)和F1分数。总体而言,复现的结果差异在合理范围内(上下2%)。

表 II
需要说明的是,为了更精确地比较模型 ,作者优化了模型的实现,使它们可以同时支持Devign和MSR数据集。然而,在本论文所列举的亿华云研究问题分析中,作者仅使用了上述模型中的9个而排除了VulDeeLocator和SeSyVR两种模型,原因是它们不容易针对Devign和MSR数据集进行优化 。通过对深度学习漏洞检测模型进行实证研究,作者详细分析了六个研究问题,并在以下方面取得收获:
对深度学习漏洞检测模型进行了全面研究。提供了一个包含11个SOTA深度学习模型和数据集的复现包,以便其他研究人员可以使用这些工具来进行漏洞检测研究 。设计了6个RQs ,以评估深度学习模型在漏洞检测方面的性能 、鲁棒性和可解释性,并通过实验回答了这些问题 。模板下载提供了有关如何解释深度学习漏洞检测模型决策的示例和数据,以帮助其他研究人员理解。RQ1:不同模型之间的漏洞检测结果是否具有一致性?单个模型的多次运行和多个模型间的差异点是什么 ?研究动机:揭示深度学习模型漏洞检测结果的不确定性 ,帮助研究人员更好地理解这些模型的表现。
实验设计:实验人员在Devign数据集上使用三个不同的随机种子对11种DLM模型进行训练,然后测量它们在漏洞检测方面的性能 ,香港云服务器并比较它们之间的一致性。作者测量了在所有三个随机种子下具有相同二进制标签的输入所占的百分比,并将其称为“稳定输入”。然后 ,作者比较了这些稳定输入在不同模型之间的一致性。
研究发现:研究发现 ,不同模型在漏洞检测方面的表现存在一定的差异性 ,平均有34.9%的测试数据(30.6%总数据)因为随机种子的不同而产生不同的云计算预测结果 。其中 ,基于属性图(Property Graph)的GNN模型的差异性排名在前两位,而ReVeal模型在50%的测试数据中输出会在不同运行之间发生变化 。相比之下 ,Code2Vec模型表现出最小的变异性。此外,作者还发现 ,不稳定输入与更多错误预测成正相关 。
总的来看 ,虽然每次运行结果之间存在预测差异,但F1测试分数并没有显著变化,并且平均标准差仅为2.9(见 表 III)。因此,虽然当使用不同的随机种子来训练和测试模型时 ,模型的性能可能会有所变化 ,但这种变化应该是可以接受的 ,并且不会对整体性能产生太大影响。

表 III
另外 , 不同架构的DLM模型在测试结果上表现出了较低的一致性 :因为只有7%的测试数据(和7%的总数据)被所有模型所认可。三个GNN模型仅在20%的测试示例(和25%的总数据)上达成了一致 ,而三个表现最佳的transformer模型(LineVul 、PLBART和VulBERTa-CNN)在34%的测试数据(和44%的总数据)上达成了一 致。但是 ,当比较所有5个transformer模型时,只有22%的测试示例(和29%的总数据)是一致的(见表 IV)。不同模型之间的低一致性意味着:当没有基准标签时 ,跨模型比较性能的差异测试方法可能意 义非常有限 。

表 IV
RQ2:是否存在某些类型的漏洞更容易被检测?是否应该为每种类型的漏洞建立单独模型 ,还是训练一个可以检测所有漏洞的模型 ?哪种方式训练出的模型性能更好呢 ?研究动机 :研究人员将漏洞分为不同的类型,探索这些类型对模型性能和准确性的影响 。这有助于更好地理解 DLM处理不同类型漏洞的表现,并为改进模型提供指导 。
实验设计:作者借助CWE漏洞分类系统,把漏洞数据分成5类(见表 V)。然后,使用多个DLM来检测这 些漏洞 ,从而对比它们在不同漏洞类型上的表现。为了减少偏差 ,研究人员进行了交叉验证 。具体的分类包括:缓冲区溢出(Buffer overflow)、值错误(Value error)、资源错误(Resource error) 、输入验证错 误(Input validation error) 、特权升级(Privilege escalation) 。

表 V
研究发现:不同类型的漏洞对于DLM的性能和准确性有着不同的影响 (见图1)。具体而言, 一些漏洞类型比其他类型更容易被检测到 ,例如值错误和缓冲区溢出 ,而一些漏洞类型则更难以被检测到,例如输入验证错误和特权升级 。此外,研究人员还发现,混合模型(棕色柱状图)的性能通常弱于单模型-单漏洞类型 的方式