Laboratorium: umacnianie, utwardzanie - temat nierealizowany

Umacnianie ochrony systemu operacyjnego MS Windows

Wprowadzenie

Systemy operacyjne z rodziny Microsoft Windows należą niewątpliwie do liderów popularności na rynku systemów operacyjnych. W większości zastosowań domowych popularne "windowsy" sprawdzają się bardzo dobrze, co owocuje dużym przywiązaniem użytkowników do tych produktów. Istnieją zastosowania, w których systemy te słabo bądź w ogóle nie sprawdzają się, jednakże z powodu wygody użytkowania i przystępnego środowiska graficznego są liderem na rynku systemów biurkowych. Systemy MS Windows posiadają wbudowane mechanizmy podwyższające bezpieczeństwo i znajomość tych podstawowych rozwiązań powinna być znana każdemu użytkownikowi tych systemów. W niniejszym opracowaniu zostaną przedstawione różne aspekty podnoszenia poziomu bezpieczeństwa pracy w systemach MS Windows XP. Rozwiązania prezentowane należą do grupy zabiegów określanych mianem utwardzanie systemu (ang. system hardening) i mają na celu podniesienie poziomu bezpieczeństwa oferowanego przez system.

Konta użytkowników

Pierwszą czynnością podczas pracy z systemem Windows XP jest zalogowanie się do systemu. W większości wypadków konto, na które następuje logowanie, jest chronione hasłem użytkownika. Możliwe jest również automatyczne logowanie na konto danego użytkownika bez podawania hasła. Jednak taka konfiguracja nie jest zalecana. System Windows posiada rozbudowane możliwości konfigurowania kont użytkowników i procedury logowania. Opcje konfiguracyjne zlokalizowane są w oknie "Ustawienia zabezpieczeń lokalnych", w podgrupie "Zasady konta". Dostęp do "Ustawień zabezpieczeń lokalnych" można uzyskać poprzez okno "Panel sterowania" i dalej "Narzędzia administracyjne" lub przez uruchomienie polecenia secpol.msc.

Dostępne opcje to m.in.:

  • określenie maksymalnego okresu ważności hasła,
  • określenie minimalnej długości hasła,
  • pamiętanie historii haseł,
  • ustawienie progu blokady konta (liczby dopuszczalnych niepoprawnych logowań),
  • ustawienie czasu trwania blokady konta.

Inspekcja zdarzeń

System Windows oferuje możliwość inspekcji (ang. logging), czyli rejestrowania, różnych zdarzeń zachodzących w systemie (np. logowania na konto, użycia uprawnień itp.). Inspekcję poszczególnych zdarzeń można włączyć poprzez okno "Ustawienia zabezpieczeń lokalnych", w podgrupie "Zasady lokalne" i dalej "Zasady inspekcji". Zarejestrowane zdarzenia można przeglądać za pomocą programu
"Podgląd zdarzeń", dostępnego z okna "Narzędzia administracyjne" lub poprzez uruchomienie polecenia eventvwr.msc.

Niektóre ze zdarzeń mogących podlegać inspekcji to:

  • dostęp do obiektów,
  • użycie uprawnień,
  • zarządzanie kontami,
  • zdarzenia logowania na konto,
  • zmiana zasad zabezpieczeń.

Dezaktywacja kont

Wszelkie konta (w tym szczególnie konta zakładane domyślnie przez system lub aplikacje), poza rzeczywiście niezbędnymi, powinny być zablokowane (lub usunięte). Dezaktywacji konta (oraz zmiany innych właściwości) można dokonać poprzez okno "Zarządzanie komputerem", w podgrupie "Narzędzia systemowe", a dalej "Użytkownicy i grupy lokalne", "Użytkownicy". Dostęp do "Zarządzania
komputerem" można uzyskać z okna "Narzędzia administracyjne" lub poprzez uruchomienie polecenia compmgmt.msc.

Konta użytkowników uprzywilejowanych

Konta użytkowników uprzywilejowanych należy szczególnie starannie chronić przed wykorzystaniem przez osoby nieuprawnione. W pewnym stopniu można utrudnić nielegalne wykorzystanie konta Administratora (włamanie) przez zmianę standardowej nazwy tego konta, często oczekiwanej przez intruzów. Jednak wszelkie konta w systemie posiadają oprócz nazw także identyfikatory numeryczne, które nie ulegają zmianie nawet po ewentualnej zmianie nazwy konta (zaawansowane metody ataku korzystają z takich identyfikatorów). Nazwę użytkownika uprzywilejowanego można zmienić w oknie "Ustawienia zabezpieczeń lokalnych", w podgrupie "Zasady lokalne" i dalej "Opcje zabezpieczeń".

System plików

System plików NTFS umożliwia związanie z każdym zasobem plikowym (w tym katalogiem) listy kontroli dostępu ACL (Access Control List). Dostęp do prostych ustawień ACL pliku (katalogu) jest możliwy z poziomu np. "Eksploratora Windows" w opcji "Właściwości" (menu "Plik" lub kontekstowe), w zakładce "Zabezpieczenia". Rozszerzone listy ACL są dostępne po wyborze opcji "Zaawansowane".


Rozszerzone listy ACL są dostępne po wyborze opcji "Zaawansowane".

UWAGA! Może się zdarzyć, że zakładka "Zabezpieczenia" jest ukryta. Należy wtedy upewnić się, że korzystamy z systemu plików NTFS (FAT32 nie obsługuje ACL) i wykonać następujące czynności: otworzyć okno "Eksploratora", z menu "Narzędzia" wybrać "Opcje folderów..." i w zakładce "Widok" odznaczyć opcję "Użyj prostego udostępniania plików (zalecane)", a następnie zastosować zmiany.

Listy kontroli dostępu w NTFS są bardziej rozbudowane niż POSIX ACL. Oprócz standardowych praw oczytu, zapisu i wykonywania, udostępniają m.in.:

  • prawo odczytu-zapisu atrybutów,
  • prawo tworzenia plików i folderów,
  • prawo usuwania folderów i plików,
  • prawo odczytu-zapisu uprawnień,
  • prawo przejęcia na własność.

Szyfrowanie danych

System plików NTFS umożliwia również ochronę kryptograficzną zasobów plikowych, metodą szyfrowania symetrycznego (algorytmem DESX).

Dostęp do tej opcji mamy również z poziomu "Właściwości" pliku, wybierając opcję "Zaawansowane..." w zakładce "Ogólne". Użyty do szyfrowania klucz właściciela pliku przechowywany jest w certyfikacie użytkownika. Razem z nim system operacyjny utrzymuje też klucz uniwersalny usługi systemowej Data Recovery Agent. Klucze te są widoczne w aplikacji Microsoft Management Console (program mmc).

Aby je zobaczyć, należy w oknie MMC z menu "Plik" wybrać opcję "Dodaj/Usuń przystawkę" (np. klawiszem Ctrl-M), a następnie dodać przystawkę "Certyfikaty – bieżący użytkownik".

Środowisko sieciowe, udziały sieciowe

Rdzennymi w środowisku MS Windows protokołami sieciowymi obsługującymi zasoby udostępniane w otoczeniu sieciowym są NetBIOS (Network Basic Input/Output System) i SMB (Server Message Block). Nie są to, niestety, wyrafinowane protokoły, szczególnie pod względem bezpieczeństwa. Udziałami nazywa się w protokole SMB udostępnione poprzez sieć zasoby systemu operacyjnego. Polecenie
net z argumentem share pozwala wyświetlić listę udziałów bieżącego systemu.

Systemy MS Windows bezpośrednio po instalacji tworzą pewne udziały domyślne (dla Windows XP są to np. C$ oraz ADMIN$), które, jakkolwiek na ogół nie stanowią istotnej luki ezpieczeństwa, często nie są potrzebne i powinny być wyłączone. W tym celu niezbędna jest modyfikacja rejestru systemowego. Dla systemu Windows XP w gałęzi HLM\SYSTEM\CurrentControlSet\Services\LanManServer w kluczu parameters należy dodać wartość AutoShareWks typu DWORD równą 0 i ponownie uruchomić system.


Ukrycie komputera w otoczeniu sieciowym

W systemie Windows XP istnieje możliwość ukrycia nazwy bieżącego komputera w otoczeniu sieciowym, z zachowaniem jednocześnie możliwości udostępniania zasobów. Ukrycie takie w czasie bieżącej sesji umożliwia polecenia net z argumentem config server:

C:\> net config server /hidden:yes

/hidden – opcja ukrycia nazwy w otoczeniu sieciowym, możliwe wartości yes oraz no.

