G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing

admin 2023年10月30日02:05:13评论45 views字数 2378阅读7分55秒阅读模式

https://mpi-softsec.github.io/papers/NDSS24-chatafl.pdf


今天介绍一篇NDSS 2024论文,内容是基于LLM的协议fuzzing工作,来自德国mpi,主要的想法是利用LLM对协议进行深度理解,结合经典工具AFLNet(2020年的工具)来提升fuzzing效果。


本文提出了ChatAFL工具,它在state 覆盖率等方面有明显的提升,并且找到了9个新的漏洞


https://github.com/ChatAFLndss/ChatAFL




01

Protocol Fuzzing


互联网协议(Protocol)定义了在计算机网络中进行通信和数据交换的方式和规范。这些协议规定了数据如何被封装、传输、路由和接收,以确保不同设备和系统之间的互联网通信是有序和有效的。例如HTTP、SMTP、FTP、TCP、IP等。


为了促进互联网参与者采用某一协议,几乎所有流行的、广泛使用的协议都在公开可用的Document中进行了规范。然而,这些Document通常有数百页之多,而且是用自然语言编写的。因此这些Document机器是无法理解的,传统的Protocol Fuzzing 需要大量的人力来“翻译”这些Document给机器,造成很大的限制。毕竟Fuzzing的过程可能长达几天甚至几个月,人工不可能随时盯着进行调整。


LLMs的出现给出了解决这个问题的新思路,本文中,作者利用LLMs在三个方面提升fuzzing的效果:

    • extract machine-readable grammar 

    • increase the diversity of input

    • break out of a coverage plateau(覆盖率停滞)

      G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing





02

 Case Study


为了解释更加清楚,作者使用Real Time Streaming Pro- tocol (RTSP)这个协议为例,对于LLMs(gpt3.5)的prompt进行详细设计与介绍,并且测试了LLMs的效果如何。


上文中提到了LLMs提升fuzzing效果的三个方面,这里分开来根据这个例子介绍


 2.1  语法抽取 

 RTSP的语法非常复杂,两个作者花了8小时才读完文档,并建立ground truth,建立的语法格式如下

G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing

作者给LLMs提供了50个例子,并手动检测了LLMs生成的结果,10种message中,LLMs生成的9种都完全正确,说明LLMs在进行语法抽取上表现出色。


 2.2  输入强化

对于Fuzzing来说,初始的seed质量很大程度上决定了后续Fuzzing可以达到的覆盖率,因为后续变化都是根据初始seed变换而来。因此,作者也尝试使用LLMs来优化初始输入的质量。


作者让LLMs生成了100个随机的输入,并且用两个指标测试输入的质量:

  1.  输入语法正确性 (是否可以直接运行)

  2. 输入顺序正确性  (输入是否放在合适的state)


其中第二条中的state指的是,在协议中,往往存在一个或多个状态机(如下图),用于解析用户输入,在状态机的不同state,需要使用不同的输入,因此LLMs是否能识别这个也是一个判断因素。


G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing

经过测试,LLMs生成的99%的input都能满足上面两条需求,效果很好。



 2.3  引导编译

传统协议fuzzing的一个主要难点就是,由于机器无法识别state,只能通过类似随机变异等方式尝试直到出现state变化,很难从一个state有计划地到达下一个state,这会导致覆盖率很低。作者在这里尝试使用LLMs来解决这个问题,引导变异到达不同的state。


下图是测试结果,其中灰色区域表示LLMs生成的结果是能到达新的state,橘红色表示不能到达新的state,蓝色表示错误输入,可以看到,这个方面,LLMs也有很好的表现。

G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing


03

 Prompt

 3.1 语法抽取

下图是作者在语法抽取阶段使用的prompt,这里prompt用了两个例子而非一个,可以减少LLM对于单独例子的依赖。

G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing

抽取完成之后,将每一个语法解析存进一个数据集G,对于一个输入,先和G里面的内容进行正则匹配,匹配成功后,每一个标记为<Value>的部分都可以进行变化。

 3.2 输入强化

下图是对于初始seeds扩充的prompt,作者发现,提供真实的message sequence,也就是Fuzzing中自带的seeds,LLMs可以达到很好的学习效果。


这里要注意一下最后一行划线的语句,写成“the modified sequence of client requests is:” 让LLM进行补充,这样生成的结果就可以直接拿来使用。

G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing

 3.3  引导编译

最后是对于变异的引导,这里,作者使用的方法是,如果Fuzzing在一段时间内不能产生任何新的覆盖,就让LLM生成新的request,来帮助达到新的state。

这里要提供给LLM卡住的进程的history以及要求LLM从之前的seeds里面找format来保证输出格式正确。


G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing


04

 结论&总结


最终,本文工具与最先进的fuzzers AFLNET和NSFUZZ相比。CHATAFL分别提升了47.60%和42.69%的state转换率,29.55%和25.75%的state覆盖率,以及5.81%和6.74%的代码覆盖率。除了增强的覆盖率,CHATAFL还在现实协议中发现了9个独立的以前未知的漏洞,而AFLNET和NSFUZZ分别只发现了其中3个和4个。


下一篇公众号文章,我或许会总结一下LLMs prompt的写法,并进行一些实际测试。之前使用LLMs会产生很多的随机结果,或者叫“胡言乱语”,想要很好的应用在实际中,还是需要更详细的学习一下prompt的写法。

原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzing

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月30日02:05:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2023-10-27 LLM支持的协议Fuzzinghttps://cn-sec.com/archives/2153425.html

发表评论

匿名网友 填写信息