论文学习_Large Language Models Based Fuzzing Techniques: A Survey

论文名称发表时间发表期刊期刊等级研究单位

Large Language Models Based Fuzzing Techniques: A Survey

2024年arXiv-

悉尼大学

0.摘要

研究背景在软件发挥举足轻重作用的现代社会,软件安全和漏洞分析对软件开发至关重要,模糊测试作为一种高效的软件测试方法,并广泛应用于各个领域。大预言模型(LLM)的快速发展促进了其在软件测试领域的应用,并表现出卓越的性能。考虑到现有的模糊测试技术并非完全自动化,并且软件漏洞不断发展,基于大预言模型生成的模糊测试的趋势越来越明显。
研究内容针对当前最先进的 LLM 技术、模糊测试技术、基于 LLM 的模糊测试技术进行了统计分析和讨论。并讨论了基于 MML 的牧户测试技术未来广泛部署和应用的潜力。

1. 引言

模糊测试自 20 世纪 90 年代以来已被广泛采用,其原理涉及生成一系列意想不到的输入来测试软件的可靠性和安全性。随着现代软件行业的发展,模糊测试已经成为软件测试的关键。目前,大语言模型在各个领域都展现出了强大的性能,其中也包括软件测试领域。与传统软件测试系统相比,大语言模型生成的软件测试在效率和准确性方面都有所提高,这些方法包括 TitanFuzz、FuzzGPT 以及针对不同软件类型的其他模糊测试。这些研究将不同的大语言模型与模糊测试技术相结合,并开发新的模糊测试系统,下面将详细介绍这些方法。

针对现有基于 LLM 的模糊测试技术,提出三个研究问题,(1)基于 LLM 的模糊测试技术在 AI 软件系统和非 AI 软件系统中的表现;(2)基于 LLM 的模糊测试技术相较于传统模糊测试技术有哪些优势;(3)基于 LLM 的模糊测试技术未来研究趋势和存在的挑战是什么?

2. 背景知识

2.1 大语言模型(LLM)

大型语言模型的出现为不同的复杂语言任务提供了很大的帮助,例如翻译、摘要、对话交互等(源于 Transformer 的引入)。根据 Humza Naveed 等人 2023 年 7 月的统计,从2019 年到 2023 年,总共出现了 75 个有影响力的大语言模型(涉及通用、医疗以及教育等领域)。

大语言模型主要可分为三类,分别是 Decoder-only 语言模型, Encoder-only masked 语言模型,Encoder-Decoder 语言模型。

  • Decoder-only 语言模型(GPT):类似于一个讲故事的人。模型接收一个故事的开头,如“今天天气很好”。然后模型继续生成剩余的内容,如“适合出去转转”。这类模型擅长创造性的协作,比如写小说或自动生成文章。它更多的关注于从已有的信息扩展出新的内容。OpenAI选择 Decoder-Only 方案,因为它对自然语言生成特别有效。这种架构能够更好的理解和预测语言模式,尤其适合处理开放式、生成性的任务。
  • Encoder-only masked 语言模型:类似于一个专业的内容评论家。模型接收待评论的内容,如一本书。然后模型输出对应的评论,如书籍的质量的高低、主题等。这类模型擅长处理输入数据,专注于理解和编码信息,而不是生成新的文本。这种架构在理解和分类任务中更为有效,尤其适合文本分类、情感分析等任务。
  • Encoder-Decoder 语言模型:类似于一个翻译家。这类模型接收原文,如英文。然后模型理解原文并生成译文,如中文。这类模型通过 Encoder 处理输入内容,通过 Decoder 生成输出。这类模型擅长处理需要理解输入然后生成相关输出的任务,如翻译或问答系统。

2.2 模糊测试

