在ClusterFuzz中配置libFuzzer和AFL++模糊测试环境

在ClusterFuzz中配置libFuzzer和AFL++模糊测试环境

clusterfuzz Scalable fuzzing infrastructure. clusterfuzz 项目地址: https://gitcode.com/gh_mirrors/cl/clusterfuzz

前言

模糊测试(Fuzzing)是现代软件安全测试中不可或缺的技术手段。本文将详细介绍如何在ClusterFuzz平台上配置两种主流的覆盖率引导模糊测试工具:libFuzzer和AFL++。通过本文,您将了解如何构建模糊测试目标、创建测试任务以及优化测试效果的关键技巧。

环境准备

编译器要求

两种模糊测试工具都需要使用Clang编译器提供的插桩功能:

  1. libFuzzer:需要Clang 6.0或更高版本
  2. AFL++:同样基于Clang,但需要额外构建

建议使用尽可能接近最新版本的Clang编译器,以获得最佳性能和最新功能。设置环境变量以便后续使用:

export CC=/path/to/clang
export CXX=/path/to/clang++

平台支持

  • libFuzzer:支持Linux、macOS和Windows
  • AFL++:仅支持Linux平台

构建模糊测试目标

libFuzzer构建方法

libFuzzer是最容易构建的模糊测试工具之一。基本构建命令如下:

$CXX -fsanitize=address,fuzzer fuzzer.cc -o fuzzer

构建完成后,可以进行简单测试:

./fuzzer -runs=10

最后打包构建结果:

zip fuzzer-build.zip fuzzer

AFL++构建方法

AFL++的构建过程稍复杂,需要先构建FuzzingEngine库:

# 构建afl-fuzz和FuzzingEngine.a
./build_afl.bash

然后编译目标程序:

$CXX -fsanitize=address -fsanitize-coverage=trace-pc-guard fuzzer.cc FuzzingEngine.a -o fuzzer

测试构建结果:

AFL_SKIP_CPUFREQ=1 ./afl-fuzz -i $INPUT_CORPUS -o output -m none ./fuzzer

最后打包所有必要文件:

zip fuzzer-build.zip fuzzer afl-fuzz afl-showmap

创建测试任务

在ClusterFuzz中创建模糊测试任务时,任务名称必须包含特定标识:

  • libFuzzer任务:名称中必须包含"libfuzzer"
  • AFL++任务:名称中必须包含"afl"

同时,任务名称还应包含使用的检测器类型(如asan、msan或ubsan)。例如:

  • libFuzzer任务示例:"libfuzzer_asan_my_project"
  • AFL++任务示例:"afl_asan_my_project"

创建任务步骤:

  1. 在Jobs页面填写"ADD NEW JOB"表单
  2. 填写名称和平台(LINUX)
  3. 在"Select/modify fuzzers"字段中选择对应的模糊测试器
  4. 根据选择的模糊测试器使用相应模板
  5. 上传构建好的zip文件作为"Custom Build"
  6. 点击"ADD"按钮添加任务

优化模糊测试效果

语料库修剪

为防止语料库无限增长,必须启用每日语料库修剪功能。在libFuzzer ASan任务的环境字符串中设置:

CORPUS_PRUNE = True

种子语料库

可以上传包含样本输入的zip文件作为种子语料库。种子语料库文件必须:

  • 与模糊测试目标位于同一目录
  • 命名为<fuzz_target>_seed_corpus.zip格式

字典文件

字典是模糊测试过程中可以插入的令牌列表。字典文件必须:

  • 与模糊测试目标位于同一目录
  • 命名为<fuzz_target>.dict格式

AFL++的限制

虽然ClusterFuzz支持AFL++,但不支持使用它进行语料库修剪和崩溃最小化。因此,建议同时使用libFuzzer来完成这些任务。

查看测试结果

可以通过以下方式查看测试结果:

  • 查看机器人日志了解模糊测试过程
  • 在Testcases页面查看发现的错误
  • 查看崩溃统计和模糊测试统计(生产环境中通常需要等待一天)

结语

通过合理配置libFuzzer和AFL++,您可以在ClusterFuzz平台上建立高效的模糊测试环境。记住定期更新编译器版本、优化种子语料库和字典文件,以获得最佳测试效果。

clusterfuzz Scalable fuzzing infrastructure. clusterfuzz 项目地址: https://gitcode.com/gh_mirrors/cl/clusterfuzz

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

井章博Church

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值