The Chromium Chronicle #8: GWP-ASan: رصد الأخطاء في البرية

الحلقة الثامنة: من تأليف "فلاد تسيركليفيتش" في سياتل، واشنطن (تشرين الثاني (نوفمبر) 2019)
الحلقات السابقة

قد يكون من الصعب تصحيح أخطاء أمان الذاكرة، مثل استخدام ذاكرة معيّنة بعد تفريغها (Use-After-Free) أو تجاوز سعة المخزن المؤقت. تُعد أدوات مثل TitleSanitizer (ASan) مفيدة في تحديد أخطاء الذاكرة في اختبارات الوحدات وعمليات تجنّب الأخطاء، لكن لا تظهر الكثير من الأخطاء إلا بعد النشر للمستخدمين حيث تكون تكاليف ASan مرتفعة بشكل يعيقي.

GWP-ASan هي أداة رصد أخطاء الذاكرة التي تظهر في الذاكرة فقط وتم تصميمها للاستخدام في الحياة البرية. فهو يكتشف حالات الاستخدام بعد تحرير العناصر، وتدفقات المخزن المؤقت والتدفقات السفلية، وعمليات الحرجة المزدوجة. على عكس ASan، لا تكتشف الأخطاء في المكدس أو في G Suite العام.

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

على غرار ASan، تتضمّن تقارير أعطال GWP-ASan عمليات التخصيص وتتبُّع حِزم تخصيص الموقع الجغرافي للمساعدة في تصحيح مشاكل الذاكرة. لنلقِ نظرة على مثال (crbug/956230) لبعض البيانات الإضافية الواردة في واجهة مستخدِم التعطّل:

نشأ كل من الاستخدام وموقع الصفقة في PDFiumEngine::ExtendSelection(). يُظهر المصدر سريعًا أنّ الخطأ يستخدم مكرّر std::vector تم إبطال صلاحيته.

يتم تفعيل GWP-ASan على القناة الثابتة لعمليات التوزيع التي تم إجراؤها باستخدام malloc/new وPartitionAlloc على نظامَي التشغيل Windows وmacOS. دعم Android قيد التقدم. تم الإبلاغ عن أكثر من 60 خطأً في GWP-ASan حتى الآن وتم إصلاح حوالي 70٪. تُعد أعطال GWP-ASan جميع مشاكل الأمان المرشحة التي قد تكون قابلة للاستغلال، لذا يُرجى تصنيفها بسرعة وطلب النسخ الخلفية عند الضرورة.