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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cuFuzz — ユーザーランドCUDAアプリケーション向けの、GPU指向のカバレッジ誘導型ファザー。 | Kitploit
ツール/GitHubGitHub/nvlabs/cufuzz
脆弱性分析ファジングバイナリ解析
GitHubnvlabs/cufuzz

cuFuzz

ユーザーランドCUDAアプリケーション向けの、GPU指向のカバレッジ誘導型ファザー。

リポジトリを見る
3976ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

cuFuzz

このリポジトリには、ユーザーランドCUDAアプリケーション向けのGPU指向カバレッジガイド型ファザーである cuFuzz の成果物が含まれています。cuFuzz は、ホスト側とデバイス側のカバレッジ収集をサニタイゼーションと組み合わせることで、CUDAプログラムのバグを効果的に発見します。

Overview

リポジトリ構成

root@kitploit:~
cufuzz-artifacts/
├── src/                        # Core cuFuzz components
│   ├── cufuzz_cov_nvbit/       # NVBit-based device-side coverage collection tool
│   └── cufuzz_sand/            # Sanitizer wrappers for SAND integration
├── targets/                    # Example fuzzing targets
│   └── sampleApp/              # Simple CUDA app with intentional bug for testing
├── scripts/                    # Evaluation and analysis scripts
├── Tools/                      # External dependencies
│   ├── AFLplusplus/            # AFL++ fuzzer (git submodule)
│   └── AFLplusplus.patch       # cuFuzz patches for AFL++
├── third-party-licenses/       # Third-party license files
│   ├── LICENSE_from_aflplusplus  # AFL++ Apache 2.0 license
│   └── LICENSE_from_nvbit        # NVBit NVIDIA EULA
├── images/                     # Documentation images
├── build.sh                    # Automated build script
├── verify_build.sh             # Quick verification test
├── Dockerfile                  # Docker container definition
├── LICENSE                     # Apache License 2.0
└── CONTRIBUTING.md             # Contribution guidelines and DCO

要件

ハードウェア要件

cuFuzz は以下のハードウェア構成でテストされています:

コンポーネント仕様
GPUNVIDIA A40(48GB VRAM、Compute Capability 8.6)
CPUIntel Xeon Platinum 8362(64コア、コアあたり2スレッド)

その他のGPU: cuFuzz は Compute Capability 7.0 以上の他のNVIDIA GPUでも動作するはずです。それに応じて GPU_ARCH 環境変数を調整してください(GPU Architecture Configuration を参照)。

ソフトウェア要件

クイックスタート:Docker手順

cuFuzz を試す最も速い方法は、Dockerコンテナを使用することです。このDockerfileは、公式のNVIDIA CUDA 12.9開発イメージを使用しています。

1. アーティファクトの展開とAFL++のセットアップ

root@kitploit:~
tar -xzvf cufuzz-artifacts.tar.gz
cd cufuzz-artifacts

# Clone AFL++ (required dependency)
git clone https://github.com/AFLplusplus/AFLplusplus.git Tools/AFLplusplus
cd Tools/AFLplusplus
git checkout 9cac7ced05eb9f36c1d0b02ad594b3b09cd3938b
cd ../..

2. Dockerイメージのビルド

GPUアーキテクチャを指定してDockerイメージをビルドします:

root@kitploit:~
sudo docker build --build-arg GPU_ARCH=<your_arch> -t cufuzz .

GPUアーキテクチャ早見表:

完全なリストはこちらを参照:https://developer.nvidia.com/cuda-gpus

A40/RTX 3090の例:

root@kitploit:~
sudo docker build --build-arg GPU_ARCH=sm_86 -t cufuzz .

注意: この手順は、お使いのマシンとネットワーク接続によっては数分かかる場合があります。

3. Dockerコンテナの実行

root@kitploit:~
sudo docker run --rm --gpus all -it -v /:/my_workspace cufuzz bash

4. インストールの検証

Dockerコンテナが起動したら、ビルドを検証します:

root@kitploit:~
root@container:~/cufuzz# ./verify_build.sh

詳細ビルド手順(Dockerなし)

前提条件

Ubuntu 22.04に必要な依存関係をインストールします:

root@kitploit:~
apt-get update && 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 lld llvm llvm-dev \
    clang ninja-build cpio libcapstone-dev wget curl python3-pip vim less libxxhash-dev bc zlib1g-dev

GPUアーキテクチャの設定

お使いのGPUに合わせて GPU_ARCH 環境変数を設定します(上記のアーキテクチャ表を参照):

root@kitploit:~
export GPU_ARCH=sm_86  # Change to match your GPU

AFL++のビルド

root@kitploit:~
cd Tools/AFLplusplus 
patch -N -p1 < ../AFLplusplus.patch 
export CXX=/usr/bin/clang++-14 
export CC=/usr/bin/clang-14
make -j8 &> build.log

NVBitカバレッジツールのビルド

NVBit バージョン 1.7.5 をダウンロードします:

