AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。其大致流程如下:
1.从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);
2.选择一些输入文件,作为初始测试集加入输入队列(queue);
3.将队列中的文件按一定的策略进行“突变”;
4.如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;
5.上述过程会一直循环进行,期间触发了crash的文件会被记录下来。
AFL常用的变异方式有如下几种:
1.bitflip:按位翻转,1变为0,0变为1
2.arithmetic:整数加/减算术运算
3.interest:把一些特殊内容替换到原文件中
4.dictionary:把自动生成或用户提供的token替换或插入到原文件中
5.havoc:“大破坏”,是前面几种变异的组合
6.splice:“连接”,此阶段会将两个文件拼接起来得到一个新的文件
对AFL做一个简单的实验(项目地址https://github.com/google/AFL/)
解压并编译
插桩编译
准备种子语料库
执行命令
命令会报错,不过属于正常现象,切换到root权限执行报错给出的命令即可。
报错图片
于是执行
然后重新执行测试命令即可
浅谈AFL技术
发布于 2022-05-17 1550 次阅读
Comments | 1 条评论
我天黑黑来暖贴了!