
وصل الصدأ أيضًا إلى Chromium
كشف النقاب عن جوجل مؤخرا من خلال منشور لتضمين لغة برمجة Rust بين اللغات المسموح بها في كود مشروع Chromium.
يذكر أنه للإدراج هناك سلسلة من المتطلبات بالنسبة لمكتبات Rust التابعة لجهات خارجية التي تطلب التكامل في قاعدة بيانات Chromium ، على سبيل المثال ، يجب أن تتفوق المكتبة على نظيراتها من حيث السرعة واستهلاك الذاكرة والاستقرار ، أو أن تكون التطبيق الوحيد لتقنية معينة.
مكتبات الصدأ مقبولة أيضًا عندما يمكن تنفيذ الوظيفة في عملية مميزة ، أو عند استخدام المكتبة يقلل من مخاطر الأخطاء مقارنة بالمكتبات الأخرى أو كود C ++. لم يتم تحديد المكتبات التي يمكن تضمينها في Chromium بعد.
القرار كجزء من مبادرة لمنع ظهور أخطاء الذاكرة في قاعدة بيانات Chrome. وفقًا للإحصاءات التي تم تقديمها قبل عامين ، فإن 70٪ من مشكلات الأمان الحرجة والخطيرة في Chromium ترجع إلى أخطاء الذاكرة.
استخدام لغة Rust التي تركز على إدارة الذاكرة الآمنة ويوفر إدارة تلقائية للذاكرة ، سيقلل من مخاطر الثغرات الأمنية التي تسببها مشكلات مثل الوصول إلى منطقة من الذاكرة بعد تحريرها وتجاوز سعة المخزن المؤقت.
يتم توفير معالجة الذاكرة الآمنة في Rust في وقت الترجمة عن طريق التحقق من المرجع وتتبع ملكية الكائن وعمر الكائن (النطاق) ، بالإضافة إلى تقييم الوصول إلى الذاكرة للتأكد من صحتها أثناء تنفيذ التعليمات البرمجية. يوفر Rust أيضًا حماية تجاوز عدد صحيح ، ويتطلب تهيئة إلزامية للقيم المتغيرة قبل الاستخدام ، ويعالج الأخطاء بشكل أفضل في المكتبة القياسية ، ويفرض مفهوم المراجع والمتغيرات الثابتة بشكل افتراضي ، ويوفر كتابة ثابتة قوية لتقليل الأخطاء المنطقية.
سيجعل استخدام Rust من الأسهل والأكثر أمانًا تطبيق "قاعدة التنفيذ" التي تستخدمها Google للحفاظ على أمان قاعدة الشفرات الخاصة بها.
وفقًا لهذه القاعدة ، يجب ألا يفي أي رمز تضيفه بأكثر من شرطين من الشروط الثلاثة: العمل مع إدخال غير مؤكد ، واستخدام لغة برمجة غير آمنة (C / C ++) ، وتشغيل بامتيازات عالية. ويترتب على هذه القاعدة أنه يجب تقليل الكود الخاص بمعالجة البيانات الخارجية إلى أقل امتيازات (معزولة) أو كتابته بلغة برمجة آمنة.
في حالة Rust ، التي تم تطويرها في الأصل مع وضع المتصفح في الاعتبار ، يمكن أن يتم التكامل مع الكود الحالي دون استخدام IPC ومع تعقيد أقل لتنظيم الحماية من أخطاء الذاكرة ، مما يؤدي إلى تسريع عملية التطوير (يتطلب كتابة رمز أقل ومراجعة أسهل) وتقليل عدد الأخطاء المتعلقة بالأمان.
لتبسيط التكامل صدأ كود برمز C ++ الحالي وتجنب المخاطر والقيود المرتبطة بالتكامل حاليًا تقرر تقييد التفاعل أحادي الاتجاه: استدعاء Rust من C ++ (على سبيل المثال ، لا يمكن استدعاء رمز Rust إلا من كود C ++) عبر وظائف API ، ولكن لا يتم خلطها برمز C ++) ، والتي ستحافظ أيضًا على شجرة التبعية تحت السيطرة.
القيد الثاني هو دعم مكتبات الجهات الخارجية فقط التي تأتي في شكل مكونات منفصلة غير مرتبطة بـ Chromium ولها واجهة برمجة تطبيقات موجهة للمهام.
بالإضافة إلى استخدام Rust لمنع استغلال الثغرات الأمنية للذاكرة بعد الاستخدام ، بدءًا من إصدار Chrome 102 ، بدأ كود C ++ باستخدام نوع MiraclePtr (raw_ptr) بدلاً من ذلك. عادي يوفر خطافًا للمؤشر يقوم بإجراء فحوصات إضافية للوصول المحرر مناطق الذاكرة وكتلها إذا تم العثور على مثل هذه الوصول.
من المقدر أن يكون تأثير طريقة الحماية الجديدة على الأداء واستهلاك الذاكرة ضئيلاً.
أخيرًا ، يجب ذكر ذلك لا توجد خطط بعد لإعادة كتابة التعليمات البرمجية الموجودة في Rust، ولكن من الآن فصاعدًا ، سيتم السماح بدمج مكتبات الجهات الخارجية المكتوبة بلغة Rust في قاعدة التعليمات البرمجية.
أضاف نظام البناء بالفعل أدوات لتجميع كود Rust ، وإجراء الاختبارات ، ودمج مكونات Rust مع كود C ++. من المتوقع أن يظهر رمز Rust كجزء من إصدارات Chrome العام المقبل.
مصدر: https://security.googleblog.com