Несколько дней тому назад Google объявила об открытии проекта Sandboxed APIчто Позволяет автоматизировать процесс создания песочницы для изолированного выполнения произвольных библиотек на языках C и C ++.
Изоляция вашего кода от библиотек позволяет защитить от возможных атак на ручки, предоставляемые библиотеками, создавая дополнительный барьер на случай, если в вашем коде есть уязвимости, которые могут быть использованы путем манипуляций с внешними данными, поступающими в библиотеку. Код открыт под лицензией Apache 2.0.
Изоляцияили это делается с использованием среды выполнения Sandbox2, в котором используются пространства имен, контрольные группы и seccomp-bpf.
Код, доставленный в песочницу, выполняется в отдельном процессе, для которого доступ к системным вызовам и ресурсам, а также файлы и сетевые подключения ограничены.
Процессы получают доступ только к системным возможностям, которые напрямую требуются для выполнения изолированного кода.
Sandbox2 определяет компоненты для запуска процессаили примените правила изоляции и поддержите последующее выполнение.
Песочница2 его можно использовать отдельно от Sandbox API для изоляции не только библиотек, но и произвольных процессов.
Помимо повышения защиты, положительным моментом в устранении кода в отдельных процессах является возможность раздельного регулирования лимитов на потребление памяти библиотеки и ЦП, а также защита от сбоев: сбой в библиотека не приводит к сбою всего приложения.
О изолированном API
Sandboxed API - это плагин Sandbox2 что упрощает перенос существующих библиотек для работы в изолированном режиме.
Изолированный API предоставляет промежуточный программный интерфейс, который позволяет запускать код библиотеки в среде песочницы.а также организация вызова библиотеки в среде песочницы и обеспечение доставки результатов библиотеки в основную программу.
Se обращается к изолированной библиотеке через специализированный RPC, основанный на протоколе ProtoBuffs.
A разработчикам библиотеки предлагается набор опций, разрешающих доступ к переменным, файловые дескрипторы, буферы и библиотечные функции, изолированные от базового приложения, включая инструменты для автоматической и контролируемой синхронизации памяти для совместного использования массивов и структур.
Когда программная библиотека, которая анализирует такие данные, является достаточно сложной, она может стать жертвой определенных типов уязвимостей безопасности: ошибок повреждения памяти или других типов проблем, связанных с логикой анализа (например, проблем обхода пути). Эти уязвимости могут иметь серьезные последствия для безопасности.
Кроме того, Предоставляется API для мониторинга работы изолированных процессов и их перезапуска в случае сбоев.
Для изолированной библиотеки автоматически генерируется код аннотаций изолированных функций для системы сборки Bazel и программного интерфейса (SAPI) для взаимодействия между базовым и изолированным процессами.
Разработчик также должен создать файл заголовка с правилами изоляции, которые определяют все разрешенные системные вызовы и операции. (чтение, запись, открытие файлов, доступ ко времени, возможность установки обработчиков сигналов, поддержка выделения памяти через malloc и т. д.).
Файлы и каталоги, к которым у библиотеки должен быть доступ, определяются отдельно.
Установка
На данный момент проект доступен только для Linux, но в будущем обещают добавить поддержку систем macOS и BSD, а в перспективе и Windows. да вы хотите установить api с песочницей, вы можете следовать данным инструкциям по этой ссылке.
Из планов также отмечается возможность изолировать библиотеки на языках, отличных от C и C ++, дополнительная поддержка во время выполнения для изоляции (например, на основе аппаратной виртуализации) и возможность использовать CMake и другие системы сборки (поддержка теперь ограничена системой сборки Bazel).
источник: https://security.googleblog.com