Solaris Administrator's Security Guide

Zawartość rozdziału:

  1. Parametry jądra i protokołów sieciowych

10. Parametry jądra i protokołów sieciowych

Rozdział ten skupia się na poprawnej konfiguracji jądra i protokołów sieciowych.

UWAGA!
Aby umożliwić automatyczne wykonywanie poniższych komend podczas startu systemu (ale tylko tych, zawierających polecenie ndd) należy:


10.1. Parametry jądra

Poniższe parametry ustawia się w pliku /etc/system.


10.1.1. Wyłączenie wykonywania programów na stosie

Skutecznie blokuje wykonywanie programów na stosie, czyli - de facto - jest częściowym zabezpieczeniem przed przepełnianiem buforów. Niestety, nie działa na starszych modelach SPARC i platformie INTEL x86. Odnosi skutek jedynie w przypadku modeli: sun4u/sun4d/sun4m.

Aby włączyć tą blokadę, należy zastosować parametry:

set noexec_user_stack=1 
set noexec_user_stack_log=1

Niestety, włączenie powyższych opcji może mieć negatywny wpływ na niektóre aplikacje.


10.1.2. Blokada tworzenia plików zrzutu (core dump)

Jeżeli nie planujemy debugować systemu, należy wyłączyć tworzenie plików zrzutu. Zapobiegniemy w ten sposób przepełnieniu dysku plikami core generowanymi w wyniku błędów systemu Solaris.

set sys:coredumpsize=0

10.1.3. Maksymalna ilość procesów na użytkownika

Jak w temacie, ustawienie poniższego parametru pozwoli zapobiec wyczerpaniu zasobów systemowych przez któregoś z użytkowników.

set maxuprc=WARTOSC

gdzie WARTOSC może wynosić np. 100.


10.1.4. Wymuszenie korzystania z uprzywilejowanych portów NFS

Poniższe opcje wymuszają odrzucanie pakietów (dotyczących usługi NFS) pochodzących od nieuprzywilejowanych portów.

set nfssrv:nfs_portmon = 1
set nfs:nfs_portmon = 1

10.2. Konfiguracja protokołu ARP

10.2.1. Adresy statyczne

O ile jest to możliwe, należy stosować statyczne tablice ARP w odniesieniu do wszystkich komputerów w sieci lokalnej lub (jeżeli nie wchodzi to w rachubę) przynajmniej do hostów, których obecność jest wymagana do poprawnej pracy serwera, a znajdujących się w sieci lokalnej.

Tym sposobem można (choć częściowo) ustrzec się przed fałszowaniem adresów IP.

Aby skorzystać z tej metody należy w pliku /etc/ethers zawrzeć adresy IP komputerów oraz ich adresy MAC. Oto przykładowy plik /etc/ethers:

192.168.11.34 00:80:48:AB:95:80
192.168.11.35 00:80:48:DF:A1:2A

Adresy te zostaną wczytane przy starcie systemu do cache'u i nie mogą być z niego ani usunięte, ani podmienione.

Jeżeli w sieci lokalnej jest kilka - lub kilkanaście komputerów można nawet wyłączyć całkowicie usługę dynamicznego uzyskiwania adresów MAC zastępując ją tablicą statyczną.


10.2.2. Czasy ważności adresów ARP w cache'u

Jeżeli konieczne jest korzystanie z dynamicznych funkcji ARP to należy zmniejszyć czasy ważności, po których adresy MAC będą usunięte z cache'u (arp_cleanup_interval). Analogiczna sytuacja ma miejsce w przypadku tablic routingu (ip_ire_flush_interval).

Można to zrobić stosując polecenia:

ndd -set /dev/arp arp_cleanup_interval 60000      (domyślnie 5 minut)
ndd -set /dev/ip ip_ire_flush_interval 60000       (domyślnie 20 minut)

60000 oznacza liczbę milisekund (czyli 60 sekund), po którym to czasie zostaną usunięte wpisy z cache'u.


10.3. Konfiguracja protokołu IP

10.3.1. Wyłączenie IP Forwarding

O ile system nie będzie używany jako router należy wyłączyć IP Forwarding. Można to zrobić poleceniem:

ndd -set /dev/ip ip_forwarding 0
lub utworzyć plik:
touch /etc/notrouter

Wyłącza on IP forwarding między interfejsami, w przypadku gdy nasz serwer należy do różnych podsieci (tzw. multihoming).


10.3.2. Włączenie jawnego pochodzenia pakietów

Jeżeli system będzie korzystał z więcej niż jednego interfejsu sieciowego i będzie należeć do różnych podsieci, wówczas można częściowo się ustrzec przed podszywaniem pod cudzy IP. Należy w tym celu włączyć jawne pochodzenie pakietów:

ndd -set /dev/ip ip_strict_dst_multihoming 1

Dzięki temu pakiety o adresach źródłowych pochodzących z sieci, która jest przyłączona do innego interfejsu sieciowego niż ten, z którego te pakiety zostały odebrane, będą odrzucane.


10.3.3. Wyłączenie przesyłania broadcastów bezpośrednich

Jeżeli system przesyła dalej pakiety, należy wyłączyć przesyłanie broadcastów bezpośrednich. Dzięki temu można się ustrzec przed atakami DoS typu "smurf".

