SELinux sandboxing

Sun 15 May 2011 by admin

SELinux oferuje nam kompleksową odpowiedź na wymagania stawiane polityce MAC. Dostarczane polityki bezpieczeństwa dostosowane są do aplikacji standardowo dołączanych do konkretnej dystrybucji. Co jednak gdy zamierzamy uruchomić nieznaną aplikację dla której nieokreślono jeszcze kontekstu bezpieczeństwa, pierwsza rzecz jaka się nasuwa to uzupełnienie takiej polityki bezpieczeństwa. Jest to jednak zadanie dość złożone i czasochłonne, prostszym rozwiązaniem jest skorzystanie z narzędzia sandbox.

Koncepcja sandbox sama w sobie nie jest nowa, chociażby popularne chroot'owanie aplikacji to jej odmiana. Narzędzie sandbox wykorzystuje dobrodziejstwa SELinux izolując uruchamianą aplikację, którą to m.in. nie posiada dostępu do sieci, tworzy wydzielony nowy katalog \$HOME oraz /tmp (patrz. seunshare), działa z konkretnym losowym selinux'owym MCS tak, że kilka procesów sandbox'a nie widzi się nawzajem oraz dodatkowo posiada wsparcie dla aplikacji wymagających X'ów.

Uruchomienie aplikacji w środowisku sandbox:

$ sandbox -X -t sandbox_net_t xterm

sprawi, że uruchomiony zostanie proces xterm z możliwością korzystania z sieci. Pozostałe konteksty bezpieczeństwa dla sandbox'a:

sandbox_x_t

sandbox_min_t

sandbox_net_t

sandbox_web_t

ostatni z nich został przygotowany do uruchomienia przeglądarki w trybie sandbox.

Sandboxing z użyciem SELinux'a jest kolejnym krokiem po dodaniu confined users w kierunku uproszczenia budowy bezpieczniejszych środowisk opartych o zasadę least privileges.

Wydawać by się mogło, że jest to niemalże niezawodny sposób na ,,nieznane'' aplikacje, jednak bezpieczeństwo okazało się dość pozorne.  Niepoprawnie nadane uprawnienia na nowo tworzony katalog /tmp oraz nadanie suid'a dla narzędzia seunshare sprawia, że w łatwy sposób można było wykasować zawartość pliku np. /etc/passwd.  Więcej informacji na temat bug'a oraz jego rozwiązania:
https://bugzilla.redhat.com/show_bug.cgi?id=633544