论文学习_Fuzz4All: Universal Fuzzing with Large Language Models

论文名称发表时间发表期刊期刊等级研究单位
Fuzz4All: Universal Fuzzing with Large Language Models2024年arXiv-伊利诺伊大学

0.摘要

研究背景模糊测试再发现各种软件系统中的错误和漏洞方面取得了巨大的成功。以编程或形式语言作为输入的被测系统(SUT),例如编译器、运行时引擎、约束求解器以及具有可访问 API 的软件库尤为重要,因为它们是软件开发的基本构建块。
现存问题SUT系统的现有模糊器通常针对特定语言,因此不能轻松应用于其他语言,甚至同一语言的其他版本。此外,现有模糊器生成的输入通常仅限于输入语言的特定功能,因此很难揭示与其他功能或新功能相关的错误。
核心思想利用大语言模型(LLM)作为输入生成和变异引擎,这使得该方法能够为任何实际相关的语言生成多样化且真实的输入。
研究内容论文提出首个通用模糊测试系统 Fuzz4All,该系统针对许多不同的输入语言以及这些语言对应的 SUT 系统进行模糊测试。具体来说,论文提出一种新颖的自动提示技术,该技术创建非常适合模糊测试的 LLM 提示,以及一种新颖的 LLM 支持的模糊循环,它迭代更新提示以创建新的模糊输入。
实验结果论文在 9 个接受测试的系统上评估Fuzz4All,这些系统采用六种语言(C、C++、Go、SMT2、Java 以及 Python)作为输入。实验表明,在所有六种语言中,通用模糊测试比现有的特定语言模糊测试实现了更高的覆盖范围。此外,Fuzz4All 在 GCC、Clang、Z3、CVC5、OpenJDK 以及 Qiskit 量子计算平台等广泛使用的系统中发现了 98 个错误,其中 64 个错误已被开发人员确定为以前未知的。

1. 引言

研究背景:模糊测试是一种生成输入的自动化测试方法,旨在暴露被测系统(SUT)的以外行为,例如崩溃。研究人员和从业者以及成功构建了实用的模糊测试工具,这些工具在发现现实系统中的大量错误和漏洞方面取得了巨大成功。一个特别重要的 SUT 系列是接受编程或形式语言输入的系统,例如编译器、运行时引擎以及约束求解器等。人们为此类系统提出了许多模糊器,因为它们是软件开发的基本构建块。例如,编译器和运行时引擎中的错误会影响所有相应的下游应用程序。

现存问题:首先,现有的模糊器与目标系统紧耦合,模拟器的横向扩展性差。其次,现有的模糊器无法随着目标系统的升级而升级,模拟器纵向扩展性差。最后,现有的模糊器生成的测试样本质量不高,模拟器的测试样例生成效率低。

  • 问题一:传统的模拟器通常设计为针对特定语言或特定 SUT。然而,设计和实现模拟器非常耗时,例如 用于 C/C++ 编译的模糊器 Csmith 拥有超过 8 万行代码,用于 Linux 系统的模糊器 Syzkaller 包含数以万计的手工规则。由于每种目标语言各不相同,因此将一种输入语言实现模拟器的工作重用到另一种输入语言通常并非易事。此外,对一种 SUT 有效的模糊测试策略可能对另一种 SUT 根本不起作用。
  • 问题二:现实世界的系统在不断发展,例如,通过向输入语言添加新功能。为特定版本的语言或 SUT 设计的传统模糊器可能会在新版本上失去有效性,并且无法轻松用于测试新实现的功能。例如,Csmith 仅支持 C++11 之前的一组有限功能。事实上,最近的工作表明 Csmith 未能在新版本的 GCC 和 Clang 编译器中发生任何新的错误,这表明新版本的编译器正在变得不受现有模糊测试器的影响。
  • 问题三:即使在特定目标语言的范围内,基于生成和基于突变的模糊测试通常也无法覆盖大部分输入空间。基于生成的模糊器严重依赖输入语法来合成有效代码,并且还配备了语法规则来确保合成代码的有效性。为了生成大量有效的模糊测试输入或回避难以建模的语言特征,基于生成的模糊器通常使用完整语言语法的子集,这限制了它们只能测试所有语言特征的子集。同样,基于突变的模糊器受到其突变算子的限制,并且需要难以获得的高质量种子。

