The Chromium Chronicle #9: ClusterFuzz

الحلقة 9: من تأليف "أدريان تايلور" في Mountain View (كانون الأول (ديسمبر) 2019)
الحلقات السابقة

قد يُطلب منك إصلاح أخطاء الأمان ذات الأولوية العالية التي اكتشفتها ClusterFuzz. ما هي هذه الميزة؟ هل يجب التعامل مع هذه الأخطاء على محمل الجدّ؟ كيف يمكنك المساعدة؟

مخطط تدفق ضبابي

إدخال خلاصات ClusterFuzz في Chrome ومراقبة الأعطال وتتضمَّن بعض إصدارات Chrome هذه عمليات تحقّق إضافية مُفعَّلة، على سبيل المثال AddressSanitizer، الذي يبحث عن أخطاء أمان الذاكرة.

يعيّن ClusterFuzz المكونات بناءً على موقع التعطُّل، ويعيّن درجة الخطورة استنادًا إلى نوع التعطُّل وما إذا كان قد حدث في عملية تحميها وضع الحماية. على سبيل المثال، سيكون استخدام كومة الذاكرة المؤقتة بعد اكتمالها أمرًا شديد الخطورة، ما لم يكن ذلك في معالجة المتصفّح، وفي هذه الحالة يكون الأمر بالغ الأهمية (ليس هناك وضع حماية للحد من التأثير):

class Foo {
  Widget* widget;
};

void Foo::Bar() {
  delete widget;
  ...
  widget->Activate();  // Bad in the renderer process, worse in the
                       // browser process. Obviously, real bugs are
                       // more subtle. Usually.

تُنشئ أداة ClusterFuzz مدخلات من خلال استخدام الرموز القصيرة أو من الأخطاء التي يتم إرسالها خارجيًا. وتعتمد بعض هذه الأدوات على libFuzzer التي تطوّر الإدخالات لزيادة تغطية الرموز البرمجية. يفهم البعض القواعد النحوية للغة الإدخال التي تم تحويلها إلى protobufs. بعد أن يعثر ClusterFuzz على عُطل، سيحاول تقليل حالة اختبار الإدخال وحتى تقسيمه إلى العثور على الخطأ المُخالف. يجد الكثير...

يمكنك المساعدة في ما يلي:

  • تسبب بجنون العفوية بشأن أعمار الكائنات وتجاوزها للأعداد الصحيحة.
  • أضِف قيمًا جديدة، خاصةً عند معالجة بيانات غير موثوقة أو عناوين IPC (راجع الروابط أدناه والتي غالبًا ما تكون أقل من 20 سطرًا من الرمز).
  • أصلح الأخطاء التي أبلغ عنها ClusterFuzz: يمكن الوثوق في استدلالات مستوى الخطورة لأنّها تستند إلى قابلية الاستغلال على أرض الواقع: حتى أنّ تجاوز البايت أحادي البايت أدّى إلى تنفيذ رمز عشوائي من خلال المهاجم.

المراجِع