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

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

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

  • Додана опція «—disable-userns», що відключає створення в sandbox-оточенні свого вкладеного простору ідентифікаторів користувачів (user namespace).
  • Додана опція «-assert-userns-disabled» для перевірки, що при використанні опції »-disable-userns» задіяно існуючий простір ідентифікаторів користувачів.
  • Підвищена інформативність повідомлень про помилки, пов'язані з вимкненням у ядрі налаштувань CONFIG_SECCOMP та CONFIG_SECCOMP_FILTER.

Джерело: opennet.ru

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