G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

admin 2023年9月22日23:14:13评论82 views字数 1656阅读5分31秒阅读模式

G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing



论文:https://arxiv.org/pdf/2308.04748.pdf


今天分享一篇来自伊利诺伊大学厄巴纳-香槟分校(UIUC)的一篇研究论文 Universal Fuzzing via Large Language Model,提出了利用大语言模型(LLMs)来辅助 fuzzing 中 input 的生成与变换的思路。



01

模糊测试



传统的模糊测试(fuzzing)工具可以分为生成型( generation-based )和变异型( mutation-based )两种,但它们都存在一些问题:

与目标系统和编程语言紧密耦合(C1):传统的模糊测试工具通常专为特定的编程语言或目标系统设计。开发这样的工具非常耗时,并且跨语言迁移性、可扩展性都不高

缺乏对系统演进的支持(C2):现实世界中的系统不断演进,不断添加新的特性到输入语言中。传统的模糊测试工具通常仅适用于特定版本的语言或系统。当目标系统演进或引入新特性时,这些工具可能失效,无法识别新的漏洞。例如,为旧版本语言设计的工具可能无法有效测试最新语言特性。

生成能力受限(C3):生成型和变异型模糊测试工具都有生成多样化测试输入的限制。generation-based工具依赖预定义的语法和语义规则来生成有效的test case,但这些规则可能会限制生成输入的质量;mutation-based工具受mutation算法和初始seed的质量限制。获取高质量的seed可能很困难,导致覆盖率受到限制。

02

Fuzz4ALL


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

如上图,是本文开发的工具fuzz4all的流程图,主要由两部分构成

  • Autoprompting:这一步先用一个distillation LLM分析用户输入(包括系统文档、测试用例等)随后用generation LLM生成可以用来fuzz的promote

  • Fuzzing Loop:这一步通过fuzz的结果,用generation LLM不断进行Mutating,完成fuzz的循环。


03

具体流程


  • 首先生成一系列的candidate prompts

  • 随后通过一个简单的fuzzing test,对每一个candidate prompt打分。这也是经典的AFL的fuzzing方法。

  • 随后进入fuzz,通过随机选择:generate-new(产生新input), mutate-existing(变异已有input), and semantic-equiv(使用语义相同的测试用例) 中的一个来进行fuzz变换


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

  • 最后,通过用户自定义oracle,来检测crash等信息。



04

实践与测试


总体来说,Fuzz4ALL比传统的fuzz工具对于代码的覆盖率高36.8%,并且找到了76 bugs,其中47 个bug已经被确认是之前未知的。项目链接: https://fuzz4all.github.io

Fuzz4ALL只包含872行python+GPT4/StarCoder,但是效果却非常好。


下表是测试的目标,总共测试了6种语言,对应7个传统fuzzing工具

G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

下表是测试的目标,可以看到,在24小时测试中,对于不同的语言,Fuzz4ALL都有很好的表现。


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing


随后我们来看一下Fuzz4ALL漏洞挖掘的能力,


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

下面是几个样例分析


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

GCC漏洞,在使用noexcept时会崩溃,传统工具不支持noexcept特性因此无法检测出


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

clang漏洞,在使用不同寻常的function declaration方法时会崩溃。传统工具很少构建decltype函数,因此很难触发这种情况。


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

go语言漏洞,参数设定为nil时会崩溃而非产生报错信息。这个漏洞也可以被其他fuzzing工具发现。


G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

Qiskit漏洞,在name=crz时,会产生一个名为crz的output file,此系统会将文件名作为索引。然而 crz实际上是QASM language中的一个关键字。这里用到了LLM能够依据上下文产生有含义的变量名的特性。


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzing

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月22日23:14:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2023-09-22 LLMs 支持的通用 Fuzzinghttps://cn-sec.com/archives/2061108.html

发表评论

匿名网友 填写信息