Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ruzzy — مختبر إرشادي بالتغطية لرمز Ruby الخالص وامتدادات Ruby C | Kitploit
أدوات/GitHubGitHub/trailofbits/ruzzy
التحليل الديناميكي (عزل)تحليل الثغرات الأمنيةتحليل الكودالاختبار العشوائيتحليل الملفات الثنائيةالتعلم والتعليم
GitHubtrailofbits/ruzzy

ruzzy

مختبر إرشادي بالتغطية لرمز Ruby الخالص وامتدادات Ruby C

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Ruzzy

Test Gem Version

مُختبر تغطية موجّه لرمز Ruby الخالص وإضافات Ruby C extensions.

Ruzzy مستوحى بشدة من Google's Atheris، وهو مختبر Python. يستخدم Ruzzy libFuzzer (أو LibAFL) لآلية تغطية التتبع ومحرك الاختبار. كما يدعم Ruzzy AddressSanitizer و UndefinedBehaviorSanitizer عند اختبار إضافات C. إذا كنت ترغب في معرفة المزيد عن الدافع وراء Ruzzy، طالع ورقتنا: Design and Implementation of a Coverage-Guided Ruby Fuzzer.

جدول المحتويات:

  • التثبيت
  • الاستخدام
    • بدء الاستخدام
    • اختبار كود Ruby الخالص
    • اختبار إضافات Ruby C
  • واجهة البرمجة
    • Ruzzy
    • FuzzedDataProvider
  • ملاحظات لمستخدمي macOS
  • سجل الإنجازات
  • التطوير
    • التجميع
    • الاختبار
    • التدقيق اللغوي
    • الإصدار
  • قراءة إضافية

التثبيت

Ruzzy يدعم Linux (x86-64, AArch64/ARM64) و macOS (Apple Silicon). على Windows، يمكنك بناء Dockerfile و/أو استخدام بيئة التطوير. يتطلب Ruzzy إصدارًا حديثًا من clang (تم اختباره حتى 14.0.0)، ويفضل أحدث إصدار. للإعداد الخاص بـ macOS، انظر ملاحظات لمستخدمي macOS.

قم بتثبيت Ruzzy باستخدام الأمر التالي:

MAKE="make --environment-overrides V=1" \
CC="/path/to/clang" \
CXX="/path/to/clang++" \
LDSHARED="/path/to/clang -shared" \
LDSHAREDXX="/path/to/clang++ -shared" \
    gem install ruzzy

هناك الكثير يحدث هنا، لذا دعنا نوضحه:

  • متغير البيئة MAKE يتحكم في أمر make عند تجميع إضافة Ruzzy C. هذا يخبر make باحتترام متغيرات البيئة التالية عند تجميع الإضافة.
  • باقي متغيرات البيئة تُستخدم أثناء التجميع لضمان استخدام الثنائيات الصحيحة لـ clang. ذلك يضمن توفر أحدث ميزات clang، الضرورية للاختبار المناسب.

إذا واجهت مشاكل في التثبيت، يمكنك تشغيل الأمر التالي للحصول على مخرجات تصحيح:

RUZZY_DEBUG=1 gem install --verbose ruzzy

إذا كان هدف الاختبار الخالص لـ Ruby يستخدم تعبيرات regex بشكل كثيف، فقم بتثبيت regexp_parser:

gem install regexp_parser

بمجرد التثبيت، سيستخدم Ruzzy تلقائيًا هذه الوظيفة لأخذ عينات (أي حل) من التعبيرات النمطية التي يصادفها أثناء الاختبار. هذا يسمح للمختبر بتجاوز شروط التعبير النمطي وفتح تغطية إضافية.

الاستخدام

بدء الاستخدام

Ruzzy يتضمن مثالًا توضيحيًا لشرح كيفية عمله. أولاً، قم بتعيين متغير البيئة التالي:

export ASAN_OPTIONS="allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0"
فهم هذه الخيارات ليس ضروريًا، ولكن إذا كنت فضوليًا، انقر هنا.

ASAN_OPTIONS

  1. أخطاء تخصيص الذاكرة شائعة وذات تأثير منخفض (رفض الخدمة)، لذا تجاهلها الآن.
  2. مثل Python، مترجم Ruby يسرب البيانات، لذا تجاهل ذلك الآن.
  3. Ruby يوصي بتعطيل sigaltstack.

يمكنك بعد ذلك تشغيل المثال باستخدام الأمر التالي:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby -e 'require "ruzzy"; Ruzzy.dummy'

LD_PRELOAD مطلوب لنفس الأسباب كما في Atheris. ومع ذلك، على عكس ASAN_OPTIONS، ربما لا ترغب في تصديرها (export) لأنها قد تتداخل مع برامج أخرى.

يجب أن ينتج بسرعة تعطلًا مثل التالي:

INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 2527961537
...
==45==ERROR: AddressSanitizer: heap-use-after-free on address 0x50c0009bab80 at pc 0xffff99ea1b44 bp 0xffffce8a67d0 sp 0xffffce8a67c8
...
SUMMARY: AddressSanitizer: heap-use-after-free /var/lib/gems/3.1.0/gems/ruzzy-0.8.0/ext/dummy/dummy.c:18:24 in _c_dummy_test_one_input
...
==45==ABORTING
MS: 4 EraseBytes-CopyPart-CopyPart-ChangeBit-; base unit: 410e5346bca8ee150ffd507311dd85789f2e171e
0x48,0x49,
HI
artifact_prefix='./'; Test unit written to ./crash-253420c1158bc6382093d409ce2e9cff5806e980
Base64: SEk=

يمكننا رؤية أنه وجد بشكل صحيح الإدخال ("HI") الذي أنتج انتهاكًا للذاكرة. لمزيد من المعلومات، انظر dummy.c لمعرفة سبب حدوث هذا الانتهاك.

يمكنك إعادة تشغيل حالة التعطل باستخدام الأمر التالي:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby -e 'require "ruzzy"; Ruzzy.dummy' \
    ./crash-253420c1158bc6382093d409ce2e9cff5806e980

المختبرات التالية متاحة:

  • Ruzzy::ASAN_PATH لـ AddressSanitizer
  • Ruzzy::UBSAN_PATH لـ UndefinedBehaviorSanitizer

اختبار كود Ruby الخالص

لنختبر سكربت Ruby صغير كمثال. اختبار كود Ruby الخالص يتطلب سكربتين: سكربت تتبع وسكربت تسخير. سكربت التتبع مطلوب بسبب تفاصيل تنفيذ مترجم Ruby.

أولاً، سكربت التتبع، لنسميه test_tracer.rb:

# frozen_string_literal: true

require 'ruzzy'

Ruzzy.trace('test_harness.rb')

ثانيًا، سكربت التسخير، لنسميه test_harness.rb:

# frozen_string_literal: true

require 'ruzzy'

def fuzzing_target(input)
  if input.length == 4
    if input[0] == 'F'
      if input[1] == 'U'
        if input[2] == 'Z'
          if input[3] == 'Z'
            raise
          end
        end
      end
    end
  end
end

test_one_input = lambda do |data|
  fuzzing_target(data) # Your fuzzing target would go here
  return 0
end

Ruzzy.fuzz(test_one_input)

يمكنك تشغيل هذا الملف وبدء الاختبار باستخدام الأمر التالي:

LD_PRELOAD=$(ruby -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
    ruby test_tracer.rb

يجب أن ينتج بسرعة تعطلًا مثل التالي:

INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 2311041000
...
/app/ruzzy/bin/test_harness.rb:12:in `block in <top (required)>': unhandled exception
	from /var/lib/gems/3.1.0/gems/ruzzy-0.8.0/lib/ruzzy.rb:15:in `c_fuzz'
	from /var/lib/gems/3.1.0/gems/ruzzy-0.8.0/lib/ruzzy.rb:15:in `fuzz'
	from /app/ruzzy/bin/test_harness.rb:35:in `<top (required)>'
	from bin/test_tracer.rb:7:in `require_relative'
	from bin/test_tracer.rb:7:in `<main>'
...
SUMMARY: libFuzzer: fuzz target exited
MS: 1 CopyPart-; base unit: 24b4b428cf94c21616893d6f94b30398a49d27cc
0x46,0x55,0x5a,0x5a,
FUZZ
artifact_prefix='./'; Test unit written to ./crash-aea2e3923af219a8956f626558ef32f30a914ebc
Base64: RlVaWg==

يمكننا رؤية أنه وجد بشكل صحيح الإدخال ("FUZZ") الذي أنتج استثناءً.

لاختبار هدفك الخاص، قم بتعديل lambda لـ test_one_input لاستدعاء دالتك المستهدفة.

اختبار إضافات Ruby C

لنختبر مكتبة msgpack-ruby كمثال. أولاً، قم بتثبيت الجيم:

MAKE="make --environment-overrides V=1" \
CC="/path/to/clang" \
CXX="/path/to/clang++" \
LDSHARED="/path/to/clang -shared" \
LDSHAREDXX="/path/to/clang++ -shared" \
CFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
CXXFLAGS="-fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g" \
    gem install msgpack

بالإضافة إلى متغيرات البيئة المستخدمة عند تجميع Ruzzy، نقوم بتحديد CFLAGS و CXXFLAGS. هذه العلامات تساعد في عملية الاختبار. تمكن وظائف مفيدة مثل محدد العناوين ومعلومات تتبع أفضل. لمزيد من المعلومات، انظر AddressSanitizerFlags.

بعد ذلك، نحتاج إلى سكربت تسخير لـ msgpack. التالي قد يكون مألوفًا لمن لديه خبرة مع libFuzzer:

تنزيل الأداة