研究内容:论文提出第一个通用的模糊器 Fuzz4All,可以针对许多不太的输入语言以及这些语言的函数进行模糊测试。Fuzz4All 和目前的现存模糊器的有很大区别,例如 AFL 和 libFuzzer 使用极其简单的突变,不知道目标语言,因此很难产生有意义的编程语言模糊输入。Fuzz4All 的关键思想是利用大语言模型(LLM)作为输入生成引擎和变异引擎( LLM 接受了各种编程语言和其他形式语言的大量示例的预先训练,因此他们对这些语言的语法和语义有隐含的理解)。

具体实现:Fuzz4All的输入是用户提供的描述 SUT 的文档,以及可选的要关注的 SUT 的特定功能,例如以文档、示例代码以及正式规范的形式。然而,这些用户输入可能过于冗长,无法直接用作 LLM 的提示。为了解决上述问题,论文提出一个自动提示流程,自动将所有用户提供的输入提取为简洁有效的模糊测试提示(此提示是生成模糊输入的 LLM 初始输入)。由于使用相同的提示连续采样会导致许多类似的模糊输入,因此论文提出一个由 LLM 支持的模糊循环,它迭代更新提示以生成一组不太的模糊输入。为此,Fuzz4All 将先前迭代中生成的模糊输入与自然语言指令相结合,例如要求改变这些输入。最后,LLM 生成的模糊测试输入被传递到 SUT 以实现目标系统的模糊测试,例如检查系统崩溃。

Fuzz4All 解决了前面讨论的传统模糊器的局限性和挑战。(1)Fuzz4All 通过使用 LLM 作为生成引擎,可以应用广泛的 SUT 和输入语言,而不是为特定 SUT 精心设计单一用途的模糊器。(2)与针对特定版本的 SUT 或输入语言的现有模糊器相比,Fuzz4All 可以轻松地随目标一起发展。例如,要对新实现的功能进行模糊测试,用户只需要提供与该功能相关的文档或示例代码。(3)为了解决传统模糊器生成能力有限的问题,Fuzz4All 利用 LLM 在数十亿代码片段上进行预训练,使它们能够船舰可能遵循驶入语言的语法和语义约束的广泛示例。

