Что такое изолированный API? Что такое изолированный API?

Проект 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, выполните следующие действия:

  1. Установите необходимые зависимости (предполагается, что вы используете 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
  2. Клонируйте и запустите сборку:
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build 
  3. Попробуйте один из примеров :
    $ 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 .