Издаване на Bubblewrap 0.4.0, слой за създаване на изолирани среди

Достъпен ново издание на инструментариума Bubblewrap 0.4.0, предназначен за организиране на работата на изолирани среди в Linux и функционира на ниво приложения на непривилегировани потребители. На практика 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 обаче обединява в един изпълняем файл всички спомагателни функции, което усложнява одита и поддържането на сигурността на правилно ниво.

Новото издание е забележително с реализирането на поддръжка за свързване на съществуващи пространства на имена на идентификатори на потребители (user namespaces) и процеси (pid namespaces). За управление на свързването на пространствата на имена са добавени флаговете ‘—userns’, ‘—userns2’ и ‘—pidns’.
Тази възможност не работи в режим setuid и изисква прилагането на отделен режим, който може да работи без получаване на права root, но изисква активиране на
user namespaces в системата (по подразбиране са деактивирани в Debian и RHEL/CentOS) и не изключва възможността експлоатацията потенциално оставащи уязвимости за ограничителите на "user namespaces". Новите възможности на Bubblewrap 0.4 също включват опцията за компилиране с C библиотеката musl вместо glibc и поддръжка на запазването на информация за пространствата на имената в файл със статистика в JSON формат.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster