Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cuFuzz — فازر موجَّه لوحدات معالجة الرسوميات (GPU) ويسترشد بالتغطية لتطبيقات CUDA في فضاء المستخدم. | Kitploit
أدوات/GitHubGitHub/nvlabs/cufuzz
تحليل الثغرات الأمنيةالاختبار العشوائيتحليل الملفات الثنائية
GitHubnvlabs/cufuzz

cuFuzz

فازر موجَّه لوحدات معالجة الرسوميات (GPU) ويسترشد بالتغطية لتطبيقات CUDA في فضاء المستخدم.

عرض المستودع
3972منذ 6 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

cuFuzz

يحتوي هذا المستودع على القطع البرمجية (Artifacts) الخاصة بـ cuFuzz، وهي أداة تشويش موجّهة بالتغطية (Coverage-Guided Fuzzer) تعمل بوحدة معالجة الرسوميات (GPU) لتطبيقات CUDA في فضاء المستخدم. تجمع cuFuzz بين جمع التغطية من جهة المضيف (Host) ومن جهة الجهاز (Device) مع التعقيم (Sanitization) لاكتشاف الأخطاء في برامج 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

المتطلبات

متطلبات العتاد (Hardware)

تم اختبار cuFuzz على الإعدادات العتادية التالية:

المكوّنالمواصفات
GPUNVIDIA A40 (48GB VRAM، قدرة حوسبة 8.6)
المعالج (CPU)Intel Xeon Platinum 8362 (64 نواة، خيطان لكل نواة)
الذاكرةيُوصى بذاكرة RAM بسعة 120GB أو أكثر
التخزينمساحة خالية 50GB+ لصورة Docker ومخرجات التشويش

وحدات GPU أخرى: يجب أن تعمل cuFuzz على وحدات NVIDIA GPU أخرى بقدرة حوسبة (Compute Capability) ≥ 7.0. اضبط متغير البيئة GPU_ARCH وفقًا لذلك (انظر تكوين بنية GPU).

متطلبات البرمجيات

المكوّنالإصدار
Ubuntu22.04 LTS
NVIDIA Driver570.144 أو ما يتوافق معه
CUDA Toolkit12.9
Docker20.10+ (موصى به)
nvidia-container-toolkitمطلوب لدعم علم --gpus
clang14

البدء السريع: تعليمات 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:

عائلة GPUالبنية (Architecture)أمثلة
Ampere (مراكز البيانات)sm_80A100
Ampere (الاستهلاكية/الاحترافية)sm_86A40, RTX 3090, RTX 3060
Hoppersm_90H100
Ada Lovelacesm_89RTX 4090, L40
Turingsm_75RTX 2080, T4

للقائمة الكاملة، راجع: 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 

بناء أغلفة المُعقِّمات (Sanitizer Wrappers)

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 scaling)AFL_SKIP_CPUFREQ=1
AFL_PRELOADالمسار إلى أداة تغطية NVBitAFL_PRELOAD=/path/to/cufuzz_cov.so

متغيرات تغطية cuFuzz

المتغيرالوصفمثال
CUFUZZ_MAP_SIZEحجم خريطة التغطية بالبايتCUFUZZ_MAP_SIZE=65536
COV_PERSISTENTتفعيل دعم الوضع المستمر في AFL (0=لا، 1=نعم)COV_PERSISTENT=1
GPU_ARCHبنية GPU المستهدفة عند البناءGPU_ARCH=sm_86

متغيرات تعقيم cuFuzz

المتغيرالوصفمثال
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"

أوضاع AFL_SAN_ABSTRACTION

يتحكم المتغير AFL_SAN_ABSTRACTION في المدخلات التي يتم تغذيتها إلى المُعقِّمات:

القيمةالوصفالحساسيةالأداء
all_traceتغذية جميع المدخلات إلى المُعقِّماتالأعلىالأبطأ
simplify_traceتغذية المدخلات ذات مسارات التنفيذ الفريدةعاليةمتوازن
unique_traceتغذية المدخلات ذات توقيعات التغطية الفريدةمتوسطةأسرع
coverage_increaseتغذية المدخلات التي تسبب زيادة في التغطية فقطالأدنىالأسرع

موصى به: AFL_SAN_ABSTRACTION=simplify_trace (الافتراضي)

أمثلة

الوضع الأساسي

في هذا الوضع، تستخدم cuFuzz التغطية من جهة الجهاز (Device) وتقوم أيضًا بتشغيل 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 على عدد كبير من المدخلات.

يتطلب الوضع المستمر إجراء تعديلات على الكود المصدري لهيكل التشويش (Fuzzing 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

استكشاف الأخطاء وإصلاحها

المشكلات الشائعة

  1. عدم اكتشاف GPU: تأكد من تثبيت برامج تشغيل NVIDIA وأن أمر nvidia-smi يعمل بشكل صحيح
  2. عدم تطابق البنية: اضبط GPU_ARCH ليطابق القدرة الحاسوبية لوحدة GPU لديك
  3. تشويش بطيء: فعّل الوضع المستمر للحصول على إنتاجية أفضل

المساهمة

نرحب بمساهماتكم! يرجى الاطلاع على CONTRIBUTING.md للحصول على إرشادات حول كيفية المساهمة، بما في ذلك:

  • الإبلاغ عن المشكلات (Issues)
  • تقديم طلبات السحب (Pull Requests)
  • متطلبات شهادة المطور للمصدر (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 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
تنزيل الأداة