Bezpieczeństwo pod Linuksem

Panuje ogólne przeświadczenie, że Linux jest bezpiecznym systemem. Jednak aby stał się naprawdę bezpieczny, trzeba w to włożyć trochę pracy. Zabezpieczanie systemu to nie jest jednorazowa czynność – trzeba na bieżąco pamiętać o zmianie haseł, uaktualnianiu oprogramowania (ale nie za bardzo!) czy przeglądaniu niektórych logów.

Tekst ten był pisany wiele lat temu, więc miejscami mógł się zdezaktualizować

Zakładam, że osoba czytająca ma jako-takie pojęcie o Linuksie i TCP/IP.

Hasła

Podstawą systemu zabezpieczeń Linuksa są konta i przypisane do nich hasła. Hasła stanowią kluczową rolę przy zabezpieczaniu. Powinny one mieć odpowiednią długość – nie mniej niż 6 znaków, oraz nie powinny być zbyt proste. Crackerzy przy łamaniu haseł najpierw stosują tzw. metodę słownikową, czyli porównywanie hasła z każdym ze słów w danym słowniku, następnie sprawdzane są te same słowa w odwrotnej kolejności a także w różnych kombinacjach małe-duże litery. Najlepiej zatem stosować przypadkowe kombinacje liter i znaków semigraficznych, jakie można znaleźć na klawiaturze. Hasła należy też co kilka dni zmieniać. Można to wymusić korzystając z ustawień znajdujących się w pliku /etc/login.defs. Do określenia minimalnej długości hasła służy opcja „PASS_MIN_LEN”. Opcje „PASS_MIN_DAYS” i „PASS_MAX_DAYS” odpowiadają za ilość dni, przez jakie można korzystać z danego hasła, odpowiednio minimalnie i maksymalnie. Warto też odpowiednio poinformować „swoich” użytkowników o zasadach, jakimi należy kierować się przy ustawianiu haseł, ponieważ zazwyczaj luserzy ustawiają je np. na swoje imię, imię żony czy psa.

Inetd

