Dla FreeBSD opracowywany jest mechanizm izolacji podobny do plegde i odsłon

Dla FreeBSD zaproponowano implementację mechanizmu izolacji aplikacji, przypominającego wywołania systemowe plegde i odsłonięte opracowane w projekcie OpenBSD. Izolację w plegde osiąga się poprzez zakaz dostępu do wywołań systemowych, które nie są używane w aplikacji, a w odsłonie poprzez selektywne otwieranie dostępu tylko do poszczególnych ścieżek plików, z którymi aplikacja może współpracować. Dla aplikacji tworzony jest rodzaj białej listy wywołań systemowych i ścieżek plików, a wszystkie inne wywołania i ścieżki są zabronione.

Różnica pomiędzy odpowiednikiem plegde i odsłonionym opracowanym dla FreeBSD sprowadza się do zapewnienia dodatkowej warstwy, która pozwala izolować aplikacje bez wprowadzania zmian w ich kodzie lub przy minimalnych zmianach. Przypomnijmy, że w OpenBSD, plegde i odsłonięte mają na celu ścisłą integrację ze środowiskiem bazowym i są używane poprzez dodanie specjalnych adnotacji do kodu każdej aplikacji. Aby uprościć organizację ochrony, filtry pozwalają uniknąć szczegółowości na poziomie poszczególnych wywołań systemowych i manipulować klasami wywołań systemowych (wejście/wyjście, odczytywanie plików, zapisywanie plików, gniazda, ioctl, sysctl, uruchamianie procesów itp.). Funkcje ograniczające dostęp można wywołać w kodzie aplikacji w trakcie wykonywania określonych akcji, np. można odmówić dostępu do gniazd i plików po otwarciu niezbędnych plików i nawiązaniu połączenia sieciowego.

Autor portu plegde i odsłoniętego dla FreeBSD zamierza udostępnić możliwość izolowania dowolnych aplikacji, dla których zaproponowano narzędzie kurtynowe, które pozwala na zastosowanie do aplikacji reguł zdefiniowanych w osobnym pliku. Proponowana konfiguracja zawiera plik z podstawowymi ustawieniami, które definiują klasy wywołań systemowych i typowe ścieżki plików specyficzne dla poszczególnych aplikacji (praca z dźwiękiem, interakcja sieciowa, logowanie itp.), a także plik z regułami dostępu dla konkretnych aplikacji.

Narzędzie kurtyny może być używane do izolowania większości niezmodyfikowanych narzędzi, procesów serwera, aplikacji graficznych, a nawet całych sesji pulpitu. Kurtyny można używać w połączeniu z mechanizmami izolacyjnymi zapewnianymi przez podsystemy Jail i Capsicum. Możliwa jest także organizacja izolacji zagnieżdżonej, gdy uruchomione aplikacje dziedziczą reguły ustalone dla aplikacji nadrzędnej, uzupełniając je indywidualnymi ograniczeniami. Niektóre operacje jądra (funkcje debugowania, POSIX/SysV IPC, PTY) są dodatkowo chronione przez mechanizm barierowy, który uniemożliwia dostęp do obiektów jądra, które nie są utworzone przez bieżący lub nadrzędny proces.

Proces może skonfigurować własną izolację, wywołując Curtainctl lub używając funkcji plegde() i odsłoni() biblioteki libcurtain, podobnych do tych, które można znaleźć w OpenBSD. Aby śledzić blokady podczas działania aplikacji, udostępniono sysctl „security.curtain.log_level”. Dostęp do protokołów X11 i Wayland jest włączany osobno poprzez określenie opcji „-X”/”-Y” i „-W” podczas uruchamiania kurtyny, ale obsługa aplikacji graficznych nie jest jeszcze wystarczająco ustabilizowana i ma szereg nierozwiązanych problemów ( problemy pojawiają się głównie podczas korzystania z X11, a obsługa Waylanda jest zaimplementowana znacznie lepiej). Użytkownicy mogą dodać dodatkowe ograniczenia, tworząc pliki reguł lokalnych (~/.curtain.conf). Na przykład, aby umożliwić zapisywanie z Firfox tylko do katalogu ~/Downloads/, możesz dodać sekcję „[firefox]” z regułą „~/Downloads/ : rw +”.

Implementacja obejmuje moduł jądra mac_curtain do obowiązkowej kontroli dostępu (MAC, Mandatory Access Control), zestaw poprawek do jądra FreeBSD z implementacją niezbędnych handlerów i filtrów, bibliotekę libcurtain do wykorzystania funkcji plegde i odsłon w aplikacjach, narzędzie kurtyny, przykładowe pliki konfiguracyjne, zestaw testów i poprawek dla niektórych programów w przestrzeni użytkownika (na przykład w celu użycia $TMPDIR do ujednolicenia pracy z plikami tymczasowymi). Tam, gdzie to możliwe, autorowi zamierza zminimalizować liczbę zmian wymagających łatania jądra i aplikacji.

Źródło: opennet.ru

Dodaj komentarz