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

Доступний випуск інструментарію для організації роботи ізольованих оточень Bubblewrap 0.6, який зазвичай використовується для обмеження окремих програм непривілейованих користувачів. На практиці 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.

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

У новому випуску:

  • Додана підтримка складальної системи Meson. Підтримка збірки за допомогою Autotools поки що збережена, але буде видалена в одному з наступних випусків.
  • Реалізовано опцію «-add-seccomp» для додавання більш ніж однієї програми seccomp. Додано попередження про те, що при повторному вказуванні опції «-seccomp» буде застосовано лише останній параметр.
  • Гілка master в git-репозиторії перейменована на main.
  • Додано часткову підтримку специфікації REUSE, що уніфікує процес вказівки відомостей про ліцензії та авторські права. Багато файлів з кодом додані заголовки SPDX-License-Identifier. Дотримання рекомендацій REUSE дозволяє спростити автоматичне визначення яка ліцензія застосовується до якихось частин коду програми.
  • Додано перевірку значення лічильника аргументів командного рядка (argc) та реалізовано екстрений вихід у разі якщо лічильник дорівнює нулю. Зміна дозволяє блокувати проблеми з безпекою, викликані некоректною обробкою аргументів командного рядка, що передаються, такі як CVE-2021-4034 в Polkit.

Джерело: opennet.ru

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