Aby trwale uczynić nazwę bieżącego komputera niewidoczną w otoczeniu sieciowym, należy zmodyfikować wpis w rejestrze systemowym: w gałęzi HLM\SYSTEM\CurrentControlSet\Services\LanManServer w kluczu parameters należy dodać wartość Hidden typu DWORD równą 1.

Zapory sieciowe

W systemie Windows XP SP 2 dostępne jest "Centrum zabezpieczeń" zawierające m.in. "Zaporę sieciową".

Niestety ta prosta zapora nie umożliwia precyzyjnej kontroli ruchu sieciowego.

Z tego powodu nieodzowne jest zainstalowanie oddzielnego produktu typu Personal Firewall. Dobrym przykładem może być Kerio Personal Firewall (firmy Kerio), który pozwala na wielopoziomowe filtrowanie ruchu sieciowego.

Podsumowanie

Systemy z rodziny MS Windows są bardzo popularne. Nie wszystkie elementy systemu stoją na tak wysokim poziomie jak graficzny interfejs użytkownika. W Internecie można znaleźć wiele przykładów na to, że systemy te są podatne na wiele groźnych ataków, w których wyniku użytkownicy mogą być narażeni na utratę dany, szantaże i straty materialne spowodowane kradzieżą numerów kont, haseł itp. Firma Microsoft dokłada starań, aby jej produkty były coraz mniej podatne na różnego typu ataki, jednak nie zwalnia to użytkowników od interesowania się bezpieczeństwem systemu operacyjnego, którego używają na co dzień. Dlatego też podstawowa wiedza z dziedziny szeroko rozumianego bezpieczeństwa systemów komputerowych i informacji jest konieczna do przyswojenia, jeśli użytkownicy nie chcą być biernymi obserwatorami nadużyć komputerowych popełnianych na ich systemach operacyjnych.

Problemy do dyskusji

  • Jakie znasz ataki, na które podatne są systemy z rodziny MS Windows?
  • Czy wiesz, jak się bronić przed najczęstszymi atakami takim jak wirusy, robaki internetowe, programy szpiegujące i spam?
  • Czy znasz i używasz popularnych zamienników programów stosowanych na platformie MS Windows, będących często powodem problemów z bezpieczeństwem? Czy potrafisz wymienić takie programy?

Ćwiczenia

1. Utwórz konto użytkownika test1 z hasłem test.

2. Zweryfikuj trudność złamania haseł w systemie za pomocą wybranego narzędzia typu reactive password checking (np. LC4, który można pobrać ze strony www.net-security.org).

3. Włącz opcję "Hasło musi spełniać wymagania co do złożoności" w "Ustawieniach zabezpieczeń lokalnych" i ustaw następujące parametry:
a. maksymalny wiek hasła: 42 dni,
b. minimalna długość hasła: 8 znaków,
c. minimalny okres ważności hasła: 2 dni,
d. 24 ostatnie hasła pamiętane w historii,
e. wyłączone odwracalne szyfrowanie haseł,
f. utwórz użytkownika "test2" w tak zmienionym środowisku.

4. Ustaw i przetestuj następujące parametry blokady konta:
a. próg blokady: 4 próby,
b. czas trwania blokady: 30 minut,
c. zerowanie licznika prób: po 30 minutach.

5. Wyłącz przechowywanie skrótów kryptograficznych haseł w postaci LMhash:
a. Znajdź i włącz opcję "Zabezpieczenia sieci: nie przechowuj wartości hash programu LAN Manager" w "Zasadach zabezpieczeń lokalnych".
b. Sprawdź ponownie programem LC4, czy skróty Lmhash są dostępne.

6. Włącz i przetestuj inspekcję zdarzeń logowania zakończonych sukcesami i niepowodzeniem.

7. Zidentyfikuj i wyłącz nieużywane konta.

8. Zmień nazwę konta Administratora, np. na Szef.

9. Przetestuj dodawanie i usuwanie zaawansowanych opcji dostępu do pliku i katalogu między użytkownikami test1 i test2.

10. Utwórz plik tekstowy tajne.txt o dowolnej treści. Wyświetl jego zawartość w Eksploratorze oraz w konsoli tekstowej (np. poleceniem type). Następnie:
a. Zaszyfruj ten plik i spróbuj ponownie wyświetlić jego zawartość.
b. Wyświetl informacje o zaszyfrowanym pliku poleceniem efsinfo.
c. Odszukaj certyfikat EFS klucza szyfrowania.
d. Zaloguj się jako inny użytkownik i spróbuj wyświetlić zawartość tego pliku.

