Honggfuzz模糊测试工具使用指南

Honggfuzz模糊测试工具使用指南

【免费下载链接】honggfuzz Security oriented software fuzzer. Supports evolutionary, feedback-driven fuzzing based on code coverage (SW and HW based) 【免费下载链接】honggfuzz 项目地址: https://gitcode.com/gh_mirrors/ho/honggfuzz

前言

Honggfuzz是一款由Google开发的高效模糊测试工具,支持多种操作系统和多种代码覆盖率收集方式。本文将详细介绍Honggfuzz的使用方法、功能特性以及常见问题解答。

系统要求

基本要求

  • 支持POSIX标准的操作系统
  • MacOSX系统
  • Android系统
  • Windows系统(需通过CygWin运行)

高级功能要求

  • 使用硬件级代码覆盖率引导的模糊测试需要Linux内核版本≥4.2
    • 支持Intel PT(处理器追踪)
    • 支持Intel BTS(分支追踪存储)
    • 支持指令/分支计数

输入语料库

虽然Honggfuzz可以无需输入语料库开始模糊测试(基于覆盖率反馈驱动模式),但准备一些初始测试用例有助于提高效率:

  • 图像格式:Tavis Ormandy的Image Testsuite可用于测试图形库问题
  • PDF格式:Adobe提供的测试PDF文件

兼容性列表

Honggfuzz支持以下操作系统:

操作系统状态备注
GNU/Linux支持使用ptrace() API,支持x86/x86-64反汇编
FreeBSD支持使用POSIX信号接口
OpenBSD支持使用POSIX信号接口
NetBSD支持使用ptrace() API,支持x86/x86-64反汇编
Mac OS X支持使用POSIX信号接口/Mac OS X崩溃报告,支持x86-64/x86反汇编
Android支持使用ptrace() API,支持x86/x86-64反汇编
Windows支持通过CygWin使用POSIX信号接口
其他Unix系统可能支持需要POSIX信号接口

使用模式详解

1. 无插桩的非持久性模糊测试(-x)

文件输入模式(使用___FILE___占位符)
honggfuzz -i input_dir -x -- /usr/bin/djpeg ___FILE___
STDIN输入模式(-s/--stdin_input)
honggfuzz -i input_dir -x -s -- /usr/bin/djpeg

2. 带插桩的非持久性模糊测试

编译时插桩(-z/--instrument,默认启用)
honggfuzz -i input_dir -z -- instrumented.djpeg ___FILE___
QEMU模式(无源码插桩)
honggfuzz -i input_dir -- <qemu_path>/qemu-x86_64 /usr/bin/djpeg ___FILE___
硬件级机制/计数器
honggfuzz -i input_dir --linux_perf_bts_edge -- /usr/bin/djpeg ___FILE___
honggfuzz -i input_dir --linux_perf_ipt_block -- /usr/bin/djpeg ___FILE___
honggfuzz -i input_dir --linux_perf_instr -- /usr/bin/djpeg ___FILE___
honggfuzz -i input_dir --linux_perf_branch -- /usr/bin/djpeg ___FILE___

3. 持久性模式(-P,可自动检测)

honggfuzz -i input_dir -z -P -- jpeg_persistent_mode
honggfuzz -i input_dir --linux_perf_bts_edge -P -- jpeg_persistent_mode

也可以组合使用多种插桩机制:

honggfuzz -i input_dir --linux_perf_bts_edge --linux_perf_instr -P -- jpeg_persistent_mode

4. 语料库最小化(-M)

直接在输入目录中最小化
honggfuzz -i input_dir -P -M -- jpeg_persistent_mode
将最小化结果保存到输出目录
honggfuzz -i input_dir --output output_dir -P -M -- jpeg_persistent_mode

命令行参数详解

Honggfuzz提供了丰富的命令行参数,主要分为以下几类:

基本参数

  • -i/--input: 指定输入语料库目录
  • --output: 指定输出目录
  • -P/--persistent: 启用持久性模糊测试
  • -z/--instrument: 启用编译时插桩(默认)
  • -x/--noinst: 禁用所有插桩反馈

性能控制

  • -t/--timeout: 设置超时时间(秒)
  • -n/--threads: 设置并发线程数
  • -r/--mutations_per_run: 设置每次运行的最大变异次数

输入输出控制

  • -s/--stdin_input: 通过STDIN提供输入
  • -e/--extension: 设置输入文件扩展名
  • -W/--workspace: 设置工作目录
  • --crashdir: 设置崩溃文件保存目录

高级功能

  • --linux_perf_instr: 使用PERF_COUNT_HW_INSTRUCTIONS
  • --linux_perf_branch: 使用PERF_COUNT_HW_BRANCH_INSTRUCTIONS
  • --linux_perf_bts_edge: 使用Intel BTS计数唯一分支
  • --linux_perf_ipt_block: 使用Intel PT计数唯一代码块

输出文件格式

Honggfuzz生成的崩溃报告文件名包含丰富的信息:

Linux/NetBSD格式示例: SIGSEGV.PC.4ba1ae.STACK.13599d485.CODE.1.ADDR.0x10.INSTR.mov____0x10(%rbx),%rax.fuzz

POSIX信号接口格式示例: SIGSEGV.22758.2010-07-01.17.24.41.tif

文件名各部分含义:

  • 信号类型:如SIGSEGV、SIGILL等
  • PC值:程序计数器值(仅ptrace() API)
  • 堆栈签名:基于堆栈追踪生成
  • 内存地址_siginfo_t.si_addr_
  • 指令:导致崩溃的汇编指令(x86/x86-64)

常见问题解答

命名由来

名称"honggfuzz"源自苏黎世Höngg地区的一次难忘事件,当时一位威尔士安全专家在出租车前往Höngg时高唱《Another one bites the dust》。

技术选择

  1. 为什么优先使用ptrace() API而非POSIX信号接口? ptrace() API在分析进程崩溃时更灵活,能获取更多信息。

  2. 为什么FreeBSD和Mac OS X不支持ptrace() API? 这些系统缺少关键的ptrace()操作,如PT_GETREGS(Mac OS X)和PT_GETSIGINFO。

许可信息

Honggfuzz采用Apache License 2.0许可协议。

结语

Honggfuzz作为一款功能强大的模糊测试工具,支持多种操作系统和多种代码覆盖率收集方式,是安全研究人员和开发人员进行问题挖掘的利器。通过合理配置各种参数,可以针对不同场景进行高效的模糊测试。

【免费下载链接】honggfuzz Security oriented software fuzzer. Supports evolutionary, feedback-driven fuzzing based on code coverage (SW and HW based) 【免费下载链接】honggfuzz 项目地址: https://gitcode.com/gh_mirrors/ho/honggfuzz

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

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

抵扣说明:

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

余额充值