模糊测试工具 American Fuzzy Lop (一)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模糊测试工具 American Fuzzy Lop (一)相关的知识,希望对你有一定的参考价值。
参考技术A 顾名思义, American Fuzzy Lop 是一款用于测试程序安全性的模糊测试工具, 官网简介如下:简单来说, 这款工具能够在程序运行的时候注入自己的code, 然后自动产生testcase进行模糊测试.
无需配置, 速度快, 可以应对复杂的程序.
上面的例子中, 需要2^32 或者4百万个尝试才能出发一次崩溃, 这显然效率是很低的. 如果我们一秒钟尝试1000次, 那么出发崩溃所需要的时间就是 2^32/1000/3600/24 = 49 天.
下面我们来尝试一下用AFL来进行模糊测试.
首先编写一个目标程序.
然后编译一下
因为这个程序是读文件的, 所以我们得给他一个测试用例.
然后开跑!
通过 run time - last uniq crash的时间可以看出, afl只用了20秒就将程序crash了. 当然, 这是在实验室机器跑的, 如果是一般的机器的话, 时间可能久一点, 我在自己的Mac上跑的时间是15分钟. 对比起暴力测试方法要用49天, afl对效率的提高不止一点半点.
American Fuzzy Lop
1.安装
下载源码(http://lcamtuf.coredump.cx/afl/)编译安装。
2.插桩
gcc/g++重新编译目标程序的方法是:
CC=/path/to/afl/afl-gcc ./configure
make clean all
对于一个C++程序,要设置:
CXX=/path/to/afl/afl-g++.
afl-clang和afl-clang++的使用方法类似。
3.运行
afl-fuzz -i dirofin -o dirofout pathofprogram
afl-fuzz负责进行fuzzing的过程,需要指定一个初始test cases的目录、一个存放findings的目录和一个目标程序的目录。
对那些直接从stdin读取输入的目标程序来说,语法如下:
$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program […params…]
对从文件读取输入的目标程序来说,要用“@@”,语法如下:
$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@
也可以用-f选项,把变异数据写到一个指定的文件。
没有被instrument的目标程序,可以用qemu模式(-Q)进行fuzz,或者直接用blind-fuzzer模式(-n)。
使用-t和-m选项,设置fuzz过程的默认timeout和memory limit。
一般afl-fuzz的fuzzing过程会持续几天时间,如果想要尽早结束,可以使用-d选项。
以上是关于模糊测试工具 American Fuzzy Lop (一)的主要内容,如果未能解决你的问题,请参考以下文章
基于matlab实现生成模糊fis文件,包括模糊隶属函数和模糊规则等,不使用fuzzy工具箱
ElasticSearch05_模糊匹配背景fuzzy核心参数说明编写JAVA代码实现纠错
机器学习笔记: 聚类 模糊聚类与模糊层次聚类(论文笔记 Fuzzy Agglomerative Clustering :ICAISC 2015)