11. Usuń udziały domyślne swojego stanowiska komputerowego. Zweryfikuj rezultat.

12. Sprawdź widoczność swojego stanowiska w otoczeniu sieciowym. Przetestuj ukrywanie jego nazwy. Czy cały czas możliwe jest korzystanie z udostępnianych zasobów?

13. Używając zapory sieciowej, zablokuj całkowicie komunikację z wykorzystaniem protokołu ICMP. Przetestuj konfigurację za pomocą polecenia ping.

Utwardzanie ochrony systemu operacyjnego Linux

Wprowadzenie

Utwardzanie ochrony systemu operacyjnego jest szczególnie ważne dla serwerów pracujących bezustannie oraz dla serwerów o zakładanym wysokim poziomie bezpieczeństwa przechowujących tajne dane. System taki powinien być odporny na większość (jeśli nie wszystkie) możliwe próby ataku lub włamania. Oczywiście jest to bardzo trudne do osiągnięcia, jeśli w ogóle możliwe. Już w latach
80. zaczęto się zastanawiać nad zwiększeniem bezpieczeństwa systemów serwerowych. Głównymi inicjatorami tych rozszerzeń były organizacje wojskowe i rządowe, które musiały dobrze chronić informacje. Zaproponowano wówczas nowy model bezpieczeństwa - Obowiązkową Kontrolę Dostępu (MAC), zamiast aktualnie wykorzystywanej Uznaniowej Kontroli Dostępu (DAC).

Rozwój systemów wykorzystujących politykę MAC jest dosyć powolny, głównie ze względu na trudności administracyjne tych systemów. Jednak ich ogromnym plusem jest odporność na większość ataków, włamań - warunkiem jednakże jest poprawne skonfigurowanie polityki, co jest zadaniem bardzo trudnym.

Niniejsze ćwiczenie ma zaznajomić z utwardzaniem ochrony na przykładzie systemu wykorzystującego politykę MAC o nazwie SELinux (Security-Enhanced Linux).

Informacje o systemie SELinux

SELinux został stworzony przez NSA na własne potrzeby. Został on udostępniony społeczności w 2000 roku na licencji GPL. Od wersji jądra 2.6.0-test3 jest dostępny w podstawowym jądrze Linuksa - co nie oznacza, że zawsze jest włączony. Obecnie jest rozwijany przez społeczność oraz wiele firm związanych z Linuksem (w tym intensywnie przez RedHat).

SELinux to nie tylko rozbudowa jądra systemu o dodatkową kontrolę dostępu, ale również kilka narzędzi konfiguracyjnych oraz przede wszystkim zestaw polityk definiujących podstawowe uprawnienia różnych procesów. Większość dystrybucji dostarcza zarówno jądro z włączoną obsługą SELinux, jak i podstawowy zestaw polityk.

System ten implementuje połączenie kilku podejść do kontroli dostępu, najistotniejsze to MAC, RBAC (Role-Based Access Control), TE (Type Enforcement). Pozwala to bardzo elastycznie i precyzyjnie definiować dozwolone operacje poszczególnych elementów systemu, np. skrypt używany do tworzenia kopii zapasowych może mieć inne prawa dostępu do plików (obiektów VFS), gdy jest uruchamiany przez użytkownika interaktywnego (np. zalogowanego z konsoli), a inne, gdy jest uruchamiany jako ten sam użytkownik (!) z cron-a.

SELinux rozdziela obiekty w systemie na dwie kategorie:

  • podmioty (subjects) - procesy,
  • przedmioty operacji (objects) – pliki (zwykłe pliki, katalogi, gniazda, rurki itp.) i inne obiekty (np. gniazda tcp).

Wszystkie podmioty i przedmioty operacji mają nadany "kontekst bezpieczeństwa". W przypadku procesów nazywa się go domeną, a w przypadku plików - file_context. Polityki (zasady) określają z jakiej domeny jakie operacje są dozwolone na poszczególnych file_contextach oraz jak i jakie są dozwolone przejścia pomiędzy domenami. Konteksty plików są przechowywane w rozszerzonych atrybutach (xattr), dla nowych plików są dziedziczone po katalogach (o ile polityka nie wskaże inaczej). Konteksty procesów są przechowywane w strukturze opisującej proces w jądrze (task_struct) i dla nowych procesów są dziedziczone po rodzicu (o ile
polityka nie wskaże inaczej).