第一个模糊测试技术由 Miller 的等人于 1990 年提出,用于测试软件和系统的可靠性;在 2005 年之前,该技术仍处于发展的早期阶段,大多是使用随机变异的黑盒模糊测试;从 2006 年 到 2010 年,一些模糊测试系统采用了污点分析技术,基于符号执行的模糊测试得到了充分的发展;2011 年至 2015年间,模糊测试发生了重要的演变,(1)基于覆盖引导的模糊测试成为学术和工业领域的重要角色,(2)模糊测试过程中使用不同类型的调度算法,(3)整合各种技术来提高模糊测试的效率;2016 年至 2017 年,许多模糊系统基于 AFL 进行了改进,其中包括 AFLFast 和 AFLGo等;2018 至今,出现了结合多种技术以获得更好的模糊测试技术的趋势,机器学习的概念被引入模糊测试中。一般来说基于机器学习的模糊测试主要分为两类,(1)基于突变的模糊测试技术,(2)基于生成的模糊测试技术。模糊测试根据测试者对被测软件内部结构的了解程度和访问权限的不同,可分为黑盒、白盒以及灰盒模糊测试。

  • 黑盒模糊测试:黑盒测试是最基础的测试形式,其中测试者几乎不了解软件的内部工作原理。测试完全基于对软件外在行为的观察,无需访问源码。通过想软件输入异常或随机数据,测试者观察软件反应,以识别潜在漏洞。该方法简单、直接,能够迅速对软件进行广泛测试,但可能无法探测到更深层的复杂安全问题。
  • 白盒模糊测试:白盒测试与黑盒测试相反,测试者可以完全访问软件的内部逻辑和源代码。通过应用程序分析技术,如静态代码分析和动态执行跟踪,饱和测试能够系统地深入探测软件行为。这种方法能够识别特定代码路径触发地漏洞,提供更高地检测覆盖率和深入地安全评估,但要求测试者具有较高地专业知识和较大地资源投入。
  • 灰盒模糊测试:结合黑盒和白盒测试地优势,测试者对软件的内部信息有限了解,无需完全的代码访问权限。灰盒测试依赖于对部分代码结构的知识,如通过程序插桩收集运行时的反馈信息,来指导测试用例的生成。这种方法既保持了黑盒测试的灵活性和快速性,又通过有限的内部视角提升了测试的效率和有效性。

3. 基于 LLM 的模糊测试

模糊测试的应用范围广泛,已在各个软件领域实施,以评估软件的可靠性和安全性。然而,传统的模糊测试存在局限性,这鼓励研究人员探索新兴 LLM 与模糊测试的集成,以提高其效率和准确性。通过对基于 LLM 的模糊测试技术的深入分析,发现这些技术主要将 LLM 引入 prompt 工程和 种子变异以实现模糊测试性能的提升。基于LLM 的模糊测试技术的评价主要针对三个方面,分别是代码相关的评价指标、性能相关的评价指标以及时间相关的评价指标。

  • 代码相关的评价指标:最具代表性的是代码覆盖率和检索到的BUG数量,它们最直接的反映了测试覆盖率和漏洞检测能力。
  • 性能相关的评价指标:最具代表性的指标是命中率,它是指模糊测试生成的输入针对测试目标的效率。除此之外,突变有效性与突变评分密切相关,是衡量种子突变质量的标准。
  • 时间相关的评价指标:最具代表性的指标是执行时间,可以表示模糊测试执行的总体时间。除此之外,平均检测时间用于衡量模糊测试发现测试目标中漏洞的能力。

AI 软件往往具有更复杂的框架,具有自主学习和适应能力,有的甚至具有自然语言处理能力。非 AI 软件往往基于固定的规则和逻辑运行,需要预先编程和配置才能完成任务。因此,针对这两种不同类型软件的基于 LLM 的模糊测试技术也有所不同。在论文收集到的所有论文中,针对 AI 软件的有 5 篇,其余均为针对非 AI 软件的论文。

3.1 AI 软件模糊测试 vs. 非 AI 软件模糊测试(模糊测试对象不同)

AI 软件模糊测试

Yan 于 2023年提出 ParaFuzz(NIPS,CCFA) 技术,该技术用于检测 NLP 模型中受污染的样本,可以增强 NLP 模型的后面防御。其核心思想是通过观察 Paraphraser 转述前后模型预测结果是否改变,来判断样本是否中毒(预测结果改变代表中毒)。通过模糊测试技术获取 Paraphraser 的最佳 prompts。 

Ackermna 于 2023 年使用 GPT-4 和文本嵌入模型 text-embeddingada-002 自动解析自然语言格式规范,生成符合这些规范的数据实例(种子生成),进而实现软件对不同格式数据的模糊测试。

Jha 于 2023 年提出 BertRLFuzzer,该技术结合 multi-arm bandit 代理,PPO 代理以及 BERT 模型,对 Web 应用程序中的安全漏洞进行模糊测试(如 SQL 注入、跨站脚本攻击、跨站请求伪造等)。实验表明, BertRLFuzzer 可以自动理解攻击语法片段,并通过强化学习给出的变异算子实现测试样例的自动化生成。

