A Systematic Literature Review on Automated Software Vulnerability Detection Using Machine Learning
Abstract 摘要
近年来,包括深度学习(DL)和经典机器学习(ML)模型在内的众多机器学习(ML)模型被开发出来以检测软件漏洞。然而,缺乏全面和系统的调查综述,这些综述总结了、分类并分析了这些 ML 模型在软件漏洞检测中的应用。这种缺失可能导致关键研究领域的忽视或代表性不足,从而导致对软件漏洞检测当前技术水平的理解出现偏差。为了填补这一空白,我们提出了一项全面和系统的文献综述,使用六个主要研究问题(RQs)来描述基于 ML 的软件漏洞检测系统的不同特性。
使用自定义网络爬虫,我们的系统方法包括从四个广泛使用的在线数字图书馆中提取一系列研究:ACM 数字图书馆、IEEE Xplore、ScienceDirect 和 Google Scholar。我们手动分析了提取的研究,以过滤掉与软件漏洞检测无关的不相关工作,随后创建分类和解决 RQs。我们的分析表明,在过去的几年中,应用机器学习技术进行软件漏洞检测的趋势显著上升,近年来发表了大量研究。突出的会议场所包括国际软件工程会议(ICSE)、国际软件可靠性工程研讨会(ISSRE)、软件库挖掘(MSR)会议以及 ACM 国际软件工程基础会议(FSE),而《信息和软件技术》(IST)、《计算机与安全》(C&S)和《系统与软件杂志》(JSS)是领先的期刊场所。
我们的结果表明,39.1%的研究对象使用混合来源,而 37.6%的研究对象利用基准数据用于软件漏洞检测。基于代码的数据是研究对象中最常用的数据类型,其中源代码是主要子类型。基于图和基于标记的输入表示是最受欢迎的技术,分别占研究对象总数的 57.2%和 24.6%。在输入嵌入技术中,图嵌入和标记向量嵌入是最常用的技术,分别占研究对象总数的 32.6%和 29.7%。此外,88.4%的研究对象使用深度学习模型,其中循环神经网络和图神经网络是最受欢迎的子类别,而只有 7.2%使用经典机器学习模型。在研究对象覆盖的漏洞类型中,CWE-119、CWE-20 和 CWE-190 是最频繁的。在软件漏洞检测使用的工具方面,Keras 与 TensorFlow 后端和 PyTorch 库是最常用的模型构建工具,各有 42 项研究使用。 此外,Joern 是用于代码表示最流行的工具,占 24 项研究。
最后,我们在软件漏洞检测的背景下总结挑战和未来方向,为该领域的学者和实践者提供有价值的见解。
1 Introduction 1 引言
自动漏洞识别对于确保软件安全至关重要[99]。机器学习(ML)领域的成功激发了对利用这些模型在一般/传统软件系统中寻找软件漏洞的浓厚兴趣[145]。ML 模型擅长在大型数据集中检测微妙的模式和相关性[6]。它们可以从原始数据中自动提取重要特征,如源代码,并检测可能揭示软件缺陷的隐藏模式。这种能力在漏洞检测中至关重要,因为漏洞通常涉及微妙的代码特征和依赖关系。此外,ML 模型可以处理各种数据类型和格式,包括源代码[26]、文本信息[56]以及提交特征等数值特征[114]。它们可以使用这些数据表示来有效地发现漏洞。这种多功能性使研究人员能够使用各种数据源,并包括众多特征以实现全面的漏洞检测。
尽管许多研究已经使用机器学习模型来检测软件漏洞,但尚未有全面和系统的综述来整合这些技术的各种方法和特点。进行此类系统调查将有助于实践者和研究人员更好地了解当前最先进的漏洞检测工具,并为未来的研究提供灵感。本研究从不同角度对软件漏洞检测研究进行了全面和详细的调查、分析、描述和分类。我们分析了 2011 年 1 月至 2024 年 6 月发表在许多软件工程旗舰期刊和会议上的 138 项研究。在本研究中,我们探讨了以下研究问题(RQs):
RQ1:研究趋势是什么?
RQ1.1:研究随时间推移的趋势是什么?
RQ1.2:出版场所的分布情况如何?
RQ2:软件漏洞检测数据集的特点是什么?
RQ2.1:数据集的来源是什么?
RQ2.2:最常用的数据类型有哪些?
RQ2.3:最常用的输入表示是什么?
RQ2.4:最常用的嵌入方法有哪些?
RQ3:用于软件漏洞检测的机器学习(ML)和深度学习(DL)模型的分布情况如何?
RQ4:在主题研究中,最常见的漏洞类型有哪些?
RQ5:软件漏洞检测中最常用的工具有哪些?
RQ6:软件漏洞检测中可能面临的挑战和开放方向有哪些?
本文做出了以下贡献:
我们全面分析了 138 项研究,这些研究使用了机器学习模型来检测关于出版趋势、出版物分布和贡献类型的网络安全漏洞。
我们对数据集、数据处理、数据表示、模型架构、工具以及研究对象中涵盖的漏洞类型进行了全面分析。
我们根据其架构对用于漏洞检测的机器学习模型进行了分类。
我们讨论了在漏洞检测中使用机器学习技术的独特技术挑战,并概述了关键的未来发展方向。
我们将我们的结果和分析数据作为复现包 1 分享,以便其他研究人员能够轻松地跟随这项工作并扩展它。
我们认为这项工作对软件工程和网络安全领域的科研人员和从业者具有重要价值,尤其是那些专注于软件漏洞检测和缓解的。它也有利于政策制定者、软件提供商以及关注提高软件安全性和降低网络攻击风险的利益相关者,影响他们的软件开发、采购和风险管理决策。
文章其余部分组织如下。第 2 节提供背景信息和相关工作的综述。第 3 节概述了本文提出的研究方法。第 4 节讨论了研究问题(RQs)并展示了相应的结果。第 5 节讨论了本研究的有效性可能受到的潜在威胁。最后,第 6 节提出了结论并建议未来的研究方向。
2 Background and Related Work
2 背景及相关工作
在这一节中,我们首先定义漏洞并概述检测软件漏洞的关键步骤。然后,我们回顾相关调查,强调它们与我们自己的不同之处。
2.1 Background 2.1 背景
软件漏洞管理对于确保软件安全和完整性至关重要[119]。随着对软件在关键操作(如金融交易[39])中依赖性的增加,漏洞带来了严重风险,包括未经授权的访问和服务中断。有效的管理对于保护用户隐私、维护系统可用性和确保可靠性至关重要。软件漏洞管理包括多个步骤,包括漏洞检测、漏洞分析和漏洞修复。在以下小节中,我们将详细阐述每个步骤。
2.1.1 Vulnerability Detection.
2.1.1 漏洞检测。
漏洞检测在软件漏洞管理整体过程中至关重要[11]。它包括检测软件系统中攻击者可能利用的安全弱点。用于漏洞检测的传统技术有几种。在手动代码审计方法中,专家会彻底检查源代码,以手动检测编码缺陷、不安全程序和可能存在的漏洞。静态分析[35]涉及使用自动化工具分析源代码或编译的二进制文件,而无需执行测试软件。动态分析[67, 102]的目标是评估软件在运行时的行为。这包括在受控环境中运行软件或通过自动化测试,同时监控其执行和与系统资源的交互。然而,动态分析可能在系统开销方面存在限制[167]。这一类别下的一个方法是使用模糊测试进行软件漏洞检测[42]。 模糊测试中,确定了待测程序的输入空间,然后随机修改/变异输入或基于一组已定义的规则生成格式不正确的输入以及边界输入值(即边缘情况)。这些受污染的值预计会击中程序中未正确验证的部分,从而导致严重的安全漏洞,如拒绝服务或远程代码执行。混合代码分析[25]是一种强大的方法,它结合了静态分析和动态分析的优势,以提高软件漏洞检测的有效性。静态分析在不执行代码的情况下检查代码。其关键优势是能够快速扫描整个代码库并在代码执行之前识别任何缺陷。然而,它通常会产生大量的误报,并且对运行时行为的上下文有限[52]。然而,动态分析涉及运行代码并以实时方式监控其行为。这种方法擅长发现运行时问题,如内存泄漏。 然而,主要缺点是它资源密集,因为你需要运行整个待测试程序来探索不同的代码补丁。
混合模型利用两种方法的优势以确保全面覆盖。尽管具有这些优点,实施混合代码分析存在技术复杂性,例如集成和同步静态和动态工具。此外,它需要大量的计算资源和时间,可能会减缓开发时间。
2.1.2 Vulnerability Analysis.
2.1.2 漏洞分析。
在漏洞检测之后,软件漏洞管理的下一步是漏洞分析和评估[130]。这一步骤包括对已识别的漏洞进行进一步审查,以评估其严重性、影响和潜在的利用性。首先,关于严重性,准确评估软件漏洞至关重要,原因有几个。其中一个原因是它允许组织根据漏洞的严重性来优先处理响应。严重性指的是漏洞被利用时可能产生的潜在影响[15]。通过准确评估严重性,组织可以集中精力关注那些对软件系统安全和功能构成重大威胁的高严重性漏洞。其次,关于影响,准确评估漏洞有助于确定它们可能对组织产生的潜在影响[43]。影响一词指的是利用漏洞的表现,如拒绝服务[53]或数据泄露。 通过理解潜在影响,组织可以就修复努力的紧迫性和优先级做出明智的决策。第三,关于可利用性,准确的安全漏洞评估有助于理解其潜在的利用性[14]。这包括确定攻击者成功利用漏洞渗透软件系统的可能性。
2.1.3 Vulnerability Remediation.
2.1.3 漏洞修复。
软件漏洞的解决过程,通过修补、代码修改和修复等不同技术手段,被称为软件漏洞修复[59]。修复的基本目标是消除或减轻漏洞,以提高软件系统的安全性和可靠性。一种常见的漏洞修复方法是应用软件供应商或开源社区提供的补丁[156]。补丁是针对软件系统中识别出的特定漏洞或弱点的更新或修复。
2.1.4 ML for Software Vulnerability Detection.
2.1.4 软件漏洞检测中的机器学习
通过利用数据分析、模式识别和机器学习来发现软件安全漏洞,机器学习方法已经彻底改变了软件漏洞检测[145]。这些技术提高了漏洞检测的准确性和效率,可能实现自动化检测、快速分析和识别之前未公开的漏洞。机器学习在漏洞检测中的一个常见应用是对代码片段[27]、软件二进制文件或从 GitHub 或通用漏洞和暴露(CVE)等开源存储库中提取的代码更改进行分类。这些模型可以在标记数据集上进行训练,其中每个样本代表一个已知的漏洞或非漏洞。然后,这些模型从提供的示例中学习,并根据它们学到的模式对新实例进行分类。这种方法允许自动发现漏洞,无需手动检查,大大降低了分析所需的时间和精力。
机器学习模型在检测软件漏洞方面相较于传统方法具有显著优势。每个优势将在下一段详细讨论。自动化是一个重要优势。机器学习模型可以自动扫描和分析大型代码库或系统配置,检测潜在漏洞,无需对每个案例进行人工干预[12]。这种自动化加快了检测过程,使安全团队能够专注于验证和缓解漏洞,而不是手动分析。在效率和可扩展性方面,机器学习方法提供了更快的分析。传统的漏洞检测技术依赖于人工检查或应用预定义的规则[128]。相比之下,机器学习方法可以并行评估大量数据并快速生成预测,显著缩短发现漏洞所需的时间。在检测有效性方面,机器学习模型可以揭示之前未知的漏洞,通常称为零日漏洞[5]。 这些模型甚至在没有针对它们进行特定训练的情况下,通过学习模式和从标记数据中泛化,也可能发现漏洞的迹象。这种能力通过帮助在攻击者利用之前识别和解决软件中的未知弱点,从而提高了整体安全性[1]。
图 1 展示了软件漏洞检测的整体流程。使用机器学习模型进行软件漏洞检测的流程包括几个关键阶段。
第一阶段是数据收集,数据来自各种来源,包括但不限于国家漏洞数据库(NVD)和国家标准与技术研究院(NIST)软件保证参考数据集(SARD),代码仓库(GitHub),以及特定的开源项目(LibTIFF,FFMPEG)。
数据预处理阶段包括分词、解析(使用如 Joern、 3 等工具)、归一化和特征提取,以将原始代码转换为可分析格式。
数据表示阶段是将预处理后的数据转换为适当的表示,包括基于图的表示,如控制流图或数据流图,标记表示或数值属性。
在特征提取阶段,一旦数据以适当的形式表示,这些表示就通过不同的嵌入技术(如图嵌入或标记向量嵌入)转换为合适的特征。
在模型推理阶段,根据数据特征选择合适的深度学习模型(例如,循环神经网络(RNNs)、图神经网络(GNNs)、Transformer、自编码器和深度信念网络(DBNs)),以及传统的机器学习模型(例如,支持向量机(SVMs)、决策树和随机森林)。训练过程包括将数据分为训练集和测试集、特征工程、超参数调整以及应用合适的训练算法。
此外,模型评估通常采用交叉验证、性能指标(即准确率、精确率和召回率)、混淆矩阵和消融研究来确保稳健的性能。这一步骤确保模型在检测软件漏洞方面准确可靠。
2.2 Related Work 2.2 相关工作
文献中已有关于软件漏洞的几篇综述论文。在本节中,我们根据表 1 所示的不同方面分析现有论文。
| No. 第号 | Study 研究 | Data Source 数据源 | Representation 表示 | Embedding 嵌入 | Models 模型 | Vulnerability Types 漏洞类型 | Tools 工具 |
|---|---|---|---|---|---|---|---|
| 1 | Le et al. [72] Le 等人[72] | ||||||
| 2 | Ghaffarian & Shahriari [40] 加法里安 & 沙赫里亚里 [40] | ||||||
| 3 | Lin et al. [86] 林等人[86] | ||||||
| 4 | Zeng et al. [173] 曾等[173] | ||||||
| 5 | Semasaba et al. [124] Semasaba 等[124] | ||||||
| 6 | Sun et al. [133] Sun 等人[133] | ||||||
| 7 | Kritikos et al. [69] Kritikos 等人[69] | ||||||
| 8 | Khan & Parkinson [66] 卡恩与帕金森[66] | ||||||
| 9 | Nong et al. [112] Nong 等人 [112] | ||||||
| 10 | Chakraborty et al. [12] 查克拉巴蒂等[12] | ||||||
| 11 | Liu et al. [90] 刘等[90] | ||||||
| 12 | Our survey 我们的调查 |
表 1. 我们调查与现有相关调查/综述贡献比较
表格的列表示调查的不同方面,例如所使用的数据源、表示、特征嵌入、机器学习模型、漏洞类型以及用于模型构建或数据集处理的工具。数据源表示调查是否审查了漏洞检测数据源。表示讨论调查是否在其分析中考虑了源代码表示。嵌入检查调查是否考虑了特征嵌入。表格还考虑了第六列的机器学习模型。表格还检查调查是否根据通用弱点枚举(CWE)编号考虑漏洞类型。最后一列表示研究是否涵盖了用于软件漏洞检测的工具。
Ghaffarian 和 Shahriari[40]以及 Kritikos 等人[69]的作品在数据驱动安全漏洞检测方面与我们的研究最为接近。在他们调查中,他们从多个方面分析了基于机器学习的软件漏洞检测,如表 1 所示。然而,与我们的工作相比,存在一些差异。具体来说,我们的工作从以下方面调查了漏洞检测:更好地理解攻击模式和用于软件漏洞检测的工具。了解不同类型的漏洞使研究人员能够深入了解各种攻击模式,从而设计出能够识别已知和未知攻击模式的检测技术。了解软件漏洞检测工具揭示了技术趋势,帮助该领域的研究人员利用工具实现可重复性。它突出了现有工具的优缺点,指导了新发展的方向。流行的工具提供社区支持、文档和共享知识,加速了研究的创新和实际应用。
Le 等人[72]回顾了基于数据驱动的漏洞评估和优先级研究。他们回顾了利用机器学习和数据挖掘方法进行软件评估和优先级研究的先前研究。与我们不同的是,我们回顾的是软件漏洞检测技术,这指的是识别软件系统中潜在漏洞的过程,而他们调查的是评估和优先级技术。
Lin 等人[86]研究了使用深度学习和基于神经网络的技巧来检测软件漏洞的文献。与我们的工作相比,主要区别在于我们考察了在期刊和会议论文中发表的软件漏洞检测论文的趋势分析,因为这提供了对特定领域或研究领域的出版模式的整体理解。趋势分析可以揭示研究产出在各种出版场所的分布以及研究人员和作者偏好的变化。
曾等人[173]讨论了可利用软件漏洞的关注度日益增长以及检测方法的发展,特别是使用机器学习技术。它回顾了 22 项使用深度学习进行漏洞检测的近期研究,并确定了该领域四个重要的颠覆性创新。该调查基于数据来源、特征表示、深度学习模型和检测工具对这些颠覆性创新进行了比较。我们的调查在两个方面有所不同。首先,我们分析了期刊和会议中软件漏洞检测的出版趋势,提供了对研究趋势的全面理解。其次,我们涵盖了除数据来源、特征表示和机器学习模型之外的其他方面,包括漏洞类型和检测工具。
Kritikos 等人[69]和 Sun 等人[133]专注于网络安全,旨在提高网络韧性。Sun 等人[133]讨论了从被动检测到主动预测的网络安全威胁理解和防御的范式转变,重点介绍了使用多种数据源进行网络安全事件预测系统的新研究。Kritikos 等人[69]讨论了将应用程序迁移到云中并确保其安全的挑战,重点关注应用程序生命周期中的漏洞管理以及使用开源工具和数据库来更好地保护应用程序。虽然这两种方法都旨在提高应用程序的安全性,但它们在重点和所使用的技术上有所不同。它们主要侧重于提供指导和支持工具,以支持应用程序生命周期中的漏洞管理,而我们的调查则侧重于使用机器学习技术在源代码上检测软件漏洞,旨在自动化源代码或存储库数据(即提交特征)中漏洞的识别。
Khan 和 Parkinson[66]专注于脆弱性评估,即在黑客利用之前,寻找和修复计算机系统中的漏洞的过程。这突出了对自动化脆弱性缓解策略进行更多研究的必要性,这些策略可以有效地保障软件系统安全。然而,使用机器学习方法对源代码进行脆弱性识别,需要分析软件的源代码以发现安全漏洞。这种方法不是评估整个系统的安全性,而是专注于寻找代码本身的漏洞。
Nong 等人[112]探讨了软件漏洞检测研究的开放科学方面,并认为在软件工程中,关于开放科学问题的研究不足,尤其是关于软件漏洞检测的问题。作者进行了详尽的文献研究,并确定了 55 项相关研究,这些研究提出了基于深度学习的漏洞检测方法。他们研究了开放科学的各个方面,包括可用性、可执行性、可重复性和可复制性。该研究揭示了 25.5%的检查方法提供了开源工具。
Chakraborty 等人[12]研究了基于深度学习的漏洞预测方法在现实世界漏洞预测场景中的性能。他们发现,最先进的基于深度学习的技术在现实世界场景中的性能下降了 50%以上。与我们的调查研究相比,一个显著的不同之处在于,在我们的工作中,我们专注于使用机器学习模型进行软件漏洞检测,并描述了漏洞检测流程中的不同阶段。然而,他们关注的是与使用最先进的深度学习模型进行软件漏洞检测相关的问题。
刘等人[90]讨论了深度学习(DL)技术在软件工程研究中的日益普及,这得益于它们能够解决软件工程挑战而无需进行广泛的手动特征工程。与我们的研究相比,主要区别在于我们关注机器学习(ML)技术在软件漏洞检测管道中的应用,而他们强调软件工程研究报告中结果的复现性和可重复性。
3 Methodology 3 方法论
3.1 Sources of Information
3.1 信息来源
本文对其他作品[65, 116]进行了系统调查,收集并审查了从 2011 年 1 月到 2024 年 6 月关于使用机器学习技术进行软件漏洞检测的研究。我们系统方法的整体工作流程如图 2 所示。我们将一系列流行且广泛使用的数字图书馆作为数据来源,包括 ACM 数字图书馆、ScienceDirect、IEEE Xplore 和 Google Scholar。我们基于 Selenium[1]和 Beautiful Soup[2]库开发了一个网络爬虫 4 。我们开发网络爬虫的原因是它提供了一种可靠、可扩展且有效的方法来从网络中收集相关信息,这对于学术研究,特别是系统文献综述非常有用。
2011 年 1 月至 2024 年 6 月是提取软件漏洞检测研究的一个合适的时间段,原因有以下几点。一方面,软件漏洞的数量和多样性有所增加。在过去十年中,发现和报告的软件漏洞数量和多样性显著增加。截至 2021 年,NVD 中有 15 万个 CVE 记录。这种增加需要更复杂和有效的漏洞检测方法,这导致了新的数据驱动技术的开发。另一方面,机器学习和数据分析的进步。过去十年中,机器学习取得了显著进展,包括深度学习算法[44, 55]、自然语言处理技术[89]和其他在检测软件漏洞方面非常有效的数据驱动方法。
3.2 Search Terms 3.2 搜索词
根据现有调查[72, 86, 124, 173],我们设计了以下搜索词:
漏洞检测 或 “深度迁移学习漏洞检测” 或 “迁移学习软件漏洞检测” 或 “迁移学习软件错误检测” 或 “软件漏洞检测” 或 “使用深度学习的漏洞检测” 或 “源代码安全错误预测” 或 “源代码漏洞检测” 或 “源代码错误检测” 或 “使用深度学习在源代码上的漏洞检测”
使用关键词和我们的网络爬虫,我们从图 2 所示的数字图书馆中收集了超过 15K 条初始记录。在提取初始记录后,我们开始对初始记录进行三个阶段的手动分析和筛选,包括基于论文标题、摘要和内容的验证。这三个阶段将在下文小节中详细解释。
3.3 Study Selection and Quality Assessment
3.3 研究选择与质量评估
选择纳入我们调查的研究过程包括以下阶段:(1)最初根据标题选择研究,(2)在审阅摘要后选择研究,以及(3)阅读全文后进行进一步选择。请注意,初始搜索结果包含与软件漏洞检测无关的条目。这可能是由于关键词匹配错误造成的。我们手动检查了每一篇论文,并删除了这些无关论文,以确保我们调查数据集的质量。我们还观察到,搜索结果中存在重复的论文,因为同一研究可能被多个数据库索引。然后我们手动丢弃了重复的研究。
纳入标准如下:(1)研究应为同行评审(即我们不包括 arXiv 论文),(2)研究应包含实验结果,(3)研究应提出新的机器学习技术,(4)研究应改进现有的数据驱动漏洞检测技术,(5)机器学习模型的输入应为源代码、文本、提交、字节码或它们的组合。此外,我们还有以下排除标准以筛选出无关论文:(1)关注其他工程领域(如电气工程、机械工程、航空航天工程等)的研究,(2)涉及静态分析、动态分析、混合分析和突变测试的研究,(3)综述或调查性研究,(4)关注 Web 和 Android 应用程序漏洞检测的研究,(5)属于以下类别之一:书籍、章节、教程或技术报告的研究,(6)关注移动设备恶意软件检测、入侵检测和利用静态代码属性(即圈复杂度)进行漏洞检测的研究。
3.3.1 Title Filtering Stage.
3.3.1 标题过滤阶段。
在这个阶段,我们根据研究标题进行筛选。由于标题并不能传达太多关于研究主题的信息,我们只关注与初始关键词的相关性。在这个阶段,我们回答以下问题:标题中是否包含与软件漏洞检测相关的特定关键词或短语?例如,在标题为“面向基于硬件的 IP 漏洞检测和片上系统部署后补丁的解决方案”的研究中,尽管标题中包含了我们设计的“漏洞检测”关键词,但上下文表明,重点是硬件和片上系统,而不是软件工程。
在手动分析约 15K 条记录之后,我们收集了 398 个独特的研究进行进一步评估。
摘要筛选阶段。给定从上一阶段筛选出的研究列表,我们对研究的摘要进行了全面分析。我们将每篇论文的摘要分解为四个主要部分,包括背景、目标、方法和结果/发现,因为研究论文的摘要通常遵循这种结构。
在这个筛选阶段,我们获得了 202 篇独特的论文以供进一步验证。
内容过滤阶段。在本节中,我们详细分析每项研究的具体内容以执行过滤过程。由于每项研究的实际内容中包含更多细节,我们制定了一套标准问题。我们依靠对这些问题的回答来评估论文的质量。如果这些问题的回答是肯定的,则该研究相关;否则,我们将该论文从进一步审查中移除。问题如下:(1)论文引言中是否明确提出了与软件漏洞检测相关的明确研究目标?(2)所提出的漏洞检测方法是否使用了机器学习或深度学习技术?(3)是否存在定义明确且可重复的技术?(4)是否对软件漏洞检测有明确的贡献?(5)是否有验证技术的明确方法?(6)所选用于验证的项目主题是否适合研究目标?(7)所使用的数据集是否与软件漏洞检测相关?(8)深度学习和机器学习模型的输入数据类型是否与软件漏洞检测相关? (有效数据类型包括源代码、二进制代码、文本和提交指标);(9)是否存在控制技术或基线来证明软件漏洞检测技术的有效性?;(10)评估指标是否与研究目标相关(例如,评估所提出技术的有效性)?;(11)研究中呈现的结果是否与研究目标一致,并且是否以清晰和相关的形式呈现?
本阶段的筛选过程产生了 138 项主题研究以解决 RQs。我们利用这 138 项研究创建了分类法,将在下一节中详细解释。
3.4 Taxonomy Development and Classification Methodology
3.4 分类发展及分类方法
本节中,我们介绍了用于开发我们的分类法和根据我们的研究问题(RQs)对所选论文进行分类的方法。该过程采用增量方法,遵循现有研究[53]。我们的分类法基础建立在文献的系统分析上,由旨在探索软件漏洞检测各个维度的特定 RQs 指导。每个 RQ 都作为我们分类的焦点,确保了一种结构化和连贯的方法。
相关信息提取。我们仔细审查了每篇选定的论文,以提取与 RQs 相关的文本片段。对于 RQ2,它涉及数据集的来源,我们检查了每项研究的经验设置部分。这部分是作者讨论数据集来源最常用的部分。 10 这使我们能够了解作者用于评估其提出的软件漏洞检测技术的数据集类型。对于 RQ3,我们分析了详细说明软件漏洞检测方法的部分。这包括识别所采用的机器学习(ML)和深度学习(DL)模型的描述。清楚地解释所提出方法的主要信息来源之一是整体架构,它描绘了所提出技术的整个过程。对于 RQ4,我们检查了主题研究中涵盖的漏洞类型。这些类型通常使用 CWE 系统,在论文中容易找到。我们在论文中搜索以 CWE 开头的任何关键词。如果我们找到任何提到的 CWE ID,我们就记录下来。否则,我们注明该论文未指定其研究旨在检测哪些漏洞类型。 请注意,有些论文没有提及 CWE ID。例如,对于整数溢出(CWE-190),它们只使用原始标题而不是 CWE ID。因此,我们同时搜索 CWE ID 和其他相关漏洞关键词。对于 RQ5,我们详细分析了实验部分,特别是主题研究的实现部分,以提取有关用于构建 ML 模型的工具的信息。我们的实证评估显示,作者通常使用“实现”或“构建”等关键词来描述他们使用的工具。对于 RQ6,我们检查了主题研究的引言部分,因为作者通常明确提到他们在软件漏洞检测中解决的具体问题。
创建初步分类法。最初,我们根据定义的研究问题(RQs)建立初步分类法,这为以有意义和系统的方式组织研究提供了一个基本框架。例如,对于第一项研究,我们为 RQ1 至 RQ6 创建初步分类法。在彻底解决给定研究的所有 RQs 之后,我们继续下一项研究。
迭代细化。一旦创建了初始分类法,我们就随着对每个研究问题(RQ)在所有主题研究中的分析深入,对其进行扩展和细化。然后,作者通过将新论文分配到初步分类法中来扩展分类法。如果一篇新论文无法纳入分类法中现有的任何类别,就创建一个反映该论文独特特征的新类别。为确保分类法的准确性,第二和第三位作者(未参与分类法创建过程)从工作流程中随机选取 20 篇论文,检查创建的分类法是否存在任何差异。在确定任何分歧后,他们进行标记。随后,所有作者参与讨论,以解决和解决这些分歧。最初,分歧率为 30%,但在第二次审查和交叉检查论文后,我们能够消除所有分歧。
解决分歧。在提取过程中,如果我们遇到冲突的信息或解释,我们会共同讨论这些差异,以达成共识。这种协作努力确保了我们的分类保持一致和准确。通过遵循这种严格的方法,我们确保了我们的分类体系基于对文献的详细和系统分析。这种方法为对所选论文进行分类和全面解决每个研究问题提供了一个清晰且连贯的框架。
4 Results 4 结果
在这一节中,我们展示了我们的分析和发现,以解决研究问题。
4.1 RQ1: What Is the Trend of Studies?
4.1 RQ1:研究趋势是什么?
为了了解出版物趋势,我们考察了出版日期以及它们所呈现的场所。
4.1.1 RQ1.1: What Is the Trend of Studies over Time?.
4.1.1 RQ1.1:研究随时间推移的趋势是什么?
图 3 展示了过去 13 年(即 2011 年 1 月至 2024 年 6 月)发表的软件漏洞检测研究出版趋势。观察可知,出版物数量逐年逐渐增加。
我们同时分析了图 3 中显示的出版物累积数量。值得注意的是,拟合分布的曲线在 2020 年至 2024 年之间斜率显著增加,表明自 2020 年以来,使用机器学习技术进行软件漏洞检测已成为一种普遍趋势。
4.1.2 RQ1.2: What Is the Distribution of Publication Venues?.
4.1.2 RQ1.2:出版物场所的分布情况如何?
在本研究中,总体而言,我们研究了并回顾了来自各种出版物场所的 138 项研究,包括来自会议和研讨会的 61 项研究以及来自期刊的 77 项研究。表 2 显示了每个出版物场所的研究分布。总共 44.2%的出版物是在会议和研讨会上发表的,而 55.7%的研究已作为文章发表在期刊上。可以观察到,ICSE、ISSRE、MSR 和 FSE 是最受欢迎的场所,拥有最多的研究数量。同时,在期刊场所中,IST、C&S 和 JSS 的研究数量最多,分别是 13 篇、12 篇和 12 篇。
| Conference Venue 会议地点 | # Studies # 研究 | References 参考文献 | Journal Venue 期刊出版地 | # Studies # 研究 | References 参考文献 |
|---|---|---|---|---|---|
| ICSE | 9 | [11, 113, 129, 135, 146, 147, 150, 155, 170] [11, 113, 129, 135, 146, 147, 150, 155, 170] | IST | 13 | [9, 10, 17, 30, 31, 108, 126, 127, 139, 149, 158, 175, 181] [9, 10, 17, 30, 31, 108, 126, 127, 139, 149, 158, 175, 181] |
| ISSRE | 6 | [153, 169, 172, 179, 180, 185] [153, 169, 172, 179, 180, 185] | C&S C&S:C&S(此处保持原文,可能为专有名词或缩写) | 12 | [36, 45, 47, 63, 68, 77, 131, 132, 138, 148, 152, 164] [36, 45, 47, 63, 68, 77, 131, 132, 138, 148, 152, 164] |
| MSR | 5 | [19, 38, 54, 56, 105] [19, 38, 54, 56, 105] | JSS | 12 | [7, 8, 13, 16, 32, 91, 98, 106, 114, 136, 143, 171] [7, 8, 13, 16, 32, 91, 98, 106, 114, 136, 143, 171] |
| FSE | 5 | [78, 81, 103, 111, 184] [78, 81, 103, 111, 184] | TDSC | 6 | [83, 84, 87, 95, 188, 189] [83, 84, 87, 95, 188, 189] |
| IJCAI | 4 | [23, 34, 96, 187] [23, 34, 96, 187] | TSE | 5 | [26, 82, 122, 151, 174] [26, 82, 122, 151, 174] |
| ASE | 3 | [73, 110, 177] [73, 110, 177] | TIFS | 4 | [58, 142, 154, 157] [58, 142, 154, 157] |
| NDSS | 2 | [85, 125] [ 85, 125 ] | ISA | 4 | [134, 159, 176, 182] [134, 159, 176, 182] |
| NeurIPS 神经信息处理系统大会 | 2 | [3, 183] [3, 183] | TOSEM | 3 | [20, 109, 190] [ 20, 109, 190 ] |
| TrustCom | 2 | [93, 165] [93, 165] | TKDE | 2 | [76, 97] [76, 97] |
| OOPSLA | 2 | [79, 118] [79, 118] | IS | 2 | [41, 64] [41, 64] |
| CCS | 2 | [115, 163] [ 115, 163 ] | ESA | 2 | [92, 140] [92, 140] |
| ICLR | 2 | [28, 71] [28, 71] | CN | 1 | [178] [178] |
| QRS | 2 | [74, 141] [74, 141] | TFS | 1 | [94] [ 94 ] |
| USENIX | 1 | [162] [ 162 ] | SQJ | 1 | [33] [33] |
| MASCOTS | 1 | [37] [37] | PL | 1 | [80] [80] |
| KDDM | 1 | [107] [ 107 ] | P&S P&S:P&S(可能指产品与服务的缩写,具体含义需根据上下文确定) | 1 | [75] [ 75 ] |
| ISSTA | 1 | [22] [ 22 ] | Nature 自然 | 1 | [60] [60] |
| IJCNN | 1 | [48] [48] | KBS | 1 | [186] [186] |
| ICTAI | 1 | [117] [ 117 ] | FGCS | 1 | [49] [49] |
| ICECCS | 1 | [21] [21] | EAAI | 1 | [144] [144] |
| ICBD | 1 | [168] [168] | CEE | 1 | [120] [120] |
| GLOBCOM | 1 | [166] [166] | BRA | 1 | [4] [4] |
| DSAA | 1 | [104] [ 104 ] | ASC | 1 | [57] [57] |
| CDSN | 1 | [137] [ 137 ] | |||
| CARS | 1 | [70] [70] | |||
| SANER | 1 | [29] [29] | |||
| ENTCC | 1 | [62] [62] | |||
| MCSoC MCSoC:多核片上系统 | 1 | [46] [ 46 ] | |||
| Overall 总体 | 61 | 77 |
表 2. 基于会议和期刊场所的出版物分布
4.2 RQ2: What Are the Characteristics of Software Vulnerability Detection Datasets?
4.2 研究问题 2:软件漏洞检测数据集的特征是什么?
在这一节中,我们考察了用于漏洞检测研究的数据,并对数据来源、数据类型和数据表示的步骤进行了全面分析。
4.2.1 RQ2.1: What Is the Source of Datasets?.
4.2.1 RQ2.1:数据集的来源是什么?
机器学习软件漏洞检测的主要挑战之一是模型训练所需数据的不足[19, 88]。因此,在如何获取足够的数据集以促进软件漏洞检测的机器学习模型训练方面的研究存在差距。为此,我们分析了该主题研究中数据集的来源。我们的分析表明,用于此目的的数据集可以大致分为四类:基准、混合、开源软件和存储库来源。在主题研究中,39.1%的研究使用混合作为软件漏洞检测的数据源。他们结合了各种数据来源,如基准、存储库和开源项目,为软件漏洞检测提供了一个全面和多角度的资源[36, 141]。这些数据集结合了每个数据来源的优点,提供了更丰富和更多样化的信息,这对于构建和验证稳健的漏洞检测系统至关重要。由 37.6% 的研究对象在软件漏洞检测领域发挥着关键作用,通过提供标准化的、高质量的数据,研究人员可以使用这些数据来评估和比较其检测技术的有效性[127, 159]。使用基准数据集有助于构建软件漏洞检测的机器学习模型。然而,它们可能不包括零日漏洞,这对影响很大。在研究对象中,13.7% 的研究收集来自在线存储库的数据集,我们将这类数据集归类为存储库类别。这些数据集来自 GitHub 或 Stack Overflow 等存储库网站上公开的项目[28, 118, 184]。这些存储库包含大量数据,包括源代码、提交历史、问题跟踪器和文档。存储库详细记录了代码库的任何更改,如提交信息、差异和时间戳[101]。这一全面的历史记录使研究人员能够追踪漏洞从引入到解决的生命周期(请参阅 Iannone 等人[61]的工作)。第四个来源是开源软件,占 9%。4% 的受试研究,为软件漏洞检测提供了丰富多样的数据来源[126, 163]。这些项目是公开可访问的,通常拥有庞大的贡献者社区,他们持续更新和维护代码。一些示例开源项目包括但不限于 FFmpeg、QEMU、OpenSSH 和 LibTIFF。这些项目的开放性意味着它们经常被众多开发者仔细检查,这可能导致各种漏洞的发现和记录。
表 3 显示了主题研究中使用的基准数据的详细分布。观察可知,SARD 和 NVD 是基准类别中最广泛使用的数据来源。SARD 是一套专为测试软件系统而创建的测试用例集合。它是作为 NIST 11 提高软件系统质量和安全性的努力之一而开发的。SARD 提供了一系列合成和现实世界的测试场景,旨在反映许多类型的软件漏洞。基准数据的另一个主要来源是 NVD,它是一个公开披露的软件漏洞的综合性存储库。NVD 条目基于 CVE 系统,该系统为每个漏洞提供标准化的标识符和描述。CVE 由 CVE 编号机构 12 分配,是 NVD 的基石。NVD 中的每个条目都包含有关漏洞的详细信息,例如其描述、严重性(使用通用漏洞评分系统)、受影响的软件版本、相关警告的引用以及缓解建议。 Smartbugs Wild 13 也是智能合约领域软件漏洞检测中第三常用的(占 12 项研究)数据集。Smartbugs Wild 包含从以太坊主网络挖掘的超过 47K 个智能合约,其中包括各种现实世界的智能合约,为测试和评估漏洞检测技术提供了有用的数据集。请注意,确认基准数据集有效性的关键因素是其持续更新。随着漏洞性质的变化和更多零日漏洞的出现,这些数据集需要更新以反映最新的软件漏洞模式。这就是为什么研究人员在构建机器学习模型时不仅仅依赖于基准数据。
| No. 第号 | Source 源 | # Studies # 研究 | References 参考文献 |
|---|---|---|---|
| 1 | SARD | 33 | [9, 11, 20, 21, 31, 34, 36, 37, 47, 49, 63, 68, 83, 84, 85, 87, 95, 137, 138, 139, 140, 141, 142, 143, 148, 152, 155, 157, 158, 165, 179, 180, 189] [9, 11, 20, 21, 31, 34, 36, 37, 47, 49, 63, 68, 83, 84, 85, 87, 95, 137, 138, 139, 140, 141, 142, 143, 148, 152, 155, 157, 158, 165, 179, 180, 189] |
| 2 | NVD | 32 | [10, 11, 19, 30, 31, 32, 36, 37, 49, 54, 63, 68, 70, 73, 83, 84, 85, 94, 95, 113, 132, 137, 142, 143, 155, 157, 158, 159, 174, 179, 180, 189] [10, 11, 19, 30, 31, 32, 36, 37, 49, 54, 63, 68, 70, 73, 83, 84, 85, 94, 95, 113, 132, 137, 142, 143, 155, 157, 158, 159, 174, 179, 180, 189] |
| 3 | Smartbugs Wild 智能虫 | 12 | [7, 13, 57, 91, 103, 104, 105, 134, 153, 169, 177, 185] [7, 13, 57, 91, 103, 104, 105, 134, 153, 169, 177, 185] |
| 4 | Big-Vul 大漏洞 | 8 | [32, 38, 81, 98, 108, 110, 129, 188] [32, 38, 81, 98, 108, 110, 129, 188] |
| 5 | Reveal 揭示 | 6 | [78, 98, 140, 150, 151, 174] [78, 98, 140, 150, 151, 174] |
| 6 | Juliet Test Suit 朱丽叶测试套件 | 5 | [23, 29, 75, 148, 164] [23, 29, 75, 148, 164] |
| 7 | ESC | 5 | [76, 96, 97, 169, 187] [76, 96, 97, 169, 187] |
| 8 | D2A | 5 | [22, 29, 127, 140, 174] [22, 29, 127, 140, 174] |
| 9 | SolidiFi-benchmark | 5 | [7, 103, 104, 105, 134] [7, 103, 104, 105, 134] |
| 10 | Fan et al. 范等 | 4 | [22, 78, 150, 151] [ 22, 78, 150, 151 ] |
| 11 | Vuldeepecker | 4 | [16, 17, 140, 190] [16, 17, 140, 190] |
| 12 | VSC | 4 | [76, 96, 97, 187] [76, 96, 97, 187] |
| 13 | NDSS | 3 | [71, 75, 107] [71, 75, 107] |
| 14 | PROMISE | 3 | [74, 146, 172] [74, 146, 172] |
| 15 | FUNDED | 2 | [60, 174] [60, 174] |
| 16 | F-Droid | 2 | [26, 122] [26, 122] |
| 17 | Android/iOS | 2 | [26, 122] [26, 122] |
| 18 | SySeVr | 2 | [17, 190] [17, 190] |
| 20 | Others 其他人 | 25 | [7, 32, 33, 41, 46, 48, 57, 60, 64, 70, 73, 81, 82, 95, 129, 134, 135, 136, 140, 142, 164, 166, 174, 181, 182] [7, 32, 33, 41, 46, 48, 57, 60, 64, 70, 73, 81, 82, 95, 129, 134, 135, 136, 140, 142, 164, 166, 174, 181, 182] |
| – | Unique Total 独特总计 | 99 | – |
表 3. 基准数据源详细分布
表 4 显示了数据存储库源的数据详细分布。如图所示,GitHub 是软件漏洞检测数据的最受欢迎来源,占 27 项研究。利用 GitHub 作为数据源的一个好处是,它为您提供了开发者编写的真实世界代码的访问权限,这些代码可用于训练和测试漏洞检测模型。第二个常用的存储库数据来源是 CVE 系统,这是一个广泛认可和使用的框架,用于识别、编目和引用公开披露的漏洞。CVE 系统中的每个漏洞都被赋予一个唯一的标识符,称为 CVE ID(例如,CVE-2023-33976)。这个标准化标识符促进了在各种平台和工具之间的轻松引用和沟通。CVE 条目提供了漏洞的详细描述,概述了问题的性质、受影响的软件和潜在影响。第三个常用的存储库数据来源是 Etherscan, 14 ,一个流行的以太坊区块链浏览器。 Etherscan 为用户提供关于以太坊交易、地址、代币和智能合约的详细信息。它提供了对已部署智能合约的详细洞察,包括合约的源代码(如果已验证)、交易和执行历史。用户可以访问涉及智能合约的所有交易的完整历史,包括函数调用、输入参数和交易结果。
| No. 第号 | Source 源 | # Studies # 研究 | References 参考文献 |
|---|---|---|---|
| 1 | GitHub | 27 | [10, 11, 19, 20, 28, 48, 54, 73, 79, 80, 93, 94, 106, 111, 113, 114, 115, 118, 120, 132, 142, 147, 149, 159, 175, 176, 184] [10, 11, 19, 20, 28, 48, 54, 73, 79, 80, 93, 94, 106, 111, 113, 114, 115, 118, 120, 132, 142, 147, 149, 159, 175, 176, 184] |
| 2 | CVE | 20 | [9, 11, 19, 38, 47, 58, 60, 75, 87, 94, 113, 115, 131, 132, 141, 147, 152, 154, 174, 176] [9, 11, 19, 38, 47, 58, 60, 75, 87, 94, 113, 115, 131, 132, 141, 147, 152, 154, 174, 176] |
| 3 | Etherscan 以太坊浏览器 | 13 | [4, 7, 8, 58, 62, 82, 120, 125, 135, 168, 171, 176, 178] [4, 7, 8, 58, 62, 82, 120, 125, 135, 168, 171, 176, 178] |
| 4 | Bugzilla | 4 | [19, 114, 166, 184] [19, 114, 166, 184] |
| 5 | Jira | 3 | [19, 80, 184] [19, 80, 184] |
| 6 | PyPI | 1 | [3] [ 3 ] |
| – | Unique Total 独特总计 | 51 | – |
表 4. 用于收集数据所使用的存储库的详细分布
4.2.2 RQ2.2: What Are the Most Commonly Used Data Types?.
4.2.2 RQ2.2:最常见的使用数据类型是什么?
在检测软件漏洞方面,数据集可以包含不同的数据类型。例如,现有的软件漏洞检测模型可以在源代码或提交中找到漏洞。仔细检查这些数据类型至关重要,因为它们需要不同的预处理技术,并且在使用机器学习模型时必须以不同的方式表示。此外,不同的数据类型需要为机器学习模型采用不同的架构方法。本节概述了各种数据类型及其分布。我们将所使用数据集的数据类型分为四大类:代码、文本、数值和混合。
大多数研究对象(92.7%)主要关注分析源代码以检测软件漏洞,强调了在识别漏洞中代码级分析的重要性。仓库级数据(如文本报告和日志)占 1.4%,而提交特征(数值数据)占 2.8%。此外,2.8%的研究采用混合方法,结合了代码级分析和仓库级数据。
表 5 详细说明了在主题研究中使用的详细数据类型类别。表格显示,128 项主题研究使用了基于代码的类别,该类别的主要数据类型是源代码[34, 179]。二进制代码是基于代码类别的第二大主要数据类型[58, 117],占 18 项主题研究。
| Category 类别 | Data Type 数据类型 | # Studies # 研究 | Total 总计 | References 参考文献 |
|---|---|---|---|---|
| Code based 基于代码 | Source code 源代码 | 108 | 128 | [3, 7, 8, 9, 10, 11, 13, 16, 20, 21, 22, 23, 26, 28, 29, 31, 32, 34, 36, 37, 38, 41, 47, 48, 49, 54, 60, 63, 64, 68, 70, 73, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 91, 92, 93, 94, 95, 96, 97, 98, 103, 104, 106, 108, 109, 110, 113, 118, 120, 122, 126, 127, 129, 131, 132, 134, 135, 136, 137, 138, 140, 141, 142, 143, 144, 146, 147, 149, 150, 151, 152, 153, 154, 157, 158, 159, 162, 163, 165, 169, 170, 171, 172, 174, 175, 176, 177, 179, 180, 181, 183, 185, 186, 187, 188, 189, 190] [3, 7, 8, 9, 10, 11, 13, 16, 20, 21, 22, 23, 26, 28, 29, 31, 32, 34, 36, 37, 38, 41, 47, 48, 49, 54, 60, 63, 64, 68, 70, 73, 74, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 91, 92, 93, 94, 95, 96, 97, 98, 103, 104, 106, 108, 109, 110, 113, 118, 120, 122, 126, 127, 129, 131, 132, 134, 135, 136, 137, 138, 140, 141, 142, 143, 144, 146, 147, 149, 150, 151, 152, 153, 154, 157, 158, 159, 162, 163, 165, 169, 170, 171, 172, 174, 175, 176, 177, 179, 180, 181, 183, 185, 186, 187, 188, 189, 190] |
| Binary code 二进制代码 | 18 | [4, 45, 46, 57, 58, 62, 71, 75, 105, 107, 117, 125, 139, 148, 164, 168, 178, 182] [4, 45, 46, 57, 58, 62, 71, 75, 105, 107, 117, 125, 139, 148, 164, 168, 178, 182] | ||
| Image 图像 | 2 | [76, 155] [76, 155] | ||
| Hybrid 混合 | – | 4 | 4 | [17, 19, 30, 56] [17, 19, 30, 56] |
| Commit Metrics 提交指标 | – | 4 | 4 | [111, 114, 115, 166] [111, 114, 115, 166] |
| Text 文本 | – | 2 | 2 | [33, 184] [33, 184] |
| Unique Total 独特总计 | – | – | 138 | – |
表 5. 主题研究中使用的详细数据类型
4.2.3 RQ2.3: What Are the Most Commonly Used Input Representations?.
4.2.3 RQ2.3:最常见的输入表示是什么?
如前文所述,专注于软件漏洞检测的研究依赖于多种数据来源和数据类型。这种多样性促使采用各种表示策略、架构方法和设计假设来构建机器学习模型。
我们将所使用数据集的输入表示分为五大类:图、标记、树、提交指标和混合。最流行的输入表示是图的使用,占主题研究的 57.2%。标记紧随其后,代表主题研究的大比例(24.6%)。树表示是第三种最常见的方法,占主题研究的 11.5%。提交指标和混合类别所占比例最小,分别占主题研究的 2.8%和 2.1%。在接下来的段落中,我们将详细阐述每一类。
图/树状表示[63, 126]。这种类型允许检测不同代码元素之间的复杂模式和关系。通过将源代码表示为图或树,我们不仅可以捕获代码的语法和结构,还可以捕获其语义、控制流和数据流。有许多基于图/树的表示技术,例如 AST(抽象语法树)[100, 161]和 CPG(代码属性图)[34, 41, 183],用于将源代码转换为 AST 和 CPG 表示。
基于标记的表示[45, 140]。这种类型将源代码视为字符串标记序列,然后将源代码转换为标记向量。首先将输入数据分解为标记,然后将这些标记转换为可以由机器学习算法处理的数值向量。标记化涉及将文本或源代码字符串分解为更小的单元,即标记,然后可以用作进一步分析的基础。在源代码的情况下,标记可能包括关键字、运算符、变量和编程语言语法的其他元素。
提交指标[114, 115]。此类方法利用从提交中提取的指标来表示代码提交。提交级别的特征,如代码更改数量、修改行数以及使用的编程语言,可以用于训练机器学习模型。这些模型可以学习提交属性与漏洞存在之间的模式和联系,从而实现新提交的自动检测。
混合表示法[19, 30]。此类方法采用多种表示法来发现软件安全漏洞。结合输入数据的多样化表示可以产生更全面、更丰富的源代码输入表示,这有助于漏洞检测技术在预测和检测等任务中表现更佳。
表 6 展示了机器学习模型使用的不同工具所分布的表示技术。显然,基于图/树表示是最普遍的技术,共有 96 项研究采用这种方法。这些研究使用各种形式将输入表示为机器学习模型:源代码作为图、源代码作为树、二进制代码作为图和二进制代码作为树。值得注意的是,源代码作为图是主要的表示技术,被 71 项研究使用。此外,33 项主题研究采用了基于标记的表示。其中,23 项研究将源代码表示为标记序列,9 项研究将二进制代码建模为标记,2 项研究将文本表示为标记序列。
| Category 类别 | Artifact 文物 | # Studies # 研究 | Total 总计 | References 参考文献 |
|---|---|---|---|---|
| Graph/Tree 图/树 | Source code as a graph 源代码作为图 | 71 | 96 | [3, 7, 8, 9, 10, 11, 13, 20, 21, 29, 31, 34, 36, 38, 41, 47, 49, 60, 63, 64, 68, 70, 77, 78, 79, 81, 82, 84, 85, 91, 92, 93, 95, 96, 97, 103, 104, 106, 110, 120, 126, 127, 129, 132, 134, 136, 138, 141, 143, 144, 147, 150, 151, 152, 153, 154, 157, 158, 165, 170, 172, 174, 175, 179, 180, 181, 183, 185, 187, 188, 189] [3, 7, 8, 9, 10, 11, 13, 20, 21, 29, 31, 34, 36, 38, 41, 47, 49, 60, 63, 64, 68, 70, 77, 78, 79, 81, 82, 84, 85, 91, 92, 93, 95, 96, 97, 103, 104, 106, 110, 120, 126, 127, 129, 132, 134, 136, 138, 141, 143, 144, 147, 150, 151, 152, 153, 154, 157, 158, 165, 170, 172, 174, 175, 179, 180, 181, 183, 185, 187, 188, 189] |
| Source code as a tree 源代码作为树 | 15 | [22, 28, 32, 74, 80, 83, 87, 94, 98, 142, 146, 159, 176, 177, 186] [22, 28, 32, 74, 80, 83, 87, 94, 98, 142, 146, 159, 176, 177, 186] | ||
| Binary code as graph 二进制代码作为图形 | 8 | [46, 58, 75, 105, 117, 139, 148, 178] [46, 58, 75, 105, 117, 139, 148, 178] | ||
| Binary code as tree 二进制代码作为树 | 1 | [4] [4] | ||
| Token 标记 | Source code as a token 源代码作为标记 | 23 | 33 | [16, 23, 26, 37, 48, 54, 56, 73, 108, 109, 113, 118, 122, 131, 135, 137, 140, 149, 162, 163, 169, 171, 190] [16, 23, 26, 37, 48, 54, 56, 73, 108, 109, 113, 118, 122, 131, 135, 137, 140, 149, 162, 163, 169, 171, 190] |
| Binary code as a token 二进制代码作为标记 | 9 | [45, 57, 62, 71, 107, 125, 164, 168, 182] [45, 57, 62, 71, 107, 125, 164, 168, 182] | ||
| Text as a token 文本作为标记 | 2 | [33, 184] [33, 184] | ||
| Commit Metrics 提交指标 | – | 4 | 4 | [111, 114, 115, 166] [111, 114, 115, 166] |
| Hybrid 混合 | – | 3 | 3 | [17, 19, 30] [17, 19, 30] |
| Image 图像 | – | 2 | 2 | [76, 155] [76, 155] |
| Unique Total 独特总计 | – | – | 138 |
表 6. 主题研究中的输入表示分布
图 4 显示了软件漏洞检测研究中数据类型表示的分布情况。如图所示,基于图的表达方式与其他输入表示技术相比,具有显著的存在感。这种趋势有几个原因。首先,图提供了一种自然直观的方式来表示源代码中的结构关系。通过将代码建模为图,可以有效地捕捉函数、类、方法和变量之间的关系。基于标记的表达方式也获得了流行,2023 年达到峰值。这是因为它提供了代码的细粒度表示。它通过将代码的复杂性简化为标记序列,简化了代码分析过程,使得应用机器学习模型变得更加容易。
4.2.4 RQ2.4: What Are the Most Commonly Used Embedding Approaches?.
4.2.4 RQ2.4:最常见的嵌入方法有哪些?
在这一节中,我们探讨可以将上一节中探索的这些表示转换为机器学习模型可以理解的输入的嵌入方法。表示方法以人类可读的格式存在,不能被计算机直接理解。因此,研究人员应用了各种嵌入方法将这些表示转换为数值格式。我们将在下一段中讨论嵌入技术。
图嵌入(32.6%)[ 97, 117]。这是主题研究中最常用的嵌入技术,占 32.6%,主要被图神经网络使用,因为它能够捕捉不同代码组件之间的结构关系。
标记向量嵌入(29.7%)[ 79, 190]。这是学科研究中使用最广泛的第二种技术,占所有审查论文的 29.7%。在这种技术中,输入被转换为一系列标记,每个标记被转换为一个数值。然后,这些数值被输入到机器学习模型中进行训练操作。
混合(16.6%)[19, 41]。我们发现 16.6%的研究对象使用多种嵌入技术将输入转换为机器学习模型。不同的嵌入技术捕捉数据的不同方面。通过结合多种技术,研究人员可以利用每种技术提供的互补信息。例如,一些嵌入技术可能专注于句法,而其他技术可能捕捉语义或上下文信息。
Transformer 嵌入(7.2%)[ 48, 153]。Transformer 嵌入在 7.2%的主题研究中被使用。尽管其使用频率较低,但 Transformer 的使用值得关注,因为它们在自然语言处理方面的强大能力可以适应分析代码。
4.3 RQ3: What Is the Distribution of ML and DL Models Used for Software Vulnerability Detection?
4.3 研究问题 3:用于软件漏洞检测的机器学习(ML)和深度学习(DL)模型的分布情况如何?
本节中,我们提供了关于用于软件漏洞检测的各种机器学习模型的详细信息。最初,我们分析了基于主题研究的模型使用分布情况。随后,我们研究了在主题研究中使用的特定深度学习模型的使用分布随时间的变化。然而,由于与深度学习模型相比,经典机器学习模型的普及率相对较小,我们没有对经典机器学习模型的使用分布进行深入分析。但是,我们提供了一份在主题研究中常用到的经典机器学习模型的完整列表。
大多数研究(88.4%)使用深度学习模型进行软件漏洞检测[82, 127, 159],而只有 7.2%的研究使用经典机器学习模型[19, 107, 184]。部分研究对象研究还使用深度学习和机器学习模型的组合,占 1.4%的研究。其余(2.8%)被归类为其他。
图 5 展示了从 2016 年到 2024 年深度学习模型在检测软件漏洞中的应用趋势。根据这一趋势,深度学习模型首次于 2016 年被引入用于漏洞检测,此后,用于漏洞检测的循环神经网络(RNNs)的使用呈现上升趋势。图表还显示了从 2021 年到 2024 年使用图神经网络(GNNs)进行漏洞检测的趋势上升。这可能是因为 GNNs 在检测漏洞方面比 RNNs 更强大,因为它们可以捕捉到更有意义和语义的输入源代码表示。
表 7 显示了在主题研究中使用的深度学习模型的分布。如表所示,循环模型是用于软件漏洞检测最常用的深度学习模型。在这个类别中,BiLSTM 是最常用的循环模型,出现在 20 项研究中。GRU 和 LSTM 也是流行的模型,分别有 14 和 13 项研究。图模型是用于软件漏洞检测的第二大广泛使用的深度学习模型类别。可以观察到,GCN 是最普遍的模型,出现在 22 项研究中。GNN、GGNN 和 GAT 也常被使用,分别占 13、9 和 8 项主题研究。这些模型的存在突出了在漏洞检测中捕获代码元素之间图结构和关系的重要性。卷积模型在 19 项研究中被使用。虽然不如循环或图模型普遍,但 CNNs 仍被认为在漏洞检测任务中能够有效地捕获局部模式和特征。
| Category 类别 | Model Name 型号名称 | # Studies # 研究 | Total 总计 | References 参考文献 |
|---|---|---|---|---|
| Recurrent Models 循环模型 | BiLSTM 双向长短期记忆网络 | 20 | 65 | [47, 57, 63, 64, 83, 85, 87, 113, 120, 131, 136, 139, 148, 159, 168, 176, 182, 185, 189, 190] [47, 57, 63, 64, 83, 85, 87, 113, 120, 131, 136, 139, 148, 159, 168, 176, 182, 185, 189, 190] |
| GRU | 14 | [47, 54, 63, 73, 76, 77, 78, 79, 125, 139, 142, 144, 147, 181] [47, 54, 63, 73, 76, 77, 78, 79, 125, 139, 142, 144, 147, 181] | ||
| LSTM | 13 | [26, 28, 63, 82, 94, 95, 125, 139, 149, 152, 158, 181, 186] [26, 28, 63, 82, 94, 95, 125, 139, 149, 152, 158, 181, 186] | ||
| BGRU | 10 | [32, 63, 68, 75, 83, 84, 138, 139, 164, 190] [32, 63, 68, 75, 83, 84, 138, 139, 164, 190] | ||
| TreeLSTM Tree LSTM | 3 | [8, 78, 147] [8, 78, 147] | ||
| RNN | 3 | [37, 139, 154] [37, 139, 154] | ||
| BRNN | 2 | [109, 139] [109, 139] | ||
| Graph Models 图模型 | GCN | 22 | 63 | [7, 8, 20, 21, 31, 41, 46, 75, 78, 81, 91, 97, 104, 110, 127, 136, 147, 150, 172, 179, 181, 187] [7, 8, 20, 21, 31, 41, 46, 75, 78, 81, 91, 97, 104, 110, 127, 136, 147, 150, 172, 179, 181, 187] |
| GNN | 13 | [3, 8, 10, 11, 20, 28, 105, 106, 136, 143, 151, 152, 183] [3, 8, 10, 11, 20, 28, 105, 106, 136, 143, 151, 152, 183] | ||
| GGNN | 9 | [29, 31, 36, 77, 92, 129, 142, 154, 188] [29, 31, 36, 77, 92, 129, 142, 154, 188] | ||
| GAT | 8 | [20, 38, 41, 46, 110, 174, 175, 178] [20, 38, 41, 46, 110, 174, 175, 178] | ||
| RGCN | 4 | [13, 31, 158, 180] [ 13, 31, 158, 180 ] | ||
| HGNN | 1 | [103] [ 103 ] | ||
| RGAT | 1 | [30] [30] | ||
| DGCNN | 1 | [117] [ 117 ] | ||
| HGCN | 1 | [68] [ 68 ] | ||
| GCL | 1 | [144] [144] | ||
| BGNN | 1 | [10] [ 10 ] | ||
| GGRU | 1 | [157] [ 157 ] | ||
| Convolutional Models 卷积模型 | CNN | 11 | 19 | [17, 37, 48, 56, 73, 74, 79, 137, 138, 155, 190] [17, 37, 48, 56, 73, 74, 79, 137, 138, 155, 190] |
| TextCNN 文本 CNN | 6 | [9, 64, 132, 141, 164, 176] [9, 64, 132, 141, 164, 176] | ||
| TextRCNN | 1 | [30] [30] | ||
| QCNN | 1 | [60] [60] | ||
| General Models 通用模型 | FCN | 2 | 13 | [81, 170] [ 81, 170 ] |
| TCN | 2 | [16, 17] [16, 17] | ||
| Auto Encoders 自动编码器 | 1 | [71] [ 71 ] | ||
| Memory Neural Network 记忆神经网络 | 1 | [23] [ 23 ] | ||
| GAN | 1 | [109] [109] | ||
| Feed Forward 前馈 | 1 | [118] [ 118 ] | ||
| Representation Learning 表示学习 | 1 | [108] [ 108 ] | ||
| DRSN | 1 | [16] [16] | ||
| DCN | 1 | [76] [ 76 ] | ||
| Others 其他人 | 1 | [4] [4] | ||
| DBN | 1 | [146] [ 146 ] | ||
| Transformers 变压器 | BERT | 2 | 9 | [93, 134] [93, 134] |
| GraphCodeBERT | 1 | [153] [153] | ||
| CodeBERT 代码 BERT | 1 | [111] [ 111 ] | ||
| HGT | 1 | [165] [165] | ||
| GPT-4 | 1 | [98] [98] | ||
| GPT-3.5_turbo | 1 | [135] [ 135 ] | ||
| Code-T5 代码-T5 | 1 | [169] [ 169 ] | ||
| Transformer Encoder Transformer 编码器 | 1 | [171] [ 171 ] | ||
| Attention Models 注意模型 | – | 8 | 8 | [22, 34, 49, 62, 80, 96, 140, 177] [22, 34, 49, 62, 80, 96, 140, 177] |
| Unique Total 独特总计 | – | – | 124 | – |
表 7. 主题研究中的深度学习模型分布
表 8 显示了在主题研究中使用的经典机器学习模型的分布。如表所示,随机森林是最常用的机器学习模型,在七项研究中出现。朴素贝叶斯、SVM 和 KNN 是流行的选择,分别出现 5 次、4 次和 4 次。随机森林是一种集成学习方法,它构建多个决策树并将它们的输出合并以做出最终预测。这种集成方法有助于提高检测的鲁棒性和准确性,使其在检测软件漏洞方面非常有效。朴素贝叶斯之所以受欢迎,是因为它计算效率高且易于实现。与更复杂的算法相比,它需要的训练数据更少,因此在训练和预测阶段都更快[2, 50, 51]。
| Category 类别 | Model Name 型号名称 | # Studies # 研究 | Total 总计 | References 参考文献 |
|---|---|---|---|---|
| Classic ML Models 经典机器学习模型 | Random Forest 随机森林 | 7 | 38 | [19, 70, 94, 114, 122, 166, 184] [19, 70, 94, 114, 122, 166, 184] |
| Naive Bayes 朴素贝叶斯 | 5 | [19, 70, 114, 122, 184] [19, 70, 114, 122, 184] | ||
| SVM | 4 | [19, 115, 122, 184] [19, 115, 122, 184] | ||
| K-NN | 4 | [19, 95, 122, 184] [19, 95, 122, 184] | ||
| Logistic Regression 逻辑回归 | 3 | [70, 114, 184] [70, 114, 184] | ||
| AdaBoost | 3 | [19, 33, 184] [19, 33, 184] | ||
| Decision Tree 决策树 | 2 | [70, 122] [70, 122] | ||
| Gradient Boosting 梯度提升 | 2 | [19, 184] [ 19, 184 ] | ||
| PCA | 1 | [162] [ 162 ] | ||
| Kernel Machine 内核机器 | 1 | [107] [ 107 ] | ||
| ADTree AD 树 | 1 | [114] [ 114 ] | ||
| TAN | 1 | [70] [70] | ||
| Gradient Boosting Classifier 梯度提升分类器 | 1 | [33] [33] | ||
| SGDClassifier SGD 分类器 | 1 | [33] [33] | ||
| AdaBoostClassifier AdaBoost 分类器 | 1 | [33] [33] | ||
| TrAdaBoost | 1 | [33] [33] | ||
| Distance/Similarity Measures 距离/相似度度量 | – | 3 | 3 | [45, 58, 163] [45, 58, 163] |
| Language Models 语言模型 | N-gram | 1 | 1 | [126] [ 126 ] |
| Unique Total 独特总计 | – | – | 14 | – |
表 8. 主题研究中经典机器学习和其他模型的分布
表 7 还显示了一项使用 n-gram 模型进行软件漏洞检测的研究。n-gram 模型在利用词序列概率捕捉局部上下文中发挥着重要作用。n-gram 模型根据前 n-1 个词预测一个词的可能性,成功地描述了语言的局部结构[18, 123]。n-gram 模型在识别标记序列(例如,单词、字符或代码元素)中的模式方面非常有效。在代码的上下文中,n-gram 模型可以在大型代码库上训练,以理解代码元素的典型序列。
4.3.1 Comparison of ML Models with Manual Code Analysis.
4.3.1 机器学习模型与人工代码分析的对比
在软件漏洞检测方面,机器学习模型远优于传统的手动代码分析技术。基于机器学习的软件漏洞检测通过自动化大量代码的分析,提高了效率和可扩展性。这种能力在当前软件开发环境中至关重要,因为复杂的系统和频繁的变更要求快速而全面的网络安全评估。这种效率降低了手动检查中可能出现的人为错误,同时加快了检测过程。此外,机器学习模型还简化了先发制人的威胁检测和持续监控。但即便有这些好处,人类代码分析在处理一些关键情况时仍然是必不可少的。处理像零日漏洞[5]这样的特殊情况的最好人选是人类分析师——即在软件开发者有机会缓解之前,攻击者就已经发现并使用了漏洞的情况。
4.3.2 Transfer Learning for Software Vulnerability Detection.
4.3.2 软件漏洞检测的迁移学习
迁移学习对于软件漏洞检测至关重要。首先,用于软件漏洞检测的高质量标注数据集通常稀缺且生产成本高昂,因为标注需要专业知识[19, 87, 95]。其次,软件漏洞检测通常需要理解特定领域的语言和上下文,这些在不同应用程序和系统之间可能差异很大[33, 95]。
在所审查的研究中,有六项研究使用了迁移学习进行软件漏洞检测。刘等人[95]通过改进跨域表示来最小化域之间的分布差异(使用度量迁移学习框架)。这种方法使得模型即使在测试和训练数据中的项目或漏洞类型不同的情况下,仍能很好地泛化。杜等人[33]提出了一种利用迁移学习算法 TrAdaBoost 检测软件漏洞的系统。通过使用一个项目的标记错误报告来预测另一个项目中标记数据不足的问题类别,他们的方法能够识别出多个项目中的错误类型。森纳等人[125]为智能合约软件漏洞检测定制了迁移学习。他们的方法称为 ESCORT,使用一个通用的特征提取器来理解字节码的语义,不同的分支响应不同类型的漏洞。ESCORT 的迁移学习能力通过使包含新的漏洞类型更容易,从而提高了系统的灵活性。周等人 [182] 提出了一种对抗多任务学习框架,该框架整合了通用和任务特定组件,以最大化特征提取,同时使用对抗迁移学习来减少私有特征和通用特征之间的噪声和干扰。Li 等人[77]探讨了使用 VulGDA 系统识别跨域漏洞,该系统结合了图嵌入和深度域自适应方法。为了捕获句法和语义链接并通过域不变特征生成来提高特征提取,VulGDA 将源代码样本转换为图表示。Zhang 等人[174]提出了 CPVD,一种跨域漏洞检测方法,它利用一个来源的标记数据来准确预测漏洞标签。CPVD 将代码编码为属性图,并使用图注意力网络和卷积池化网络进行特征提取。
4.4 RQ4: What Is the Most Frequent Type of Vulnerability Covered in the Subject Studies?
4.4 研究问题 4:在研究对象中,最常见的漏洞类型是什么?
软件漏洞检测数据集支持不同类型的漏洞。例如,NVD 和 SARD 基准共同支持 96 种漏洞类型。本研究问题旨在总结主题研究中涵盖的最流行漏洞类型及其频率。表 9 显示了关于漏洞类型的统计数据。CWE-Type 列表示 CWE 的类型。 15 CWE 网站上有很多用于漏洞分类的类别,包括按软件开发分类、按硬件设计分类和按研究概念分类。表 9 中所示分类是基于研究概念分类的,因为这种分类与主题研究中报告的漏洞类型完美匹配。
| Category 类别 | CWE-Type CWE 类型 | Severity Score 严重度评分 | # Studies # 研究 | Total 总计 | References 参考文献 |
|---|---|---|---|---|---|
| Resource 资源 | CWE-119 | – | 29 | 121 | [9, 11, 16, 20, 29, 30, 34, 36, 37, 38, 47, 49, 71, 75, 85, 87, 95, 98, 107, 110, 121, 131, 132, 140, 141, 142, 151, 159, 164] [9, 11, 16, 20, 29, 30, 34, 36, 37, 38, 47, 49, 71, 75, 85, 87, 95, 98, 107, 110, 121, 131, 132, 140, 141, 142, 151, 159, 164] |
| CWE-476 | – | 13 | [11, 29, 30, 36, 47, 98, 110, 131, 132, 142, 151, 152, 159] [11, 29, 30, 36, 47, 98, 110, 131, 132, 142, 151, 152, 159] | ||
| CWE-399 | – | 13 | [9, 16, 34, 37, 49, 75, 85, 98, 110, 131, 132, 141, 159] [9, 16, 34, 37, 49, 75, 85, 98, 110, 131, 132, 141, 159] | ||
| CWE-400 | – | 10 | [9, 20, 30, 47, 132, 141, 142, 143, 159, 165] [9, 20, 30, 47, 132, 141, 142, 143, 159, 165] | ||
| CWE-22 | – | 10 | [9, 20, 30, 38, 41, 140, 141, 142, 151, 159] [9, 20, 30, 38, 41, 140, 141, 142, 151, 159] | ||
| CWE-787 | – | 9 | [9, 11, 20, 38, 98, 132, 141, 151, 165] [9, 11, 20, 38, 98, 132, 141, 151, 165] | ||
| CWE-125 | – | 9 | [9, 11, 20, 98, 110, 132, 141, 151, 152] [9, 11, 20, 98, 110, 132, 141, 151, 152] | ||
| CWE-416 | 9 | [11, 29, 30, 98, 110, 131, 132, 151, 159] [11, 29, 30, 98, 110, 131, 132, 151, 159] | |||
| CWE-122 | – | 7 | [9, 11, 23, 121, 138, 141, 152] [9, 11, 23, 121, 138, 141, 152] | ||
| CWE-121 | – | 6 | [11, 121, 138, 141, 152, 164] [11, 121, 138, 141, 152, 164] | ||
| CWE-362 | – | 6 | [98, 110, 131, 140, 142, 151] [98, 110, 131, 140, 142, 151] | ||
| Validation 验证 | CWE-20 | – | 13 | 37 | [9, 20, 30, 38, 98, 110, 131, 132, 141, 142, 151, 159, 165] [9, 20, 30, 38, 98, 110, 131, 132, 141, 142, 151, 159, 165] |
| CWE-78 | 9 | [9, 20, 41, 75, 83, 141, 142, 151, 165] [9, 20, 41, 75, 83, 141, 142, 151, 165] | |||
| CWE-841 | – | 8 | [4, 8, 62, 125, 134, 168, 169, 171] [4, 8, 62, 125, 134, 168, 169, 171] | ||
| CWE-200 | – | 7 | [30, 38, 98, 131, 132, 140, 142] [30, 38, 98, 131, 132, 140, 142] | ||
| Numeric 数值 | CWE-190 | 23 | 36 | [4, 8, 9, 20, 29, 38, 58, 62, 98, 110, 120, 125, 131, 132, 140, 141, 142, 143, 151, 152, 165, 168, 182] [4, 8, 9, 20, 29, 38, 58, 62, 98, 110, 120, 125, 131, 132, 140, 141, 142, 143, 151, 152, 165, 168, 182] | |
| CWE-189 | 7 | [30, 87, 98, 110, 131, 132, 190] [30, 87, 98, 110, 131, 132, 190] | |||
| CWE-191 | 6 | [4, 125, 140, 142, 168, 182] [4, 125, 140, 142, 168, 182] | |||
| Unique Total 独特总计 | – | – | – | 48 | – |
表 9. 主题研究中涵盖的主要漏洞类型
表 9 表明,获得最高关注度的漏洞类别与资源漏洞相关,在 121 项研究中被提及。该类别主要涉及管理系统的资源,这些资源根据预定义的指令被创建、使用和废弃。观察发现,CWE-119 [95, 107, 121] 是被研究对象研究中最频繁的漏洞类型。这种漏洞发生在软件系统试图访问或写入系统缓冲区允许边界之外的内存位置时。第二常见的漏洞类型是空指针解引用(CWE-476),占 13 项研究对象。这种漏洞发生在程序试图通过未正确初始化且指向 NULL(无有效内存地址)的指针读取或写入内存位置时。
验证相关漏洞是漏洞类型的第二大类,共有 37 项主题研究涉及。在这类漏洞中,攻击者在输入和输出数据格式错误或未正确验证时利用这些数据。如所见,CWE-20 [20, 142] 是最常见的漏洞类型,占 13 项主题研究。CWE-20 指的是软件系统中输入验证未正确执行的情况,这使得它们容易受到恶意个人利用输入数据进行的攻击。这种情况发生在输入数据未经过验证以确保其安全性或符合预定义规范时。CWE-78 是第二大漏洞类型,由 9 项主题研究涉及[11, 20, 38]。这类安全漏洞与操作系统命令注入有关,其中外部攻击者可以使用未经充分验证的组件的输入数据构建操作系统命令。
与数值相关的漏洞是主题研究中覆盖的第三种最常见的漏洞类型,共涉及 36 项研究。在此类别中,整数溢出(CWE-190)是最常被讨论的漏洞类型[20, 58, 142]。整数溢出是指当算术运算尝试创建一个超出用给定位数表示范围的数值时发生的情况。例如,一个 8 位无符号整数可以表示从 0 到 255 的值,而一个 32 位有符号整数通常范围从-2,147,483,648 到 2,147,483,647。当算术运算产生的值超过这些限制时,就会发生溢出。
4.5 RQ5: What Are the Most Frequently Used Tools for Software Vulnerability Detection?
4.5 研究问题 5:软件漏洞检测中最常用的工具是什么?
本节中,我们总结了最常用的软件漏洞检测工具。表 10 显示了工具的分布。我们将工具分为三类,包括模型构建工具、代码分析/编译和数据工具。
| Category 类别 | Tool Name 工具名称 | # Studies # 研究 | Total 总计 | References 参考文献 |
|---|---|---|---|---|
| Model Building Tools 模型构建工具 | Keras/TensorFlow | 42 | 116 | [10, 11, 16, 17, 23, 26, 29, 32, 37, 41, 60, 62, 63, 64, 68, 71, 74, 76, 83, 84, 85, 87, 95, 96, 97, 106, 107, 109, 114, 118, 125, 131, 139, 142, 144, 148, 149, 154, 164, 186, 189, 190] [10, 11, 16, 17, 23, 26, 29, 32, 37, 41, 60, 62, 63, 64, 68, 71, 74, 76, 83, 84, 85, 87, 95, 96, 97, 106, 107, 109, 114, 118, 125, 131, 139, 142, 144, 148, 149, 154, 164, 186, 189, 190] |
| PyTorch | 42 | [3, 8, 9, 13, 20, 21, 22, 28, 30, 31, 38, 48, 49, 54, 57, 64, 68, 77, 82, 91, 120, 127, 129, 132, 138, 140, 141, 143, 143, 151, 152, 155, 170, 174, 175, 178, 179, 180, 181, 183, 185, 188] [3, 8, 9, 13, 20, 21, 22, 28, 30, 31, 38, 48, 49, 54, 57, 64, 68, 77, 82, 91, 120, 127, 129, 132, 138, 140, 141, 143, 143, 151, 152, 155, 170, 174, 175, 178, 179, 180, 181, 183, 185, 188] | ||
| Scikit-learn | 11 | [19, 33, 41, 54, 60, 62, 70, 87, 142, 174, 175] [19, 33, 41, 54, 60, 62, 70, 87, 142, 174, 175] | ||
| GenSim | 9 | [41, 54, 64, 87, 95, 140, 154, 174, 183] [41, 54, 64, 87, 95, 140, 154, 174, 183] | ||
| DGL | 6 | [7, 8, 129, 174, 175, 180] [7, 8, 129, 174, 175, 180] | ||
| Theano | 2 | [26, 85] [26, 85] | ||
| sent2vec | 2 | [155, 188] [155, 188] | ||
| Transformers 变压器 | 2 | [38, 48] [38, 48] | ||
| Code Analysis/Compilation 代码分析/编译 | Joern 乔恩 | 24 | 35 | [9, 11, 22, 29, 30, 68, 71, 110, 129, 132, 137, 141, 142, 143, 147, 150, 152, 155, 170, 174, 175, 183, 188, 189] [9, 11, 22, 29, 30, 68, 71, 110, 129, 132, 137, 141, 142, 143, 147, 150, 152, 155, 170, 174, 175, 183, 188, 189] |
| Soot 烟灰 | 3 | [79, 80, 142] [79, 80, 142] | ||
| Clang | 2 | [22, 48] [22, 48] | ||
| tree-sitter | 2 | [152, 153] [152, 153] | ||
| CodeSensor 代码传感器 | 2 | [94, 95] [94, 95] | ||
| ANTLR | 2 | [135, 142] [135, 142] | ||
| Data Tools 数据工具 | NetworkX 网络 X | 5 | 9 | [7, 9, 41, 141, 155] [7, 9, 41, 141, 155] |
| NLTK | 4 | [54, 56, 73, 114] [54, 56, 73, 114] | ||
| Unique Total 独特总计 | – | – | 96 | – |
表 10. 软件漏洞检测中最常用的工具
如表所示,使用 TensorFlow 后端 16 的 Keras 是最常用的基于机器学习的软件漏洞检测技术库,占 42 项研究,其次是使用 PyTorch 17 的库,总共有 42 项研究。Scikit-learn 18 是用于模型构建的第三大流行库,总共有 11 项研究。Scikit-learn 提供了一个用户友好且一致的 API,使得实现和实验各种机器学习算法变得容易。Scikit-learn 包括一系列分类算法,如逻辑回归、SVM、决策树、随机森林、KN 和朴素贝叶斯。GenSim 19 是构建软件漏洞检测模型的第四大常用工具。GenSim 高效处理大数据集的能力,结合其强大的主题建模和词嵌入功能,使其成为自然语言处理和文本挖掘中模型构建不可或缺的工具。DGL 20 是第五大常用的模型构建工具,占 6 项研究。 DGL 专门设计用于构建和训练 GNN,使其成为研究者和从事图相关问题的实践者的首选库。它抽象了实现 GNN 的复杂性,提供了易于使用的 API,用于构建和应用各种 GNN 模型。
在代码分析/编译类别中,最常用的工具是 Joern,总共有 24 项研究使用。Joern 最初由山口等人[160]提出,它将源代码转换为图表示,具体为 AST、CFG 和 PDG。用于代码处理的第二常用工具是 Soot, 21 ,它提供了 Java 字节码的各种中间表示。
在数据工具类别中,NetworkX 是最常用的数据工具,总共有五项研究使用。NetworkX 使用原生 Python 数据结构(如字典和列表)来表示图。这使得它可以与其他 Python 库无缝集成,并便于操作和探索图数据。NLTK 提供了强大的工具,用于将源代码和文本分解成标记,这对于分析软件漏洞数据至关重要。
4.6 RQ6: What Are Possible Challenges and Open Directions in Software Vulnerability Detection?
4.6 RQ6:软件漏洞检测中可能面临的挑战和开放方向是什么?
4.6.1 Challenges. 4.6.1 挑战。
挑战 1:异构数据源。通过学习进行漏洞检测的最大挑战是当前模型无法充分建模复杂漏洞的综合语义 [26, 27, 126]。现有的机器学习模型往往无法捕捉软件漏洞的复杂模式,因为它们将源代码视为自然语言。与自然语言不同,源代码包含结构和逻辑信息,需要抽象语法树(AST)、数据流和控制流分析。为了解决这个问题,检测管道必须使用丰富的表示技术,如控制流和数据流图以及适当的嵌入,将这些表示转换为基于图神经网络的数值格式。
挑战 2:检测粒度。深度学习模型在识别漏洞方面的有效性取决于输入粒度。当前模型使用粗粒度输入,如方法和文件。为了实现更细的粒度,程序切片可以选择关键语句进行检测,但必须有效地进行以减少噪声。现有工具主要关注库/API 调用和操作,但仅此不足以。一种有前景的方法是使用 GitHub 上的代码更改,重点关注新增和删除的行,这些行通常对漏洞检测影响最大。
挑战 3:训练数据不足。深度学习模型的一个显著弱点,尤其是在软件漏洞检测方面,就是它们对数据的无尽需求[24, 111]。在图像分类等领域,丰富的标记数据和预训练模型能够有效地进行深度学习训练。然而,在软件漏洞检测中,由于标记真实信息困难,数据稀缺成为一个主要问题。像 Stack Overflow、GitHub 和问题跟踪系统这样的平台提供了大量的记录,但标记通常是手动且具有挑战性的。自动标记是一个潜在的解决方案,但往往会产生许多误报。一些研究人员使用无监督分类,但这种方法也具有有限的精度。
4.6.2 Open Directions. 4.6.2 开放方向。
多模态学习。仅使用源代码片段进行简单的漏洞检测不足以构建准确有效的模型。需要各种工件来输入机器学习模型,以提高漏洞检测性能。例如,输入代码注释将显著提高分类性能。一些使用提交[19]的专题研究认为,仅输入源代码是不够的,软件漏洞检测还需要提交特征作为元数据。
即时漏洞检测。软件漏洞检测的一个可能方向是采用即时检测方法。这种方法侧重于在漏洞出现或引入时进行检测,因此提供实时保护[56, 114]。这种方法允许在漏洞被利用之前更快地做出反应和缓解。
利用基础模型(LLMs)进行漏洞检测。最近,LLMs 已被广泛应用于各种软件工程任务中,包括自动程序修复[ 59]、测试用例生成以及云环境中事件的根本原因分析。然而,LLMs 在软件漏洞检测中的应用尚未得到全面发现,正如它应该做到的那样。在我们的调查中,我们确定了某些利用 LLMs 进行软件漏洞检测的研究[ 32, 98, 135, 169]。然而,与典型深度学习模型的广泛应用相比,它们的频率仍然微不足道。
5 Threats to Validity 5 有效性威胁
在这一节中,我们讨论了每个 RQ 有效性的威胁。我们讨论了在本研究中我们解决的 RQs 的各种威胁。
RQ1:研究趋势。如果某些类型的研究更有可能被我们的网络爬虫索引或检索,那么研究的选择可能会存在偏差。为了解决选择偏差,我们定义了多种关键词来提取与软件漏洞检测相关的最相关的研究论文。目标论文应使用基于机器学习的软件漏洞检测技术。为了提高数据选择的准确性,我们通过三个步骤细化了初始搜索结果,以确保为分类创建和细化选择了最相关的研究。这些步骤是由多位作者同时执行的。如果数字图书馆不能平等地代表所有相关研究,那么它们的选择可能会影响构建效度。为了减轻这种威胁,我们选择了最广泛使用的数字图书馆:ACM 数字图书馆、ScienceDirect、IEEE Xplore 和 Google Scholar。这些图书馆代表了软件漏洞检测领域,因为它们包含足够多的与我们的关键词匹配的记录,用于数据提取。 第一个 RQ 的外部效度的主要威胁之一是,我们从 2011 年 1 月到 2024 年 6 月观察到的趋势可能不适用于此时期之后的研究。随着技术的快速发展,可能会出现新的软件漏洞检测技术和工具。然而,我们相信我们的发现准确地代表了本研究时软件漏洞检测的最新技术水平。
RQ2:软件漏洞检测数据集的特征。数据集可能专注于特定类型的软件或语言,这可能会威胁到我们研究结果的普适性。为了克服这一局限性,我们专注于三个主要语言领域的软件漏洞检测,包括 Java、C/C++和智能合约中的软件漏洞。Java 在企业和 Web 应用中普遍存在,C/C++在系统和性能关键编程中是基础,而智能合约在区块链技术中至关重要。这种多样化的选择减少了选择偏差,提供了对漏洞的整体视角,并确保研究结果更广泛地适用于现实世界的软件开发环境。尽管我们的研究结果基于 2011 年 1 月至 2024 年 6 月间发表的研究数据集,但由于软件漏洞检测技术的持续进步,预计所识别的特征也适用于未来的数据集。 我们提供了详细的标准和程序,用于选择和分析数据集,使其他研究人员能够复制和验证我们的发现,从而增强我们结论的普遍性和可靠性。
RQ3:机器学习(ML)和深度学习(DL)模型在软件漏洞检测中的应用分布。这一研究问题存在多个威胁。首先,ML 模型发展迅速,今天有效的模型可能很快就会过时或被更先进的模型所取代。为了克服这一威胁,我们将我们的研究选择偏差扩展到覆盖过去两年——即 2023 年和 2024 年,以涵盖最先进的软件漏洞检测 ML 技术。这导致我们发现了三个使用基础模型进行软件漏洞检测的有前景的研究。
RQ4:频繁的软件漏洞。为确保本 RQ 的构建效度,提供每种漏洞的清晰和精确定义至关重要。我们首先确定了像 OWASP 和 MITRE 的 CWE 这样的可靠来源。OWASP 提供了一份广为人知的常见安全漏洞列表,尤其是在 Web 应用程序中。CWE 提供了一份全面的软件弱点列表,包括详细的描述和分类。然后我们审查了主题研究,并确定了经常提到的漏洞类型。通常,这些漏洞可以通过在研究论文中明确提到的 CWE ID 来识别。
RQ5:软件漏洞检测工具。这个问题受到的威胁是,在工具选择上可能存在偏差,受到诸如流行度(如 TensorFlow 和 PyTorch)等重要因素的影响。这可能导致研究结果偏向于更知名的工具,而忽视了同样有效但知名度较低的选择。为了克服这一威胁,我们将工具分为三大类。对于每一类,我们提取了最受欢迎和最不受欢迎的工具,包括平衡的工具组合,以避免任何特定子集的过度代表。
RQ6:挑战与开放方向。为确保该 RQ 的构建效度,我们对每项研究的两个关键部分进行了彻底分析。首先,我们检查了摘要中的背景部分,以获得对所解决问题的总体理解。接下来,我们分析了引言部分,以提取进一步阐述问题的相关文本。通过结合这些信息,我们对问题进行了概括,并创建了一个简洁的分类法。
6 Conclusion 6 结论
本研究对基于机器学习的软件漏洞检测研究进行了系统调查,使用六个研究问题(RQs)来探究其各种特征。我们使用自定义网络爬虫从四个广泛使用的在线数字图书馆——ACM 数字图书馆、IEEE Xplore、ScienceDirect 和 Google Scholar——中提取了初步研究。在手动过滤掉与软件漏洞检测无关的不相关研究后,我们创建了分类法并解决了研究问题。
近年来,我们发现使用机器学习技术检测软件漏洞的应用显著增加。我们发现,重要的会议包括 ICSE、ISSRE、MSR 和 FSE,而领先的期刊包括 IST、C&S 和 JSS。此外,我们发现 39.1%的研究使用混合数据作为数据来源,而 37.6%的研究使用基准数据用于软件漏洞检测。在分析的数据类型中,基于代码的数据最为普遍,其中源代码是最常见的子类型。基于图和基于标记的输入表示是最受欢迎的技术,分别被 57.2%和 24.6%的研究使用。对于输入嵌入,图嵌入和标记向量嵌入是最常用的方法,分别出现在 32.6%和 29.7%的研究中。此外,88.4%的研究使用了深度学习模型,其中 RNN 和 GNN 最受欢迎,而只有 7.2%的研究使用传统的机器学习模型。最常讨论的漏洞类型是 CWE-119、CWE-20 和 CWE-190。在软件漏洞检测工具方面,Keras 和 PyTorch 是最广泛使用的工具。 Joern 是代码分析和表示的领先工具。最后,我们在软件漏洞检测的背景下总结了挑战和未来方向,为该领域的学者和实践者提供了有价值的见解。这项全面调查旨在弥合现有差距,并更清晰地理解当前软件漏洞检测领域使用机器学习技术的现状和未来机遇。
Footnotes 脚注
请注意,可以使用静态分析技术检测内存泄漏漏洞;然而,与静态分析相比,动态分析的应用更为有效。
请注意,如果在实验设置部分找不到数据集名称和来源,我们就在其他部分寻找。
References 参考文献
Faranak Abri,Sima Siami-Namini,Mahdi Adl Khanghah,Fahimeh Mirza Soltani,以及 Akbar Siami Namin. 2019. 机器/深度学习分类器能否以高精度检测零日恶意软件?载于 2019 年 IEEE 国际大数据会议(Big Data’19)论文集。IEEE,3252–3259。
萨桑·阿利扎德,阿里雷扎·赫迪洛,尼玛·希里·哈泽维利。2021。朴素贝叶斯分类器的多独立潜在成分扩展。知识工程系统 213(2021),106646。
Miltiadis Allamanis、Henry Jackson-Flux 和 Marc Brockschmidt. 2021. 自监督错误检测与修复。在《第 35 届神经信息处理系统会议(NeurIPS’21)》论文集中。27865–27876。
Nami Ashizawa, Naoto Yanai, Jason Paul Cruz 和 Shingo Okamura. 2021. Eth2Vec:学习以太坊智能合约的合约级代码表示以进行漏洞检测。在第三届 ACM 国际区块链与安全关键基础设施研讨会(BSCI’21)论文集中。第 47-59 页。
Leyla Bilge 和 Tudor Dumitraş. 2012. 我们意识到之前:对现实世界零日攻击的实证研究。在 2012 年 ACM 计算机与通信安全会议(CCCS’12)论文集中。833–844。
Christopher M. Bishop 和 Nasser M. Nasrabadi. 2006. 模式识别与机器学习. 纽约:Springer, 4, 4 (2006).
蔡杰,李斌,张佳乐,孙晓兵,陈冰。2023. 结合切片联合图与图神经网络进行智能合约漏洞检测。系统与软件杂志 195(2023),111550。
蔡杰,李斌,张涛,张佳乐,孙晓兵。2024. 基于异构代码特征学习和自动化数据集构建的细粒度智能合约漏洞检测。系统与软件杂志 209(2024),111919。
蔡文静,陈俊霖,余嘉平,高立鹏。2023. 基于复杂网络分析和子图划分的深度学习软件漏洞检测方法。信息与软件技术 164(2023),107328。
曹思聪,孙晓兵,薄丽丽,魏莹,李斌。2021. BGNN4VD:构建用于漏洞检测的双向图神经网络。信息与软件技术 136(2021),106576。
曹思聪,孙晓兵,薄丽丽,吴荣欣,李斌,陶传祺。2022. 基于流敏感图神经网络的内存相关漏洞检测方法 MVD。在《第 44 届国际软件工程会议(ICSE’22)》论文集中。1456–1468。
Saikat Chakraborty, Rahul Krishna, Yangruibo Ding, 和 Baishakhi Ray. 2022. 基于深度学习的漏洞检测:我们是否已经到达那里?IEEE 软件工程汇刊 48 (2022),3280–3296。
陈大,林峰,范雨琪,尚思源,魏振春. 2023. 基于语义图和边缘注意力残差图卷积网络的智能合约漏洞检测. 系统与软件杂志 202 (2023),111705.
陈海鹏,刘静,刘瑞,朴诺桑,V. S. 苏布拉哈曼尼亚。2019。VEST:一个漏洞利用评分与时间系统。在《第 28 届国际人工智能联合会议(IJCAI’19)》论文集中。6503–6505。
陈金富,库杜·帕特里克,门萨·所罗门,布朗·塞拉斯·阿福莱,阿科富·乔治。2020。《基于词频-逆重力矩和特征选择的自动软件漏洞分类框架》。系统与软件杂志,第 167 卷(2020 年),110616 号。
陈金富,林伟,蔡赛华,尹叶民,陈海波,托伊·戴夫。2023. 基于改进时间卷积网络的 BiTCN_DRSN:一种有效的软件漏洞检测模型。系统与软件杂志 204(2023),111772。
陈金富,王伟佳,刘波,蔡赛华,托伊·戴夫,王胜然。2024. 基于混合语义的漏洞检测:结合时间卷积网络和自注意力机制。信息与软件技术 171(2024),107453。
斯坦利·F·陈和约书亚·古德曼。1999。《语言模型平滑技术实证研究》。计算机语音与语言 13,4(1999),359–394。
杨晨,安德鲁·E·桑托萨,安明义,阿布希克·沙玛,阿桑卡亚·沙玛,和大卫·洛。2020。一种用于漏洞管理的机器学习方法。在《第 17 届国际软件仓库挖掘会议(MSR’20)论文集》中。32–42。
肖成,王浩宇,华佳怡,徐国奥,隋宇雷。2021. DeepWukong:利用深度图神经网络进行静态软件漏洞检测。ACM 软件工程与方法学交易 30,3(2021),1–33。
肖成,王浩宇,华佳怡,张苗,徐国奥,易丽,隋宇雷。2019。利用图嵌入进行控制流相关漏洞的静态检测。载于 2019 年第 24 届工程与复杂计算机系统国际会议(ICECCS’19)论文集。IEEE,41–50。
肖城,张冠钦,王浩宇,隋玉磊。2022. 基于对比学习的路径敏感代码嵌入用于软件漏洞检测。在 31 届 ACM SIGSOFT 国际软件测试与分析研讨会(ISSTA’22)论文集中。519–531。
崔敏杰,郑世勋,吴河九,崔在旭。2017。通过神经记忆网络从原始源代码端到端预测缓冲区溢出。在《第 26 届国际人工智能联合会议(IJCAI’17)》论文集中。1546–1553。
罗兰·克罗夫特,M.阿里·巴巴尔,M.梅赫迪·霍洛西。2023。软件漏洞数据集的数据质量。在《第 45 届国际软件工程会议(ICSE’23)》论文集中。IEEE,121–133。
克里斯托夫·察尔纳,亚尼斯·斯玛拉加基斯,和谢涛。2008。DSD-Crasher:一种用于发现错误的混合分析工具。ACM 软件工程与方法论交易第 17 卷第 2 期(2008 年),文章 8 号,37 页。
Hoa Khanh Dam, Truyen Tran, Trang Pham, Shien Wee Ng, John Grundy, 和 Aditya Ghose. 2018. 预测易受攻击软件组件的自动特征学习。IEEE 软件工程汇刊 47, 1 (2018), 67–85。
Hoa Khanh Dam, Truyen Tran, Trang Pham, Shien Wee Ng, John Grundy, 和 Aditya Ghose. 2018. 预测易受攻击软件组件的自动特征学习。IEEE 软件工程汇刊 47, 1 (2018), 67–85。
Elizabeth Dinella, Hanjun Dai, Ziyang Li, Mayur Naik, Le Song, 和 Ke Wang. 2020. Hoppity:学习图变换以检测和修复程序中的错误。在 2020 年国际学习表示会议(ICLR’20)论文集中。
丁阳瑞博,萨希尔·苏内贾,郑云辉,吉姆·拉雷多,亚历山德罗·莫拉里,盖尔·凯泽,和巴什卡希·雷。2022. VELVET:一种自动定位易受攻击语句的新型集成学习方法。在 2022 年 IEEE 国际软件分析、演化与重构会议(SANER’22)论文集中。959–970。
董宇坤,唐业,程晓桐,杨宇飞。2023. 基于深度学习的多类型软件漏洞分类框架 DeKeDVer:利用漏洞描述和源代码。信息与软件技术 163(2023),107290。
董宇坤,唐叶尔,程晓桐,杨宇飞,王淑琪。2023. 基于子图嵌入的关系图卷积网络语句级软件漏洞检测方法 SedSVD。信息与软件技术 158(2023),107168。
杜晓志,张世明,周艳荣,杜红元. 2024. 基于双模态数据和多任务学习的漏洞严重性预测方法. 系统软件学报 213 (2024), 112039.
杜晓婷,周曾辉,尹贝贝,肖冠平。2020. 基于迁移学习的跨项目缺陷类型预测。软件工程学报 28,1(2020),39–57。
徐端,吴竞政,季守岭,芮志清,罗天越,杨暮天,武艳君。2019。VulSniper:聚焦射击细粒度漏洞。在《第 28 届国际人工智能联合会议(IJCAI’19)》论文集中。4665–4671。
Facebook. 2013. Infer. 2024 年 10 月 12 日检索自 https://fbinfer.com/
袁海帆,万传浩,付才,韩兰生,徐浩。2023. 基于综合代码图张量表示的漏洞检测方法:VDoTR。计算机与安全 130(2023),103247。
卡塔琳娜·菲卢斯,米蒂亚迪斯·西瓦斯,乔安娜·多马恩斯卡,以及埃罗尔·热尔南贝。2020 年。随机神经网络作为软件漏洞预测的粘合模型。在计算机和电信系统建模、分析和模拟。计算机科学讲义,第 12527 卷。斯普林格,102–116。
Michael Fu 和 Chakkrit Tantithamthavorn. 2022. LineVul:基于 transformer 的行级漏洞预测。在 2022 年 IEEE/ACM 第 19 届国际软件仓库挖掘会议(MSR’22)论文集中。
高翠凤,杨文章,叶家铭,薛寅星,孙军. 2024. sGuard+:基于机器学习的基于规则的智能合约自动漏洞修复. 软件工程与方法学学报 33, 5 (2024), 1–55.
赛义德·穆罕默德·加法里安和哈米德·雷扎·沙赫里亚里。2017。利用机器学习和数据挖掘技术进行软件漏洞分析和发现:综述。ACM 计算机调查 50,4(2017),1–36。
赛义德·穆罕默德·加法里安和哈米德·雷扎·沙赫里亚里。2021。利用程序丰富的中间图表示进行神经网络软件漏洞分析。信息科学 553(2021),189–207。
Patrice Godefroid. 2007. 安全性随机测试:黑盒与白盒模糊测试。在第二届国际随机测试会议论文集,与第 22 届 IEEE/ACM 国际自动软件工程会议(ASE’07)联合举办。1。
席工,郑长兴,李晓红,冯志勇,韩卓斌。2019。通过多任务学习联合预测多个漏洞特征。载于 2019 年第 24 届工程与复杂计算机系统国际会议(ICECCS’19)论文集。IEEE,31–40。
伊恩·古德费洛,让·普吉特-阿巴迪,梅赫迪·米尔扎,徐冰,大卫·沃德-法雷利,谢吉尔·奥扎伊尔,阿隆·库维尔,约舒亚·本吉奥。2020。《生成对抗网络》。ACM 通讯 63,11(2020),139–144。
郭燕明,舒辉,康飞。2023. BinAIV:针对 Linux x86 二进制的语义增强漏洞检测。计算机与安全 135(2023),103508。
郭龙涛,黄华坤,薛世勋,王培亮,赵凌君。2023. 基于图卷积网络和专家模式的可重入漏洞检测。在 2023 年 IEEE 第 16 届嵌入式多核/众核系统芯片国际研讨会(MCSoC’23)论文集中。312–316。
郭文博,方勇,黄成,欧浩然,林春,郭永岩。2022. 基于图神经网络的混合语义漏洞挖掘系统 HyVulDect。计算机与安全 121(2022),102823。
汉兹·哈尼夫和塞尔吉奥·马费斯。2022 年。Vulberta:用于漏洞检测的简化源代码预训练。载于 2022 年国际神经网络联合会议(IJCNN’22)论文集。IEEE,1–8。
M. 哈里哈兰,C. Sathish Kumar,Anshul Tanwar,Krishna Sundaresan,Prasanna Ganesan,Sriram Ravi,和 R. Karthik。2022. 近端实例聚合网络用于可解释的安全漏洞检测。未来计算机系统 134(2022),303–318。
尼玛·希里·哈泽维利和萨桑·H·阿利扎德。2018。《混合潜在多项式朴素贝叶斯分类器》。应用软计算第 69 卷(2018 年),516–527。
尼玛·希里·哈泽维利和萨桑·H·阿利扎德。2021。使用潜在变量分析软件缺陷预测中指标的条件互依性建模。神经计算 460(2021),309–330。
尼玛·希里·哈泽维利,吉霍·申,王军杰,王松,纳奇亚潘·纳加潘。2023. 针对机器学习库的自动静态漏洞检测:我们做到了吗?在 2023 年 IEEE 第 34 届国际软件可靠性工程研讨会(ISSRE’23)论文集中。IEEE,795–806。
尼玛·希里·哈泽维利,吉霍·申,王军杰,王松,纳奇亚帕南·纳加潘。2023。描述和了解机器学习库中的软件安全漏洞。在《第 20 届国际软件仓库挖掘会议(MSR’23)》论文集中。IEEE,27–38。
David Hin, Andrey Kan, Huaming Chen 和 M. Ali Babar. 2022. LineVD:基于图神经网络的语句级漏洞检测。在《第 19 届国际软件仓库挖掘会议(MSR’22)》论文集中。596–607。
杰弗里·E·辛顿,西蒙·奥斯因德罗,以及叶伟威。2006。《深度信念网的快速学习算法》。神经网络计算 18,7(2006),1527–1554。
黄通,阮华 Khanh Dam,上村康隆 Yasutaka Kamei,罗大卫 David Lo,宇佐美直隆 Naoyasu Ubayashi. 2019. DeepJIT:即时缺陷预测的端到端深度学习框架。在 2019 年第 16 届国际软件仓库挖掘会议(MSR’19)论文集中。IEEE,34–45。
黄华坤,郭龙涛,赵凌君,王浩达,徐晨凯,姜山。2024。《边缘人工智能系统中智能合约漏洞检测的有效源代码与操作码结合》。应用软件计算 158(2024),111556。
黄建军,韩松明,尤伟,石文畅,梁斌,吴竞政,吴艳君。2021. 基于字节码匹配的图嵌入智能合约漏洞搜索。IEEE 信息取证与安全杂志 16(2021),2144–2156。
黄凯,孟祥欣,张健,刘洋,王文杰,李淑豪,张雨晴。2023.关于代码大型语言模型微调的自动化程序修复实证研究。在 2023 年 38 届 IEEE/ACM 国际自动软件工程会议(ASE’23)论文集中。IEEE,1162–1174。
Shumaila Hussain,Muhammad Nadeem,Junaid Baber,Mohammed Hamdi,Adel Rajab,Mana Saleh Al Reshan,和 Asadullah Shaikh. 2024. 基于自注意力池化、深度序列和基于图混合特征提取的量子卷积神经网络在 Java 源代码中的漏洞检测。科学报告 14,1(2024),7406。
伊曼纽尔·亚诺内,罗伯塔·瓜达尼,菲洛梅娜·费鲁奇,安德烈亚·德卢西亚,以及法比奥·帕洛马。2022。《软件漏洞的隐秘生活:一项大规模实证研究》。IEEE 软件工程杂志 49 卷 1 期(2022 年),44–63。
贾卡斯·库马尔·贾因和米娜什基·特里帕蒂。2023。检测以太坊智能合约漏洞的多目标方法。载于 2023 年国际网络与计算机通信新兴趋势会议(ETNCC’23)论文集。IEEE,1–6。
Sanghoon Jeon 和 Huy Kang Kim. 2021. AutoVAS:采用深度学习方法的自动化漏洞分析系统。计算机与安全 106(2021),102308。
万庆街,陈琪,王佳琪,阿瑟·桑多·旺迪·科,李金,黄鹏飞,吴雅琪,王吟。2023。《面向智能合约漏洞检测的一种新型扩展多模态人工智能框架》。信息科学 636(2023),118907。
Barbara Kitchenham 和 Stuart Charters. 2007. 软件工程中进行系统文献综述的指南。EBSE 技术报告,版本 2.3。EBSE。
Saad Khan 和 Simon Parkinson. 2018. 利用人工智能进行漏洞评估技术综述。在《计算机网络和系统漏洞分析指南》。Springer,3–32。
金泰宇,金钟焕,李正焕,费凡,谭图,格雷戈里·沃克普,张翔宇,邓欣燕,徐东岩。2019。RVFuzzer:通过控制引导测试在机器人车辆中寻找输入验证漏洞。在第 28 届 USENIX 安全研讨会(SEC’19)论文集中。425–442。
孔令蒂,罗森林,潘丽敏,吴志通,李新帅。2024. 基于并行视角融合和层次特征增强的多类型漏洞检测框架。计算机与安全 140(2024),103787。
Jorrit Kronjee, Arjen Hommersom 和 Harald Vranken. 2018. 利用数据流分析和机器学习发现软件漏洞。在第十三届国际可用性、可靠性和安全性会议(ARES’18)论文集中。1–10。
Tue Le,Tuan Nguyen,Trung Le,Dinh Phung,Paul Montague,Olivier De Vel,和 Lizhen Qu。2018。《最大差异序列自动编码器在二进制软件漏洞检测中的应用》。载于 2018 年国际学习表示会议(ICLR’18)论文集。
Triet H. M. Le,陈华明,M. Ali Babar. 2022. 基于数据驱动的软件漏洞评估与优先级排序综述。ACM 计算评论 55,5(2022),1–39。
胡伊明·莱,大卫·欣,罗兰·克罗夫特,M.阿里·巴巴。2021. DeepCVA:基于深度多任务学习的自动提交级别漏洞评估。在 2021 年第 36 届 IEEE/ACM 国际自动软件工程会议(ASE’21)论文集中。717–729。
李健,何品佳,朱杰明,李瑞。2017. 基于卷积神经网络的软件缺陷预测。在 2017 年 IEEE 国际软件质量、可靠性和安全性会议(QRS’17)论文集中。IEEE,318–328。
李丽涛,丁世宏,田媛,冯柏承,夏兰,欧伟汉,宋磊,陈聪伟。2023. VulANalyzeR:基于多任务学习和注意力图卷积的可解释二进制漏洞检测。ACM 隐私和安全交易 26,3(2023),1–25。
李琳,刘洋,孙国栋,李念锋。2024. 基于自动化特征提取和特征交互的智能合约漏洞检测。IEEE 知识数据工程杂志 36,9(2024),4916–4929。
辛力,杨欣,朱红亮,杨一娴,陈玉玲。2023. 基于图嵌入和领域自适应的跨域漏洞检测。计算机与安全 125(2023),103017。
李毅,王少华,阮天年。2021。基于细粒度解释的漏洞检测。在 29 届 ACM 欧洲软件工程联合会议和软件工程基础研讨会(ESEC/FSE’21)论文集中,第 292-303 页。
李毅,王少华,阮天年,阮顺范。2019。通过基于上下文的代码表示学习和基于注意力的神经网络改进错误检测。ACM 程序语言会议论文集 3,OOPSLA(2019 年 10 月),文章编号 162,30 页。DOI:
李毅,王少华,阮天年,阮顺范。2019。通过基于上下文的代码表示学习和基于注意力的神经网络改进错误检测。ACM 程序语言会议论文集 3,OOPSLA(2019 年 10 月),文章编号 162,30 页。
李毅,雅什·亚达瓦利,张嘉兴,王少华,阮天恩。2023. 基于提交级别的神经漏洞检测与评估。在 31 届 ACM 欧洲软件工程联合会议和软件工程基础研讨会(ESEC/FSE’23)论文集中。1024–1036。
赵璇 李,陆思琪,张瑞,赵子明,梁瑞金,薛瑞,李文豪,张帆,高胜。2023. VulHunter:通过多实例学习在 EVM 字节码级别猎捕易受攻击的智能合约。IEEE 软件工程杂志 49,11(2023),4886–4916。
Zhen Li, Deqing Zou, Shouhuai Xu, Zhaoxuan Chen, Yawei Zhu, 和 Hai Jin. 2022. VulDeeLocator:一种基于深度学习的细粒度漏洞检测器。IEEE 可靠性和安全计算杂志 19 (2022),2821–2837。
Zhen Li, Deqing Zou, Shouhuai Xu, Hai Jin, Yawei Zhu, 和 Zhaoxuan Chen. 2022. SySeVR:一种利用深度学习检测软件漏洞的框架。IEEE 可靠性和安全计算杂志 19 (2022),2244–2258。
郑力,邹德清,徐守怀,欧新宇,金海,王素娟,邓志军,钟雨怡。2018. VulDeePecker:一种基于深度学习的漏洞检测系统。在 2018 年网络与分布式系统安全研讨会(NDSS’18)论文集中,第 1-15 页。
林冠军,文胜,韩庆龙,张军,向阳。2020. 基于深度神经网络的软件漏洞检测:综述。IEEE 第 108 卷第 10 期(2020 年),1825–1848。
林冠军,张军,罗伟,潘磊,德·维勒,蒙塔古,向杨。2019. 通过学习多领域知识库进行软件漏洞发现。IEEE 可信赖和安全的计算杂志,第 18 卷,第 5 期(2019 年),2469–2485。
林金凤,刘亚林,曾庆凯,姜萌,黄洁莲。2021。可追溯性转型:使用预训练的 BERT 模型生成更精确的链接。在《第 43 届国际软件工程会议(ICSE’21)》论文集中。IEEE,324–335。
赵刘,高翠云,夏欣,罗大卫,约翰·格鲁迪,杨晓虎。2021。关于软件工程中深度学习的可重复性和可复制性。ACM 软件工程与方法论交易 31,1(2021),1-46。
刘海阳,范雨琪,冯琳,魏振春。2023. 基于多关系嵌套图卷积网络的可疑智能合约函数定位。系统与软件杂志 204(2023),111775。
刘辉江,姜水柔,齐学新,曲杨,李辉,李婷婷,郭成,郭世凯. 2024. 通过图神经网络检测具有权重偏差的软件漏洞. 专家系统与应用 238(2024),121764.
刘静强,朱晓曦,刘超戈,崔翔,刘奇旭。2022. CPGBERT:通过代码属性图学习程序语义的缺陷检测有效模型。在 2022 年 IEEE 国际信任、安全和隐私计算与通信会议(TrustCom’22)论文集中。IEEE,274–282。
刘世刚,林冠军,韩庆龙,文胜,张军,向杨。2019. DeepBalance:用于漏洞检测的深度学习和模糊过采样。IEEE 模糊系统汇刊 28,7(2019),1329–1343。
刘世刚,林冠军,曲丽珍,张军,奥利弗·德·韦尔,保罗·蒙塔古,杨翔。2020。CD-VulD:基于深度领域自适应的跨域漏洞发现。IEEE 可信赖和安全的计算杂志 19,1(2020),438–451。
刘振光,钱鹏,王翔,朱磊,何勤明,季守岭。2021。智能合约漏洞检测:从纯神经网络到可解释图特征与专家模式融合。在《第 30 届国际人工智能联合会议(IJCAI’21)》论文集中。
刘振光,钱鹏,王晓阳,庄媛,邱琳,王勋。2023. 结合图神经网络与专家知识进行智能合约漏洞检测。IEEE 知识数据工程杂志 35,2(2023),1296–1310。
鲁桂林,俱晓琳,陈翔,裴文龙,蔡志龙。2024. GRACE:利用图结构和上下文学习增强LLM-基于的软件漏洞检测。系统与软件杂志 212(2024),112031。
阿布·赛义德·马赫富兹. 2016. 软件质量保证:整合测试、安全和审计. CRC 出版社.
易毛,李云,孙嘉泰,陈益欣。2020. 基于注意力机制的循环神经网络的可解释软件漏洞检测。在 2020 年 IEEE 国际大数据会议(Big Data’20)论文集中。IEEE,4651–4656。
安德鲁·梅尼利,哈什瓦德汉·斯里尼瓦桑,阿耶米·穆萨,阿尔贝托·罗德里格斯·特耶达,马修·莫卡里,布莱恩·斯佩茨斯。2013。《当补丁变坏:探讨导致漏洞的提交属性》。载于 2013 年 ACM/IEEE 国际实证软件工程与度量研讨会(ESEM'13)论文集。IEEE,第 65-74 页。
尼古拉斯·内瑟科特和朱利安·西沃德。2007。Valgrind:一种重型动态二进制插桩框架。ACM SIGPLAN 通告 42,6(2007),89–100。
黄鸿辉·吴,吴念明,段洪福,阿赫玛迪·扎赫拉,段清南,姜凌霄。2022。MANDO-GURU:通过异构图嵌入进行智能合约源代码漏洞检测。在 30 届 ACM 欧洲软件工程联合会议和软件工程基础研讨会(ESEC/FSE’22)论文集中。1736–1740。
黄辉·吴,吴念明,谢春瑶,阿赫玛迪,丹尼尔·库登多,阮清南,蒋凌晓。2022。MANDO:用于智能合约漏洞细粒度检测的多层次异构图嵌入。载于 2022 年第 9 届 IEEE 国际数据科学与高级分析会议(DSAA’22)论文集。IEEE,1–10。
黄辉·吴,吴念明,谢春瑶,阿赫玛迪·扎赫拉,库登多·丹尼尔,段清南,姜凌晓。2023。MANDO-HGT:用于智能合约漏洞检测的异构图变换器。在《第 20 届国际软件仓库挖掘会议(MSR’23)》论文集中。IEEE,334–346。
Nguyen Thu-Trang 和 Vo Hieu Dinh. 2024. 基于上下文的语句级漏洞定位。信息与软件技术 169 (2024),107406。
范辉,陈中,查克里·坦提萨蒙,约翰·格鲁迪,丁峰。2024. 基于最大边缘原理的跨项目不平衡软件漏洞检测的深度领域自适应。ACM 软件工程与方法学交易 33,6(2024),文章 162,34 页。
赵妮,郭新荣,朱岩,徐晓丹,杨晓虎。2023. 通过融合多模态知识进行功能级漏洞检测。在 2023 年 IEEE/ACM 国际自动软件工程会议(ASE’23)论文集中。IEEE,1911–1918。
赵妮,王伟,杨凯文,夏欣,刘奎,和 David Lo. 2022. 两者之最佳:将语义特征与专家特征整合进行缺陷预测和定位。在 30 届 ACM 欧洲软件工程联合会议和软件工程基础研讨会(ESEC/FSE’22)论文集中。672–683。
余农,拉尼·夏尔马,阿卜德瓦哈布·哈莫-拉德吉,罗霞普,蔡海鹏。2022. 软件工程中的开放科学:基于深度学习的漏洞检测研究。IEEE 软件工程杂志 49,4(2022),1983–2005。
潘胜义,包凌峰,夏欣,罗大卫,李山平。2023. 基于 CWE 树结构的细粒度提交级漏洞类型预测。在《第 45 届国际软件工程会议(ICSE’23)》论文集中。IEEE,957–969。
Luca Pascarella, Fabio Palomba, 和 Alberto Bacchelli. 2019. 精细粒度即时缺陷预测。系统与软件杂志 150 (2019),22–36。
Henning Perl, Sergej Dechand, Matthew Smith, Daniel Arp, Fabian Yamaguchi, Konrad Rieck, Sascha Fahl, 和 Yasemin Acar. 2015. VCCFinder:在开源项目中寻找潜在漏洞以协助代码审计。在 2015 年 ACM SIGSAC 第 22 届计算机与通信安全会议论文集。426–437。
Kai Petersen,Sairam Vakkalanka,Ludwik Kuzniarz. 2015. 软件工程系统映射研究指南:更新。信息与软件技术 64(2015),1–18。
安越藩,黎明,武秋梅。2017。基于控制流图的卷积神经网络在软件缺陷预测中的应用。在 2017 年 IEEE 第 29 届国际人工智能工具会议(ICTAI’17)论文集中。IEEE,45–52。
Michael Pradel 和 Koushik Sen. 2018. DeepBugs:基于名称的漏洞检测的学习方法。ACM 程序语言会议论文集 2,OOPSLA(2018),文章 147 号,25 页。
Ali Raza 和 Waseem Ahmed. 2022. 操作系统中的威胁和漏洞管理生命周期:系统综述。多学科工程科学和技术杂志 9,1(2022),15010–15013。
任晓军,吴永堂,李家庆,郝东民,阿兰·穆罕默德。2023.基于语义代码结构和自设计神经网络的智能合约漏洞检测。计算机与电气工程 109(2023),108766。
Rebecca Russell, Louis Kim, Lei Hamilton, Tomo Lazovich, Jacob Harer, Onur Ozdemir, Paul Ellingwood, 和 Marc McConley. 2018. 基于深度表示学习的源代码自动漏洞检测。在 2018 年第 17 届 IEEE 国际机器学习与应用会议(ICMLA’18)论文集中。IEEE,757–762。
Riccardo Scandariato,James Walden,Aram Hovsepyan,和 Wouter Joosen. 2014. 通过文本挖掘预测易受攻击的软件组件。IEEE 软件工程汇刊 40,10(2014),993–1006。
Hinrich Schütze、Christopher D. Manning 和 Prabhakar Raghavan. 2008. 信息检索导论。第 39 卷。剑桥大学出版社,剑桥。
阿布巴卡尔·奥马里·阿卜杜拉希·塞马萨巴,魏正,吴晓雪,塞缪尔·阿库阿西·阿吉曼。2020。基于深度学习的源代码漏洞分析文献综述。IET 软件 14,6(2020),654–664。
Christoph Sendner, Huili Chen, Hossein Fereidooni, Lukas Petzi, Jan König, Jasper Stang, Alexandra Dmitrienko, Ahmad-Reza Sadeghi, 和 Farinaz Koushanfar. 2023. 智能合约:利用深度迁移学习检测智能合约中的漏洞。在 2023 网络与分布式安全研讨会(NDSS’23)论文集中。
托马斯·希佩伊,大卫·鲍斯,特雷西·霍尔。2019。自动识别代码特征以预测软件缺陷:使用 AST n-gram。信息与软件技术 106(2019),142–160。
宋子华,王军锋,杨凯元,王继刚。2023. 基于超图卷积的跨程序漏洞检测:HGIVul。信息与软件技术 160(2023),107219。
Miroslaw Staron, Mirosław Ochodek, Wilhelm Meding 和 Ola Söder. 2020. 利用机器学习识别需要人工审查的代码片段。在 2020 年第 46 届欧姆 icro 软件工程与高级应用会议(SEAA’20)论文集中。IEEE,513–516。
本杰明·斯蒂恩霍克,高红阳,和李伟。2024.受数据流分析启发的深度学习在高效漏洞检测中的应用。在第 46 届国际软件工程会议(ICSE’24)论文集中,第 1-13 页。
奥克塔维安·苏奇乌,康纳·尼尔森,卓尔·刘,蒂芙尼·宝,以及图多尔·杜米特拉什。2022 年。预期可利用性:预测功能性漏洞利用的发展。在 31 届 USENIX 安全研讨会(Security’22)论文集中。第 377-394 页。
郝孙,崔磊,李伦,丁振权,郝志宇,崔建聪,刘鹏。2021. 基于漏洞和补丁代码相似性的漏洞检测方法:VDSimilar。计算机与安全 110(2021),102417。
郝孙,崔磊,李伦,丁振权,李思源,郝志宇,朱宏松。2024. VDTriplet:基于三元组模型的图语义漏洞检测。计算机与安全 139(2024),103732。
南孙,张军,保罗·里姆巴,高翔,张宇,杨翔。2018。基于数据驱动的网络安全事件预测:综述。IEEE 通信调查与教程 21,2(2018),1744–1772。
孙晓兵,涂亮琼,张嘉乐,蔡杰,李斌,王宇. 2023. ASSBert:用于智能合约漏洞检测的主动和半监督 Bert. 信息安全与应用杂志 73 (2023),103423.
孙宇强,吴道远,薛越,刘汉,王海军,徐正子,谢晓飞,刘杨。2024. GPTScan:结合 GPT 与程序分析检测智能合约中的逻辑漏洞。在《第 46 届国际软件工程会议(ICSE’24)》论文集中,第 1-13 页。
魏唐,唐明伟,班敏超,赵子国,冯明军。2023. CSGVD:一种结合序列和图嵌入的源代码漏洞检测的深度学习方法。系统与软件杂志 199(2023),111623。
唐志全,胡乔,胡宇鹏,旷文欣,陈炯毅。2022. SeVulDet:一种语义增强的可学习漏洞检测器。在 2022 年第 52 届 IEEE/IFIP 国际可靠系统与网络会议(DSN’22)论文集中。IEEE,150–162。
文心涛,苏晓红,万嘉源,魏宏伟,郑伟宁。2023. 通过跨模态特征增强与融合进行漏洞检测。计算机与安全 132(2023),103341。
田军锋,邢文静,李振. 2020. BVDetector:一种基于程序切片的二进制代码漏洞智能检测系统. 信息与软件技术 123 (2020), 106289.
郑州天,彬辉天,吕家骏,陈艳平,陈凌伟。2024. 通过 AST 分解和神经子树编码增强漏洞检测。专家系统与应用 238(2024),121865。
童万,陆陆,许浩,邹全一. 2023. 基于 doc2vec 和路径表示的软件漏洞检测. 在 2023 年 IEEE 第 23 届国际软件质量、可靠性和安全性会议(QRS-C’23)配套会议论文集中. IEEE,131–139.
王欢廷,叶国新,唐占勇,谭欣慧,黄松方,方定一,冯彦松,边立中,王正。2020。结合基于图的学习与自动化数据收集进行代码漏洞检测。IEEE 信息取证与安全杂志 16(2020),1943–1958。
王明科,陶川奇,郭红晶。2023. LCVD:基于图神经网络的循环导向代码漏洞检测。系统与软件杂志 202 (2023),111706。
钱王,李正道,梁和同,潘晓伟,李辉,李婷婷,李晓晨,李晨晨,郭石凯。2024. 软件漏洞检测的图置信学习。人工智能在工程中的应用 133(2024),108296。
王松,刘泰岳,南载昌,谭琳。2018. 软件缺陷预测的深度语义特征学习。IEEE 软件工程 Transactions 46, 12 (2018), 1267–1293。
王松,刘泰岳,谭琳。2016。自动学习语义特征进行缺陷预测。载于第 38 届国际软件工程会议(ICSE’16)论文集。IEEE,297–308。
王文博,阮天年,王少华,李毅,张继源,雅什·亚达瓦利。2023. DeepVD:神经网络漏洞检测中的类别分离特征。在《第 45 届国际软件工程会议(ICSE’23)》论文集中。IEEE,2249–2261。
王岩,贾鹏,彭曦,黄成,刘佳勇。2023. BinVulDet:通过反编译伪代码和 BiLSTM-attention 检测二进制程序中的漏洞。计算机与安全 125(2023),103023。
Laura Wartschinski, Yannic Noller, Thomas Vogel, Timo Kehrer 和 Lars Grunske. 2022. 基于 Python 自然代码库的深度学习漏洞检测:VUDENC. 信息与软件技术 144 (2022),106809.
文新成,高翠云,叶佳欣,李一晨,田志宏,贾岩,王璇。2024. 基于元路径的注意力图学习模型用于漏洞检测。IEEE 软件工程杂志 50(2024),360–375。
吴博伦,邹复台,易平,吴越,张亮。2023. SlicedLocator:基于切片依赖图的代码漏洞定位器。计算机与安全 134(2023),103469。
山口法彦,尼科·戈尔德,丹尼尔·阿尔普,康拉德·里克。2014。使用代码属性图建模和发现漏洞。在 2014 年 IEEE 安全与隐私研讨会论文集中。590–604。DOI:
山口法彦,洛特曼马克斯,里克康拉德。2012。使用抽象语法树进行泛化漏洞外推。在第 28 届计算机安全应用年会论文集中。359–368。
Fabian Yamaguchi,Felix Lindner 和 Konrad Rieck. 2011. 漏洞外推:利用机器学习辅助漏洞发现。在第五届 USENIX 攻击技术研讨会(WOOT’11)论文集中。
法比安·山口,克里斯蒂安·韦斯内格尔,雨果·加斯科,康拉德·里克。2013。Chucky:揭示源代码中缺失的检查以发现漏洞。在 2013 年 ACM SIGSAC 计算机与通信安全会议(CCS'13)论文集中。499–510。
韩岩,罗森林,潘丽敏,张一飞。2021。HAN-BSVD:用于二值软件漏洞检测的层次注意力网络。计算机与安全 108(2021),102286。
杨红宇,杨海云,张亮,程翔。2022. 基于漏洞依赖表示图的源代码漏洞检测。在 2022 年 IEEE 国际信任、安全和隐私计算与通信会议(TrustCom’22)论文集中。IEEE,457–464。
杨立民,李向学,余余。2017。VulDigger:一种即时和成本感知的挖掘漏洞贡献变更的工具。在 2017 年 IEEE 全球通信会议(GLOBECOM’17)论文集中。IEEE,1–7。
端希勇和苏珊·霍维茨。2005。利用静态分析减少动态分析开销。形式方法在系统设计 27(2005),313–334。
肖舟宇,李辉,王汉,法萨尔·梅茂德。2023. 基于深度学习的智能合约有效漏洞检测系统 SmartDT。在 2023 年 IEEE 国际大数据会议(Big Data’23)论文集中。IEEE,2369–2376。
袁大伟,王晓辉,李瑶,张涛。2023. 通过多模态代码和熵嵌入优化智能合约漏洞检测。系统与软件杂志 202 (2023),111699。
成曾,周春英,吕胜凯,何鹏,黄杰。2021。GCN2defect:基于 SMOTETomek 的软件缺陷预测图卷积网络。在 2021 IEEE 第 32 届国际软件可靠性工程研讨会(ISSRE’21)论文集中。IEEE,第 69-79 页。
彭曾,林冠军,潘磊,台永航,张军。2020。利用深度学习技术进行软件漏洞分析和发现:综述。IEEE Access 8 (2020),197158–197172。
张春勇,刘斌,杨欣,姚亮伟。2023. 基于图注意力网络和领域自适应的跨项目漏洞检测(CPVD)。IEEE 软件工程杂志 49, 8 (2023), 4152–4168。
张春勇,余天翔,刘斌,辛杨. 2024. 基于联邦学习的漏洞检测. 信息与软件技术 167(2024),107371.
张恒岩,张伟哲,冯宇明,刘洋。2023。SVScanner:通过深度语义提取检测智能合约漏洞。信息安全与应用杂志 75(2023),103484。
朱卓,雷岩,颜萌,余越,陈佳驰,王尚文,毛晓光。2022. 可重入漏洞检测与定位:基于深度学习的两阶段方法。在 37 届 IEEE/ACM 国际自动软件工程会议(ASE’22)论文集中。1–13。
Zixian Zhen, Xiangfu Zhao, Jinkai Zhang, Yichen Wang, 和 Haiyue Chen. 2024. 基于双注意力图神经网络的智能合约漏洞检测方法 DA-GNN. 计算机网络 242 (2024), 110238.
张琪正,刘勇山,张冰,刘欣倩,何红燕,和龚翔。2023. 基于软件图结构和自注意力图神经网络的软件缓冲区溢出漏洞预测方法。信息与软件技术 160(2023),107246。
郭周,黄静,韩红桂,龚贝,熊傲,王伟,吴启辉。2023. 基于对抗多任务学习的智能合约漏洞检测模型。信息安全与应用杂志 77(2023),103555。
周亚琴,刘尚清,萧景凯,杜晓宁,刘阳. 2019. Devign:通过图神经网络学习综合程序语义的有效漏洞识别. 在第 33 届神经信息处理系统会议(NeurIPS’19)论文集中,第 1-11 页。
周亚琴,沙尔马·阿桑卡亚。2017。从提交信息和错误报告中自动识别安全问题。载于 2017 年第 11 届 ACM 软件工程基础联合会议(FSE’17)论文集。第 914-919 页。
朱慧娟,杨凯旋,王亮民,徐志成,沈维胜. 2023. GraBit:一种基于序列模型的智能合约漏洞检测框架. 在 2023 年 IEEE 第 34 届国际软件可靠性工程研讨会(ISSRE’23)论文集中. IEEE,第 568-577 页.
庄伟元,王浩,张晓芳。2022. 基于 AST 变化嵌入的即时缺陷预测。知识工程系统 248(2022),108852。
袁庄,刘振光,钱鹏,刘琪,王翔,何勤明。2020。基于图神经网络的智能合约漏洞检测。在《第 29 届国际人工智能联合会议(IJCAI’20)》论文集中。3283–3290。
邹德清,胡宇涛,李文克,吴宇明,赵昊军,金海。2022. mVulPreter:一种具有解释的多粒度漏洞检测系统。IEEE 可信赖与安全计算杂志。提前获取,2022 年 8 月 22 日。
邹德清,王素娟,徐守怀,李振,金海. 2019. muVulDeePecker:一种基于深度学习的多类漏洞检测系统. IEEE Transactions on Dependable and Secure Computing 18, 5 (2019), 2224–2236.
邹德清,朱亚伟,徐守怀,李振,金海,叶恒凯。2021. 基于启发式搜索的深度学习漏洞检测器预测解释。ACM 软件工程与方法论交易 30,2(2021),1–31。
Index Terms 索引术语
- A Systematic Literature Review on Automated Software Vulnerability Detection Using Machine Learning
系统化文献综述:基于机器学习的自动化软件漏洞检测
Recommendations 建议
Systematic literature reviews in software engineering - A systematic literature review
软件工程中的系统文献综述 - 系统文献综述Background: In 2004 the concept of evidence-based software engineering (EBSE) was introduced at the ICSE04 conference. Aims: This study assesses the impact of systematic literature reviews (SLRs) which are the recommended EBSE method for aggregating ...
背景:2004 年,在 ICSE04 会议上提出了基于证据的软件工程(EBSE)的概念。目的:本研究评估了系统文献综述(SLRs)的影响,这是推荐的 EBSE 方法,用于汇总……Cyberbullying detection and machine learning: a systematic literature review
Abstract 摘要The rise in research work focusing on detection of cyberbullying incidents on social media platforms particularly reflect how dire cyberbullying consequences are, regardless of age, gender or location. This paper examines scholarly publications (...
社交媒体平台上针对网络欺凌事件检测的研究工作日益增多,这特别反映了网络欺凌后果的严重性,无论年龄、性别或地点。本文考察了学术出版物(...Detecting Blind Cross-Site Scripting Attacks Using Machine Learning
检测使用机器学习的盲跨站脚本攻击SPML '18: Proceedings of the 2018 International Conference on Signal Processing and Machine Learning
SPML '18:2018 年国际信号处理与机器学习会议论文集Cross-site scripting (XSS) is a scripting attack targeting web applications by injecting malicious scripts into web pages. Blind XSS is a subset of stored XSS, where an attacker blindly deploys malicious payloads in web pages that are stored in a ...