Zasady mogą być podzielone na moduły, co ułatwia zarządzanie poszczególnymi elementami.

SELinux może pracować w trzech trybach:

  • disabled - wyłączony,
  • permissive - włączone tylko sprawdzanie uprawnień, ale w przypadku ich naruszenia powoduje tylko odnotowanie tego faktu, bez blokowania dostępu (ten tryb jest przydatny do testowania polityk),
  • enforcing - włączone zarówno sprawdzanie jak i egzekwowanie uprawnień.

Oprócz powyższych trybów ochrona może być na trzech poziomach:

  • targeted - tylko niektóre usługi są obięte ochroną, a pozostałe procesy działają w domenie unconfined_t,
  • strict - pełna ochrona, wszystko co nie zostanie explicite dozwolone - zostaje zablokowane,
  • mls - (Multi Level Security) umożliwia nadawanie kategorii bezpieczeństwa plikom, stworzone na potrzeby certyfikacji EAL4+/LSPP.

W nowszych systemach (m.in. w labie 5790) poziomy strict i targeted są zastąpione poziomem default. W praktyce jest on nieznacznie zmodyfikowanym dotychczasowym poziomem targeted.

Ze względu na ograniczony czas na tych zajęciach zajmiemy się jedynie częścią funkcjonalności systemu SELinux. Zainteresowanych całością systemu odsyłamy do strony http://selinuxproject.org/.

Instalacja systemu SELinux

W większości dystrybucji SELinux jest dostarczany razem z dystrybucją (domyślnie zainstalowany lub jako opcja). W systemach RedHat (RedHat Enterprise Linux, CentOS, Fedora) SELinux będzie domyślnie zainstalowany wraz z zestawem polityk.

W Debianie będzie trzeba doinstalować kilka pakietów:

$ apt-get install selinux-basics

Następnie trzeba wydać poniższe polecenie i zrestartować system:

$ selinux-activate

Doda ono opcję "selinux=1" do parametrów jądra w bootloaderze GRUB oraz utworzy plik /.autorelabel. Przy najbliższym starcie systemu wszystkie pliki w sytemie zostaną zaopatrzone w konteksty bezpieczeństwa zgodnie z domyślną polityką.

Domyślnie system będzie pracował w trybie permissive. Aby przełączyć w tryb enforcing należy wydać polecenie:

$ selinux-config-enforcing

Konfiguracja trybu pracy znajduje się w pliku /etc/selinux/config.

Konteksty i polityki

Kontekst składa się z kilku elementów:

<użytkownik>:<rola>:<typ>:<MLS>

użytkownik - wskazuje użytkownika, który uruchomił dany proces lub stworzył dany plik.
rola – decyduje o tym, którzy użytkownicy (grupy) mają dostęp do poszczególnych domen.
typ – główna część kontekstu – decyduje o dostępie, jest używana w polityce do zdefiniowania reguł dostępu.
MLS – tylko w nowszych implementacjach – kategoria MLS.

Rola i użytkownik mają małe znaczenie na poziomie targeted/default.

Przykładowy file_context:

system_u:object_r:ifconfig_exec_t:s0 /bin/ip
system_u:object_r:home_root_t:s0 /home

Przykładowa domena procesu:

system_u:system_r:httpd_t:s0 /usr/sbin/apache2 -k start

Zasady regulują, które domeny mają dostęp do poszczególnych obiektów. Pojedyncza zasada składa się z następujących elementów:

  • akcja, niektóre wartości:
    • allow - zezwól
    • auditallow - zezwól i zaloguj ten fakt
    • dontaudit - nie loguj próby
    • type_transition - definiuj przejście pomiędzy kontekstami
  • podmiot - domena procesu który próbuje wykonać operację (np httpd_t)
  • przedmiot - kontekst i klasa przedmiotu akcji (np home_root_t:dir)
  • operacja - jakiej operacji ma dotyczyć zasada, niektóre z operacji:
    • dir { read getattr search add_name write } - katalog: czytanie listy plików, pobieranie atrybutów, testowanie istnienia pliku, dodawanie pliku, zapis
    • ile { write create getattr setattr } - plik: zapis, utworzenie, pobranie atrybutów, ustawianie atrybutów
    • lnk_file { read getattr } - link symboliczny: czytanie, pobranie atrybutów
    • tcp_socket { name_bind } - gniazdo tcp: oczekiwanie na połączenia przychodzące

