Dostępna jest wersja narzędzi do organizacji pracy izolowanych środowisk Bubblewrap 0.6, służących zwykle do ograniczania indywidualnych aplikacji nieuprzywilejowanych użytkowników. W praktyce Bubblewrap jest wykorzystywany w projekcie Flatpak jako warstwa izolująca aplikacje uruchamiane z pakietów. Kod projektu napisany jest w języku C i rozpowszechniany jest na licencji LGPLv2+.
Do izolacji wykorzystywane są tradycyjne linuksowe technologie wirtualizacji kontenerów, oparte na wykorzystaniu grup cgroup, przestrzeni nazw, Seccomp i SELinux. Aby wykonać uprzywilejowane operacje w celu skonfigurowania kontenera, Bubblewrap jest uruchamiany z uprawnieniami roota (plik wykonywalny z flagą suid), a następnie resetuje uprawnienia po zainicjowaniu kontenera.
Aktywacja przestrzeni nazw użytkowników w systemie przestrzeni nazw, co pozwala na użycie własnego, odrębnego zestawu identyfikatorów w kontenerach, nie jest wymagana do działania, ponieważ w wielu dystrybucjach domyślnie nie działa (Bubblewrap jest pozycjonowany jako ograniczona suid implementacja podzbiór możliwości przestrzeni nazw użytkowników - aby wykluczyć ze środowiska wszystkie identyfikatory użytkowników i procesów, z wyjątkiem bieżącego, stosowane są tryby CLONE_NEWUSER i CLONE_NEWPID). Dla dodatkowego zabezpieczenia programy wykonywane pod Bubblewrapem uruchamiane są w trybie PR_SET_NO_NEW_PRIVS, który zabrania nabywania nowych uprawnień np. w przypadku obecności flagi setuid.
Izolacja na poziomie systemu plików odbywa się domyślnie poprzez utworzenie nowej przestrzeni nazw montowania, w której tworzona jest pusta partycja główna za pomocą tmpfs. W razie potrzeby do tej partycji dołączane są zewnętrzne partycje FS w trybie „mount —bind” (np. przy uruchomieniu z opcją „bwrap —ro-bind /usr /usr” partycja /usr jest przekazywana z systemu głównego w trybie tylko do odczytu). Możliwości sieci są ograniczone do dostępu do interfejsu pętli zwrotnej z izolacją stosu sieciowego za pomocą flag CLONE_NEWNET i CLONE_NEWUTS.
Kluczową różnicą w stosunku do podobnego projektu Firejail, który również wykorzystuje model uruchamiania setuid, jest to, że w Bubblewrap warstwa tworzenia kontenera zawiera jedynie niezbędne minimalne możliwości oraz wszystkie zaawansowane funkcje niezbędne do uruchamiania aplikacji graficznych, interakcji z pulpitem i filtrowania żądań do Pulseaudio, przeniesiony na stronę Flatpak i wykonany po zresetowaniu uprawnień. Firejail natomiast łączy wszystkie powiązane funkcje w jednym pliku wykonywalnym, co utrudnia audyt i utrzymanie bezpieczeństwa na właściwym poziomie.
W nowym wydaniu:
- Dodano obsługę systemu montażu Meson. Wsparcie dla budowania za pomocą Autotools zostało na razie zachowane, ale zostanie usunięte w przyszłej wersji.
- Zaimplementowano opcję „--add-seccomp”, aby dodać więcej niż jeden program seccomp. Dodano ostrzeżenie, że jeśli ponownie określisz opcję „--seccomp”, zastosowany zostanie tylko ostatni parametr.
- Nazwa gałęzi master w repozytorium git została zmieniona na main.
- Dodano częściową obsługę specyfikacji REUSE, która ujednolica proces określania informacji o licencji i prawach autorskich. Wiele plików kodu ma dodane nagłówki SPDX-License-Identifier. Postępowanie zgodnie z wytycznymi REUSE ułatwia automatyczne określenie, która licencja ma zastosowanie do poszczególnych części kodu aplikacji.
- Dodano sprawdzanie wartości licznika argumentów wiersza poleceń (argc) i zaimplementowano wyjście awaryjne, jeśli licznik wynosi zero. Zmiana pomaga zablokować problemy bezpieczeństwa spowodowane niepoprawną obsługą przekazanych argumentów wiersza poleceń, takie jak CVE-2021-4034 w Polkicie.
Źródło: opennet.ru