实验结果:论文对 6 种输入语言(C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派4B_OpenCv学习笔记12:OpenCv颜色追踪_画出轨迹

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日尝试使用倒叙的方式来学习OpenCV颜色追踪&#xff0…

Claude 3.5 强势出击:解析最新AI模型的突破与应用

近年来,人工智能领域的发展迅猛,各大科技公司纷纷推出了自家的高级语言模型。在这场技术竞赛中,Anthropic的Claude系列模型凭借其强大的性能和创新的功能脱颖而出。最近,Anthropic发布了Claude 3.5 Sonnet模型,引起了广…

如何设置Excel单元格下拉列表

如何设置Excel单元格下拉列表 在Excel中设置单元格下拉列表可以提高数据输入的准确性和效率。以下是创建下拉列表的步骤: 使用数据验证设置下拉列表: 1. 选择单元格: 选择你想要设置下拉列表的单元格或单元格区域。 2. 打开数据验证&…

[Django学习]Q对象实现多字段模糊搜索

一、应用场景 假设我们现在有一个客房系统,前端界面上展示出来了所有客房的所有信息。用户通过客房的价格、面积、人数等对客房进行模糊搜索,如检索出价格在50到100元之间的客房,同时检索面积在20平方米到30平方米之间的客房,此时后端可以借助…

【C++】在boost中查找有向图的所有循环

在boost中查找有向图的所有循环 #include <boost/graph/adjacency_list.hpp> #include <boost/graph/tiernan_all_cycles.hpp> #include <iostream>using Graph = boost::adjacency_list<boost::vecS, boost::vecS, boost::/*un*/directedS>;// see h…

高斯算法的原理及其与常规求和方法的区别

高斯算法的原理 高斯算法的原理源于数学家卡尔弗里德里希高斯在他少年时期发现的一种求和方法。当时老师让学生们计算1到100的和&#xff0c;高斯发现了一种快速计算的方法。 高斯注意到&#xff0c;如果将序列的首尾两数相加&#xff0c;结果总是相同的。例如&#xff1a; …

layui导入excel

前端&#xff1a; 按钮&#xff1a;<a class"layui-btn layui-btn-sm layuiadmin-button-btn train-btn-css"id"uploadGuideExcel">Excel导入计划</a> // //导入计划upload.render({elem: #uploadGuideExcel, //修改为你的urlurl: domainName…

DVWA 靶场 JavaScript 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、Python简介1.1 历史背景1.2 设计哲学1.3 语言特性1.4 应用场景1.5 为什么选择Python 二、Python语言基础2.1 注释规则2.1.1 单行注释2.1.2 多行注释2.1.3 文件编码声明注释 2.2 代码缩进2.3 编码规范2.3.1 命名规范…

vim选中内容进入visual模式

描述 有的版本的vim&#xff0c;检测到xterm终端时&#xff0c;会启动鼠标全功能模式&#xff0c;鼠标选中一段文本后&#xff0c;自动进入visual模式&#xff0c;滚动滚轮可以修改选中的位置。可以使用常见的Vim命令来操作它们&#xff0c;例如&#xff1a; y 复制&#xff…

AlphaMissense:预测错义变异的致病性

错义变异或错义变体&#xff08;missense variation或missense variants&#xff09;是改变蛋白质氨基酸序列的遗传变异。致病性错义变异会严重破坏蛋白质功能&#xff0c;在目前观察到的400多万个错义变异中&#xff0c;只有2%在临床上被确定为致病或良性。对剩下的类型不明的…

力扣随机一题 模拟+字符串

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 1910.删除一个字符串中所有出现的给定子字符串【中等】 题目&#xff1a; …

【数据结构与算法】树的遍历,森林遍历 详解

树的先根遍历、后根遍历对应其二叉树的哪种遍历 树的先根遍历对应其二叉树的先序遍历&#xff08;根-左-右&#xff09;。树的后根遍历对应其二叉树的中序遍历&#xff08;左-根-右&#xff09;。 森林的先根遍历、中根遍历对应其二叉树的哪种遍历? 森林的先根遍历对应其二…

Elasticsearch 数据提取 - 最适合这项工作的工具是什么?

作者&#xff1a;来自 Elastic Josh Asres 了解在 Elasticsearch 中为你的搜索用例提取数据的所有不同方式。 对于搜索用例&#xff0c;高效采集和处理来自各种来源的数据的能力至关重要。无论你处理的是 SQL 数据库、CRM 还是任何自定义数据源&#xff0c;选择正确的数据采集…

STM32三种调试工具CMSIS-DAP、J-Link和ST-Link

一.概述 CMSIS-DAP、J-Link和ST-Link均是嵌入式处理器的开发调试工具。 CMSIS-DAP是一种轻量级调试接口&#xff0c;旨在实现开源的开发调试。它的优点是使用方便、通用性好、成本低&#xff0c;还支持固件的在线升级。 J-Link是一款由德国公司SEGGER Microcontroller开发的…

《Deep learning practice》learning notes

学习笔记&#xff1a; 【公开课】旷视x北大《深度学习实践》&#xff08;28课时全&#xff09; R Talk | 旷视科技目标检测概述&#xff1a;Beyond RetinaNet and Mask R-CNN 文章目录 Lecture 1: Introduction to Computer Vision and Deep Learning&#xff08;孙剑&#x…

Semaphore(应对并发问题的工具类)

Semaphore Semaphore字面意思是信号量的意思&#xff0c;它的作用是控制访问特定资源的线程数目。 举例&#xff1a;现在有一个十字路口&#xff0c;有多辆汽车需要进经过这个十字路口&#xff0c;但是我们规定同时只能有两辆汽车经过。其他汽车处于等待状态&#xff0c;只要…

系统架构师考点--数据库系统

大家好。今天我来总结一下数据库系统的相关考点。本考点一般情况下上午场考试占3-5分&#xff0c;下午场案例分析题也会出现。 一、数据库系统 数据&#xff1a;数据库中存储的基本对象&#xff0c;是描述事物的符号记录。数据的种类:文本、图形、图像、音频、视频、学生的档…

AI/ML 数据湖参考架构架构师指南

这篇文章的缩写版本于 2024 年 3 月 19 日出现在 The New Stack 上。 在企业人工智能中&#xff0c;主要有两种类型的模型&#xff1a;判别模型和生成模型。判别模型用于对数据进行分类或预测&#xff0c;而生成模型用于创建新数据。尽管生成式人工智能最近占据了新闻的主导地…

【PyTorch】【机器学习】图片张量、通道分解合成和裁剪

一、导入所需库 from PIL import Image import torch import numpy as np import matplotlib.pyplot as plt二、读取图片 pic np.array(Image.open(venice-boat.jpg))上述代码解释&#xff1a;先用Image.open()方法读取jpg格式图片&#xff0c;再用np.array()方法将图片转成…