Выпуск Bubblewrap 0.4.0, прослойки для создания изолированных окружений

Доступен новый выпуск инструментария Bubblewrap 0.4.0, предназначенного для организации работы изолированных окружений в Linux и функционирующий на уровне приложений непривилегированных пользователей. На практике Bubblewrap используется проектом Flatpak в качестве прослойки для изоляции приложений. Код проекта написан на языке Си и распространяется под лицензией LGPLv2+.

Для изоляции используются традиционные для Linux технологии контейнерной виртуализации, основанные на использовании cgroups, пространств имён (namespaces), Seccomp и SELinux. Для выполнения привилегированных операций по настройке контейнера Bubblewrap запускается с правами root (исполняемый файл c suid-флагом) с последующим сбросом привилегий после завершения инициализации контейнера.

Активация в системе пространств имён идентификаторов пользователя (user namespaces), позволяющих использовать в контейнерах собственный отдельный набор идентификаторов пользователей, для работы не требуется, так как по умолчанию не работает во многих дистрибутивах (Bubblewrap позиционируется как ограниченная suid-реализация подмножества возможностей user namespaces — используются режимы CLONE_NEWUSER и CLONE_NEWPID для исключения всех идентификаторов пользователей и процессов из окружения, кроме текущего). Для дополнительной защиты исполняемые под управлением Bubblewrap программы запускаются в режиме PR_SET_NO_NEW_PRIVS, запрещающем получение новых привилегий, например, при наличии флага setuid.

Изоляция на уровне файловой системы производится через создание по умолчанию нового пространства имён точек монтирования (mount namespace), в котором при помощи tmpfs создаётся пустой корневой раздел. В данный раздел при необходимости прикрепляются разделы внешней ФС в режиме «mount --bind» (например, при запуске при помощи опций «bwrap --ro-bind /usr /usr» можно прикрепить раздел /usr в режиме только для чтения). Сетевые возможности ограничиваются доступом к loopback-интерфейсу с изоляцией сетевого стека через флаги CLONE_NEWNET и CLONE_NEWUTS.

Ключевым отличием от похожего проекта Firejail, который также использует модель запуска с применением setuid, является то, что в Bubblewrap прослойка для создания контейнеров включает только необходимый минимум возможностей, а все расширенные функции, необходимые для запуска графических приложений, взаимодействия с рабочим столом и фильтрации обращений к Pulseaudio, вынесены на сторону Flatpak. Firejail же объединяет в одном исполняемом файле все сопутствующие функции, что усложняет его аудит и поддержание безопасности на должном уровне.

Новый выпуск примечателен реализацией поддержки присоединения существующих пространств имён идентификаторов пользователей (user namespaces) и процессов (pid namespaces). Для управления подключением пространств имён добавлены флаги »--userns»,»--userns2» и »--pidns». При этом данная возможность не работает в режим setuid, а требует применения отдельного режима, который может работать без получения прав root, но требует активации user namespaces в системе (по умолчанию отключены в Debian и RHEL/CentOS) и раскрывает возможность эксплуатации потенциально остающихся уязвимостей в реализации «user namespaces». Из новых возможностей также отмечается поддержка создания информации о пространствах имён в файл в формате json и возможность сборки с Си-библиотекой musl вместо glibc.

Источник: http://www.opennet.ru/opennews/art.shtml? num=51947

© OpenNet