Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
fuzzable — ソースコードおよびバイナリ内のファズ可能な関数ターゲットを特定し、ハーネステンプレートを生成し、AFL++やlibFuzzerと統合して自動脆弱性発見を行う静的解析フレームワーク。 | Kitploit
ツール/GitHubGitHub/ex0dus-0x/fuzzable
静的分析脆弱性分析リバースエンジニアリングファジングバイナリ解析
GitHubex0dus-0x/fuzzable

fuzzable

ソースコードおよびバイナリ内のファズ可能な関数ターゲットを特定し、ハーネステンプレートを生成し、AFL++やlibFuzzerと統合して自動脆弱性発見を行う静的解析フレームワーク。

リポジトリを見る
5495912年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Fuzzable

Build Status PyPI version Blackhat

静的解析による Fuzzable ターゲット発見の自動化フレームワーク

example

はじめに

ソフトウェアのセキュリティ評価を行う脆弱性研究者は、多くの場合、AFL++ や libFuzzer のような強力なツールを用いたカバレッジガイドファジングの機能を活用します。これは、バグハンティングプロセスを自動化し、ターゲット内の悪用可能な状態を迅速に明らかにするために重要です。しかし、大規模で複雑なコードベースやクローズドソースのバイナリに遭遇した場合、研究者は手動で監査やリバースエンジニアリングに多くの時間を費やし、ファジングによる探索が有効な関数を特定する必要があります。

Fuzzable は、C/C++ のソースコードとバイナリの両方と統合し、脆弱性研究者がファジングに適した関数ターゲットを特定できるよう支援するフレームワークです。これは、ソフトウェア内の危険な動作とそれを実行する関数を特定するために、静的解析ベースのいくつかのヒューリスティックを適用することで実現されます。研究者はこのフレームワークを利用して基本的なハーネステンプレートを生成し、それを脆弱性の発見や、Google の oss-fuzz プロジェクトのような継続的ファジングパイプラインの一部として使用することができます。

スタンドアロンツールとして実行できるだけでなく、Fuzzable は Binary Ninja ディスアセンブラのプラグインとしても統合されており、他のディスアセンブリバックエンドのサポートも開発中です。

ツールの詳細な技術仕様(静的解析ヒューリスティックの内容や、このツールがどのように生まれたか)を解説した元のブログ記事はこちらをご覧ください。また、このツールは Black Hat Arsenal USA 2022 でも紹介されました。

機能

  • バイナリ(Angr および Binary Ninja を使用)と ソースコード アーティファクト(tree-sitter を使用)の両方を解析可能。
  • 静的解析を スタンドアロンCLIツール または Binary Ninja プラグイン として実行可能。
  • ファジングキャンペーンを迅速に開始するための ハーネス生成。

インストール

一部のバイナリターゲットはサニタイズ(シグネチャマッチングやインライン展開からの関数特定など)が必要な場合があり、そのため fuzzable は主に Binary Ninja をディスアセンブリバックエンドとして使用しています。Binary Ninja はこれらの問題を効果的に解決できるからです。そのため、スタンドアロンツールとしてもプラグインとしても利用できます。

Binary Ninja は誰でも利用できるわけではなく、セキュリティ評価やクラウドでのスケーリングのために活用したいという需要もあるため、angr による フォールバック バックエンドもサポートされています。将来的には他のディスアセンブラ(優先順位:Ghidra)も組み込む予定です。

コマンドライン(スタンドアロン)

Binary Ninja Commercial をお持ちの場合は、スタンドアロンヘッドレス使用のために API をインストールしてください:

root@kitploit:~
$ python3 /Applications/Binary\ Ninja.app/Contents/Resources/scripts/install_api.py

pip でインストール:

root@kitploit:~
$ pip install fuzzable

手動 / 開発ビルド

依存関係管理とビルドには poetry を使用しています。手動ビルドを行うには、サードパーティモジュールを含めてリポジトリをクローンしてください:

root@kitploit:~
$ git clone --recursive https://github.com/ex0dus-0x/fuzzable

手動インストール:

root@kitploit:~
$ cd fuzzable/

# poetry を使用しない場合
$ pip install .

# poetry を使用する場合
$ poetry install

# 開発用 virtualenv を作成する場合
$ poetry shell

これでツールを使ってバイナリやソースコードを解析できます!

root@kitploit:~
# 単一の共有オブジェクトライブラリバイナリを解析
$ fuzzable analyze examples/binaries/libbasic.so

# 単一の C ソースファイルを解析
$ fuzzable analyze examples/source/libbasic.c

# 複数の C/C++ ファイルとヘッダを含むワークスペースを解析
$ fuzzable analyze examples/source/source_bundle/

Binary Ninja プラグイン

fuzzable は、Binary Ninja のプラグインマーケットプレイスから簡単にインストールできます。Binary Ninja > Manage Plugins に移動し、検索してください。以下は fuzzable プラグインが実行され、ファジングおよびさらなる脆弱性評価のためのターゲットを精度よく特定している例です:

binja_example

使用法

fuzzable には解析をより適切に調整するためのさまざまなオプションがあります。今後の計画や機能リクエストに応じて、さらに多くのオプションがサポートされる予定です。

静的解析ヒューリスティック

ファジング可能性を判断するために、fuzzable はいくつかのヒューリスティックを使用して、動的解析に最も適したターゲットを特定します。これらのヒューリスティックは scikit-criteria ライブラリを用いて異なる重み付けがされており、このライブラリは 多基準意思決定分析 を使用して最適な候補を決定します。これらのメトリクスとその重みは次のとおりです:

