Випуск Bubblewrap 0.4.0, прошарки для створення ізольованих оточень

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

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

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

Ізоляція на рівні файлової системи проводиться через створення за промовчанням нового простору імен точок монтування (mount namespace), в якому за допомогою tmpfs створюється порожній кореневий розділ. У цьому розділі при необхідності прикріплюються розділи зовнішньої ФС у режимі «mount —bind» (наприклад, при запуску c опцією «bwrap —ro-bind /usr /usr» розділ /usr прокидається з основної системи в режимі тільки для читання). Мережеві можливості обмежуються доступом до loopback-інтерфейсу із ізоляцією мережевого стека через прапори CLONE_NEWNET та CLONE_NEWUTS.

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

Новий випуск примітний реалізацією підтримки приєднання існуючих просторів імен ідентифікаторів користувачів (user namespaces) та процесів (pid namespaces). Для керування підключенням просторів імен додані прапори "userns", "userns2" і "pidns".
Ця можливість не працює в режимі setuid і вимагає застосування окремого режиму, який може працювати без отримання прав root, але вимагає активації
user namespaces в системі (за замовчуванням відключено в Debian і RHEL/CentOS) і не виключає можливість експлуатації потенційно решти вразливостей для обода обмежень "user namespaces". З нових можливостей Bubblewrap 0.4 також відзначається можливість збирання з Сі-бібліотекою musl замість glibc та підтримка збереження інформації про простори імен у файл зі статистикою у форматі JSON.

Джерело: opennet.ru

Додати коментар або відгук