Достъпен е новият инструментариум за работа с изолирани среди Bubblewrap 0.8, който обикновено се използва за ограничаване на отделни приложения на непривилегировани потребители. На практика Bubblewrap се прилага от проекта Flatpak като прослойка за изолиране на стартираните приложения от пакети. Кодът на проекта е написан на C и се разпространява под лиценз LGPLv2+.
За изолация се използват традиционни за Linux технологии за контейнерна виртуализация, базирани на cgroups, пространства от имена (namespaces), Seccomp и SELinux. За изпълнение на привилегировани операции по настройване на контейнера, Bubblewrap се стартира с права на root (изпълним файл с 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 обединява в един изпълним файл всички спомагателни функции, което усложнява одита и поддържането на сигурността на необходимото ниво.
В новото издание:
- Добавена е опция «—disable-userns», която деактивира създаването на собствено вложено пространство на идентификаторите на потребителите (user namespace) в sandbox-окружение.
- Добавена е опция «—assert-userns-disabled» за проверка, че при използване на опцията «—disable-userns» се използва съществуващо пространство от идентификатори на потребители.
- Повишена е информативността на съобщенията за грешки, свързани с деактивирането на настройките CONFIG_SECCOMP и CONFIG_SECCOMP_FILTER в ядрото.
Източник: opennet.ru
