باحثون من جامعة ستانفورد وجامعة كاليفورنيا في سان دييغو وجامعة تكساس في أوستن أدوات ، والتي يمكن استخدامها كطبقة عزل إضافية لمنع الثغرات الأمنية في مكتبات الوظائف. يهدف RLBox إلى معالجة مشكلة أمان مكتبات الجهات الخارجية غير الموثوق بها والتي لا تخضع لسيطرة المطورين ، ولكن الثغرات الأمنية التي يمكن أن تعرض المشروع الرئيسي للخطر.
شركة موزيلا قم بتفعيل RLBox في Linuxإصدارات من فايرفوكس 74 و macOS- يقوم Firefox 75 ببناء بنية لعزل تنفيذ المكتبة مسؤول عن تقديم الخطوط. في الوقت نفسه ، لا يقتصر RLBox على Firefox ويمكن استخدامه لعزل أي مكتبات في مشاريع عشوائية. RLBox بموجب ترخيص MIT. يدعم RLBox حاليًا المنصات Linux и macOS، يدعم Windows متوقع لاحقاً.
ينحصر عمل RLBox في تجميع كود C / C ++ الخاص بالمكتبة المعزولة في كود WebAssembly ذي المستوى المنخفض ، والذي يتم تنسيقه بعد ذلك كوحدة نمطية WebAssembly ، ويتم تعيين أذوناتها فيما يتعلق بهذه الوحدة فقط ( على سبيل المثال ، مكتبة لمعالجة السلاسل لن تكون قادرة على فتح مقبس الشبكة أو الملف). يتم تحويل كود C / C ++ إلى WebAssembly باستخدام .
للتنفيذ المباشر ، يتم تجميع وحدة WebAssembly في كود أصلي باستخدام مترجم ويعمل في "معالجة نانوية" منفصلة ومعزولة عن بقية ذاكرة التطبيق. يعتمد مترجم Lucet على نفس رمز محرك JIT يستخدمه Firefox لأداء WebAssembly.
تعمل الوحدة المجمعة في منطقة ذاكرة منفصلة ولا يمكنها الوصول إلى بقية مساحة العنوان. إذا تم استغلال الثغرة الأمنية في المكتبة ، فسيكون المهاجم محدودًا ولن يتمكن من الوصول إلى مناطق الذاكرة الخاصة بالعملية الرئيسية أو نقل التحكم خارج البيئة المعزولة.
للمطورين رفيع المستوى ، والذي يسمح لك باستدعاء وظائف المكتبة في وضع العزل. لا تتطلب معالجات WebAssembly تقريبًا أي موارد إضافية والتفاعل معها ليس أبطأ بكثير من استدعاء الوظائف العادية (يتم تنفيذ وظائف المكتبة في شكل كود أصلي ، ولا يحدث الحمل الزائد إلا عند نسخ البيانات والتحقق منها في عملية التفاعل مع بيئة معزولة) . لا يمكن استدعاء وظائف المكتبة المقفلة مباشرة ويجب الوصول إليها باستخدام
طبقة invoke_sandbox_function ().
في المقابل ، إذا دعت الحاجة إلى استدعاء الوظائف الخارجية من المكتبة ، فيجب تحديد هذه الوظائف بشكل صريح باستخدام طريقة register_callback (بشكل افتراضي ، يوفر RLBox الوصول إلى الوظائف ). لضمان سلامة الذاكرة ، لا يكفي عزل تنفيذ الكود ، ومن الضروري أيضًا التأكد من التحقق من تدفقات البيانات المرتجعة.
يتم وضع علامة على القيم التي تم إنشاؤها في البيئة المعزولة على أنها غير جديرة بالثقة ومحدودة بـ و "التنظيف" تتطلب ونسخ إلى ذاكرة التطبيق.
بدون التنظيف ، تؤدي محاولة استخدام البيانات الملوثة في سياق يتطلب بيانات منتظمة (والعكس صحيح) إلى حدوث أخطاء في وقت الترجمة. يتم نقل وسيطات الوظائف الصغيرة وقيم الإرجاع والهياكل عن طريق النسخ بين ذاكرة العملية وذاكرة وضع الحماية. بالنسبة لمجموعات البيانات الكبيرة ، يتم تخصيص الذاكرة في بيئة معزولة ، ويتم إرجاع مؤشر "مرجع وضع الحماية" المباشر إلى العملية الرئيسية.
المصدر: opennet.ru
