fuzz papers总结

前言

这篇文章是简单的对一些paper进行总结,大概会持续更新吧

NEUZZ: Efficient Fuzzing with Neural Program Smoothing

NEUZZ: Efficient Fuzzing with Neural Program Smoothing

这篇文章博客里面有翻译

NEUZZ 一篇论文的翻译

paper用了一种程序平滑化的方法,用afl生成的seeds作为训练数据,训练神经网络,输出对应的bitmap信息,然后利用梯度等信息来生成新的测试样例,提高边覆盖率

开源项目neuzz

Angora: Efficient Fuzzing by Principled Search

paper使用了多种技术来提升fuzz的效率

  • Context-sensitive branch count afl使用的context-free的技术,而Context-sensitive 的话能提供更多信息给fuzzer,使得其能做出更好的决策
  • Byte-level taint tracking 文章自己实现了一种tracking的方法,能判断输入数据哪一部分是被用于conditional statement中,然后专门去变异这部分
  • Search algorithm based on gradient descent 通过taint tracking找到哪一部分是在conditional statement中之后,就用gradient descent来找到能到达未探索边的输入数据
  • Input length exploration 简单来说就是在taint tracking中,找到那些read-like函数调用,假如这些函数的返回值被用于conditional statement中,并且conditional statement不通过,则尝试增加输入的数据

开源项目Angora

Faster Fuzzing: Reinitialization with Deep Neural Models

Faster Fuzzing: Reinitialization with Deep Neural Models

paper说的是利用GAN和LSTM来提高seeds的质量,使得afl能探索到更多的路径,首先是先fuzz一段时间,然后用生成的seeds除重,喂给GAN,然后GAN生成新的测试样例,然后用这里样例作为初始化数据,进行fuzz,LSTM也是差不多,然后GAN的效果好一点

这个项目没找到开源的代码

Designing New Operating Primitives to Improve Fuzzing Performance

Designing New Operating Primitives to Improve Fuzzing Performance

这篇paper讲的是在不修改fuzzer的策略的前提下,通过各种优化,使得fuzzer在多核下的性能提升

文章介绍了三个提升的方法

  • Snapshot System Call paper里面介绍,fork在fuzzer中是一个性能损耗严重的部分,因此他们提出了一个snapshot的syscall,非常轻量级的设计,详细可以看文章的介绍
  • Dual File System Service 使用memory disk,减少读写小文件的overhead,当memory disk空间不多的时候,还会把文件移动回真正的disk,建立一个链接
  • Shared In-memory Test-Case Log 这个其实是对AFL原本多client协作的改进吧,详细可以看文章

开源项目perf-fuzz

EnFuzz: From Ensemble Learning to Ensemble Fuzzing

EnFuzz: From Ensemble Learning to Ensemble Fuzzing

这篇paper讲得是利用集成学习,将几个不同的fuzzer组合在一起,共享其生成的语料库,和单纯多开几个SLAVE相比,效果好很多

开源项目enfuzzer

看了下并没有真正的源码,只是给了一个网站,但是测试了下,连机器都开不了……

CollAFL: Path Sensitive Fuzzing

CollAFL: Path Sensitive Fuzzing

这篇paper提出了一种新的路径hash方法,能有效地消除bitmap中的hash碰撞,使得fuzzer能做出更精确的决策,从而使得路径探索得更好

找了下,并没有开源的项目…………….

T-Fuzz: fuzzing by program transformation

T-Fuzz: fuzzing by program transformation

这篇paper提出了一种方法,将某些check去除,然后直接跑后面的流程,然后再用符号执行去解决这些check,有些check用符号执行解决不了的话,可以用人工去看

这个有开源的项目

T-Fuzz

Skyfire: Data-Driven Seed Generation for Fuzzing

Skyfire: Data-Driven Seed Generation for Fuzzing

这篇paper介绍了一种方法,是用于XML,JavaScript等解析的Fuzz,首先是收集目标的语料库,然后训练出一个PCSG(probabilistic context-sensitive grammar),然后利用其去生成新的seed去fuzz

开源项目

skyfire

REDQUEEN: Fuzzing with Input-to-State Correspondence

REDQUEEN: Fuzzing with Input-to-State Correspondence

这篇文章感觉就是各个paper的集合,但是他还自己改进了挺多东西,例如在他之前自己实现的k-afl,一个面向内核的fuzzer的基础上进行改进,对于任何binary都无需源码,直接fuzz,还借鉴了T-Fuzz的思想,并在此之上进行改进

开源项目
redqueen

NSTRIM: Lightweight Instrumentation for Coverage-guided Fuzzing

NSTRIM: Lightweight Instrumentation for Coverage-guided Fuzzing

这篇文章是利用简化插桩的数量来提高fuzz的效率,利用了llvm,感觉有点像编译原理的东西

开源项目

instrim

Enhancing Memory Error Detection for Large-Scale Applications and Fuzz Testing

Enhancing Memory Error Detection for Large-Scale Applications and Fuzz Testing

这篇文章是讲提高内存错误检测来提高发现漏洞的几率的,利用了page alias,提高了redzone的大小,还使用了Copy on Write等技术去提高性能

开源项目

MEDS

VUzzer: Application-aware Evolutionary Fuzzing

VUzzer: Application-aware Evolutionary Fuzzing

这篇文章是利用静态分析和动态分析来提高fuzz的策略,利用了静态分析和污点分析等技术,能检测出Magic bytes和Markers之类的位置

开源项目

vuzzer

Full-speed Fuzzing: Reducing Fuzzing Overhead through Coverage-guided Tracing

Full-speed Fuzzing: Reducing Fuzzing Overhead through Coverage-guided Tracing

这篇文章讲的是提高fuzz效率的,大概是说,很多Fuzzer的获取代码覆盖率的overhead比较大,他们提出一种办法,在编译的程序里面插入一个中断指令,触发了这个指令之后就把这个指令给去掉,这就是说,如果触发了这个中断,就是到达了以前未到达过的代码,这个输入很可能提高了代码覆盖率,利用这个方法,能将获取代码覆盖率的overhead降到几乎为0

这个想法感觉挺不错,但是感觉还是有缺陷,例如有两个分支A、B,假如一个输入覆盖了A,另外一个输入覆盖了B,还有一个输入A和B都覆盖到了,很明显最后那个输入比较有价值,但是在这个方法的测量下,最后那个输入并没有提高覆盖率

开源项目

UnTracer-AFL