Inetd jest systemem gospodarki serwerami internetowymi. Zwany jest też czasem „superdaemonem”, ponieważ zarządza on innymi demonami (serwerami usług). Jest to o tyle przydatne, że demony nie są uruchomione cały czas zajmując pamięć i obciążając procesor, ale są uruchamiane w razie potrzeby. Plikiem konfiguracyjnym dla tego demona jest /etc/inetd.conf. Konfigurację tego demona należy zacząć od przejrzenia pliku konfiguracyjnego i wyłączenia wszystkich demonów, które nie są nam potrzebne (nie trzeba wycinać tych linii – wystarczy „zahaszować”, czyli wstawić ‚#’ na pierwsze miejsce w tej linii). Niektóre usługi (po myślniku nazwa demona – przydatne przy kontroli dostępu, opis niżej):

ftp – in.ftpd

File Transfer Prototocol – Protokół Przesyłania Plików. Przydatny, ale potencjalnie niebezpieczny, ponieważ hasła przesyłane są przez sieć w postaci niezaszyfrowanej. Dobrym zastępcą jest scp z pakietu ssh. Wadą scp jest to, że nie każdy ma klienta tej usługi, a ftp jest w każdej przeglądarce i w każdym Windowsie. Przykład użycia scp:

scp /katalog/plik user@host/katalog/
lub
scp user@host/katalog/plik .

Można użyć także opcji -C aby użyć przy kopiowaniu kompresji.

Jeśli jesteśmy zmuszeni używać ftp, to trzeba zadbać, aby był to najlepszy serwer. Obecnie za jeden z najlepszych uważa się ProFTPd. Natomiast należy unikać wu-ftpd, ponieważ w większości przypadków serwer ten zawiera błędy, które mogą umożliwić włamanie.

telnet – in.telnetd

Tej usługi chyba nie ma co przedstawiać. Także w tym przypadku należy rozważyć rozwiązanie alternatywne, ponieważ hasła przesyłane są czystym tekstem. Bardzo dobrym rozwiązaniem jest stosowanie pakietu ssh (z tego pakietu jest scp). Nie tylko szyfruje on całą transmisję, ale umożliwia także stosowanie dodatkowego zabezpieczenia w postaci sprawdzania kluczy.

pop3 – ipop3d

Przydatna usługa pozwalająca na ściąganie poczty z danego komputera. Tu także należy postarać się o najlepszy możliwy demon. Ta usługa także jest potencjalnie niebezpieczna ze względu na nieszyfrowane przesyłanie danych. W tym przypadku można zastosować szyfrowanie przy pomocy zewnętrznego programu używającego protokołu SSL (Secure Socket Layer). Jednak aby można było korzystanie z szyfrowanej przez SSL transmisji poczty niezbędny jest klient pop3 który obsłuży takie szyfrowanie. Większość popularnych klientów, takich jak Netscape Messanger czy Outlook Express, obsługuje takie szyfrowanie. Aby użyć szyfrowanego połączenia na serwerze należy zainstalować któryś z programów tunelujących połączenia, np. stunnel. Na stronie tego programu (tu) znajduje się odnośnik do strony (w języku angielskim), która dokładnie opisuje jak uruchomić tunel i połączyć go z usługami pop3 i imap (Netscape obsługuje tylko imap z SSL’em).

imap – imapd

Coś w stylu POP3, ale bardziej rozwinięte. Niestety także nie szyfruje transmisji. Dobrze jest połączyć tą usługę z SSL.

finger – in.fingerd

Dosyć popularna usługa pozwalająca na sprawdzenie kto jest aktualnie zalogowany. Jeśli nie chcesz aby ktoś widział kto jest aktualnie zalogowany, możesz odciąć tą usługę. Ja udostępniłem ją jedynie dla sieci lokalnej. Jak to zrobić – w następnym rozdziale.

swat – swat

Program do administracji usługą smb przez przeglądarkę. Bardzo niebezpieczne i lepiej w ogóle ją wyłączyć. Jeśli naprawdę jej potrzebujesz, to udostępnij ją tylko lokalnemu komputerowi.

linuxconf – linuxconf

Zarządzanie całym systemem. Jeszcze większe niebezpieczeństwo niż swat. Koniecznie wyłącz. Jeśli już musisz administrować przez www, to zainteresuj się webminem (tu).

TCP Wrapper

Należy przyjrzeć się plikom /etc/hosts.deny i /etc/hosts.allow. Pliki te służą do odcięcia dostępu do konkretnych usług od danych komputerów. Składnia tych plików jest następująca:

usługa:   adres

Nazwa usługi jest taka, jak w pliku /etc/inetd.conf, czyli np. in.telnetd, in.fingerd itp. bądź ALL – wszystkie usługi. Jako adres można wpisać:

  • adres IP
  • adres podsieci w postaci ip/maska, np: 192.168.1.0/255.255.255.0
  • ALL – opcje dotyczą wszystkich adresów
  • nazwa, np. www.tpnet.pl
  • niepełna nazwa, np. .tpnet.pl – spowoduje to, że opcje będą dotyczyć wszystkich adresów z domeny tpnet.pl

Można oczywiście wpisywać kilka adresów. Wpisy w pliku hosts.deny odpowiadają za odcinanie dostępu adresom do danych usług, a hosts.allow za udzielanie dostępu dla tych usług. hosts.allow ma priorytet. Aby dobrze zabezpieczyć komputer najlepiej jest do pliku hosts.deny wpisać „ALL: ALL” aby odciąć dostęp do wszystkich usług wszystkim komputerom, a następnie umożliwiać dostęp do wybranych usług wybranym komputerom przez wpisywanie ich do pliku hosts.access.

Firewall

Do kontroli całego ruchu wchodzącego, wychodzącego i przechodzącego przez komputer służą firewalle (noszące w Polsce różne lokalne nazwy, jak „ściany ognia”, „zapory ogniowe” itp). System Linux posiada taki firewall wbudowany w jądro (oczywiście trzeba go tam jeszcze wkompilować), a do jego obsługi (w jądrach od 2.2.1) służy program ipchains. Samą obsługą tego programu nie będę się zajmował – od tego jest IPChains-HOWTO (zdaje się jest nawet po Polsku na JTZ. Natomiast warto jest, tak jest przy TCP Wrapperze, standardowo odciąć dostęp do wszystkich usług przez ustawienie domyślnego zachowania dla reguły output na „DENY”.

masquerading

Masquerading jest bardzo przydatny przy zabezpieczaniu sieci lokalnej, aby nikt z Internetu się do niej nie dostał. Masquerading jest opcją firewalla, którą jednak trzeba osobno wkompilować w jądro. Masquerading polega na tym, że cały ruch z sieci lokalnej do Internetu jest widoczny pod adresem IP routera, na którym maskarada działa. W ten sposób nie można dostać się z zewnątrz do sieci lokalnej, ponieważ widoczny jest tylko router. Po szczegóły odsyłam do IP-Masquerading HOWTO, także dostępnego po Polsku.

Logowanie ruchu

Warto jest zainstalować jakiś program do logowania ruchu w sieci. Jest to bardzo przydatne w przypadku włamania – można bowiem sprawdzić skąd łączył się „włamywacz”. Ja używam programu „IP packet logger” – w skrócie ippl. Program ten ma spore możliwości konfiguracyjne: odsiewanie pakietów z danych adresów, danego typu czy z danego portu. Istnieje też sporo innych programów tego typu – wystarczy poszukać na Freshmeat.

Poczta

Serwery SMTP są jednym z głównych celów ataków. Na samym początku trzeba się zastanowić nad wyborem demona. Najpopularniejszy jest sendmail, ale zawiera też najwięcej bugów. Jest wiele alternatyw, ale za najbezpieczniejsze uważa się Postfixa i Qmaila (za włamanie się do tego ostatniego wyznaczono nagrodę). Dobrze jest aby była to w miarę nowa wersja demona. Oprócz tego należy odpowiednio skonfigurować ten serwer. Do najważnejszych rzeczy w konfiguracji należy umożliwienie relayowania (przekazywania poczty dalej) tylko dla odpowiedniej grupy osób. Można to zrobić na 2 sposoby: albo selekcjonowanie po adresach IP (umożliwienie relayowanie tylko dla pewnych adresów) lub po polu „From”. Ta druga metoda jest łatwa do ominięcia, ale można stosować obie na raz.

Przydatne programy

Do najprzydatniejszych rzeczy należy program portsentry (do ściągnięcia tarball ze strony twórców. Nasłuchuje on na portach, na których nic nie powinno być, przez co wykrywane są skanowania portów (sprawdzanie jakie usługi są uruchomione na serwerze.

Rewanż

Zazwyczaj próby ataków dokonywane są z…. windowsów. Najczęściej są to osoby które usłyszały o programach typu NetBus czy BackOrifice. Sprawdzają oni czy nie masz przypadkiem tego backdoora zainstalowanego. W takich przypadkach wystarczy sprawdzać połączenia na porty 12345 i 12346 i spróbować wywalić mu komputer jakimś programem typu DoS (Denial of Service) typu winnuke czy teardrop (albo wszystkie na raz) – do ściągnięcia ze strony Sebastiana Zagrodzkiego. Jak to zrobić?

  • do pliku /etc/services dopisz:
    netbus	12345/tcp
    netbus-data	12346
  • do pliku /etc/inetd.conf dopisz:
    netbus stream tcp nowait root /usr/sbin/tcpd in.netbusd
    netbus-data stream tcp nowait root /usr/sbin/tcpd in.netbusd
  • w katalogu /usr/sbin wpisz polecenie ln -s /bin/true in.netbusd
  • do pliku /etc/hosts.allow dopisz:
    in.netbusd:	ALL	: spawn /usr/bin/oshare %a 10000

    Zamiast winnuke możesz wpisać jakiekolwiek inne polecenie, które może być przydatne w tym
    wypadku.

Informacje o bugach i exploitach

Jeśli jesteś administratorem serwera musisz trzymać rękę na pulsie spraw związanych z bezpieczeństwem. Dobrze jest czytać strony o tej tematyce, jak SecurityFocus. Można też zapisać się na listę dyskusyjną Bugtraq. Dzięki temu będziesz mógł odpowiednio zareagować na nowo odkryte błędy.

Autor: leafnode

Architekt oprogramowania webowego, programista, analityk bezpieczeństwa serwisów internetowych, speaker, konsultant. Potrzebujesz pomocy? Skontaktuj się ze mną!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *