70% من مشكلات الأمان في Chromium ناتجة عن أخطاء في الذاكرة

مطورو مشروع الكروم تحليلها تم تحديد 912 نقطة ضعف خطيرة وخطيرة في الإصدارات المستقرة من Chrome منذ عام 2015، وخلصت إلى أن 70% منها كانت ناجمة عن انعدام أمان الذاكرة (أخطاء عند العمل باستخدام المؤشرات في كود C/C++). نصف هذه المشاكل (36.1%) سببها الوصول إلى المخزن المؤقت بعد تحرير الذاكرة المرتبطة به (الاستخدام بعد الاستخدام).

70% من مشكلات الأمان في Chromium ناتجة عن أخطاء في الذاكرة

عند تصميم Chromium كان ذلك في البداية المنصوص عليهاأنه من الممكن ظهور أخطاء في التعليمات البرمجية، لذلك تم التركيز بشكل كبير على استخدام عزل وضع الحماية للحد من عواقب نقاط الضعف. في الوقت الحالي، وصلت إمكانيات استخدام هذه التكنولوجيا إلى الحد الأقصى لقدراتها، كما أن المزيد من التجزئة في العمليات أمر غير عملي من وجهة نظر استهلاك الموارد.

للحفاظ على أمان قاعدة التعليمات البرمجية، تفرض Google أيضًا "قاعدة اثنين"، والتي بموجبها يجب أن لا يستوفي أي كود مضاف أكثر من شرطين من ثلاثة شروط: العمل مع بيانات الإدخال التي لم يتم التحقق من صحتها، واستخدام لغة برمجة غير آمنة (C/C++) والتشغيل بامتيازات مرتفعة. تشير هذه القاعدة إلى أن كود معالجة البيانات الخارجية يجب إما أن يتم تقليله إلى الحد الأدنى من الامتيازات (معزولًا) أو كتابته بلغة برمجة آمنة.

لتعزيز أمان قاعدة التعليمات البرمجية بشكل أكبر، تم إطلاق مشروع لمنع ظهور أخطاء الذاكرة في قاعدة التعليمات البرمجية. هناك ثلاث طرق رئيسية: إنشاء مكتبات C++ بوظائف التشغيل الآمن للذاكرة وتوسيع نطاق أداة تجميع البيانات المهملة باستخدام آليات حماية الأجهزة MTE (امتداد وضع علامات الذاكرة) وكتابة المكونات باللغات التي تضمن العمل الآمن مع الذاكرة (Java، Kotlin، JavaScript، Rust، Swift).

ومن المتوقع أن يتركز العمل في مجالين:

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

يعد استخدام المكتبات الآمنة للذاكرة الطريقة الأبسط، ولكنها أيضًا أقل كفاءة. تم تصنيف إعادة كتابة التعليمات البرمجية في Rust على أنها الطريقة الأكثر فعالية ولكنها أيضًا مكلفة للغاية.

70% من مشكلات الأمان في Chromium ناتجة عن أخطاء في الذاكرة

المصدر: opennet.ru

إضافة تعليق