Byl vydán nástroj pro organizaci práce izolovaných prostředí Bubblewrap 0.6, který se obvykle používá k omezení jednotlivých aplikací neoprávněných uživatelů. V praxi je Bubblewrap používán projektem Flatpak jako vrstvení pro izolaci spouštěných aplikací ze zabalených balíčků. Kód projektu je napsán v jazyce C a je distribuován pod licencí LGPLv2+.
Pro izolaci se používají tradiční technologie kontejnerové virtualizace pro Linux, založené na použití cgroups, prostorů názvů (namespaces), Seccomp a SELinux. Pro provádění privilegovaných operací při konfiguraci kontejneru je Bubblewrap spouštěn s právy root (spustitelný soubor s suid-flagem), s následným zrušením privilegií po dokončení inicializace kontejneru.
Aktivace v systému prostorů názvů identifikátorů uživatelů (user namespaces), které umožňují používat v kontejnerech vlastní oddělenou sadu identifikátorů, není pro práci nutná, protože ve výchozím nastavení nefunguje v mnoha distribucích (Bubblewrap je prezentován jako omezená suid-implementace podmnožiny možností user namespaces — pro vyloučení všech identifikátorů uživatelů a procesů z prostředí, kromě aktuálního, se používají režimy CLONE_NEWUSER a CLONE_NEWPID). Pro dodatečnou ochranu se programy spuštěné pod řízením Bubblewrap spouštějí v režimu PR_SET_NO_NEW_PRIVS, který zakazuje získání nových privilegií, například při přítomnosti flagu setuid.
Izolace na úrovni souborového systému se provádí vytvořením nového namespaces pro body připojení (mount namespace), v němž se pomocí tmpfs vytváří prázdný kořenový oddíl. Do tohoto oddílu se v případě potřeby připojují oddíly externího FS v režimu „mount —bind“ (například při spuštění s volbou „bwrap —ro-bind /usr /usr“ je oddíl /usr předán z hlavního systému v režimu pouze pro čtení). Síťové možnosti jsou omezeny přístupem k loopback rozhraní s izolací síťového stacku pomocí příznaků CLONE_NEWNET a CLONE_NEWUTS.
Klíčovým rozdílem od podobného projektu Firejail, který také používá model spuštění s použitím setuid, je to, že v Bubblewrap vrstva pro vytváření kontejnerů zahrnuje pouze nezbytné minimum možností, zatímco všechny rozšířené funkce potřebné pro spuštění grafických aplikací, interakci se stolním prostředím a filtrování požadavků na Pulseaudio, byly převedeny na stranu Flatpak a vykonávají se až po zrušení privilegií. Firejail však spojuje v jednom spustitelném souboru všechny související funkce, což komplikuje jeho audit a udržování bezpečnosti na odpovídající úrovni.
V novém vydání:
- Byla přidána podpora pro build systém Meson. Podpora pro sestavení pomocí Autotools zatím zůstává zachována, ale bude odstraněna v jednom z následujících vydání.
- Byla implementována možnost „--add-seccomp“ pro přidání více než jedné seccomp aplikace. Bylo přidáno varování, že při opětovném zadání možnosti „--seccomp“ se použije pouze poslední parametr.
- Hlavní větev v git repozitáři byla přejmenována na main.
- Byla přidána částečná podpora specifikace REUSE, která unifikuje proces poskytování informací o licencích a autorských právech. Do mnoha souborů s kódem byly přidány hlavičky SPDX-License-Identifier. Dodržování doporučení REUSE usnadňuje automatické určení, která licence se aplikuje na které části kódu aplikace.
- Byla přidána kontrola hodnoty počitadla argumentů příkazové řádky (argc) a byla implementována nouzová ukončení, pokud je počitadlo rovno nule. Změna blokuje bezpečnostní problémy způsobené nesprávným zpracováním předávaných argumentů příkazové řádky, jako je CVE-2021-4034 v Polkit.
Zdroj: opennet.ru