root@kitploit:~
mkdir -p Tools/NVBit
wget https://github.com/NVlabs/NVBit/releases/download/v1.7.5/nvbit-Linux-x86_64-1.7.5.tar.bz2
tar -xvf nvbit-Linux-x86_64-1.7.5.tar.bz2 
mv nvbit_release_x86_64/* Tools/NVBit/
rm -rf nvbit_release_x86_64 nvbit-Linux-x86_64-1.7.5.tar.bz2

NVBitカバレッジツールをビルドします:

root@kitploit:~
cd src/cufuzz_cov_nvbit/
export GPU_ARCH=sm_86  # Adjust for your GPU
ARCH=$GPU_ARCH make 

サニタイザラッパーのビルド

root@kitploit:~
cd src/cufuzz_sand
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -O2 wrapper_san.c -o wrapper_memcheck.out 
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -DSAN_MODE_INIT -O2 wrapper_san.c -o wrapper_initcheck.out 
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -DSAN_MODE_RACE -O2 wrapper_san.c -o wrapper_racecheck.out
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -DSAN_MODE_ASAN -O2 wrapper_san.c -o wrapper_asan.out

使用方法

cuFuzz のビルド後、以下のコマンドでファジングを実行します:

root@kitploit:~
CUFUZZ_MAP_SIZE=65536 AFL_SKIP_CPUFREQ=1 AFL_PRELOAD=/PATH/TO/cufuzz_cov.so \
    ./Tools/AFLplusplus/afl-fuzz -x sample.dict -i input_samples/ -o output_dir/ \
    -t 1000000 ./cuda_app.out @@

cuFuzzの環境変数

AFL++の標準変数

変数説明例
AFL_SKIP_CPUFREQCPUスケーリングポリシーのチェックをスキップAFL_SKIP_CPUFREQ=1
AFL_PRELOADNVBitカバレッジツールへのパスAFL_PRELOAD=/path/to/cufuzz_cov.so

cuFuzzのカバレッジ変数

cuFuzzのサニタイゼーション変数

AFL_SAN_ABSTRACTIONモード

AFL_SAN_ABSTRACTION 変数は、どの入力をサニタイザに渡すかを制御します:

推奨: AFL_SAN_ABSTRACTION=simplify_trace(デフォルト)

使用例

基本モード

このモードでは、cuFuzz はデバイス側カバレッジを使用し、入力のサブセット(一意のトレースを持つ入力)に対して compute sanitizer を実行します。このモードはAFL++のSAND機能を活用して、カバレッジ収集とサニタイゼーションを分離します。

root@kitploit:~
cd src/cufuzz_sand

# Build sanitizer wrappers
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -O2 wrapper_san.c -o wrapper_memcheck.out 
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -DSAN_MODE_INIT -O2 wrapper_san.c -o wrapper_initcheck.out 
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -DSAN_MODE_RACE -O2 wrapper_san.c -o wrapper_racecheck.out
AFL_SAN_NO_INST=1 ../../Tools/AFLplusplus/afl-clang-fast -DSAN_MODE_ASAN -O2 wrapper_san.c -o wrapper_asan.out

cd ../../targets/sampleApp/

export PATH=/usr/local/cuda/bin/:$PATH
export GPU_ARCH=sm_86  # Adjust for your GPU

# Build vanilla version (for sanitizer)
nvcc sampleApp.cu -I/usr/local/cuda/include/ -O2 --ptxas-options "-v" \
    --gpu-architecture=$GPU_ARCH -o sampleApp-vanilla.out

# Build instrumented version (for fuzzing)
nvcc sampleApp.cu -I/usr/local/cuda/include/ -O2 --ptxas-options "-v" \
    --gpu-architecture=$GPU_ARCH --compiler-bindir ../../Tools/AFLplusplus/afl-clang-fast++ \
    -o sampleApp.out

# Run cuFuzz
ORIGINAL_APP=./sampleApp-vanilla.out \
SANITIZER_PATH=/usr/local/cuda/bin/compute-sanitizer \
SANITIZER_ARG="--tool=memcheck --report-api-errors=no --error-exitcode 99" \
SANITIZER_ARG_RACE="--tool=racecheck --report-api-errors=no --error-exitcode 99" \
SANITIZER_ARG_INIT="--tool=initcheck --report-api-errors=no --error-exitcode 99" \
CUFUZZ_MAP_SIZE=65536 \
AFL_SKIP_CPUFREQ=1 \
AFL_PRELOAD=../../src/cufuzz_cov_nvbit/cufuzz_cov.so \
../../Tools/AFLplusplus/afl-fuzz -x sample.dict -i in/ -o out/ \
    -w ../../src/cufuzz_sand/wrapper_memcheck.out \
    -w ../../src/cufuzz_sand/wrapper_racecheck.out \
    -w ../../src/cufuzz_sand/wrapper_initcheck.out \
    -t 1000000 ./sampleApp.out @@

Sanitizer mode sample output

サニタイザなしで実行する場合(推奨しません): -w 引数と SANITIZER_* 変数を削除してください。

デバイス側カバレッジなしで実行する場合(任意): AFL_PRELOAD=...cufuzz_cov.so を削除してください。

永続モード

このモードでは、cuFuzz はAFL++の永続モードを活用します。永続モードでは、単一のプロセス内で複数の入力がテストされます。これによりCUDA初期化のオーバーヘッドを償却して、スループットが大幅に向上します。

永続モードを使用するには、ファジングハーネスのソースコードの変更が必要です。詳細は AFL++永続モードのドキュメント を参照してください。

root@kitploit:~
cd targets/sampleApp/

export PATH=/usr/local/cuda/bin/:$PATH
export GPU_ARCH=sm_86  # Adjust for your GPU

# Build persistent mode binary
nvcc sampleApp_persistent.cu -I/usr/local/cuda/include/ -O2 --ptxas-options "-v" \
    --gpu-architecture=$GPU_ARCH --compiler-bindir ../../Tools/AFLplusplus/afl-clang-fast++ \
    -o sampleApp_persistent.out

# Run cuFuzz in persistent mode
COV_PERSISTENT=1 \
CUFUZZ_MAP_SIZE=65536 \
AFL_SKIP_CPUFREQ=1 \
AFL_PRELOAD=../../src/cufuzz_cov_nvbit/cufuzz_cov.so \
./../../Tools/AFLplusplus/afl-fuzz -x sample.dict -i in/ -o out/ \
    -t 1000000 ./sampleApp_persistent.out @@

Persistent mode sample output

永続モードは、src/cufuzz_sand/wrapper_persistent_san.c を使用したサニタイザオプションもサポートしています。

トラブルシューティング

よくある問題

  1. GPUが検出されない: NVIDIAドライバがインストールされていることと、nvidia-smi が動作することを確認してください
  2. アーキテクチャの不一致: GPUのCompute Capabilityに合うように GPU_ARCH を設定してください
  3. ファジングが遅い: スループット向上のために永続モードを有効にしてください

コントリビューション

コントリビューションを歓迎します!コントリビューションの方法については CONTRIBUTING.md を参照してください。以下を含みます:

  • 問題の報告
  • プルリクエストの提出
  • Developer Certificate of Origin(DCO)の要件
  • コードスタイルガイドライン

引用

研究で cuFuzz を使用する場合は、OOPSLA 2026の論文を引用してください:

root@kitploit:~
@article{cufuzz2026,
  title={Hunting CUDA Bugs at Scale with cuFuzz},
  author={Mohamed Tarek Ibn Ziad and Christos Kozyrakis},
  journal={Proceedings of the ACM on Programming Languages},
  volume={10},
  number={OOPSLA1},
  article={123},
  month={4},
  year={2026},
  doi={10.1145/3798231}
}

ライセンス

このプロジェクトは Apache License 2.0 の下でライセンスされています。詳細は LICENSE ファイルを参照してください。

root@kitploit:~
Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

サードパーティコンポーネント

このプロジェクトは以下のサードパーティコンポーネントを使用しています:

コンポーネントライセンスライセンスファイル
AFL++Apache License 2.0third-party-licenses/LICENSE_from_aflplusplus
NVBitNVIDIA EULAthird-party-licenses/LICENSE_from_nvbit
ツールをダウンロード
メモリ
120GB以上のRAM推奨
ストレージDockerイメージとファジング出力用に50GB以上の空き容量
コンポーネントバージョン
Ubuntu22.04 LTS
NVIDIA Driver570.144 または互換
CUDA Toolkit12.9
Docker20.10+(推奨)
nvidia-container-toolkit--gpus フラグのサポートに必要
clang14
GPUファミリーアーキテクチャ例
Ampere(データセンター)sm_80A100
Ampere(コンシューマ/プロ)sm_86A40, RTX 3090, RTX 3060
Hoppersm_90H100
Ada Lovelacesm_89RTX 4090, L40
Turingsm_75RTX 2080, T4
変数説明例
CUFUZZ_MAP_SIZEカバレッジマップのサイズ(バイト単位)CUFUZZ_MAP_SIZE=65536
COV_PERSISTENTAFL永続モードのサポートを有効化(0=いいえ、1=はい)COV_PERSISTENT=1
GPU_ARCHビルド対象のGPUアーキテクチャGPU_ARCH=sm_86
変数説明例
ORIGINAL_APP素の(非計装の)アプリケーションへのパスORIGINAL_APP=./cuda_app
SANITIZER_PATHcompute-sanitizerバイナリへのパスSANITIZER_PATH=/usr/local/cuda/bin/compute-sanitizer
SANITIZER_ARGmemcheckサニタイザの引数SANITIZER_ARG="--tool=memcheck --error-exitcode 99"
SANITIZER_ARG_RACEracecheckサニタイザの引数SANITIZER_ARG_RACE="--tool=racecheck --error-exitcode 99"
SANITIZER_ARG_INITinitcheckサニタイザの引数SANITIZER_ARG_INIT="--tool=initcheck --error-exitcode 99"
値説明感度パフォーマンス
all_traceすべての入力をサニタイザに渡す最高最遅
simplify_trace一意の実行パスを持つ入力を渡す高バランス
unique_trace一意のカバレッジシグネチャを持つ入力を渡す中高速
coverage_increaseカバレッジ増加を引き起こす入力のみを渡す最低最速