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".

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Mozilla начинает внедрение технологии изоляции библиотек RLBox», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.