使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(二)——详细使用说明(README.txt)

不完全译自:http://lcamtuf.coredump.cx/afl/README.txt
转载请注明出处。

随手翻译的笔记,还有待继续整理。

AFL算法

1) 把用户提供的初始测试用例加载到队列(queue)中;
2) 从队列中获取下一个测试输入文件;
3) 在保持程序行为的前提下,尝试修剪(trim)测试用例(体积)到最小;
4) 使用传统的模糊测试策略中的各种已有的研究方法,重复变异文件;
5) 如果生成的变异结果能够驱动新的状态转换(通过插桩记录),则把这一测试用例加入到队列中;
6) 调到第2步。

已经发现的测试用例也会周期性地被新的、能驱动更高代码覆盖率的测试用例替代,或者使用若干其他插桩层驱动的最小化的措施删除。

作为模糊测试步骤的副作用(side effect),工具生成比较小的,自足的测试用例语料。这些是非常有用的。

因为以上的措施,使得AFL能比盲fuzz或者只有代码覆盖率驱动的工具具有更好地性能。

使用AFL对程序插桩

在有被测试程序源码的前提下,可以直接使用AFL替代gcc或者clang作为编译器,AFL的插桩具有非常低的性能影响。加上其他的afl-fuzz性能优化措施,大部分程序能被快速fuzzed,甚至会比传统的工具更快。

重新编译目标程序的配置可能会因不同程序而不同,但通用的步骤是:

$ CC=/path/to/afl/afl-gcc ./configure
$ make clean all

对C++程序,设置为CXX=/path/to/afl/afl-g++

对clang编译的程序,可以用同样的方式设置,如afl-clang和afl-clang++。clang用户同样可以选择利用llvm_mode/README.llvm提到的高性能的插桩模式。

当测试lib库的时候,需要找到或者写入简单程序,从stdin或者从文件读取数据,传入到被测试的lib库中。所以,以把被插桩的lib库以静态的方式连接到可执行文件显得至关重要。或者确保正确的.so文件在程序运行时加载(通过LD_LIBRARY_PATH)。最简单的选择是使用静态编译,通常采用以下方式:

$ 
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者:k0shl ####一些环境说明: 编译环境:Windows 10 x64 build 1607 项目IDE:VS2013 测试环境:Windows 7 x86、Windows 10 x86 build 1607 参数介绍: "-l" :开启日志记录模式(不会影响主日志记录模块) "-s" :驱动枚举模块 "-d" :打开设备驱动的名称 "-i" :待Fuzz的ioctl code,默认从0xnnnn0000-0xnnnnffff "-n" :在探测阶段采用null pointer模式,该模式下极易fuzz 到空指针引用漏洞,不加则常规探测模式 "-r" :指定明确的ioctl code范围 "-u" :只fuzz -i参数给定的ioctl code "-f" :在探测阶段采用0x00填充缓冲区 "-q" :在Fuzz阶段不显示填充input buffer的数据内容 "-e" :在探测和fuzz阶段打印错误信息(如getlasterror()) "-h" :帮助信息 ####常用Fuzz命令实例: kDriver Fuzz.exe -s 进行驱动枚举,将CreateFile成功的驱动设备名称,以及部分受限的驱动设备名称打印并写入Enum Driver.txt文件中 kDriver Fuzz.exe -d X -i 0xaabb0000 -f -l 对X驱动的ioctl code 0xaabb0000-0xaabbffff范围进行探测及对可用的ioctl code进行fuzz,探测时除了正常探测外增加0x00填充缓冲区探测,开启数据日志记录(如增加-u参数,则只对ioctl code 0xaabb0000探测,若是有效ioctl code则进入fuzz阶段) kDriver Fuzz.exe -d X -r 0xaabb1122-0xaabb3344 -n -l 对X驱动的ioctl code 0xaabb1122-0xaabb3344范围内进行探测,探测时采用null pointer模式,并数据日志记录

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值