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

news2024/11/26 20:40:09
论文名称发表时间发表期刊期刊等级研究单位

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年提出一个通用模糊测试系统 Fuzz4Al l,可以自动对不同编程语言编写的项目进行模糊测试。具体来说,该技术使用 GPT-4 和 StarCoder 作为输入生成和变异引擎。由于 LLM 对各种编程语言示例进行了广泛的预训练,因此 LLM 能够理解不同语言的语法和语义。Fuzz4All扩展了这一功能,可以对不同语言编写的项目、程序、编译器甚至 API 库进行模糊测试,大大提高了模糊测试的通用性。

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

4. 未来研究趋势及挑战

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

4.2 预训练数据的讨论

4.3 时间消耗的讨论

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

4.5 实现全自动化的讨论

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

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

相关文章

苹果电脑病毒怎么处理 苹果电脑病毒查杀用什么软件 苹果电脑病毒软件

苹果电脑并不是完全免疫于病毒的威胁,尤其是在使用了一些不安全的软件或网站后,可能会感染一些恶意程序,导致电脑运行缓慢,数据丢失,甚至被黑客控制。那么,苹果电脑病毒怎么处理呢?苹果电脑病毒…

Confluence 可以用哪些开源知识库替换?盘点主流的11款

Confluence 本身并不是开源的,而是一个基于订阅模式的商业产品。而类似于confluence的有11款知识库软件,包括:PingCode 知识库、BlueSpice、MediaWiki、DokuWiki、Nuclino、ClickUp、XWiki、BookStack、TiddlyWiki、Bloomfire 和 Quip。 虽然…

C# 通过Win32API设置客户端系统时间

在日常工作中,有时可能会需要获取或修改客户端电脑的系统时间,比如软件设置了Licence有效期,预计2024-06-01 00:00:00到期,如果客户手动修改了客户端电脑时间,往前调整了一年,则软件就可以继续使用一年&…

c++编程(19)——STL(5)容器适配器

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 适配器adaptorstackqueuepriority_queue传送门: 适配器adaptor 适配器看起来像一个容器,实际上adaptor并不属于容器的范畴,更像是一种专门用于某种容器的接口。 常用的适…

【实用工具】Skyworking

文章目录 一、Skywalking概述1.1 核心功能1.2 指标概述1.2.1 一些常用指标1.2.2 指标的使用方式 二、仪表盘2.1 APM2.1.1 全局维度的指标2.1.2 服务维度的指标2.1.3 实例维度的指标2.1.4 端点维度的指标 2.2 数据库2.3 其他 三、追踪3.1 界面划分3.2 请求链路界面分析3.3 一般流…

保姆级pycharm远程连接linux服务器

1、登录服务器,创建账号。 一般都是管理员账户登录,创建自己的账号。如果不需要,可跳过这步。 打开MobaXterm,点击左上角Session创建会话。 再点击左上角SSH,分别输入服务器ip和账号,最后点ok,进…

【第16章】Vue实战篇之跨域解决

文章目录 前言一、浏览器跨域二、配置代理1.公共请求2.代理配置 总结 前言 前后端项目分离衍生出浏览器跨域问题,开发之前我们通过配置代理解决这个问题。 一、浏览器跨域 浏览器的跨域问题主要是由于浏览器的同源策略导致的。同源策略是浏览器的一个安全功能&…

Web应用安全测试-综合利用(一)

Web应用安全测试-综合利用(一) 文章目录 Web应用安全测试-综合利用(一)1.跨站脚本攻击(XSS)漏洞描述测试方法GET方式跨站脚本Post方式跨站脚本 风险分析风险等级修复方案总体修复方式对于java进行的web业务…

openGauss 6.0高可用测试,系统上线前很关键

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局

一、目的&#xff1a;应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…

编程之道:程序员必备的五大职业素养

