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月

これは、カスタム Just-In-Time コンパイラを利用してネイティブに近いパフォーマンスを実現する、カバレッジ誘導型・エミュレーションベースのグレーボックスファザーです。RISC-V ELF バイナリを中間表現にリフティングし、実行中に JIT コンパイルして x86 へ変換することで動作します。JIT コンパイル中にコードが計測され、カバレッジ追跡、asan、cmpcov、スナップショットベースのファジングなどのファジング改善機能が有効になります。


特徴

  • マルチスレッド対応。任意の数のスレッドをサポートし、ほぼ線形にスケーリングします。
  • 高パフォーマンスのためのカスタム JIT コンパイラ。さらに重要なのは、qemu などの他のソリューションでは実現が難しい カスタマイズ性を備えていることです。
  • カスタムメモリ管理ユニットにより、高度なカスタマイズと、バイトレベルの権限チェックやダーティビットベースの エミュレータリセットなどの非常に有益な機能を実現します。さらに、ヒープルーチンを安全に使用するための フックも実装されています。
  • インメモリファジングを容易にする仮想化ファイル管理
  • スナップショットベースのファジング。実行中にターゲットのメモリ/レジスタ状態をスナップショットし、 以降のすべてのファズケースをこのベースラインから開始できます。
  • エッジレベルのカバレッジ追跡と、このフィードバックに基づくカバレッジ誘導型ファジング
  • さまざまなミューテータ、クラッシュの重複排除、シンプルなシードスケジューリングアルゴリズム

説明

このプロジェクトの目的は、ファジングにエミュレーション環境を使用することの利点を強調することです。 これまでにもエミュレーションに基づくファザーは多数存在しますが、そのほとんど全てが基盤となるエミュレーションに qemu エミュレーションエンジンを使用しています。このエンジンはかなり成熟した ジャストインタイムコンパイラを備えて非常に良いコードを生成しますが、ファジング向けに設計されてはいません。ファジング中は、 同じプロセスを毎秒数千回実行することを意図しています。これにより、qemu が強く活用していない 特殊な最適化の余地が生まれます。例えば、各プロセス実行で同じメモリ空間を再利用し、 ダーティビット機構で限られた量のメモリのみをリセットするような最適化です。

多くの点で、これはコンパイラの内部を学び、さまざまなカバレッジメトリクス、シードスケジューラ、スナップショットベースのファジングといった多様なファジング技法を試すためのエミュレーションベースの遊び場を持つために私が取り組みたかった、概念実証(proof-of-concept)のようなものです。しかし、さらなる 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 ツールチェーン

これは、このプロジェクトでロード/使用できる RISC-V バイナリをコンパイルするためのツールチェーンを設定します。

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

TODO

このリストは、今後実装予定の機能群を示しています。

  • 動作するメモリ管理ユニット
  • JIT コンパイラ
  • インメモリファジングのための仮想化ファイル
  • バイトレベルの権限チェック + フック/安全なアロケータ
  • エッジレベルのカバレッジ追跡
  • ターゲット関数周辺の小さなループでファジングする永続モード
  • クラッシュの重複排除 / ユニークなクラッシュ
  • より多くのオプションを含めるためのミューテータの更新
  • シードスケジューリング
  • マジック値とチェックサムを突破する CmpCov
  • ファザー周辺のツールの追加
  • 適切なベンチマーキング
  • RISC-V M および A 拡張を実装し、JIT が newlib ではなく glibc を使用できるようにする
  • コンパイル速度を向上させるためにアセンブラを置き換える
  • より多くのアーキテクチャをサポート(例: mips, arm)
  • JIT 最適化、およびレジスタ割り当てへの別の試み

参考

  • fuzzing.md に記載されているすべての論文
  • エミュレーションベースのファジング - Brandon Falk GamozoLabs
  • インテル ソフトウェア開発者マニュアル
  • RISC-V ユーザー 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
  • 静的単一代入形式(SSA)と制御依存グラフの効率的な計算 - Cytron et al
  • SSA形式プログラムの生存集合の計算 - Brandner et al
  • 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
ツールをダウンロード