Mozilla розпочинає впровадження технології ізоляції бібліотек RLBox

Дослідники зі Стендфордського університету, Каліфорнійського університету в Сан-Дієго та Техаського університету в Остіні розробили інструментарій RLBox, який може бути використаний як додатковий рівень ізоляції для блокування вразливостей у бібліотеках функцій. RLBox націлений на вирішення проблеми з безпекою сторонніх бібліотек, що не заслуговують на довіру, які не підконтрольні розробникам, але вразливості в яких можуть скомпрометувати основний проект.

Компанія Mozilla планує задіяти RLBox у Linux-складаннях Firefox 74 та macOS-складаннях Firefox 75 для ізоляції виконання бібліотеки графітовий, що відповідає за малювання шрифтів. При цьому RLBox не є специфічним для Firefox і може застосовуватися для ізоляції будь-яких бібліотек у довільних проектах. Напрацювання RLBox поширюються під ліцензією MIT. В даний час RLBox підтримує роботу на платформах Linux та macOS, підтримка Windows очікується пізніше.

механізм RLBox зводиться до компіляції C/C++ коду ізольованої бібліотеки в низькорівневий проміжний код WebAssembly, який потім оформляється у вигляді WebAssembly-модуля, повноваження якого задаються у прив'язці тільки до цього модуля (наприклад, бібліотека для обробки рядків не зможе відкрити мережний сокет або файл) . Перетворення коду C/C++ на WebAssembly здійснюється за допомогою wasi-sdk.

Для безпосереднього виконання WebAssembly модуль компілюється в машинний код за допомогою компілятора Lucet і виконується в окремому "нанопроцесі", ізольованому від решти пам'яті програми. Компілятор Lucet заснований на тому ж коді, що і JIT-движок Кранліфт, що використовується в Firefox для виконання WebAssembly.

Зібраний модуль працює в окремій області пам'яті і не має доступу до іншого адресного простору. У разі експлуатації вразливості в бібліотеці атакуючий буде обмежений і не зможе звернутися до областей пам'яті основного процесу або передати керування поза ізольованим оточенням.

Mozilla розпочинає впровадження технології ізоляції бібліотек RLBox

Для розробників надано високорівневий API, що дозволяє викликати функції бібліотеки в режимі ізоляції. WebAssembly-обработчики майже вимагають додаткових ресурсів і взаємодія із нею повільніше виклику звичайних функцій (функції бібліотеки виконується у вигляді нативного коду, а накладні витрати виникають лише за копіюванні і перевірці даних у процесі взаємодії із ізольованим оточенням). Функції ізольованої бібліотеки не можуть бути викликані безпосередньо та для звернення до них необхідно застосовувати
прошарок invoke_sandbox_function().

У свою чергу, якщо з бібліотеки необхідно викликати зовнішні функції, ці функції повинні бути явно визначені за допомогою register_callback (за замовчуванням RLBox надає доступ до функцій стандартної бібліотеки). Для забезпечення безпечної роботи з пам'яттю (memory safety) ізоляції виконання коду недостатньо і потрібно також забезпечити перевірку потоків даних, що повертаються.

Сформовані в ізольованому оточенні значення позначаються як незаслужені довіри, обмежуються за допомогою tainted-міток і для «очищення» вимагають верифікації та копіювання в пам'ять програми.
Без очищення, спроба використання tainted-даних у контексті, що вимагає звичайних даних (і навпаки) призводить до генерації помилок на етапі компіляції. Невеликі аргументи функцій, значення і структури, що повертаються, передаються через копіювання між пам'яттю процесу і пам'яттю ізольованого оточення. Для великих наборів даних пам'ять виділяється у ізольованому оточенні, а основному процесу повертається прямий покажчик «sandbox-reference».

Джерело: opennet.ru

Додати коментар або відгук