前述のとおり、これらのメトリクスがなぜ、どのように利用されるかについての詳細は、技術ブログ記事をご覧ください。

多くのメトリクスは、Vincenzo Iozzo 氏による 0-knowledge ファジングのオリジナル研究に大きく触発されています。

解析するすべてのターゲットは多様であり、fuzzable はプログラムターゲットのすべてのエッジケース動作を考慮することはできません。そのため、解析中にこれらの重みを適切に 調整 して、異なる結果が自分のユースケースにより適しているかどうかを確認することが重要になる場合があります。CLI で重みを調整するには、--score-weights 引数を指定します:

root@kitploit:~
$ fuzzable analyze <TARGET> --score-weights=0.2,0.2,0.2,0.2,0.2

解析フィルタリング

デフォルトでは、fuzzable は以下の基準に基づいて関数ターゲットをフィルタリングします:

  • トップレベルのエントリ呼び出し - ターゲット内の他の呼び出しから呼び出されない関数。これらは潜在的に非常に高いカバレッジを持つ理想的なエントリポイントです。
  • 静的呼び出し - (ソースのみ) static であり、ヘッダを介して公開されない関数。
  • インポート - (バイナリのみ) ターゲットの実装で使用されるその他のライブラリ依存関係。

fuzzable によって除外された呼び出しを確認するには、--list_ignored フラグを設定します:

root@kitploit:~
$ fuzzable analyze --list-ignored <TARGET>

Binary Ninja では、Settings > Fuzzable > List Ignored Calls でこの設定をオンにできます。

fuzzable が誤って解析すべき重要な呼び出しを除外した場合は、--include-* 引数を使用してそれらを実行に含めることをお勧めします:

root@kitploit:~
# 除外されたすべての非トップレベル呼び出しを含める
$ fuzzable analyze --include-nontop <TARGET>

# 除外された特定のシンボルを含める
$ fuzzable analyze --include-sym <SYM> <TARGET>

Binary Ninja では、Settings > Fuzzable > Include non-top level calls と Symbols to Exclude でサポートされています。

ハーネス生成

ファジングに最適な候補が見つかったら、fuzzable は、ファイルベースのファザー(例:AFL++、Honggfuzz)またはインメモリファザー(libFuzzer)で使用するために、ほぼそのままインストルメントしてコンパイルできるファジングハーネスの生成を支援します。CLI で行う方法は次のとおりです:

root@kitploit:~
# 候補からハーネスを生成
$ fuzzable create-harness target --symbol-name=some_unsafe_call

# ハーネスに必要最小限の修正を加える
$ vim target_some_unsafe_call_harness.cpp

# 生成されたハーネスのコメントに指定されている AFL-QEMU のコンパイル例
$ clang target_some_unsafe_call_harness.cpp -no-pie -o target_some_unsafe_call_harness -ldl

# 基本シードを作成。理想的にはより整形式の入力であるべき
$ mkdir in/
$ echo "seed" >> in/seed

# ブラックボックスファジングを開始
$ afl-fuzz -Q -m none -i in/ -o out/ -- ./target_some_unsafe_call_harness

このターゲットがソースコードベースの場合、汎用ソーステンプレート が使用されます。

ターゲットがバイナリの場合は、汎用ブラックボックステンプレート が使用され、AFL-QEMU のようなファジングエミュレーションモードで使用するのに適しています。シンボルが直接エクスポートされていない場合は、LIEF を使用して dlopen できるように、バイナリのコピーが共有オブジェクトとして作成されます。

現時点では、この機能はかなり初歩的で、適切なパラメータが設定された独立した C++ ハーネスを作成するだけで、ランタイム動作(構造体のインスタンス化や解放など)に必要なコードは自動生成されません。ただし、fuzzable 用に作成されたテンプレートは、それでも素早く実行を開始できるはずです。以下は、今後実装したい意欲的な機能の一部です:

  • 完全なハーネス合成 - 手動での変更を一切必要とせずに、ハーネスが直接動作するように。
  • DeepState フレームワークを使用した潜在的なユニットテストからの合成 (ソースのみ)。
  • 管理された継続的ファジングファームへの即時デプロイ。

レポートのエクスポート

fuzzable は様々な形式でのレポート生成をサポートしています。現在サポートされている形式は、JSON、CSV、Markdown です。これは、自動化の一部として出力をシリアライズ可能な形式で取り込みたい場合に便利です。

CLI では、適切な拡張子を持つファイル名を --export 引数に渡すだけです:

root@kitploit:~
$ fuzzable analyze --export=report.json <TARGET>

Binary Ninja では、Plugins > Fuzzable > Export Fuzzability Report > ... に移動し、エクスポートする形式と書き込み先のパスを選択します。

コントリビューション

このツールは継続的に開発されており、外部のメンテナからの支援は大歓迎です!

  • 機能リクエストや遭遇したバグについては、イシュー を作成してください。
  • このツールに貢献したい修正や機能強化については、プルリクエスト を提出してください。

ライセンス

Fuzzable は MIT ライセンス の下でライセンスされています。

ツールをダウンロード
ヒューリスティック説明重み
ファジングフレンドリ名シンボル名がファイル/バッファ入力を取り込む動作を示す0.3
リスクのあるシンク危険な呼び出し(例:memcpy)に流れ込む引数0.3
自然ループ支配境界で検出されたループの数0.05
サイクロマティック複雑度エッジ+ノードに基づく関数ターゲットの複雑さ0.05
カバレッジ深度ターゲットが到達する呼び出し先の数0.3