След година разработка е публикувана нова версия на инструмента за организиране на работа с изолирани среди Bubblewrap 0.9, използван за ограничаване на отделни приложения на непривилигировани потребители. На практика 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 обединява в един изпълним файл всички спомагателни функции, което усложнява одита и поддържането на сигурността на необходимото ниво.
В новото издание:
- От пакета с изходни текстове са премахнати файловете, генерирани в Autotools. Сега се препоръчва да се използва системата за изграждане Meson. Опционалната поддръжка на Autotools все още е запазена, но в бъдещи версии планирано е да се премахне.
- Добавена е опцията „—argv0“ за задаване на стойността на нулевия аргумент на командния ред (argv[0] — името на изпълнимия файл, например „—argv0 /usr/bin/test“).
- Опцията „—symlink“ вече сработва само когато символичната връзка вече съществува и сочи към необходимия целеви файл.
- Документирана е опцията „—cap-add“, използвана за задаване на capability флагове, например „CAP_DAC_READ_SEARCH“.
- Повишена е информативността на грешките, изведени при неуспех в монтирането.
- Опростен е процесът на създаване на unit тестове.
- В примерите за употреба е спряна поддръжката на стари версии на Python.
- Подобрени са операциите по разпределение на паметта.
Източник: opennet.ru
