关于AFL fuzz

AFL fuzz是一个模糊测试工具,它封装了一个GCC/CLang编译器,用于对被测代码重新编译的过程中进行插桩。插桩完毕后,AFL fuzz就可以给其编译过的代码输入不同的参数参数,跟踪被测代码的执行路径,并判定对输入的变异能否触发新的已知或未知执行路径。

某些情况下,你可能不想重新编译被测代码,或者根本没有被测程序的源代码,因此无法用编译的方式插桩。针对这种情况,AFL fuzz提供了QEMU模式,QEMU即“user emulation”的缩写,相当于是黑盒测试,主要用于压力测试(被测系统性能将下降2~5倍,但相比如DynamoRIO、PIN这些工具,QEMU的性能还算不算了)。

安装

AFL fuzz的安装非常简单,只需要去官网下载最新版本的源代码,解压缩后依次执行下面的指令:

make

sudo make install

若需要使用QEMU模式,参见下面的步骤:

1、使用./build_qemu_support.sh 脚本进行构建,其会自动下载、配置并编译QEMU的二进制代码,此过程比较耗时,且这一过程中需要解决一些依赖包的问题(必须的依赖包:libtool、glib2-devel)。

2、编译完成后,在afl-fuzz的启动参数中加入“-Q”即可启用QEMU模式。

注意:

1、QEMU模式需要较大内存空间,建议的最低配置为200M,负责项目则需要更多。当在afl-fuzz的启动参数中指定的-Q参数时,afl-fuzz会自动设置-m参数,默认值为200M。

2、afl-fuzz适用于linux系统,且不追踪共享库,即:

2-1、对于想要分析的库必须以静态方式链接到可执行二进制文件;

2-2、对于C的标准库及其他一些比较耗费资源而又不必要测试的库则必须以动态方式链接,否则afl fuzz是没有办法不测这些内容的。

示例

已对binutils的模糊测试为例,说明如何使用afl fuzz。

首先,需要下载binutils的源码并解压,进入加压后的文件夹,重写CC编译环境变量的值(如果是C++程序,且用g++而不是gcc进行编译,则修改CXX),修改后即可运行configure脚本,然后编译。

cd ~/binutils-2.25

CC=afl-gcc ./configure

make

注:如果用clang,而不是gcc,则将CC改为afl-clang。

编译完成后,要修改一下配置,使系统将coredump输出到文件,而不是上报给系统的处理程序:

# echo core > /proc/sys/kernel/core_pattern

建一个input文件夹作为afl fuzz的输入,afl fuzz将在这个输入的基础上进行变异,在建立一个out文件夹,作为afl fuzz的输出,afl fuzz会将崩溃、挂起等问题记录到输出文件中:

cd ~/binutils-2.25

mkdir afl_in afl_out

cp /bin/ps afl_in/

接下来,就可以使用afl fuzz进行模糊测试了:

cd ~/binutils-2.25

afl-fuzz -i afl_in -o afl_out ./binutils/readelf -a @@

afl fuzz启动后,我们将看到如下界面:

AFL Fuzz安装及完成一次简单的模糊测试的更多相关文章

  1. Mahout 0.10.1安装(Hadoop2.6.0)及Kmeans测试

    1.版本和安装路径 Ubuntu 14.04 Mahout_Home=/opt/mahout-0.10.1 Hadoop_Home=/usr/local/hadoop Mavent_Home=/opt ...

  2. Phoenix 安装完的几个简单使用

    Phoenix 安装完之后的一些简单使用: 本屌丝的运行环境是3节点集群,先启动hadoop,每个节点分别启动zookeeper,启动hbase(具体怎么启动这里就不多说了) 进入 phoenix的b ...

  3. 模糊测试(fuzz testing)介绍(一)

    模糊测试(fuzz testing)是一类安全性测试的方法.说起安全性测试,大部分人头脑中浮现出的可能是一个标准的“黑客”场景:某个不修边幅.脸色苍白的年轻人,坐在黑暗的房间中,正在熟练地使用各种工具 ...

  4. 模糊测试(Fuzz testing)

    模糊测试(fuzz testing)是一种安全测试方法,他介于完全的手工测试和完全的自动化测试之间.为什么是介于那两者之间?首先完全的手工测试即是渗透测试,测试人员可以模拟黑客恶意进入系统.查找漏洞, ...

  5. Robot Framework 使用1-环境配置及简单网站兼容性测试(转)

    0.Robot Framework 简介 Robot Framework 是一个通用的自动化测试框架,主要用于“验收测试”和“验收测试驱动开发(ATDD)” (会其它文章中会详细介绍ATDD).它使用 ...

  6. 云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    云优化的概念.Entity Framework 7.0.简单吞吐量压力测试 继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之 ...

  7. Robot Framework 教程 (1) - 环境配置及简单网站兼容性测试

    0.Robot Framework 简介 Robot Framework 是一个通用的自动化测试框架,主要用于“验收测试”和“验收测试驱动开发(ATDD)” (会其它文章中会详细介绍ATDD).它使用 ...

  8. delphi 三层架构简单例子(经测试成功)

    delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...

  9. 简单快捷地测试 JPush API

    随着 JPush API v3版本的推出,加上之前开放的 Report API,JPush API 逐渐切换为比较好的符合 REST API 的规范,从而也很容易地使用一般的 HTTP/REST 工具 ...

随机推荐

  1. Word 插入页码 -- 视频教程(7)

    1. 以本科做的一个课程设计为例 >> 视频教程链接:B站,速度快,清晰 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)

  2. 长乐国庆集训Day5

    T1 方阵 题目 [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑是有一定规律的.兵马俑阵总共有n ...

  3. python笔记:删除列表元素和根据索引查找元素

    查找元素 #查找元素 >>> member=['张三','李四','王五','张麻子'] >>> member[0] '张三' #交换元素 >>> ...

  4. c# EF插入数据报错跟踪代码

    我们在使用EF进行数据库插入的时候或出现一些插入失败的情况,但是具体是哪个字段不符合数据库设计要求无法得知,普通的try catch 无法捕获加上一下方法就可以 try            {    ...

  5. PTA A1017

    A1017 Queueing at Bank (25 分) 题目内容 Suppose a bank has K windows open for service. There is a yellow ...

  6. JS中的逻辑运算符&&、||

    原文:JS中的逻辑运算符&&.|| 1.JS中的||符号: 运算方法: 只要"||"前面为false,不管"||"后面是true还是false, ...

  7. C# vb .net实现旋转特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的旋转特效呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  8. Java服务端口被占用问题

    在改code的时候eclipse突然崩溃了,未响应状态等了好久也没转完,只能结束进程了,再次打开eclipse果然无法启动项目.报的错误是端口被占用. 又不想重启电脑,只能记录下微服务下的卡死清理端口 ...

  9. GO执行shell命令

    Golang执行shell命令主要依靠exec模块 代码为核心逻辑,并非全部 运行命令 cmd1 = exec.Command("ls") if err = cmd1.Run(); ...

  10. misc_register杂项设备

    include/linux/miscdevice.h 这些字符设备不符合预先确定的字符设备范畴 设备主设备号10 struct miscdevice { int minor; //次设备号(如果设置为 ...