TitanFuzz 是首个面向 AI 软件的 LLM 模糊测试技术,该技术通过 generative LLM(CodeX) 和 padded LLM(CideGen) 设计了一种新颖的种子程序变异机制,并使用启发式算法实现模糊测试。 FuzzGPT 利用 CodeX 和 CodeGen模型根据核心概念(包含漏洞的程序通常包含稀有或有价值的代码组件,这些代码组件在漏洞发现中非常重要)自动生成异常程序。尽管 TitanFuzz 和 FuzzGPT 都基于 CodeX 和 CodeGen 模型,但它们有显着差异。 Titanfuzz 依靠提示词工程以及种子生成和变异策略来直接生成或重写代码片段。然而,FuzzGPT 并不限于 Titanfuzz 使用的策略。它是一个大型语言模型模糊器,使用少样本学习、零样本学习和微调等方法。它通过理解历史错误代码来生成更复杂和更具体的边缘情况代码片段。

非 AI 软件模糊测试

Xia 于 2024年提出一个通用模糊测试系统 Fuzz4All,可以自动对不同编程语言编写的项目进行模糊测试。具体来说,该技术使用 GPT-4 和 StarCoder 作为输入生成和变异引擎。由于 LLM 对各种编程语言示例进行了广泛的预训练,因此 LLM 能够理解不同语言的语法和语义。Fuzz4All扩展了这一功能,可以对不同语言编写的项目、程序、编译器甚至 API 库进行模糊测试,大大提高了模糊测试的通用性。Yang 于 2023年提出一个面向编译器的白盒模糊测试工具 WhiteFox,该工具通过 GPT-4(分析型 LLM) 和 StarCoder(生成型 LLM) 实现,分析型 LLM 用于分析低级优化的源代码并指定可以触发优化的高级测试程序的要求,生成型 LLM 根据需求生成测试程序。Fuzz4All 和 WhiteFox 工具使用相同的 LLM ,具有一致的主要测试目标,表现出一些共同点。GPT-4 具有强大的自然语言理解和分析能力,但使用该模型生成输入的成本非常高,因此这两种工具均使用该模型作为分析型 LLM。StarCoder 是一个较小的模型,适合高效的连续输入生成,因此两种模型都将其作为生成型 LLM。

Zhang 于 2023 年提出一种基于 GPT-3.5 和 GPT-4 的库 API 模糊测试工具,该技术更加通用和轻量化,可以自动化解决 64% 的问题。如果添加手动语义验证器,这个数字将上升到 91%。

Meng 于 2024 年提出基于 GPT-3.5 Turb 的网络协议模糊测试工具。具体来说,协议模糊测试工具与 LLM 系统的交互,使模糊测试工具能够向 LLM 系统呈现高度特定的任务。

Hu 于 2023 年将生成式人工智能与灰盒测试相结合。具体来说,除了传统灰盒模糊测试之外,聊天变异器从种子函数中选择种子,并通过 LLM 模型生成与种子类似的输出。

Qiu 于 2023 年提出一种面向量子化学领域软件的模糊测试技术,该技术利用大语言模型 GPT-3.5、Claude 2 以及 Bart 来提供有价值的特定领域化学知识,从而能够生成和突变具有语法和语义有效性的输入文件。

Liu 于 2023 年提出一种基于GPT 和 UIAutomator 的模糊测试技术InputBlaster,它利用 LLM 自动生成异常文本输入以检测移动应用程序。该技术并不直接由 LLM 生成目标输入(开发人员认为这种方法效率低下且成本高昂),因此 InputBlaster 使用大模型来生成测试生成器(代码片段),其中每个生成器都可以使用相同的变异规则生成一批非常规的文本输入。

综上所述,ChatGPT 可以根据任务示例或简单的自然语言指令来理解任务(是一个优秀的零样本或少样本学习器)。ChatGPT 的学习能力是开发者选择使用它的一个重要原因,作为一个生成式 LLM ,它可以根据提示有效的生成模糊测试的输入。

3.2 LLM 模糊测试 vs. 传统模糊测试(模糊测试技术不同)

