
مُحاكي pcode متعدد البُنى المعمارية يستخدم Ghidra/Sleigh لاختبار الفيزينج عبر AFL++ للملفات الثنائية والبرامج الثابتة والأهداف المدمجة؛ يكتشف أخطاء إفساد الذاكرة عبر ASAN.

Ghidralligator هو محاكٍ (emulator) متعدد البنى المعمارية مكتوب بلغة C++ لـ pcode، مبني على Ghidra libsla، ومصمم للاختبار العشوائي (fuzzing) باستخدام AFL++.
يتيح إجراء اختبار عشوائي قائم على المحاكاة مع الحفاظ على أداء مثير للاهتمام عند التعامل مع الملفات الثنائية التي تعمل على بنى معمارية غير مألوفة.
طبيعته القابلة للتوسيع تجعل من السهل محاكاة كل بنية معمارية حرفيًا (طالما يمكنك كتابة ملف مواصفات Sleigh المقابل) لاختبار أي جزء من الكود بشكل عشوائي.
يمكن تشغيل Ghidralligator على نظام Linux. يتطلب فقط وجود إصدار GCC يدعم لغة C++ الإصدار 17 (تم اختباره ويعمل على إصدار GCC 12.2.0).
تبعيات Ghidra مدمجة داخل المشروع نفسه ضمن المجلد "./src/".
لتثبيت Ghidralligator بشكل صحيح، يجب عليك تنزيل وترجمة AFL++ كما يلي:
git clone https://github.com/AFLplusplus/AFLplusplus
cd AFLplusplus
make distrib
sudo make install
git clone https://github.com/airbus-cyber/ghidralligator
cd ghidralligator
make ghidralligator
يهدف Ghidralligator إلى سد الفجوة بين المحاكيات الموجودة بالفعل والتي تتطلب الكثير من الإعداد والتعديلات اليدوية لتهيئة وتشغيل واختبار الملف الثنائي، وبين المحاكيات "ذات الصندوق الأسود" التي يصعب توسيعها وغير المناسبة للتطبيقات المحددة وغير المعتادة.
استخدامه الرئيسي هو البحث عن الثغرات في الملفات الثنائية مغلقة المصدر، وخاصة عند استهداف تطبيقات/برامج ثابتة (firmwares) للأجهزة المدمجة التي تعمل على بنى معمارية غير مألوفة.
Ghidralligator هو الخليفة لـ afl_ghidra_emu. إنه يحسّن سرعة التنفيذ بشكل كبير ويتضمن ميزات مفيدة مثل اكتشاف تلف ذاكرة الكومة (ASAN).
يمكن اكتشاف مجموعة واسعة من حالات تلف الذاكرة: عمليات القراءة/الكتابة خارج الحدود، الاستخدام بعد التحرير (use-after-free)، التحرير المزدوج (double-free)، قراءة ذاكرة غير مهيأة، انتهاكات الوصول للقراءة/الكتابة/التنفيذ...
لتشغيل Ghidralligator يجب تنفيذ الخطوات التالية:
لفهم كيفية استخدام Ghidralligator، تم إعداد مثال لبرنامج قابل للاستغلال، مُجمّع على بنى معمارية مختلفة.
يمكنك تشغيل run_examples.sh لمشاهدة آليات ASAN أثناء العمل.
يأتي Ghidralligator مع عدة خيارات لسطر الأوامر:
usage: ./ghidralligator [OPTION]
-h Print this help and exit.
-m [replay|fuzz] Specify an emulation strategy. [REQUIRED]
In 'replay' mode, the emulator will only launch the program once, exiting after a single loop.
In 'fuzz' mode, this program must be launched through AFL.
-c [FILENAME] Specify the emulator json configuration file to load. [REQUIRED]
-i [FILENAME] Specify a test-case file to insert during a replay session. [OPTIONAL]
-I Display info log (/!\ Slow down the emulation). [OPTIONAL]
-D Display debug and info log (/!\ Slow down the emulation). [OPTIONAL]
-t Store log in ./ghidraligator.log file. [OPTIONAL]
الاستخدام لمحاكاة قياسية:
$ ./ghidralligator -m replay -c examples/x86/config.json -I -i examples/x86/input/normal_use_case.bin

الاستخدام لجلسة اختبار عشوائي (fuzzing) قياسية باستخدام AFL++:
mkdir afl_inputs afl_outputs
echo -n "AAAAAA" > ./afl_inputs/input.bin
$ AFL_SKIP_BIN_CHECK=1 afl-fuzz -D -i ./afl_inputs -o ./afl_outputs/ -- ./ghidralligator -m fuzz -c examples/x86/config.json

يمكن لـ Ghidralligator محاكاة الكود بفضل ملف .sla (ملف تعريف تعليمات Sleigh). ملفات SLA المقدمة من مجتمع Ghidra قد تكون منفذة جزئيًا. للحصول على محاكاة متسقة، قد يحتاج المستخدمون إلى إكمال تعريف بنية Sleigh ذات الصلة أو إضافة بعض الخطافات.
يعتمد Ghidralligator على Ghidra الذي لم يُصمم ليكون عالي الأداء في أغراض المحاكاة. وبالتالي لا يمكنه منافسة أدوات الاختبار العشوائي الكلاسيكية مثل afl_qemu على البنى المعمارية القياسية (ملفات x86 linux / windows الثنائية).
نظرًا لأن مشروع Ghidra في تطور مستمر، لا يُنصح بتحديث تبعيات Ghidralligator يدويًا لإصدارات Ghidra المستقبلية. تم بناء الأداة واختبارها مع مصادر مفكك الشفرة Ghidra 11.0.3. قد تتعطل مع الإصدارات المستقبلية، كما أن التوافق مع الإصدارات الأقدم من 11.0.3 غير مدعوم. هذا الأمر شفاف بالنسبة للمستخدم، حيث يتم توفير تبعيات Ghidra في هذا المستودع.
يتم إصدار Ghidralligator بموجب رخصة Apache الإصدار 2.0.
يتضمن كود Ghidralligator كودًا من مشروع Ghidra من قبل NationalSecurityAgency، المُصدر بموجب رخصة Apache 2.0.
يتضمن محلل ملفات تكوين Ghidralligator مكتبة C++ json بواسطة Niels Lohmann، المُصدرة بموجب رخصة MIT.
تتضمن وحدة Ghidralligator مكتبة xxHash بواسطة Yann Collet، المُصدرة بموجب رخصة BSD 2-Clause.