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

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

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

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

工具目录

分类

查看所有分类
Loading categories
cuFuzz — 面向 GPU 的覆盖率引导模糊测试器,用于用户态 CUDA 应用程序。 | Kitploit
工具/GitHubGitHub/nvlabs/cufuzz
漏洞分析模糊测试二进制分析
GitHubnvlabs/cufuzz

cuFuzz

面向 GPU 的覆盖率引导模糊测试器,用于用户态 CUDA 应用程序。

查看仓库
3976个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

cuFuzz

本仓库包含 cuFuzz 的工件,cuFuzz 是一个面向用户态 CUDA 应用程序、面向 GPU 的覆盖率引导模糊测试器。cuFuzz 将主机端和设备端覆盖率收集与 sanitizer 处理相结合,以有效发现 CUDA 程序中的缺陷。

概述

仓库结构

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 显存,计算能力 8.6)
CPUIntel Xeon Platinum 8362(64 核,每核 2 线程)
内存建议 120GB+ RAM

其他 GPU:cuFuzz 应可在计算能力 ≥ 7.0 的其他 NVIDIA GPU 上运行。请相应调整 GPU_ARCH 环境变量(参见 GPU 架构配置)。

软件要求

快速开始: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 镜像

构建 Docker 镜像,指定你的 GPU 架构:

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 

构建 Sanitizer 封装器

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_CPUFREQ跳过 CPU 频率调节策略检查AFL_SKIP_CPUFREQ=1
AFL_PRELOADNVBit 覆盖率工具的路径AFL_PRELOAD=/path/to/cufuzz_cov.so

cuFuzz 覆盖率变量

cuFuzz Sanitizer 相关变量

AFL_SAN_ABSTRACTION 模式

AFL_SAN_ABSTRACTION 变量控制哪些输入会被送入 sanitizer:

推荐:AFL_SAN_ABSTRACTION=simplify_trace(默认)

示例

基本模式

在此模式下,cuFuzz 使用设备端覆盖率,并对一部分输入(具有唯一轨迹的输入)运行 compute sanitizer。此模式利用 AFL++ 的 SAND 功能,将覆盖率收集与 sanitizer 处理解耦。

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 模式示例输出

不使用 sanitizer 运行(不推荐):移除 -w 参数和 SANITIZER_* 变量。

不使用设备端覆盖率运行(可选):移除 AFL_PRELOAD=...cufuzz_cov.so。

持久模式

在此模式下,cuFuzz 利用 AFL++ 的持久模式,在单个进程内测试多个输入。通过分摊 CUDA 初始化开销,显著提高吞吐量。

持久模式需要修改模糊测试 harness 的源代码。详细信息请参阅 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 @@

持久模式示例输出

持久模式还支持使用 src/cufuzz_sand/wrapper_persistent_san.c 启用 sanitizer 选项。

故障排除

常见问题

  1. 未检测到 GPU:确保已安装 NVIDIA 驱动,且 nvidia-smi 正常工作
  2. 架构不匹配:将 GPU_ARCH 设置为与 GPU 的计算能力匹配
  3. 模糊测试速度慢:启用持久模式以获得更好的吞吐量

贡献

我们欢迎贡献!请参阅 CONTRIBUTING.md 了解贡献指南,包括:

  • 报告问题
  • 提交拉取请求
  • 开发者原创证书(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
下载工具
存储50GB+ 可用空间,用于 Docker 镜像和模糊测试输出
组件版本
Ubuntu22.04 LTS
NVIDIA 驱动570.144 或兼容版本
CUDA 工具包12.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_PERSISTENT启用 AFL 持久模式支持(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 的参数SANITIZER_ARG="--tool=memcheck --error-exitcode 99"
SANITIZER_ARG_RACEracecheck sanitizer 的参数SANITIZER_ARG_RACE="--tool=racecheck --error-exitcode 99"
SANITIZER_ARG_INITinitcheck sanitizer 的参数SANITIZER_ARG_INIT="--tool=initcheck --error-exitcode 99"
值描述敏感度性能
all_trace将所有输入送入 sanitizer最高最慢
simplify_trace将具有唯一执行路径的输入送入高均衡
unique_trace将具有唯一覆盖特征的输入送入中较快
coverage_increase仅送入导致覆盖率增加的输入低最快