Przykładowy plik (moduł) definiujący kilka zasad razem z zależnościami znajduje się w pliku example.te (patrz niżej, załączone pliki mają zmienione nazwy: example.te_.txt i example.fc_.txt). W tym pliku znajduje się również bogatsza lista operacji. Przykładowy moduł można skompilować i załadować poleceniami:

checkmodule -M -m -o example.mod example.te
semodule_package -o example.pp -m example.mod -f example.fc
semodule -i example.pp

W praktyce moduły pisze się za pomocą makr m4. Można obejrzeć je, instalując pakiet selinux-policy-src. Źródła domyślnej polityki będą w /usr/src.

Użytkownicy w domyślnej polityce (w nawiasach dozwolone role):
system_u (system_r) - procesy systemowe,
user_u (user_r) - zwykły, nieuprzywilejowany użytkownik,
staff_u (staff_r, sysadm_r) - administrator systemu wykonujący też nieuprzywilejowane zadania,
sysadm_u (sysadm_r) - administrator systemu,
root (staff_r, sysadm_r) - specjalny użytkownik dla systemowego konta root (do pracy interaktywnej).

Narzędzia i opcje

1. Status i tryby SELinux

$ sestatus # ogólny status systemu SELinux
$ sestatus -b # powyższe plus zmienne mogące wpływać na polityki (polityka może ich używać jak normalne zmienne w skryptach)
$ getenforce # pobieranie trybu SELinux
$ setenforce # ustatawianie trybu SELinux

Powyższe operacje można również uzyskać przez odczytywanie-zapisywanie odpowiednich plików w /selinux (podmontowanym specjalnym systemem plików selinuxfs).

2. Sprawdzanie kontekstów

Większość standardowych narzędzi pokazujących informacje o plikach i procesach obsługuje opcję -Z do wyświetlenia dodatkowo kontekstów. Przykłady:

$ id -Z #kontekst (domena) aktualnie zalogowanego użytkownika (jego powłoki)
$ ps -Z #kontekst uruchomionych procesów
$ ls -Z #kontekst plików

3. Zmiana kontekstów

Kontekst pliku zmienia się poleceniem chcon, np:

$ chcon -t user_home_t /tmp/myfile

Można również przywrócić domyślny kontekst wynikający z polityki poleceniem "restorecon".

Niektórych przedmiotów polityki nie da się odwzorować w systemie plików. Są to np. porty tcp/udp. Do zarządzania nimi służy narzędzie semanage. Pozwala ono operować m.in. na:

  • port - powiązanie nazw z numerami portów
  • login - powiązanie użytkownika systemowego z użytkownikiem-rolą SELinux - jeśli użytkownik nie jest tu wymieniony explicite, zostanie użyta wartość powiązana z __default__. Ustawianiem początkowych kontekstów procesom użytkownika zajmuje się moduł PAM (pam_selinux) lub odpowiednio zmodyfikowany program login.
  • user - dozwolone role dla użytkowników
  • fcontext - domyślne file_contexty dla plików

Obsługa, przykłady:

$ semanage port -l #lista klas portów (będących przedmiotem reguł)
$ semanage login -a -s user_u test # połączenie użytkownika systemowego test z użytkownikiem SELinux user_u

Do przełączania się pomiędzy rolami (w ramach swoich uprawnień) służy polecenie:

$ newrole

Polecenie to będzie pytało o hasło użytkownika.

4. Modyfikacja polityki

Najczęściej zmieniane parametry polityki można modyfikować poprzez zmienne. Jeśli chcemy wprowadzić jakąś modyfikację polityki, warto najpierw sprawdzić, czy nie ma do tego zmiennej. Do modyfikacji służą narzędzia:

$ getsebool -a # wyświetla listę zmiennych
$ setsebool # ustawia wartość zmiennej
$ setsebool -P # ustawia wartość zmiennej i zapisuje modyfikację do konfiguracji (będzie działała również po restarcie systemu)

Część zmian wymaga ingerencji w samą polityce. Najłatwiej takie zmiany wprowadzić przez przygotowanie osobnego modułu. Po przygotowaniu pliku .te z zasadami należy skompilować plik poleceniem:

$ checkmodule -M -m -o module.mod module.te
$ semodule_package -o module.pp -m module.mod

