
غوستاف (GUSTAVE) هي منصة اختبار ضبابي (Fuzzing) لأنوية أنظمة التشغيل المضمنة. تعتمد على QEMU وAFL (وجميع أشقائها من خوادم التفرع (forkserver)). تتيح اختبار أنوية أنظمة التشغيل بشكل ضبابي كما لو كانت تطبيقات بسيطة.
(c) Airbus 2021, sduverger
GUSTAVE هي منصة اختبار ضبابي (fuzzing) لنوى أنظمة التشغيل المضمنة. تعتمد على QEMU و AFL (وجميع مشتقات خادم التفرع forkserver). تتيح اختبار نوى أنظمة التشغيل مثل التطبيقات البسيطة.
بفضل QEMU، فهي متعددة المنصات. يمكن اعتبار GUSTAVE بمثابة تنفيذ خادم التفرع forkserver الخاص بـ AFL داخل QEMU، مع فحص دقيق للهدف.
صُممت GUSTAVE أساسًا لاستهداف نوى أنظمة التشغيل المضمنة. قد لا تكون الأداة الأفضل لاختبار النوى الكبيرة والمعقدة مثل تلك الموجودة في ويندوز أو لينكس أو ماك أو إس.
ومع ذلك، إذا كان لديك هدف يمكن تحضيره بتطبيق أو تطبيقين للإقلاع دون أي تفاعل من المستخدم، فقد يكون من المثير للاهتمام تجربة GUSTAVE.
تُستخدم أداة afl-fuzz من مشروع AFL لاختبار هدفك تلقائيًا. لكن AFL لا
يمكنها اختبار نواة نظام تشغيل مباشرةً، وتتوقع أن يقوم هدفها بتحليل حالات
الاختبار المُنشأة مباشرةً.
لتبسيط الأمر، يقوم afl-fuzz بتشغيل QEMU مع تكامل GUSTAVE كهدف. وبدورها،
ستتعامل GUSTAVE مع:
مثل وضع QEMU-المستخدم في مشروع AFL++، تطبق GUSTAVE آلية تحليل ثنائي على مستوى IR لـ QEMU TCG لتغطية الكود.
ومع ذلك، يمكنك اختيار تعطيلها وإعادة بناء كود نواة الهدف مع إخضاع أجزاء محددة فقط لتحليل تغطية الكود. ستحتاج إلى حقن شيمات AFL (shims) وقت البناء لتحديث خرائط البتات للتتبع. كان هذا هو نهجنا الأولي (انظر المنشورات).
أقل شيوعًا في الحلول الحالية، لا تهتم GUSTAVE بمراقبة ذُعر النواة (kernel panics).
نعتبرها أخطاءً مُدارة، ونريد اكتشاف سلوكيات غير قانونية لم تطلق أي إنذار.
لهذا الغرض، تعتمد GUSTAVE على خريطة بتات لتصفية الذاكرة موجهة للبايتات من درجة O(1) لاكتشاف الوصولات غير القانونية من النواة. قد يكون هناك جدل واسع حول تعريف ما يمكن اعتباره غير قانوني من وجهة نظر النواة. لكن في البيئات المضمنة المحدودة وعالية الحتمية، قد تجد نفسك مرتاحًا في تعريف مناطق الذاكرة الشرعية لبرنامجك الثابت وتتبع الوصولات خارج الحدود.
توجد طرق مشابهة، مثل:
خيارات تصميم GUSTAVE تستلزم الفروق التالية:
ومع ذلك، لا تزال بحاجة إلى إخبار GUSTAVE:
حاليًا، يُدعم فقط المضيف x86، ونظرًا لأن العديد من بيئات العمل تعتمد على هذه البنية، لا نعتبرها قيدًا مانعًا.
ينبع القيد من الطريقة التي طبقنا بها في البداية النهاية الخلفية لتصفية
الذاكرة على مستوى tcg-target للمسار السريع لتحميل/تخزين QEMU. قد تكون
بنية TCGPlugin الحديثة لاستدعاءات الذاكرة بديلاً لدعم أي مضيف.
قمنا بتطبيق واختبار دعم Intel x86 وPowerPC. تنفيذ GUSTAVE مستقل عن البنية. إذا كان بإمكانك تشغيل هدفك باستخدام QEMU، يمكنك اختباره باستخدام GUSTAVE بجهد قليل.
نقدم أمثلة للوحات
Intel 440FX
و PowerPC PREP
مع تكامل GUSTAVE. تنفيذ اللوحة الخاصة بك سهل جدًا، ويتكون من تغليف دالة
MACHINE_INIT لبنية معينة.
أضفنا أيضًا دعمًا لشيمات GUSTAVE للتحليل لبنيتي x86 و PowerPC إلى afl-gcc،
في حال كنت لا ترغب في استخدام التحليل الثنائي TCG.
نقدم تطويرات خاصة بنواة POK الدقيقة:
ستحتاج إلى:
اقرأ الدليل لهدف POK.
يمكن العثور على مواد من محاضرات مختلفة حول GUSTAVE على https://airbus-seclab.github.io/.