Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sfuzz — 使用 riscv 到 x86 的二进制翻译和现代模糊测试技术进行高性能模糊测试 | Kitploit
工具/GitHubGitHub/seal9055/sfuzz
动态分析 (沙盒)漏洞分析模糊测试二进制分析
GitHubseal9055/sfuzz

sfuzz

使用 riscv 到 x86 的二进制翻译和现代模糊测试技术进行高性能模糊测试

查看仓库
1561052年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

SFUZZ

开始日期:2021年12月

这是一个基于覆盖引导、基于模拟的灰盒模糊测试器,利用自定义的即时编译器实现接近原生的性能。它的工作原理是将 RISC-V ELF 二进制文件提升为中间表示,然后在执行期间将其 JIT 编译为 x86。在 JIT 编译期间,代码会被插桩,以启用诸如覆盖率跟踪、asan、cmpcov 或基于快照的模糊测试等模糊测试改进功能。


功能

  • 多线程,支持任意数量的线程,且几乎线性扩展
  • 自定义 JIT 编译器,以实现高性能,更重要的是可定制性,这一点 在使用 qemu 等其他解决方案时更难实现
  • 自定义内存管理单元,同样允许高度定制化和非常有用的特性, 例如字节级权限检查和基于脏位的模拟器重置。此外,还实现了 用于安全使用堆例程的钩子
  • 虚拟化文件管理,便于在内存中进行模糊测试
  • 基于快照的模糊测试,因此可以在执行期间对目标的内存/寄存器状态进行快照, 并以此基线作为所有未来测试用例的基础
  • 边级覆盖率跟踪,以及基于此反馈的覆盖引导模糊测试
  • 多种变异器、崩溃去重以及简单的种子调度算法

描述

本项目的目标是强调使用模拟环境进行模糊测试的好处。以往存在许多基于模拟的模糊测试器,但它们几乎无一例外地使用 qemu 模拟引擎作为底层模拟。虽然该引擎确实拥有相当成熟的即时编译器并能生成非常好的代码,但它并非为模糊测试而设计。在模糊测试期间, 我们打算每秒运行同一进程数千次。这为 qemu 并未充分利用的专门优化留出了空间,例如为每次进程运行复用相同的内存空间, 并仅通过脏位机制重置有限的内存。

在很多方面,这更像是一个概念验证项目,我希望能通过它来学习编译器内部原理,并拥有一个基于模拟的游乐场来尝试各种模糊测试技术,例如不同的覆盖率指标、种子调度器和基于快照的模糊测试。然而,如果能加入更多的 JIT 优化,最重要的是扩展以支持更流行的架构(如 mips 或 arm),那么它肯定可以有效地模糊测试那些无法通过重新编译进行插桩的闭源代码。

鉴于我目前所做的测试,sfuzz 的开销远低于许多其他流行的模糊测试器,这带来了非常快的性能,尤其是对于小的模糊测试用例。

有关此模糊测试器的特性/选择的更多详细信息,请参阅随附的博客文章 (https://seal9055.com/blog/fuzzing/sfuzz) 以及下面列出的文档文件:

  • 内存管理 - memory_management.md
  • 代码生成 - code_gen.md
  • 模糊测试器实现/特性 - fuzzing.md
  • 一些简单测试 - benchmarking.md

用法

这个模糊测试器完全用 rust 编写,因此克隆仓库后,只需运行 cargo build --release 即可编译。

由于该模糊测试器目前仅支持 RISC-V,因此需要使用以下工具链(或类似工具链)将目标编译为 RISC-V。如果你已经有 RISC-V 二进制文件,那也完全可以。

设置完成后,只需创建输入/输出目录,向输入目录添加一些初始种子文件,然后启动模糊测试器即可。

./sfuzz -i in -o out -- ./test_cases/simple_test @@

可以通过命令行选项传入其他标志,以指定线程数、启用快照模糊测试、向变异器添加字典等。运行 sfuzz 并带上 -h 标志可以列出其他选项。

如果你希望针对不同复杂度的目标测试该模糊测试器,可以使用 tools/program_generator 中的 progrem_generator 自动生成不同复杂度的程序。请注意,你需要一个 RISC-V 工具链来编译目标。

用于为模糊测试器编译二进制文件的 RISC-V 工具链

这将设置一个工具链,用于编译可被此项目加载/使用的 riscv 二进制文件。

root@kitploit:~
Riscv compiler/tooling:
    sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev \
    libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev \
    libexpat-dev
    git clone https://github.com/riscv/riscv-gnu-toolchain && cd riscv-gnu-toolchain
    ./configure --prefix=/opt/riscv --with-arch=rv64i
    sudo make

Debugger:
    gdb-multiarch

待办事项

此列表代表我计划在未来实现的一组功能。

  • 可用的内存管理单元
  • JIT 编译器
  • 用于内存中模糊测试的虚拟化文件
  • 字节级权限检查 + 钩子/安全分配器
  • 跟踪边级覆盖率
  • 持久模式,在目标函数周围的小循环中进行模糊测试
  • 崩溃去重 / 唯一崩溃
  • 更新变异器以包含更多选项
  • 种子调度
  • CmpCov,以绕过魔法值和校验和
  • 为模糊测试器添加一些工具
  • 恰当的基准测试
  • 实现 RISC-V M & A 扩展,以便 JIT 可以使用 glibc 而不是 newlib
  • 替换汇编器以提高编译速度
  • 支持更多架构(例如 mips、arm)
  • JIT 优化,以及再次尝试寄存器分配

参考资料

  • fuzzing.md 中列出的所有论文
  • 基于模拟的模糊测试 - Brandon Falk GamozoLabs
  • Intel 软件开发人员手册
  • RISCV 用户 ISA 规范
  • Rv8:一个高性能的 RISC-V 到 x86 二进制翻译器 - Michael Clark & Bruce Hoult
  • 编译器工程 Keith D. Cooper & Londa Torczon
  • Cranelift [https://cfallin.org/blog/] - Chris Fallin
  • 生成低开销动态二进制翻译器 - Mathias Payer & Thomas R. Gross
  • 高效计算静态单赋值形式和控制依赖图 - Cytron 等人
  • 计算 SSA 形式程序的活跃性集合 - Brandner 等人
  • SSA 形式上的线性扫描寄存器分配 - Christian Wimmer & Michael Franz
  • http://web.cs.ucla.edu/~palsberg/course/cs132/linearscan.pdf
  • AddressSanitizer:快速地址健全性检查器 https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf
下载工具