a następnie załadować moduł do jądra:

$ semodule -i module.pp

załadowane moduły można wylistować tak:

$ semodule -l

Warto też przejrzeć pozostałe opcje poleceń semodule, semanage.

5. Skrypty startowe

Jeśli ręcznie restartujemy jakąś usługę, to, aby była uruchomiona w odpowiednim kontekście, należy uruchamiać ją przez run_init:

$ run_init /etc/init.d/ssh start

Polecenie to będzie pytało o hasło użytkownika root.

6. Diagnostyka

System zapisuje w dzienniku większość operacji zablokowania dostępu (konkretnie te, które nie są wyłączone regułą dontaudit). Są one przechowywane razem z innymi komunikatami jądra (w Debianie /var/log/kern.log). Każda linia zawiera informację, jaka akcja przez kogo i na jakim obiekcie została zablokowana. Przykładowa linia:

[28982.648028] type=1400 audit(1287270591.742:1243870): avc: denied { read }
for pid=8745 comm="cat" name="example-file" dev=sda1 ino=125781
scontext=user_u:user_r:user_t:s0 tcontext=system_u:object_r:example_file_t:s0
tclass=file

widać tu po kolei:
- denied { read } - zablokowaną akcją jest odczyt
- pid=8745 - pid procesu, któremu odmówiono dostępu
- comm="cat" - nazwa procesu
- name="example-file" dev=sda1 ino=125781 - przedmiot akcji (tutaj plik "example-file" na urządzeniu sda1 o numerze i-węzła 125781)
- scontext=user_u:user_r:user_t:s0 - kontekst procesu wykonującego akcję (source-context)
- tcontext=system_u:object_r:example_file_t:s0 - kontekst przedmiotu akcji (target-context)
- tclass=file - klasa przedmiotu

Korzystając ze skryptu audit2allow, można łatwo stworzyć regułę zezwalającą na daną akcję. Przykłady:

$ cat /var/log/kern.log | audit2allow #wypisuje nowe reguły
$ cat /var/log/kern.log | audit2allow -M local #tworzy (ale nie ładuje) moduł "local" zawierający reguły zezwalające

W praktyce, przed załadowaniem tak stworzonych reguł, warto sprawdzić, czy nie zezwalają na więcej niż chcemy. Można też oczywiście do audit2allow przekazywać pojedyncze linie logów, aby utworzyć z nich reguły. To ostatnie użycie zwykle przydaje się przy tworzeniu nowych polityk.

Narzędzie sesearch pozwala znaleźć zasady spełniające podane kryteria. Np. gdy szukamy zasad zezwalających na dowolne operacje wykonywane przez użytkownika user_u (typ user_t) na plikach w etc (typ etc_t), to:

$ sesearch -A -s user_t -t etc_t

Ćwiczenia

1. Zainstaluj narzędzia SELinux oraz włącz w trybie enforcing oraz politykę targeted/default.

2. Utwórz użytkownika setest (i nadaj mu hasło), oraz połącz go z SELinux jako user_u.

3. Sprawdź z jakimi kontekstami są uruchomione procesy przez użytkownika guest, a z jakimi - setest.

4. Sprawdź, czy guest może zobaczyć komunikaty jądra. A setest? Sprawdź co przy tej operacji trafiło do dziennika.

5. Zmodyfikuj konfigurację, tak aby obydwaj mieli dostęp do komunikatów jądra.

6. Sprawdź jakie uprawnienia ma plik /etc/crontab. Czy użytkownicy guest i setest powinni móc go przeczytać? A jak jest w praktyce?

7. Zezwól użytkownikom na odczyt pliku /etc/crontab.

8. Korzystając z modułu polityki example (załączonego do tych materiałów), przygotuj program /bin/example (będący kopią /bin/cat), który będzie mógł jako jedyny przeczytać plik /tmp/example-file.

Wskazówka: pamiętaj o nadaniu odpowiednich kontekstów plikom.

Scenariusz opracowano na podstawie materiałów:

http://selinuxproject.org/

http://wiki.centos.org/HowTos/SELinux

http://www.nsa.gov/research/selinux/

http://www.gentoo.org/proj/en/hardened/selinux/selinux-handbook.xml

http://students.mimuw.edu.pl/SO/Projekt05-06/temat5-g7/se/se.html

ZałącznikWielkość
example.fc_.txt235 bajtów
example.te_.txt6.93 KB