libfuzzer-workshop
مواد ورشة عمل "الاختبار العشوائي الحديث لمشاريع C/C++".
عُرضت النسخة الأولى من ورشة العمل في مؤتمر ZeroNights'16 الأمني.
إخلاء المسؤولية
تم تطوير ورشة العمل هذه في الأصل عام 2016. اعتبارًا من اليوم (2021 وما بعده)، قد لا يعمل الجانب العملي من ورشة العمل فورًا، لأن libFuzzer تطور بشكل كبير على مر السنين. لا يزال الجزء النظري من ورشة العمل مادة تعليمية جيدة، ولكن بالنسبة للدروس العملية، يُوصى باتباع أحدث إصدار من libFuzzer tutorial.
المتطلبات
- 2-3 ساعات من وقتك
- نظام تشغيل قائم على Linux
- خبرة في C/C++ (لا شيء مميز، لكنك تحتاج أن تكون قادرًا على قراءة وكتابة وتجميع كود C/C++)
- إصدار حديث من مترجم clang. التوزيعات من مديري الحزم قديمة جدًا وعلى الأرجح لن تعمل (ورشة العمل تسمى "حديثة"، أليس كذلك؟)، لديك خياران:
- قم بنسخ مستودع llvm وقم ببنائه بنفسك. لتسهيل الأمر، يمكنك استخدام السكريبت checkout_build_install_llvm.sh، تم اختباره على Ubuntu 16.04 نظيف
- آلة افتراضية VirtualBox VM مع بيئة عمل متاحة، بيانات الدخول:
fuzzer:zeronights
sudo apt-get install -y make autoconf automake libtool pkg-config zlib1g-dev
خبرة في الاختبار العشوائي غير مطلوبة.
المحتويات
- مقدمة في اختبار fuzzing
- مثال على الاختبار العشوائي التقليدي
- الاختبار العشوائي الموجه بالتغطية
- كتابة fuzzers (أمثلة بسيطة)
- العثور على Heartbleed (CVE-2014-0160)
- العثور على خطأ c-ares بقيمة 100,000 دولار (CVE-2016-5180)
- كيفية تحسين fuzzer الخاص بك
- اختبار libxml2، تعلم كيفية تحسين fuzzer وتحليل الأداء
- اختبار libpng، تعلم أهمية corpus الأساسي وأشياء أخرى
- اختبار re2
- اختبار pcre2
- التكامل مع Chromium وواجب منزلي
معظم الأمثلة مأخوذة من libFuzzer tutorial و Fuzzer Test Suite.
المتطلبات الأساسية
libFuzzer
بناء libFuzzer سهل للغاية:
cd libFuzzer
Fuzzer/build.sh
يمكن العثور على مستودع libFuzzer داخل مشروع compiler-rt الخاص بـ LLVM.
الروابط