前言
这篇文章是简单的对一些paper进行总结,大概会持续更新吧
NEUZZ: Efficient Fuzzing with Neural Program Smoothing
NEUZZ: Efficient Fuzzing with Neural Program Smoothing
这篇文章博客里面有翻译
paper用了一种程序平滑化的方法,用afl生成的seeds作为训练数据,训练神经网络,输出对应的bitmap信息,然后利用梯度等信息来生成新的测试样例,提高边覆盖率
开源项目neuzz
Angora: Efficient Fuzzing by Principled Search
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用符号执行解决不了的话,可以用人工去看
这个有开源的项目
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
开源项目
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,感觉有点像编译原理的东西
开源项目
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等技术去提高性能
开源项目
VUzzer: Application-aware Evolutionary Fuzzing
VUzzer: Application-aware Evolutionary Fuzzing
这篇文章是利用静态分析和动态分析来提高fuzz的策略,利用了静态分析和污点分析等技术,能检测出Magic bytes和Markers之类的位置
开源项目
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都覆盖到了,很明显最后那个输入比较有价值,但是在这个方法的测量下,最后那个输入并没有提高覆盖率
开源项目