Dostępna jest wersja narzędzia do organizacji pracy w izolowanych środowiskach Bubblewrap 0.8, zwykle używanego do ograniczania pojedynczych aplikacji nieuprzywilejowanych użytkowników. W praktyce Bubblewrap jest wykorzystywane przez projekt Flatpak jako warstwa do izolacji uruchamianych aplikacji z pakietów. Kod projektu jest napisany w języku C i jest 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 opcję „—disable-userns”, która wyłącza tworzenie swojego wewnętrznego przestrzeni identyfikatorów użytkowników (user namespace) w środowisku sandbox.
- Dodano opcję „—assert-userns-disabled” do sprawdzenia, że przy użyciu opcji „—disable-userns” jest używane istniejące przestrzeń identyfikatorów użytkowników.
- Zwiększona informacyjność komunikatów o błędach związanych z wyłączeniem w jądrze ustawień CONFIG_SECCOMP i CONFIG_SECCOMP_FILTER.
Źródło: opennet.ru
