Wydanie Bubblewrap 0.6, warstwy do tworzenia izolowanych środowisk

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

Dodaj komentarz