ndd -set /dev/ip ip_forward_directed_broadcasts 0

10.3.4. Wyłączenie przesyłania pakietów typu "source route"

Należy wyłączyć przesyłanie pakietów typu "source route" (czyli takich, które wykorzystują routing źródłowy). Dzięki takim pakietom potencjalni hackerzy mogą omijać systemy firewall i routery ekranujące.

ndd -set /dev/ip ip_forward_src_routed 0

10.3.5. Routing statyczny zamiast dynamicznego

W przypadku, gdy nie ma bezpośrednich wskazań co do używania routingu dynamicznego, to ze względów bezpieczeństwa (niestety, kosztem funkcjonalności) należy rozważyć stosowanie routingu statycznego.

Aby wyłączyć routing dynamiczny należy utworzyć plik:

touch /etc/defaultrouter
i umieścić w nim adres IP domyślnego routera. Jeżeli takiego nie ma, można pozostawić ten plik pusty.

W przypadku, gdy korzystamy z kilku routerów, należy utworzyć plik:

touch /etc/init.d/static_routes

i zawrzeć w nim polecenia /usr/bin/route, które umożliwią korzystanie z tych routerów.
Kolejną czynnością będzie stworzenie łącza sztywnego:

ln /etc/init.d/static_routes /etc/rc2.d/S99static_routes 

Więcej informacji na temat komendy route można uzyskać korzystając z podręcznika systemowego - "man route".

Jeżeli wyłączenie routingu dynamicznego nie wchodzi w rachubę, należy przynajmniej uruchamiać demon routingu w trybie "quiet" (opcja "-s").


10.3.6. Wyłączenie multicastingu

Jeżeli multicasting nie jest potrzebny - należy wyłączyć jego obsługę poprzez wprowadzenie znaku komentarza (#) przed linią:

"route add 224.0.0.0."

w pliku /etc/init.d/inetsvc


10.3.7. Wyłączenie odpowiadania na Broadcast Echo Reqest

Ponieważ żądania Echo Request typu Broadcast mogą być użyte do przeprowadzenia ataków typu "Denial of service" zalecamy ich odrzucanie:

ndd -set /dev/ip ip_respond_to_echo_broadcast 0

10.3.8. Wyłączenie odpowiadania na Broadcast Timestamp

Podobnie jak powyżej, należy wyłączyć odpowiedzi na Timestamp Request typu Broadcast.

ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0

10.3.9. Włączenie odrzucania pakietów "Redirect Error"

Jak w temacie, należy włączyć odrzucanie pakietów tego typu:

ndd -set /dev/ip ip_ignore_redirect 1

oraz możliwość ich wysyłania:

ndd -set /dev/ip ip_send_redirects 0

Należy również wyłączyć odrzucanie Timestamp Request typu Unicast:

ndd -set /dev/ip ip_respond_to_timestamp 0

10.4. Konfiguracja protokołu TCP

10.4.1. Ochrona przed atakami "SYN flood"

Aby sprawdzić, czy system jest atakowany tą metodą możemy użyć polecenia:

netstat -an -f inet | grep SYN_RCVD | wc -l
w przypadku ataków bieżących, lub:
netstat -s -P tcp

jeżeli chcemy przejrzeć statystykę od momentu włączenia serwera.

Parametr tcpTimRetransDrop pokazuje liczbę anulowanych połączeń spowodowanych zbyt długim czasem oczekiwania.

Z kolei parametr tcpListenDrop określa liczbę pakietów SYN, które były odrzucone od momentu startu systemu, a były spowodowane opóźnieniami w kolejce połączeń TCP.

Gdy obydwie wartości szybko się zwiększają jest duże prawdopodobieństwo, że system jest atakowany metodą SYN.

Aby zmniejszyć wartość czasu, po którym połączenie będzie anulowane gdy nie zostanie odebrany pakiet SYN-ACK należy wykonać polecenie:

ndd -set /dev/tcp tcp_ip_abort_cinterval 60000     (domyślnie 3 min) 

W przypadku obciążonych systemów zalecamy również zwiększenie liczby nie nawiązanych połączeń w kolejce (1024) do np.

ndd -set /dev/tcp tcp_conn_req_max_q0 4096

Zwiększenie wartości może pomóc w przeciwdziałaniu wspomnianym atakom "SYN flood".

Można zwiększyć również max. ilość połączeń z serwerem (domyślnie jest to 128), np.:

ndd -set /dev/tcp tcp_conn_req_max_q 1024

Niestety, zmiana ta ma negatywny wpływ na wydajność systemu oraz odbywa się kosztem rezerwacji większej ilości pamięci na kolejkę połączeń.


10.4.2. Zmiana parametru TCP_STRONG_ISS

Ze względów bezpieczeństwa należy zmienić kolejność przydzielania numerów ISN na zgodną z RFC 1948, która jest trudniejsza do odgadnięcia niż (domyślnie ustawiona) ulepszona metoda z losową wartością wzrostu.

W tym celu w pliku /etc/default/inetinit wartość TCP_STRONG_ISS należy zmienić na:

TCP_STRONG_ISS=2


Poprzedni rozdział Spis treści Następny rozdział