引言 在数字化时代&#xff0c;程序员的角色变得日益重要。他们不仅是代码的编写者&#xff0c;更是技术变革的推动者。然而&#xff0c;成为一名优秀的程序员&#xff0c;除了技术能力之外&#xff0c;还需要具备一系列职业素养。本文将探讨程序员在职业生涯中应具备的五大职业…

美国犹他州立大学《Nature Geoscience》(IF=18)!揭示草本植物对土壤有机碳的重要贡献!

随着全球变暖的影响越来越显著&#xff0c;碳固定成为了一个备受关注的话题。在这个背景下&#xff0c;热带草原被认为是一个潜在的碳固定区域。然而&#xff0c;目前的研究主要关注于在热带草原中种植树木&#xff0c;以期望增加土壤有机碳含量。但是&#xff0c;热带草原中的…

万字长文详述 - 带你了解Jvm虚拟机运行时数据区

JVM虚拟机&#xff0c;对大部分Java程序员而言&#xff0c;是既熟悉又陌生的存在&#xff0c;Java程序在虚拟机的自动内存管理机制帮助下&#xff0c;减少了绝大部分的内存管理工作。但也正是因为如此&#xff0c;虚拟机如果出现了内存溢出或者泄露的情况&#xff0c;问题排查、…

NettyのEventLoopChannel

Netty的重要组件&#xff1a;EventLoop、Channel、Future & Promise、Handler & Pipeline、ByteBuf 本篇主要介绍Netty的EventLoop和Channel组件。 1、Netty入门案例 服务器端的创建&#xff0c;主要分为以下步骤&#xff1a; 创建serverBootstrap对象。配置服务器的…

10.Docker Compose容器编排

文章目录 Compose简介安装和卸载步骤核心概念compose文件两要素 使用步骤Compose常用命令微服务测试本地编码打包编写Dockerfile文件构建镜像 不使用Compose调试使用Compose调试WordPress测试验证增量更新 Compose简介 ​ docker建议我们每一个容器中只运行一个服务,因为docke…

Misc之图片隐写

前几天忙高数和c考试去了。。。Web毫无进展&#xff0c;学学这个放松一下 一、工具准备 这里目前使用的工具为kali上的工具和安装在电脑上的Winhex&#xff0c;010editor&#xff0c;Stegsolve 二、png图片隐写 这里我就直接用题目学习了&#xff0c;也是参考了csdn上大佬的…

05通讯录管理系统——添加联系人

功能描述&#xff1a;实现添加联系人功能&#xff0c;联系人上限为1000人&#xff0c;联系人信息包括姓名、性别、年龄、联系电话、家庭住址。 添加联系人实现步骤&#xff1a; 1.设计联系人结构体 2.设计通讯录结构体 3.main函数中创建通讯录 4.封装添加联系人函数 5.测…

软考系统规划与管理师伴读脑图第9章

周末发系统规划与管理师的试听视频&#xff0c;占用了发送次数&#xff0c;所以上周的脑图推迟了今天发出。 不知不觉已经发到了第9章&#xff0c;感叹这就是坚持积累下来的力量&#xff0c;其实考试也是一样的道理。

《骑行健身:“柳叶刀”研究揭示的健康与经济双赢策略》

在这个物价飞涨、经济压力日益加重的时代&#xff0c;普通人如何在不增加额外负担的情况下提升生活质量&#xff1f;《柳叶刀》的最新研究为我们揭开了一个意想不到的秘密&#xff1a;坚持健身&#xff0c;尤其是骑行&#xff0c;竟等同于每年为自己赚取了一笔不小的财富。这一…

多叉树的DFS深度优先遍历,回溯法的基础算法之一

一、前言 多叉树一般用于解决回溯问题。 想必大家都学过二叉树&#xff0c;以及二叉树的深度优先遍历和广度优先遍历&#xff0c;我们思考&#xff1a;能不能将二叉树的DFS转化为多叉树的DFS&#xff1f; 二、多叉树的结构 多叉树的本质&#xff0c;就是一棵普通的树&#x…