Wstęp do bezpieczeństwa serwera
Napisał: Patryk Krawaczyński
15/02/2004 w Bezpieczeństwo 1 komentarz. (artykuł nr 3, ilość słów: 1569)
D
obra konfiguracja systemu oraz dodatkowe narzędzia zwiększające poziom bezpieczeństwa naszego systemu to nie wszystko. Istnieją dodatkowo jeszcze zasady, których należy przestrzegać podczas całej naszej działalności oraz z niektórymi z nich zapoznać naszych użytkowników. Linux jest systemem, który już po standardowej instalacji posiada wbudowane narzędzia bezpieczeństwa. Autorzy różnych dystrybucji, oraz pakietów dla nich starają się jak mogą by poziom ten był jak największy. Jednak wszystkiego nie da się zrobić automatycznie oraz poprzez konfigurację.
Oprócz dobrej konfiguracji musimy uwzględnić nas, czyli czynnik ludzki, który powinien dodatkowo przestrzegać paru zasad, które także zwiększają bezpieczeństwo naszego systemu.
Jako administratorzy jesteśmy odpowiedzialni za bezpieczeństwo całego systemu, jak i wszystkich użytkowników posiadających konta na naszym serwerze. Istnieje wiele powodów, dla których nasz system powinien być trudny do zdobycia np. straty baz danych, zniszczenie sprzętu czy wykorzystanie naszej maszyny do dostania się na inny, bardziej ambitny serwer. Oczywiście, aby do tego nie dopuścić stosujemy odpowiednie konfiguracje czy dodatkowe zabezpieczenia. Lecz oprócz tego możemy także zastosować się do paru zasad, które w kilku procentach także zwiększają naszą odporność na ataki. Oto kilka z nich:
0) Funkcja serwera – na samym początku powinniśmy określić jaką funkcję będzie spełniał nasz serwer (serwer DNS, pocztowy, drukarki, router podsieci, czy serwer news’ow, ftp), ponieważ od jego funkcji zależeć będzie liczba oraz rodzaj udostępnionych przez nas usług. Jeśli już określimy daną funkcję powinniśmy dokładnie zastanowić się jakie usługi z jej zakresu mają być udostępnione, ponieważ nawet po zainstalowaniu składników potrzebnych do danej funkcji Linux udostępnia światu więcej usług niż jest to potrzebne w większości typowych zastosowań. Wszystkie zbędne usługi należy wyłączyć (np. poprzez opatrzenie odpowiednich linii znakiem komentarza w odpowiednich plikach konfiguracyjnych i skryptach startowych) lub po prostu usunąć / odinstalować. W pewnym poziomie możemy wykluczyć taką sytuację poprzez uniknięcie standardowej instalacji systemu, która może zawierać wiele innych, najczęściej zbędnych usług, zaśmiecających nasz system i narażających na szwank jego bezpieczeństwo. Dlatego zawsze, gdy jest to możliwe, powinniśmy uruchamiać szczegółową (ang. verbose lub expert) procedurę instalacji i w ten sposób zrezygnować z dołączania niepotrzebnych pakietów – ponieważ najprostszą metodą uniknięcia podatności w oprogramowaniu jest jego nieinstalowanie. Dodatkowe oprogramowanie, które wykorzystuje bity setuid może doprowadzić do lokalnej eskalacji uprawnień, z kolei oprogramowanie sieciowe – okazje do przeprowadzania zdalnych ataków. Jeśli tylko to możliwe powinnyśmy rozważyć separacji każdej sieciowej usługi na dedykowanym serwerze. Zabieg ten ogranicza liczbę usług, które mogą zostać jednocześnie zaatakowane na pojedynczym serwerze, a nawet jeśli atakujący będzie w stanie przełamać podatność danego oprogramowanie to będzie ona tyczyć się tylko jednego wydzielonego serwera.
1) Aktualizacja systemu – każdy program z czasem zostaje ulepszony, jego błędy poprawione, działanie przyśpieszone, zostają dodane nowe rozwiązania i funkcje – i w ten sposób ukazują się nowe wersje lub łaty (patche) na stare. Każdy system operacyjny ma to do siebie, że dopiero po opublikowaniu i przetestowaniu w różnych programach ukazywane są błędy występujące w różnych sytuacjach. Dlatego dobrze by było jeśli po instalacji naszego nawet najnowszego Linuksa odwiedzimy jego oficjalną stronę i zainteresujemy się uaktualnieniami. Na przykład w przypadku Linuksa Slackware uaktualnienia możemy znaleźć na jego oficjalnej stronie www.slackware.com, lub ftp://ftp.slackware.com czy na mirrorze różnych ftp’ów: sunsite.icm.edu.pl. W dodatku często wydawane są czasopisma z poprawionymi / nowymi wersjami pakietów. Oczywiście możemy także dokonać aktualizacji pojedynczych programów, z których korzysta nasza dystrybucja poprzez odwiedzenie ich domowych stron np. serwer proftpd posiada stronę www.proftpd.org. Adresy oficjalnych stron poszczególnych deamonów możemy znaleźć w dokumentacji załączonej wraz z nimi.
2) Bugtraq – jest to lista dyskusyjna, na której programiści z całego świata demonstrują swoje możliwości pod postacią wykrywania luk w zabezpieczeniach poszczególnych programów oraz błędach w ich działaniu. Oczywiście nie robią oni tego by pokazać swoją osobę w jak najlepszym świetle lecz dla całej społeczności korzystającej z danych programów. Lista ta ściśle wiąże się z uaktualnieniami, ponieważ dopiero po oficjalnym zatwierdzeniu występowania danej luki na tej liście zazwyczaj zostaje od razu wypuszczona nowsza wersja lub łata na starą wersję testowanego programu przez jego twórców. Dość często publikowane są programy wykorzystujące tę lukę (eksploity), aby administratorzy oraz pojedynczy użytkownicy mogli sprawdzić czy są podatni na dany rodzaj ataku. Często także publikowane są rozwiązania wykluczające podatność na dany atak – czasami są to nawet tylko ciągi komend konfiguracyjnych. Dlatego powinniśmy zapisać się do takiej listy w celu bycia informowanym na bieżąco, no a jeśli czujemy się na siłach możemy brać także aktywny udział w dyskusjach przeprowadzanych na jej forum. Jeśli chodzi o listę bugtraq polecam serwisy, które od bardzo dawno poruszając temat bezpieczeństwa, czyli Linux Security www.linuxsecurity.com i Security Focus www.securityfocus.com.
3) Skomplikowane hasła – Linux jest systemem, gdzie z hasłami możemy spotkać się prawie, że na każdym kroku. Dlatego o nie dbać powinniśmy przede wszystkim. Hasło to pewien ciąg znaków zabezpieczających dany komputer czy konto użytkownika przed niepowołanym dostępem, dlatego ten ciąg znaków powinien być jak najdłuższy i jak najbardziej skomplikowany oraz unikalny. Hasło nie może być proste jak “metrdrutu” lecz długie i skomplikowane jak “kr3.5o0ol@u,Qm7^m4pl” – pierwsze z nich złamie nawet zwykły użytkownik, a na drugim wyłoży się nawet zaawansowany program łamiący. Podstawowa zasada tworzenia haseł mówi, że powinny one mieć nie mniej niż dziewięć znaków (z postępem technologicznym ta ilość znaków staje się coraz większa), zawierać małe i wielkie litery (systemy uniksowe, rozróżniają je, podobnie jak ludzie) oraz cyfry i dopuszczalne znaki specjalne. Ponadto nie mogą one być nazwami powiązanymi z osobą, która je tworzy, czyli nie mogą dotyczyć bliskich nam osób, naszego imienia, nazwiska, ksywy, ulicy domu, numeru telefonu, daty urodzenia pisanej normalnie czy wspak, a szczególnie nie powinny to być sekwencje znaków na klawiaturze tworzącej układ wprowadzania klawiszy np. qwerty lub zaq12wsx. Hasło do danego konta czy programu powinny znać tylko osoby, które mają do niego prawa dostępu. Hasło powinno być przechowywane tylko i wyłącznie w naszej głowie, nie powinno być zapisywane w żadnych plikach, kartkach, zeszytach, dokumentach i w dodatku znajdować się w pobliżu serwera / komputera luzem. Wyrazy tworzące hasła powinny być wyłącznie wymysłem naszej chorej wyobraźni, dla nas łatwe do zapamiętania, a dla innych trudne do zgadnięcia. Przecież pierwszym krokiem do bezpiecznego systemu jest dobre hasło administratora. Jeśli posiadamy wiele kont to na każdym z nich powinno być zastosowane inne hasło. Jeśli posługujemy się tym samym hasłem dostępu do kilku aplikacji i serwerów to tym samym stwarzamy śmiertelne zagrożenie dla wszystkich tych systemów. W przypadku odgadnięcia któregokolwiek hasła reszta serwerów pozostaje bezbronna wobec prób ataku z zewnątrz. W ten sposób nasz jak i inne systemy są narażone na ataki przeprowadzane z innych maszyn, a nawet z innych sieci. Oczywiście wybierając różne hasła nie należy poddawać się lenistwu i wybierać proste do zapamiętania hasła lub bardzo do siebie podobne – to tylko by nieznacznie opóźniło ich odgadnięcie. W dodatku wielu użytkowników pozbawionych fantazji korzysta z generatorów haseł, które pomagają im w kreatywnym wyborze zabezpieczenia, lecz osoby te nie zdają sobie sprawy, że generatory te mogą być także wykorzystane do tworzenia słowników dla programów łamiących hasła. Ostatnią linią obrony jest edukacja w tym zakresie użytkowników. Powinniśmy mieć pewność, że użytkownicy naszego systemu mają świadomość wagi bezpieczeństwa systemu haseł. W szczególności należy im uzmysłowić konieczność stosowania przyjętych w naszym systemie reguł dotyczących haseł, nawet jeśli byłoby to dla nich uciążliwe. Wszystkie restrykcje, które mogą wydawać się surowe są niezbędne, jednak tymczasem jak widzimy, aby uniknąć poważnych problemów dużo do szczęścia nie potrzeba.
4) Użytkownicy systemu – ich nigdy nie należy rozpieszczać. Dowiedziono, że tak zwani znani i zaufani użytkownicy są zródłem 80% wszystkich naruszeń, ponieważ to oni mają największy dostęp do informacji, co znacznie ułatwia im działanie. Ale to nie jedyna ich przewaga użytkowników – jako użytkownicy wewnętrzni często są obdarzeni zaufaniem. Tworząc nowe konta dla użytkowników powinniśmy zadbać o to by posiadali oni jak najmniejsze wymagania w stosunku do naszego systemu np. przed założeniem konta poprosić ich o przedstawienie listy usług z jakich chcieliby korzystać i udostępnić im te najbardziej potrzebne. Podczas zakładania kont powinniśmy też uzupełnić takie pola jak imię, nazwisko, numer telefonu kontaktowego – wcześniej upewniając się, że dane przez nich podawane są prawdziwe. Nieaktywne konta użytkowników, którzy już nie korzystają z naszego systemu powinny być usuwane w jak najszybszym czasie od ich wygaśnięcia. Dodatkowo możemy stworzyć regulamin panujący na naszym systemie oraz zapoznać z nim wszystkich użytkowników. Na końcu umieścić informację o wysłaniu stosownego e-maila do administratora, czyli nas o zapoznaniu się z regulaminem oraz jego zaakceptowaniem by uniknąć sytuacji zdziwienia się danego użytkownika, gdy jego konto zostanie poddane kwarantannie z powodu złamania któregoś z punktu w regulaminie. Użytkowników, którzy tego nie zrobili lub posiadają nieuzasadnione wątpliwości, co do jakiegoś punktu – usunąć.
5) Testowanie konfiguracji – po wprowadzeniu jakichkolwiek zmian związanych z bezpieczeństwem, czy dokonaniu uaktualnień, a nawet zmianie konfiguracji systemu powinniśmy sprawdzić nasze nowe dokonania poprzez ich przetestowanie ze specjalnie przygotowanego konta testowego lub nawet zaatakowanie naszego systemu. Jeśli stać nas na to i posiadamy trochę wolnego czasu powinniśmy zainstalować te samą wersję Linuksa na drugim komputerze, którego używamy do testów, sklonować konfigurację naszego prawdziwego systemu i przeprowadzić z naszego klona serię ataków z zewnątrz na nasz system. Następnie wystarczy zanotować słabe punkty zgłaszane przez atakujące skrypty, lub komunikaty zapisywane w logach atakowanego serwera. Jeśli wystąpiły jakieś luki natychmiast powinniśmy znaleźć poprawki lub inne rozwiązania. Dodatkowo na naszym klonie możemy uruchomić eksploity badające naszą odporność na ataki wewnętrzne, co w razie wystąpienia wypadku chroni nasz oryginalny serwer przed błędami. Jeśli nie posiadamy dodatkowego komputera do przeprowadzenia testów zawsze możemy po prostu zainstalować na naszym systemie skaner bezpieczeństwa i skanować własny serwer.
Więcej informacji: Linux Security HOWTO
Ad. 3) – Hasła są jak bielizna. Nie powinno się ich zostawiać na widoku dla innych. Powinno się je regularnie zmienić i nigdy nie użyczać nieznajomym.