Mozilla начинает внедрение технологии изоляции библиотек RLBox
26 февраля 2020 года
Исследователи из Стендфордского университета, Калифорнийского университета в Сан-Диего и Техасского университета в Остине разработали инструментарий RLBox, который может применяться как дополнительный уровень изоляции для блокирования уязвимостей в библиотеках функций. RLBox нацелен на решение проблемы с безопасностью незаслуживающих доверия сторонних библиотек, которые не подконтрольны разработчикам, но уязвимости в которых могут скомпрометировать основной проект.
Компания Mozilla планирует задействовать RLBox в Linux-сборках Firefox 74 и macOS-сборках Firefox 75 для изоляции выполнения библиотеки Graphite, отвечающей за отрисовку шрифтов. При этом RLBox не специфичен для Firefox и может применяться для изоляции любых библиотек в произвольных проектах. Наработки RLBox распространяются под лицензией MIT. В настоящее время RLBox поддерживает работу на платформах Linux и macOS, поддержка Windows ожидается позднее.
Механизм работы RLBox сводится к компиляции C/C++ кода изолируемой библиотеки в низкоуровневый промежуточный код WebAssembly, который затем оформляется в виде WebAssembly-модуля, полномочия которого задаются в привязке только к этому модулю (например, библиотека для обработки строк не сможет открыть сетевой сокет или файл). Преобразование кода C/C++ в WebAssembly осуществляется при помощи wasi-sdk.
Для непосредственного выполнения WebAssembly-модуль компилируется в машинный код при помощи компилятора Lucet и выполняется в отдельном "нанопроцессе", изолированном от остальной памяти приложения. Компилятор Lucet основан на том же коде, что и JIT-движок Cranelift, применяемый в Firefox для выполнения WebAssembly.
Собранный модуль работает в отдельной области памяти и не имеет доступа к остальному адресному пространству. В случае эксплуатации уязвимости в библиотеке атакующий будет ограничен и не сможет обратиться к областям памяти основного процесса или передать управление вне изолированного окружения.
Для разработчиков предоставлен высокоуровневый API, который позволяет вызывать функции библиотеки в режиме изоляции. WebAssembly-обработчики почти не требуют дополнительных ресурсов и взаимодействие с ними не сильно медленнее вызова обычных функций (функции библиотеки выполняется в форме нативного кода, а накладные расходы возникают лишь при копировании и проверке данных в процессе взаимодействия с изолированным окружением). Функции изолированной библиотеки не могут быть вызваны напрямую и для обращения к ним необходимо применять прослойку invoke_sandbox_function().
В свою очередь, если из библиотеки необходимо вызвать внешние функции, данные функции должны быть явно определены при помощи метода register_callback (по умолчанию RLBox предоставляет доступ к функциям стандартной библиотеки (Архивная копия от 28 октября 2020 на Wayback Machine)). Для обеспечения безопасной работы с памятью (memory safety) изоляции выполнения кода недостаточно и требуется также обеспечить проверку возвращаемых потоков данных.
Сформированные в изолированном окружении значения помечаются как незаслуживающие доверия, ограничиваются при помощи tainted-меток (Архивная копия от 28 октября 2020 на Wayback Machine) и для "очистки" требуют верификации (Архивная копия от 28 октября 2020 на Wayback Machine) и копирования в память приложения. Без очистки, попытка использования tainted-данных в контексте, требующем обычных данных (и наоборот) приводит к генерации ошибок на этапе компиляции. Небольшие аргументы функций, возвращаемые значения и структуры передаются через копирование между памятью процесса и памятью изолированного окружения. Для больших наборов данных память выделяется в изолированном окружении, а основному процессу возвращается прямой указатель "sandbox-reference".
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.