Проект Sandboxed API ( SAPI ) с открытым исходным кодом основан на проекте Sandbox2 от Google и призван сделать изолирование библиотек C/C++ менее обременительным.
Изолированный API обеспечивает три основных преимущества:
Вместо того, чтобы помещать в песочницу целые программы или изменять исходный код для помещения в песочницу части программы, как в Sandbox2, с помощью SAPI можно помещать в песочницу отдельные библиотеки C/C++. В результате SAPI изолирует основную программу от уязвимостей выполнения кода в библиотеке C/C++.
Наш рабочий девиз: «Однажды изолировать, использовать везде». Библиотеки, изолированные с помощью Sandboxed API, можно легко использовать повторно, что снимает нагрузку в будущих проектах. До Sandboxed API песочницы, доступные для использования в Google, требовали дополнительной работы по реализации для каждого нового экземпляра проекта, который должен был быть изолирован, даже если он повторно использовал ту же программную библиотеку. Политики Sandbox2 и другие ограничения, применяемые к изолированному процессу, приходилось каждый раз реализовывать заново, а механизмы обмена данными между доверенными и недоверенными частями кода приходилось разрабатывать с нуля.
Каждая библиотека SAPI использует строго определенную политику безопасности в отличие от типичного изолированного проекта, где политики безопасности должны охватывать весь объем системных вызовов/ресурсов всех используемых библиотек.
Проект SAPI был спроектирован, разработан и поддерживается членами команды Google Sandbox. Он также использует нашу проверенную на практике песочницу Sandbox2 . В настоящее время многие внутренние проекты используют SAPI для изоляции своих рабочих нагрузок.
Быстрый старт
Чтобы приступить к работе с Sandboxed API, выполните следующие действия:
- Установите необходимые зависимости (предполагается, что вы используете Debian 10 Buster):
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" |
sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
python3-pip libclang-7-dev $ pip3 install clang - Клонируйте и запустите сборку:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- Попробуйте один из примеров :
$ bazel run //sandboxed_api/examples/stringop:main_stringop
Доступная документация
Более подробная информация о Sandboxed API доступна здесь:
Объяснение изолированного API — описывает изолированное API (SAPI) и его основные концепции.
Начало работы — предоставляет руководство, которое поможет вам создать собственную изолированную версию API SAPI.
Правила сборки — объясняет, как использовать правило сборки sapi_library() для сборки библиотеки SAPI.
Переменные — обсуждает использование типов SAPI, которые необходимы при передаче указателей на простые типы и блоки памяти.
Транзакции — объясняет, как использовать модуль транзакций SAPI для мониторинга вызовов функций.
Глоссарий
Песочница2 | Проект Google с открытым исходным кодом, который обеспечивает слой «песочницы» в SAPI. |
Песочница | Двоичный файл, выполняемый в песочнице Sandbox2, см. документацию Sandbox2 . В контексте SAPI это изолированная библиотека C/C++. |
САПИ | Sandboxed API, проект Google с открытым исходным кодом, предоставляющий функциональность для создания изолированных библиотек. |
Библиотека SAPI | Библиотека, созданная SAPI, содержащая изолированную библиотеку, код Sandbox2 и код среды выполнения SAPI. |
Объект SAPI | Объект C++, включенный в код хоста, предоставляющий интерфейс к изолированной библиотеке, использующей типы SAPI вместо исходных. |
Типы SAPI | SAPI предоставляет специальные типы, необходимые при передаче указателей на простые типы и блоки памяти. |
SAPI-транзакция | Модуль, используемый для управления статусом песочницы библиотеки Sandboxed между запусками. |
Заглушка RPC | Заглушка связи удаленного вызова процедур (RPC), упакованная в Sandbox2 и используемая для передачи данных между объектом SAPI и изолированной библиотекой. |
Код хоста | Код, который использует изолированную библиотеку и включает объект SAPI. |
Участие в разработке изолированного API
Если вы хотите внести свой вклад, пожалуйста, прочтите CONTRIBUTING.md и отправьте нам запросы на включение внесенных изменений. Вы также можете сообщать об ошибках или подавать запросы на добавление функций.
Если вы хотите пообщаться с разработчиками или получать уведомления о крупных обновлениях продукта, вы можете присоединиться к нашей группе Google: sandboxed-api-users .