Даступны выпуск інструментара для арганізацыі працы ізаляваных асяродкаў Bubblewrap 0.6, як правіла выкарыстоўваны для абмежавання асобных прыкладанняў непрывілеяваных карыстачоў. На практыцы Bubblewrap прымяняецца праектам Flatpak у якасці праслойкі для ізаляцыі запускаюцца з пакетаў прыкладанняў. Код праекту напісаны на мове Сі і распаўсюджваецца пад ліцэнзіяй LGPLv2+.
Для ізаляцыі выкарыстоўваюцца традыцыйныя для Linux тэхналогіі кантэйнернай віртуалізацыі, заснаваныя на выкарыстанні cgroups, прастор імёнаў (namespaces), Seccomp і SELinux. Для выканання прывілеяваных аперацый па наладзе кантэйнера Bubblewrap запускаецца з правамі root (выкананы файл c suid-сцягам) з наступным скідам прывілеяў пасля завяршэння ініцыялізацыі кантэйнера.
Актывацыя ў сістэме прастор імёнаў ідэнтыфікатараў карыстача (user namespaces), якія дазваляюць выкарыстоўваць у кантэйнерах уласны асобны набор ідэнтыфікатараў, для працы не патрабуецца, бо па змаўчанні не працуе ў шматлікіх дыстрыбутывах (Bubblewrap пазіцыянуецца як абмежаваная suid-рэалізацыя падмноства магчымасцяў user name усіх ідэнтыфікатараў карыстачоў і працэсаў з асяроддзя, акрамя бягучага, выкарыстоўваюцца рэжымы 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