تبدأ Mozilla في تنفيذ تقنية عزل مكتبة RLBox

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

شركة موزيلا تخطط استخدم RLBox في إصدارات Linux من إصدارات Firefox 74 و macOS من Firefox 75 لعزل تنفيذ المكتبة الجرافيتمسؤول عن تقديم الخطوط. في الوقت نفسه ، لا يقتصر RLBox على Firefox ويمكن استخدامه لعزل أي مكتبات في مشاريع عشوائية. التطورات RLBox الانتشار بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. يدعم RLBox حاليًا أنظمة Linux و macOS ، مع توقع دعم Windows في وقت لاحق.

تقنية ينحصر عمل RLBox في تجميع كود C / C ++ الخاص بالمكتبة المعزولة في كود WebAssembly ذي المستوى المنخفض ، والذي يتم تنسيقه بعد ذلك كوحدة نمطية WebAssembly ، ويتم تعيين أذوناتها فيما يتعلق بهذه الوحدة فقط ( على سبيل المثال ، مكتبة لمعالجة السلاسل لن تكون قادرة على فتح مقبس الشبكة أو الملف). يتم تحويل كود C / C ++ إلى WebAssembly باستخدام wasi-sdk.

للتنفيذ المباشر ، يتم تجميع وحدة WebAssembly في كود أصلي باستخدام مترجم لوسيت ويعمل في "معالجة نانوية" منفصلة ومعزولة عن بقية ذاكرة التطبيق. يعتمد مترجم Lucet على نفس رمز محرك JIT رافعةيستخدمه Firefox لأداء WebAssembly.

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

تبدأ Mozilla في تنفيذ تقنية عزل مكتبة RLBox

للمطورين رفيع المستوى API، والذي يسمح لك باستدعاء وظائف المكتبة في وضع العزل. لا تتطلب معالجات WebAssembly تقريبًا أي موارد إضافية والتفاعل معها ليس أبطأ بكثير من استدعاء الوظائف العادية (يتم تنفيذ وظائف المكتبة في شكل كود أصلي ، ولا يحدث الحمل الزائد إلا عند نسخ البيانات والتحقق منها في عملية التفاعل مع بيئة معزولة) . لا يمكن استدعاء وظائف المكتبة المقفلة مباشرة ويجب الوصول إليها باستخدام
طبقة invoke_sandbox_function ().

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

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

المصدر: opennet.ru

إضافة تعليق