Выпуск Bubblewrap 0.6, праслойкі для стварэння ізаляваных асяродкаў

Даступны выпуск інструментара для арганізацыі працы ізаляваных асяродкаў 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

Дадаць каментар