实验内容
在核心 Linux 实用程序中查找错误,使用 AFL 对 GNU binutils 工具集进行模糊测试
实验工具
- AFL(American Fuzzy Lop)是由安全研究员 Micha-Zalewski 开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。
实验步骤
安装 AFL
从官网下载最新版的源码(latest version),解压后进入所在目录。
执行以下命令进行编译和安装:
|
下载测试用例
CVE 中可以看到 gnu binutils 层出不穷。
binutils 对于 AFL 入门非常有用,因为它很简单、易设置,是一个值得摸索的目标。
|
安装好后,可在当前目录下看到编译好的 binutils:
选择 seed
注意事项如下:
种子文件应该是目标应用程序的有效输入文件。 虽然无效输入有时会产生有趣的错误和崩溃,但有效的输入会更快地找到更多路径。
由于程序处理较小的输入文件通常花费较少的时间,因此种子文件应该很小<1kb,得到每秒更多执行。
如果存在大量代码覆盖或功能重叠,则使用多个种子文件的效率可能会很低。 AFL 包括称为 AFL-cmin 和 AFL-Tmin 的语料库最小化工具,它们将减少多文件种子语料库的大小。
对于常见的文件和数据格式,可使用原始
testcase\
目录下的 AFL 包含的种子文件。
模糊测试
要避免将崩溃误解为挂起,运行如下:
echo core > /proc/sys/kernel/core_pattern
开始 Fuzz
afl-fuzz -i your_testcases -n -o out ./binutils/bin/readelf @@