更高的覆盖率:通过将 TitanFuzz 与当前最先进的 API 级别(如 FreeFuzz 和 DeepREL )和模型级别(如 LEMON 和 Muffin)进行比较,发现 TitanFuzz 在 TensorFlow 和 PyTorch 中的API覆盖率分别增加了91.11%和24.09%。 作为模型级模糊器,LEMON 和 Muffin 使用了一小部分分层 API(例如 Conv2d),因此它们的覆盖率较低。 TitanFuzz 可以通过组合生成式 (Codex) 和填充式 (InCoder) 大语言模型 (LLM) 来生成任意代码,以实现最佳的 API 覆盖率。

CHATAFL 作为一种基于 LLM 的网络协议模糊测试技术,与其他没有 LLM 的同类传统模糊测试技术(例如 AFLNET 和 NSFuzz )相比,具有更高的平均代码覆盖率。具体来说,与 AFLNET 相比,CHATAFL 的分支机构覆盖率平均高出 5.8%。 与 NSFuzz 相比,这个数字增加到 6.7%。 这表明CHATAFL的检测范围更广,发现未知bug的机会更高。

更高的计算效率:整体代码方面,TitanFuzz 在 PyTorch 和 TensorFlow 上分别实现了 20.98% 和 39.97% 的代码覆盖率,大幅超越 DeepREL 和 Muffin。与 DeepREL 相比,TitanFuzz 在 PyTorch 和 TensorFlow 中的代码覆盖率分别提高了 50.84% 和 30.38%。 虽然 TitanFuzz 的时间成本较高,但仅使用种子生成功能并针对 DeepREL 覆盖的 API 进行测试明显优于 DeepREL 并且花费的时间更少,这显示了直接使用LLM生成高质量种子的优势。

更强的错误检测能力:传统的模糊器通常根据规定的规则或方法随机生成测试用例。 此类方法缺乏对代码结构、逻辑和上下文的深入理解。 因此,它们可能无法有效地探索复杂的编程模式或识别高级漏洞。 此外,传统的模糊器不明确利用历史数据或程序模式。 不同的是,LLM 可以从大量的历史代码和错误中学习,从而挖掘潜在的错误模式以发现新的漏洞。

在 FuzzGPT 中,共检测到 76 个 bug,其中 61 个已确认,其中 49 个已确认为先前未知的 bug(其中 6 个已修复)。 值得注意的是,FuzzGPT 检测到 11 个新的高优先级错误或安全漏洞,凸显基于 LLM 的模糊器可以发现更深层次的编程漏洞。当使用 CHATAFL、NSFUZZ 和 AFLNET 测试同一目标时,在相同的运行次数和时间下,CHATAFL 发现了 9 个新漏洞。 相比之下,NSFUZZ 仅发现了 4 个漏洞,而 AFLNET 发现了 3 个。 Fuzz4All 展现了不错的性能,能够在 GCC、Clang、OpenJDK 等广泛使用的系统中发现 76 个错误,其中 47 个错误已被确认为以前未知的漏洞。

更高的自动化程度:传统的模糊测试需要大量的时间、精力和体力劳动。 种子生成是模糊测试不可或缺的一部分,创建多样化且有效的输入需要大量的手动工作和专业知识。 此外,使用现有种子通过突变产生新的输入是一个耗时的过程。 使用 LLM 进行自动化模糊测试可以有效解决这些问题。 InputBlaster 利用 LLM 的自动化功能根据输入提示生成高质量的种子。 每次测试后,它都会根据不同的提示使种子发生变异,从而生成新的种子以进行进一步的测试。 实施自动化模糊测试可以节省大量成本,预计将成为未来的一个突出趋势。

4. 未来研究趋势及挑战

4.1 两种基于 LLM 的模糊测试技术

基于 LLM 的模糊技术可以分为两个部分。 (1)收集被测试对象的历史数据集,对历史错误代码片段和漏洞进行分类并提供给模型进行学习,最后训练专门的模糊测试模型来测试对象(例如,FuzzGPT 从包含深度学习系统错误和漏洞的历史数据集中学习)。(2)将LLM 引入到传统模糊测试过程中的具体步骤中,以提高模糊器性能(例如,TitanFuzz提到使用CodeX 和 CodeGen 改变传统模糊测试中的种子变异过程,以提高代码覆盖率和测试成功率)。从目前的实验结果来看,FuzzGPT 和 Titanfuzz 的性能对比表明,FuzzGPT 在代码覆盖率和效率方面更胜一筹。

