موزیلا اجرای فناوری جداسازی کتابخانه RLBox را آغاز کرد

محققان دانشگاه استنفورد، دانشگاه کالیفرنیا در سن دیگو و دانشگاه تگزاس در آستین توسعه یافته ابزار RLBox، که می تواند به عنوان یک لایه جداسازی اضافی برای مسدود کردن آسیب پذیری ها در کتابخانه های تابع استفاده شود. هدف RLBox حل مشکل امنیتی کتابخانه های شخص ثالث غیرقابل اعتماد است که تحت کنترل توسعه دهندگان نیستند، اما آسیب پذیری های آنها می تواند پروژه اصلی را به خطر بیندازد.

شرکت موزیلا برنامه ها از RLBox در بیلدهای لینوکس فایرفاکس 74 و بیلدهای macOS فایرفاکس 75 برای جداسازی اجرای کتابخانه استفاده کنید. گرافیت، مسئول رندر فونت ها است. با این حال، RLBox مختص فایرفاکس نیست و می تواند برای جداسازی هر کتابخانه در پروژه های دلخواه استفاده شود. تحولات RLBox گسترش تحت مجوز MIT RLBox در حال حاضر از پلتفرم‌های لینوکس و macOS پشتیبانی می‌کند و انتظار می‌رود بعداً از ویندوز پشتیبانی کند.

سازوکار کار RLBox به کامپایل کد C/C++ یک کتابخانه ایزوله به کد WebAssembly میانی سطح پایین می رسد، که سپس به عنوان یک ماژول WebAssembly طراحی می شود، مجوزهای آن فقط در رابطه با این ماژول تنظیم می شود (به عنوان مثال، یک کتابخانه). برای پردازش رشته ها نمی توانند سوکت یا فایل شبکه را باز کنند). تبدیل کد C/C++ به WebAssembly با استفاده از آن انجام می شود wasi-sdk.

برای اجرای مستقیم، ماژول WebAssembly با استفاده از یک کامپایلر در کد ماشین کامپایل می شود لوست و در یک "نانو فرآیند" جداگانه ایزوله شده از بقیه حافظه برنامه اجرا می شود. کامپایلر Lucet بر اساس همان کد موتور JIT است جرثقیل زدن، در فایرفاکس برای اجرای WebAssembly استفاده می شود.

ماژول مونتاژ شده در یک قسمت حافظه جداگانه کار می کند و به بقیه فضای آدرس دسترسی ندارد. اگر یک آسیب پذیری در کتابخانه مورد سوء استفاده قرار گیرد، مهاجم محدود خواهد شد و نمی تواند به مناطق حافظه فرآیند اصلی دسترسی داشته باشد یا کنترل را به خارج از محیط ایزوله منتقل کند.

موزیلا اجرای فناوری جداسازی کتابخانه RLBox را آغاز کرد

اطلاعات سطح بالا برای توسعه دهندگان ارائه شده است API، که به شما امکان می دهد توابع کتابخانه را در حالت ایزوله فراخوانی کنید. کنترل کننده های WebAssembly تقریباً به هیچ منبع اضافی نیاز ندارند و تعامل با آنها بسیار کندتر از فراخوانی توابع معمولی نیست (توابع کتابخانه به شکل کد بومی اجرا می شوند و هزینه های سربار فقط هنگام کپی و بررسی داده ها در طول تعامل با محیط ایزوله ایجاد می شود). توابع کتابخانه ایزوله را نمی توان مستقیماً فراخوانی کرد و باید با استفاده از آنها به آنها دسترسی داشت
لایه invoke_sandbox_function().

به نوبه خود، اگر نیاز به فراخوانی توابع خارجی از کتابخانه باشد، این توابع باید به طور صریح با استفاده از روش register_callback تعریف شوند (به طور پیش فرض، RLBox دسترسی به توابع را فراهم می کند. کتابخانه استاندارد). برای اطمینان از ایمنی حافظه، جداسازی اجرای کد کافی نیست و همچنین مستلزم بررسی جریان داده های برگشتی است.

ارزش های تولید شده در یک محیط ایزوله به عنوان غیرقابل اعتماد و استفاده محدود مشخص می شوند علائم آلوده و برای "تمیز کردن" آنها نیاز دارند تایید و کپی کردن در حافظه برنامه
بدون پاکسازی، تلاش برای استفاده از داده های آلوده در زمینه ای که به داده های معمولی نیاز دارد (و بالعکس) منجر به ایجاد خطا در زمان کامپایل می شود. آرگومان های تابع کوچک، مقادیر بازگشتی و ساختارها از طریق کپی کردن بین حافظه پردازش و حافظه sandbox منتقل می شوند. برای مجموعه داده های بزرگ، حافظه در یک محیط ایزوله تخصیص داده می شود و یک اشاره گر سندباکس مرجع مستقیم به فرآیند اصلی بازگردانده می شود.

منبع: opennet.ru

اضافه کردن نظر