Honggfuzz
مُشوِّش (Fuzzer) تطوري موجَّه بالتغذية الراجعة وموجَّه بالأمان.
Honggfuzz هو مُشوِّش عام يستخدم تغطية الكود (القائمة على البرمجيات والعتاد) لاكتشاف الأخطاء. وهو متعدد العمليات، ومتعدد الخيوط، ويدعم التشويش المستمر (Persistent Fuzzing) لسرعة فائقة.
المزايا الرئيسية
- سريع: محرك متعدد العمليات ومتعدد الخيوط، مما يطلق الإمكانات الكاملة لوحدة المعالجة المركزية.
- تشويش مستمر (Persistent Fuzzing): اختبار واجهات برمجة التطبيقات (APIs) مباشرة داخل العملية بسرعات تكرار تصل إلى 1 مليون/ثانية.
- موجَّه بالتغذية الراجعة: يستخدم تغطية الكود القائمة على العتاد (Intel BTS/PT) والبرمجيات لتطوير المدخلات.
- سهل: يمكن البدء بمجموعة مدخلات فارغة ويبني تلقائيًا مجموعة مدخلات صالحة.
- مراقبة عميقة: يستخدم واجهات برمجة تطبيقات منخفضة المستوى (
ptrace) لكشف الإشارات المختطفة والانهيارات الخفية.
- دعم واسع: لينكس، ماك أو إس، أندرويد، NetBSD، FreeBSD، وويندوز (Cygwin).
التثبيت
المتطلبات
لينكس (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
ماك أو إس
يتطلب Xcode (10.8+) وlibblocksruntime.
البناء
make
# يتم إنشاء أغلفة الترجمة في hfuzz_cc/
الاستخدام
1. ترجمة الهدف
استخدم أغلفة المترجم المرفوعة لإضافة الأجهزة (Instrumentation) تلقائيًا:
# كود C
./hfuzz_cc/hfuzz-clang -o my_target my_target.c
# كود C++
./hfuzz_cc/hfuzz-clang++ -o my_target my_target.cpp
2. تشغيل المُشوِّش
وجّهه إلى دليل مجموعة المدخلات (يمكن أن يكون فارغًا) وإلى ملفك الثنائي:
# تشغيل أساسي
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# الوضع المستمر (أسرع)
./honggfuzz -P -i input_dir/ -- ./my_target
ملاحظة: ___FILE___ هو عنصر نائب لاسم ملف الإدخال الذي يولّده honggfuzz.
لأمثلة متقدمة (Apache، OpenSSL، BIND، إلخ)، راجع دليل examples/.
راجع USAGE.md للخيارات التفصيلية.
الإنجازات
اكتشف Honggfuzz ثغرات أمنية كبيرة في برمجيات حرجة.
HTTP والخوادم
- Apache HTTPD:
- CVE-2017-7659 (انهيار عن بُعد في mod_http2)
- CVE-2017-9789 (استخدام بعد التحرير Use-after-free)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: انهيار عن بُعد قبل المصادقة (commit 28652bca)
- BIND: أخطاء متعددة
- NGINX Unit: حلقة لا نهائية
- ProFTPD: CVE-2019-18217 (حرمان من الخدمة DoS)
- Samba: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
التشفير وSSL
- OpenSSL:
- CVE-2016-6309 (حرج، احتمالية تنفيذ كود عن بُعد RCE)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL: انهيارات متعددة وعمليات تحرير غير صالحة
- BoringSSL: استخدام ذاكرة غير مهيأة
- Crypto++: CVE-2016-9939 (حرمان من الخدمة عن بُعد)
اللغات والمفسِّرات
- PHP: أخطاء WDDX، انهيارات عامة في المفسِّر
- Python/Ruby: أخطاء في المفسِّر
- Rust: حالات هلع/مشكلات أمان في
regex، h2، sleep-parser، lewton
- Perl: انهيارات متعددة في المفسِّر
الوسائط والتنسيقات
- FreeType 2: CVE-2010-2497 حتى CVE-2010-2527 (أكثر من 7 CVEs)
- LibTIFF: أخطاء متعددة
- LibJPEG/Turbo: أخطاء متعددة
- VLC: تحرير مزدوج يؤدي إلى تنفيذ كود عن بُعد (Double-free RCE)
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): مشكلات أمنية متعددة (Project Zero)
- LibreOffice: تلف في الذاكرة
النظام والأدوات
- Systemd: تم اختباره بواسطة honggfuzz
- fwupd: تم اكتشاف أكثر من 17 خطأ
- TCPDump: أخطاء متعددة
- Rsyslog: أخطاء متعددة
(راجع OSS-Fuzz لمئات الحالات الإضافية)
مشاريع تستخدم Honggfuzz
- Google OSS-Fuzz: تشويش مستمر للبرمجيات مفتوحة المصدر.
- Android: يُستخدم من قبل فريق أمان Android.
- Rust: حزمة
honggfuzz-rs لتشويش كود Rust.
- Bitcoin Core: بنية تحتية للتشويش.
- Apache HTTP Server: تشويش في التكامل المستمر (CI).
- Systemd: تشويش في التكامل المستمر (CI).
- Cifasis QuickFuzz
- Mozilla FuzzOS
الترخيص
رخصة Apache 2.0.
هذا ليس منتجًا رسميًا من Google