4.2 预训练数据的讨论

在上述背景下,训练专门的模糊测试模型代表了一个前瞻性的研究方向。 然而,预训练数据的充足性和质量方面的挑战值得注意。 Lin 于2020 年的研究表明用于模型的预训练数据集的质量可能存在偏差。Kaddour 于 2023 年的工作指出,预训练数据集的重复性和规模可能会影响 LLM 的性能,例如语义上接近重复的内容的存在可能会增加模型对数据的依赖性。 基于 LLM 的模糊器可能在不久的将来会遇到这些问题。 当数据量不足或质量较差时,LLM 可能无法在特定领域取得优异的表现。 基于LLM的模糊器在性能方面是否能够超越传统模糊器还有待观察。 解决这些挑战对于基于 LLM 的模糊器未来的成功至关重要。

4.3 时间消耗的讨论

LLM 是高度复杂的深度学习模型,需要大量的计算资源来生成代码。 这种复杂的计算过程比传统方法需要更多的时间。 例如,TitanFuzz不仅生成代码,还生成高质量、有意义的程序片段,这可能涉及多次迭代和调整,以确保生成的程序满足特定的质量标准。 此外,为了生成独特且多样化的程序,需要额外的检查和过滤器来防止现有代码片段的重复。 此外,在深度学习库的背景下,API调用可能涉及复杂的数据结构和算法。 生成有效调用这些 API 并触发潜在错误的代码可能需要更复杂的逻辑和更长的处理时间。

4.4 LLM 模糊测试评估框架讨论

评估标准主要针对不同的测试目标而定制。 模糊器的最终衡量标准是已识别的不同漏洞的数量。 此外,基于代码覆盖率评估模糊器性能是很常见的。 许多技术都会衡量代码覆盖率,有些技术完全依赖代码覆盖率作为评估标准。

Fuzz4All 提到代码覆盖率测量用于评估模糊器的性能。 为了保持一致性,报告了每个评估目标的线路覆盖范围。 然而,将最大化代码覆盖率与漏洞识别直接联系起来并没有固有的基础。 有研究对32篇模糊测试研究进行了统计分析,以检验实验方法。 他们强调迫切需要精心设计和彻底评估的模糊测试基准套件。

许多传统的模糊测试评估标准已被用来评估基于 LLM 的模糊器。 因此,需要一个专门为基于 LLM 的模糊器设计的通用且定制的评估框架。 新的评估框架应该扩展模糊器使用的不同LLM的评估。 它应该在一致的参数、环境和测试对象下比较利用 LLM 的模糊器与传统模糊器的效率。 因此,它可以普遍适用于大多数基于 LLM 的模糊器。 这将是未来衡量此类技术性能的重要标准。        

4.5 实现全自动化的讨论

与传统模糊器相比,基于 LLM 的模糊器显着减少了体力劳动。 ChatFuzz 利用 LLM 的prompt工程进行种子选择和突变。 Fuzz4All 在每次迭代后更新 LLM 提示,以避免生成相同的测试输入并生成更高质量的输入。

传统模糊测试中的类似工作需要开发人员干预。 在 Google 的工作中,提到使用传统模糊器 OSS-Fuzz 测试项目后手动复制结果会消耗大量时间,通过将 LLM 与 OSS-Fuzz 集成得到显着改善。 这些技术在一定程度上利用了大型语言模型的特点,减轻了开发人员的工作量。 目前,基于LLM的模糊器还不能实现生成模糊测试的完全自动化,但这无疑是未来发展的方向。

5. 总结

论文对基于大语言模型的模糊测试技术进行了深入的回顾和总结,并涵盖了人工智能和非人工智能软件领域的广泛应用。 总结了不同的基于LLM的模糊器的框架和原理,并讨论了这些技术如何引入LLM来增强传统的模糊测试技术。 与传统的模糊器相比,基于LLMs的模糊器提供了优越的API和代码覆盖率,发现更复杂的错误,并提高了模糊测试的自动化程度。 这样,基于 LLM 的模糊测试技术在推动软件测试领域展现出巨大的潜力。 这项调查的见解和结果预计将成为该领域的研究人员和从业者的宝贵资源,指导使用 LLM 开发更高效、可靠和自动化的模糊测试方法。

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值