Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Binvariants — レジスタレベルの不変条件に基づくガイド付きファジングフレームワークで、クローズドソースのバイナリを対象とし、不変条件違反の可能性を活用してバイナリ実行ファイルのクラッシュやバグを発見します。 | Kitploit
ツール/GitHubGitHub/futureslab/binvariants
脆弱性分析エクスプロイトファジングバイナリ解析
GitHubfutureslab/binvariants

Binvariants

レジスタレベルの不変条件に基づくガイド付きファジングフレームワークで、クローズドソースのバイナリを対象とし、不変条件違反の可能性を活用してバイナリ実行ファイルのクラッシュやバグを発見します。

リポジトリを見る
51293ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Binvariants: バイナリ向けレジスタレベル不変条件誘導型ファジング

Binvariants logo

このリポジトリは Binvariants のソースコードを提供します。Binvariants は、バイナリのファジングにレジスタレベルの「可能性の高い不変条件」の違反を活用するプロトタイプのファジングフレームワークです。

本研究は、2026年 ACM International Conference on the Foundations of Software Engineering (FSE'26) に採録された論文 Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants | スライド で発表されています。

  • Binvariants のインストール
  • Binvariants の使用方法
  • 補足事項
  • バグトロフィーケース


Binvariants workflow
Binvariants workflow

このリポジトリの引用: @article{yang:binvariants, title = {Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants}, author = {Zao Yang and Stefan Nagy}, year = {2026}, issue_date = {July 2026}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {3}, number = {FSE}, journal = {Proc. ACM Softw. Eng.}}
開発者: Zao Yang ([email protected]) および Stefan Nagy ([email protected])
ライセンス: MIT License
免責事項: 本ソフトウェアは現状のまま提供され、いかなる保証も伴いません。

Binvariants のインストール

Binvariants は AFL++ と QEMU-AFL の上に構築されています。 Binvariants をセットアップする前に、これらのプロジェクトが必要とする依存関係をインストールしてください:

sudo apt-get update
sudo apt-get install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
# try to install llvm-18 and install the distro default if that fails
sudo apt-get install -y lld-18 llvm-18 llvm-18-dev clang-18 || sudo apt-get install -y lld llvm llvm-dev clang
sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-dev
sudo apt-get install -y meson ninja-build # for QEMU mode

Binvariants は次の 2 つのコンポーネントで構成されています:

  • 1-Invariant_Learner/
  • 2-Fuzzer/

それぞれをビルドするには、対応するディレクトリに移動して次のコマンドを実行します:

./1_patch.sh
./2_build.sh

Binvariants の使用

Example/ には、Binvariants を使用して nconvert バイナリをファジングするためのサンプルスクリプトとテストケースが含まれています。スクリプトを変更することで、他のバイナリをファジングできます。

セットアップ

Binvariants を使用する前に、ASLR を無効化してください。不変条件の学習とファジングの間で一貫した基本ブロックアドレスが必要となるためです:

sudo sysctl -w kernel.randomize_va_space=0

レジスタレベルの可能性の高い不変条件 (RLI) の学習

不変条件を学習するには、次を実行します:

./Example/1-learn_invs.sh [Binvariants_Root]

推論されたRLIは、1-learn_invs.sh 内の BINV_TRACES_DIR で指定されたディレクトリに、[PROGRAM]_trace_qemu_invs という名前で保存されます。

RLIを用いたファジング

Binvariants でファジングを開始するには、次を実行します:

./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]

例えば、Binvariantsのルートディレクトリから48時間のファジングキャンペーンの第1回試行を実行します:

./Example/2-fuzz.sh $PWD 48h 1

補足事項

以下はBinvariantsに対する潜在的な機能強化です。

不変条件の適応的学習

現在、Binvariantsはファジングの前に不変条件を学習し、その後ファジングを別途実行します。考えられる機能強化として、ファジング中に不変条件を学習し、違反が発生するたびにそれらを更新することで、フィードバックを時間の経過とともに進化させることが挙げられます。

考えられる設計上の検討事項:

  1. 後でクラッシュまたはタイムアウトするテストケースの実行中に不変条件が更新された場合、その更新を元に戻す必要があるかもしれません。実用的な解決策は、不変条件のコピーに更新を適用し、テストケースが正常に完了した場合(すなわちFSRV_RUN_OK)にのみコミットすることです。
  2. ファジングが実行され不変条件が更新されると、違反は自然と頻度が低下します。これにより、AFL++が初期段階のテストケース(より多くの違反を引き起こすが、進化の度合いが低いプログラム状態を表す)を繰り返し選択するリスクがあります。後により代表的なテストケースが選択されるように、AFL++側でweight/perf_score/top_ratedの調整が必要になるかもしれません。

基本ブロック横断的な不変条件

Binvariantsは現在、単一ブロックの不変条件に焦点を当てています。潜在的な機能強化として、ブロック横断的な不変条件のサポートが挙げられます。これには、ブロック境界を越えてレジスタ値を追跡するための新しいデータ構造と、制御がブロック間を移る際に違反をチェックするための追加の計装が必要です。

バグトロフィーケース

プログラム報告されたバグ
nconverthttps://newsgroup.xnview.com/viewtopic.php?t=49598
xls2csvhttps://github.com/vbwagner/catdoc/issues/6, https://github.com/vbwagner/catdoc/issues/7, https://github.com/vbwagner/catdoc/issues/8, https://github.com/vbwagner/catdoc/issues/9, https://github.com/vbwagner/catdoc/issues/10, https://github.com/vbwagner/catdoc/issues/11, https://github.com/vbwagner/catdoc/issues/12, https://github.com/vbwagner/catdoc/issues/13
gpmfhttps://github.com/gopro/gpmf-parser/issues/201, https://github.com/gopro/gpmf-parser/issues/202, https://github.com/gopro/gpmf-parser/issues/203
hdf5https://github.com/HDFGroup/hdf5/issues/5831, https://github.com/HDFGroup/hdf5/issues/5832, https://github.com/HDFGroup/hdf5/issues/5834
stormhttps://github.com/ladislav-zezula/StormLib/issues/397, https://github.com/ladislav-zezula/StormLib/issues/398
mp4splithttps://github.com/axiomatic-systems/Bento4/issues/1038, https://github.com/axiomatic-systems/Bento4/issues/1039
cpdfhttps://github.com/johnwhitington/camlpdf/issues/75
sfconverthttps://github.com/mpruett/audiofile/issues/73

Binvariantsを使用して他のバグを見つけた場合は、ぜひお知らせください!

謝辞

この資料は、National Science Foundation(NSF)のAward No. 2419798、およびDefense Advanced Research Projects Agency(DARPA)のAward No. FA8750-24-2-0002、Subaward No. GR105409-SUB00001384による支援を受けた成果に基づいています。

ツールをダウンロード