Dostępna jest wersja narzędzia do organizacji pracy w izolowanych środowiskach Bubblewrap 0.6, które zazwyczaj służy do ograniczenia poszczególnych aplikacji użytkowników bez uprawnień. W praktyce Bubblewrap jest wykorzystywany w projekcie Flatpak jako warstwa do izolacji uruchamianych aplikacji z pakietów. Kod projektu jest napisany w języku C i rozpowszechniany na licencji LGPLv2+.
Do izolacji wykorzystywane są tradycyjne technologie wirtualizacji kontenerów dla systemów Linux, oparte na korzystaniu z cgroups, przestrzeni nazw (namespaces), Seccomp i SELinux. Aby wykonać operacje uprzywilejowane związane z konfiguracją kontenera, Bubblewrap uruchamiane jest z prawami root (plik wykonywalny z flagą suid) z późniejszym zresetowaniem uprawnień po zakończeniu inicjalizacji kontenera.
Aktywacja w systemie przestrzeni nazw identyfikatorów użytkownika (user namespaces), pozwalających na korzystanie w kontenerach z odrębnego zestawu identyfikatorów, do działania nie jest wymagana, ponieważ domyślnie nie działa w wielu dystrybucjach (Bubblewrap jest promowane jako ograniczona implementacja suid podzbioru możliwości przestrzeni nazw użytkownika — do wyłączenia wszystkich identyfikatorów użytkowników i procesów z środowiska, poza obecnym, używane są tryby CLONE_NEWUSER i CLONE_NEWPID). Aby zapewnić dodatkową ochronę, programy uruchamiane pod zarządzaniem Bubblewrap są uruchamiane w trybie PR_SET_NO_NEW_PRIVS, który zabrania uzyskiwania nowych uprawnień, na przykład w przypadku posiadania flagi setuid.
Izolacja na poziomie systemu plików odbywa się poprzez stworzenie domyślnej nowej przestrzeni nazw punktów montowania (mount namespace), w której z pomocą tmpfs tworzony jest pusty katalog główny. W razie potrzeby do tego katalogu podpinane są partycje zewnętrznego systemu plików w trybie „mount —bind” (na przykład przy uruchamianiu z opcją „bwrap —ro-bind /usr /usr” partycja /usr jest przekazywana z głównego systemu w trybie tylko do odczytu). Możliwości sieciowe są ograniczone do dostępu do interfejsu loopback z izolacją stosu sieciowego za pomocą flag CLONE_NEWNET i CLONE_NEWUTS.
Kluczową różnicą w porównaniu do podobnego projektu Firejail, który również korzysta z modelu uruchamiania z użyciem setuid, jest to, że w Bubblewrap pośrednik do tworzenia kontenerów zawiera tylko niezbędny minimalny zbiór możliwości, podczas gdy wszystkie rozszerzone funkcje, potrzebne do uruchamiania aplikacji graficznych, interakcji z pulpitem oraz filtrowania połączeń z Pulseaudio, zostały przeniesione na stronę Flatpak i są wykonywane już po zresetowaniu uprawnień. Firejail natomiast łączy w jednym pliku wykonywalnym wszystkie powiązane funkcje, co utrudnia jego audyt i utrzymanie bezpieczeństwa na odpowiednim poziomie.
W nowym wydaniu:
- Dodano wsparcie dla systemu budowania Meson. Wsparcie dla budowy za pomocą Autotools nadal istnieje, ale zostanie usunięte w jednej z kolejnych wersji.
- Zrealizowano opcję „—add-seccomp” do dodawania więcej niż jednego programu seccomp. Dodano ostrzeżenie, że przy ponownym wskazaniu opcji „—seccomp” zostanie zastosowany tylko ostatni parametr.
- Gałąź master w repozytorium git została przemianowana na main.
- Dodano częściowe wsparcie dla specyfikacji REUSE, ujednolicającej proces podawania informacji o licencjach i prawach autorskich. Do wielu plików z kodem dodano nagłówki SPDX-License-Identifier. Przestrzeganie zaleceń REUSE pozwala uprościć automatyczne określenie, jaka licencja jest stosowana do poszczególnych części kodu aplikacji.
- Dodano sprawdzenie wartości licznika argumentów wiersza poleceń (argc) i zrealizowano natychmiastowe zakończenie w przypadku, gdy licznik wynosi zero. Zmiana ta pozwala zablokować problemy z bezpieczeństwem spowodowane nieprawidłowym przetwarzaniem przekazywanych argumentów wiersza poleceń, takich jak CVE-2021-4034 w Polkit.
Źródło: opennet.ru
