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 — ориентированного на GPU фаззера с управлением по покрытию для пользовательских CUDA-приложений. cuFuzz сочетает сбор покрытия на стороне хоста и на стороне устройства с санитизацией для эффективного поиска ошибок в 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 VRAM, Compute Capability 8.6)
CPU

Другие GPU: cuFuzz должен работать на других NVIDIA GPU с Compute Capability ≥ 7.0. Соответственно настройте переменную окружения 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_ARCH для вашего GPU (см. таблицу архитектур выше):

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_CPUFREQПропустить проверку политики масштабирования частоты CPUAFL_SKIP_CPUFREQ=1
AFL_PRELOADПуть к инструменту покрытия NVBitAFL_PRELOAD=/path/to/cufuzz_cov.so

Переменные покрытия cuFuzz

Переменные санитизации cuFuzz

Режимы AFL_SAN_ABSTRACTION

Переменная AFL_SAN_ABSTRACTION управляет тем, какие входные данные подаются санитайзерам:

Рекомендуется: AFL_SAN_ABSTRACTION=simplify_trace (по умолчанию)

Примеры

Базовый режим

В этом режиме cuFuzz использует покрытие на стороне устройства и запускает compute sanitizer на подмножестве входных данных (входных данных с уникальными трассами). Этот режим использует функцию SAND в AFL++ для разделения сбора покрытия и санитизации.

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 @@

Пример вывода в режиме санитайзера

Запуск без санитайзеров (не рекомендуется): удалите аргументы -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 @@

Пример вывода в персистентном режиме

Персистентный режим также поддерживает параметры санитайзеров с помощью: src/cufuzz_sand/wrapper_persistent_san.c

Устранение неполадок

Часто встречающиеся проблемы

  1. GPU не обнаружен: убедитесь, что драйверы NVIDIA установлены и nvidia-smi работает
  2. Несоответствие архитектуры: задайте GPU_ARCH в соответствии с compute capability вашего GPU
  3. Медленный фаззинг: включите персистентный режим для повышения пропускной способности

Участие в разработке

Мы приветствуем ваш вклад! Пожалуйста, ознакомьтесь с CONTRIBUTING.md, содержащим рекомендации по участию, включая:

  • Сообщение об ошибках
  • Отправку pull request
  • Требования 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
Скачать инструмент
Intel Xeon Platinum 8362 (64 cores, 2 threads/core)
ПамятьРекомендуется 120GB+ RAM
Хранилище50GB+ свободного места для Docker-образа и результатов фаззинга
КомпонентВерсия
Ubuntu22.04 LTS
NVIDIA Driver570.144 или совместимый
CUDA Toolkit12.9
Docker20.10+ (рекомендуется)
nvidia-container-toolkitТребуется для поддержки флага --gpus
clang14
Семейство GPUАрхитектураПримеры
Ampere (Data Center)sm_80A100
Ampere (Consumer/Pro)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_PATHПуть к исполняемому файлу compute-sanitizerSANITIZER_PATH=/usr/local/cuda/bin/compute-sanitizer
SANITIZER_ARGАргументы для санитайзера memcheckSANITIZER_ARG="--tool=memcheck --error-exitcode 99"
SANITIZER_ARG_RACEАргументы для санитайзера racecheckSANITIZER_ARG_RACE="--tool=racecheck --error-exitcode 99"
SANITIZER_ARG_INITАргументы для санитайзера initcheckSANITIZER_ARG_INIT="--tool=initcheck --error-exitcode 99"
ЗначениеОписаниеЧувствительностьПроизводительность
all_traceПодавать все входные данные санитайзерамСамая высокаяСамый медленный
simplify_traceПодавать входные данные с уникальными путями выполненияВысокаяСбалансированная
unique_traceПодавать входные данные с уникальными сигнатурами покрытияСредняяБыстрее
coverage_increaseПодавать только входные данные, вызывающие увеличение покрытияСамая низкаяСамый быстрый