Wstęp
Debian po instalacji jest dość bezpieczny w porównaniu do innych dystrybucji jednak aby zapewnić jego względne zabezpieczenie należy wykonać kilka czynności nawet juz w czasie instalacji (odpowiedni podział partycji). Następnie należy zastąpić inted programem xinted, pozwoli nam to na lepsze kontrolowanie połączeń do danej usługi oraz zasobów jej udostępnianych. Należy także zainstalować oprogramowanie do wykrywania rootkitow, podmian plików w systemie, odpowiednio skonfigurować firewalla, można także włączyć IDSy sprawdzające pakiety krążące w sieci lokalnej. Dodatkowym zabezpieczeniem może być uruchamianie programów w środowiskach wirtualnych (chroot) czy zastępowanie popularnych serwerów mniej znanymi odpowiednikami.
Instalacja i podział na partycje
Dobrym pomysłem podczas instalacji jest wydzielenie katalogu /tmp na osobnej partycji, pozwoli to na uniknięcie ataku polegającego na utworzeniu dowiązań twardych np. do plików z hasłami. Należy także wydzielić partycje /home, można wtedy uniemożliwić wykonywanie plików binarnych (noexec jako parametr w pliku /etc/fstab) lub zadziałanie bitom suid lub guid (nosuid). Można też pokusić się o wydzielenie partycji tylko dla plików z ustawionymi bitami suid i guid a z pozostałych partycji zdjąć możliwość ich zadziałania.
Logowanie administratora
Określenie na których terminalach może się logować administrator dokonujemy w pliku /etc/securetty. Jeżeli nie chcesz aby ktokolwiek mógł się logować bezpośrednio na konto administratora zachaszuj wszystkie wpisy.
Aby zabronić bezpośredniego logowania się na konto administratora przy korzystaniu z ssh ustaw parametr PermitRootLogin na no.
PermitRootLogin no
Administrator, w przypadku korzystania z Proftpd, standartowo nie może również zalogować na konto ftp. Nie należy tego zmieniać.
Bezpieczeństwo haseł
Powinieneś wykorzystać algorytm MD5 do tworzenia haseł. Jest on znacznie lepszy od jego poprzednika, gdyż ma:
- Nieograniczoną długość haseł
- Znacznie większy obszar klucza
Dzięki czemu generowane hasła są znacznie lepsze.
Powinieneś także wykorzystać maskowanie haseł (shadow). Pozwoli to usunąć zakodowane hasła z pliku ogólnie dostępnego przez co znacząco utrudnisz zdobycie ich. Pakiet shadow ma także kilka innych pożytecznych funkcji.
W celu sprawdzenia mocy haseł możesz wykorzystać programy do ich łamania. Najpopularniejsze to: Crack, John The Ripper, Slurpie. Dwa pierwsze mają także możliwość wysyłania emaili do właścicieli kont, których hasła odgadnięto. W celu przyspieszenia łamania haseł możesz także chcieć użyć wielu maszyn lub wielu procesorów, Crak i Slurpie mają opcje wspomagające taką pracę. W Debanie możesz w łatwy sposób zrobić tak, aby John The Ripper codziennie sprawdzał w podstawowy sposób moc haseł, wystarczy zaznaczyć odpowiednią opcję podczas instalacji pakietu.
Istnieje też kilka programów do automatycznego generowania haseł. Możesz ich użyć w celu wygenerowania mocnych haseł.
Patche na jądro zwiększające bezpieczeństwo systemu
Otwartość kodu źródłowego jądra systemu pozwala stworzyć niezależnym programistom łaty na jądro poprawiające bezpieczeństwo systemu. Do najpopularniejszych należą: dla ją?er serii 2.2.x: OpenWall (http://www.openwall.com/linux/ ), LIDS http://www.lids.org/, Capsel http://cliph.linux.pl/capsel/ dla jąder serii 2.4.x LIDS ( http://www.lids.org/), grsecurity (http://www.grsecurity.net/) , kNoX ( http://cliph.linux.pl/KNoX/ ), capsel ( http://cliph.linux.pl/capsel/ ) selinux ( http://www.nsa.gov/selinux/ ) Znajdziesz też kilka innych łat i modułów na stronach packetstormsecurity http://packetstormsecurity.org .
Ochrona jądra systemu i jego modułów
Jądro systemu jest podstawowym składnikiem systemu. Ze względu na możliwość napisania do niego złośliwych modułów należy wprowadzić kontrolę (jeżeli nie blokadę) co do niego jest dołączane.
LIDS (silny patch na jądro) posiada w swoich właściwościach (capabilities) możliwość zablokowania ładowania nowych modułów (czyli tak zwane zamrożenie jądra). Jednak patch ten jest trudny w konfiguracji.
Jeżeli nie zainstalujemy LIDSa możemy pokusić się przynajmniej o monitorowanie procesu ładowania nowego modułu. Program Samhain ma możliwość wykrywania pojawienia się nowej funkcjonalności jądra (czyli nowego modułu). W tym celu musi być skompilowany z aktualną wersją jądra. Więcej o nim dowiesz się z części poświęconej programowi.
Jednak nie myśl iż uniemożliwienie ładowania modułów czy instalowanie tylko łat pochodzących z pewnych źródeł pozwoli Ci uniknąć kłopotów z modyfikacją jądra. Crakcer ma zawsze jeszcze możliwość ingerować bezpośrednio w działające jądro (tzw. on the fly) przez urządzenie /dev/kmem. Pewnym zabezpieczeniem może być patch grsecurity dajacy możliwość blokowania zapisu do urządzeń /dev/kmem, /dev/mem i /dev/ports.
Tryb dostępu do plików
W temacie praw dostępu do plików najwięcej zagrożenia tworzą pliku posiadające ustawione bity SETGID (tryb ósemkowy 4000) oraz SETUID (tryb ósemkowy 2000). Wynika to z faktu iż są uruchamiane z uprawnieniami właściciela (przeważnie administratora) a nie osoby uruchamiającej je. Wynika stąd fakt iż wszelkiego rodzaju problemy w ich zabezpieczeniach przekładają się bezpośrednio na bezpieczeństwo systemu.
Pliki te możesz znaleźć w systemie dzięki poleceniu find, przykładowo jeżeli chcesz znaleźć w systemie pliki z ustawionym bitem SETUID wydaj polecenie:
find / -perm +4000
Jeżeli natomiast chcesz znaleźć pliki z ustawionym bitem SETGID wydaj polecenie:
find / -perm +2000
Programem, który może Cię wspomóc w tropieniu tego rodzaju plików jest Samhain. Posiada on opcję okresowego sprawdzania czy nie pojawił się jakiś nowy plik z ustawionymi tymi bitami.
?aty na jądro rozszerzające system bezpieczeństwa umożliwiają często ograniczenie wykonywania takich programów. Przykładem jest tutaj RSBAC, który w module AUTH kontroluje, który program może zmienić właściciela oraz na jakiego. Dzięki czemu jesteśmy w stanie dokładnie kontrolować przelogowania i zmiany użytkownika.
Integralność systemu plików
Bardzo groźne jest zjawisko podmiany binariów programów zainstalowanych w systemie. Można się chronić przed tym wprowadzając programy generujące 'migawkę’ systemu i przy następnym uruchomieniu porównujące zawartość systemu z 'migawką’. Jest to grupa programów określana mianem programów sprawdzających integralność systemu. Robią one spis wszystkich plików i katalogów z zapisaniem informacji o wielkości, czasie utworzenia i modyfikacji itp. i informację tą chronią w określony sposób (np. szyfrując, czy podpisując kluczami pgp / gpg). Do najpopularniejszych programów tego typu należą Tripwire (www.tripwire.org), Samhain (www.la-samha.de/samhain), AIDE (Advanced Intrusion Detection Environment www.http://www.cs.tut.fi/~rammer/aide.html). Zainstaluj co najmniej jeden z nich aby być pewnym iż wszystko jest w porządku.
Osobiście polecam instalację Samhaina. Wynika to z faktu iż program działa jako rezydentny (uruchamiany jest standardowo podczas startu systemu), może pracować w architekturze klient-serwer oraz ma mechanizmy do ukrywania się w systemie.
Wykrywanie rootkits
Rootkits są to zestawy gotowych do użycia programów mających na celu zdobycie uprawnień administratora i ukrycie tego faktu. Ciekawym programem do wykrywania tego typu zabawek jest chkrootkit. Posiada on w swojej bazie danych (aktualizowanej co jakiś czas) sygnatury najpopularniejszych takich programów i sprawdza czy nie występują one w krytycznych dla systemu poleceniach. Jeżeli je znajdzie, informuje o tym.
Dyscyplinowanie użytkowników
Jednym z podstawowych pakietów wspomagających administrację użytkownikami jest PAM. Pozwala on na określanie zasobów dostępnych dla użytkowników, czasów kiedy mogę pracować w systemie, czy takich trywialnych rzeczy jak długość i moc hasła. PAM-y daj Ci też możliwość autoryzacji za pomocą usługi LDAP bądź bazy danych MySQL. Pozwalają również na przezroczyste dla aplikacji zmiany w sposobie obsługi tego procesu (stosowanie haseł jednorazowych S/KEY, integracja z Kerberosem) Więcej przeczytasz na A Linux-PAM page. Jeżeli korzystasz z lokalnych plików haseł, używaj shadow i opcji starzenia się haseł.
Programem do ograniczania zasobów dyskowych użytkowników jest quota. Pozwala na określanie maksymalnych rozmiarów katalogów użytkowników. Quotę możesz przydzielać zarówno pojedynczym użytkownikom jak i całym grupom.
Jeżeli wyjątkowo nie ufasz użytkownikom możesz stworzyć im wirtualne środowisko pracy, skorzystaj tutaj z programu jail znajdziesz go http://sourceforge.net
Patch na basha, pozwalający logować do specjalnego pliku wszystkie operacje użytkownika jest tutaj: – bzium.eu.org/bash-2.0.5-backup_history.patch. Na tcsh też jest coś takiego www.ccitt5.net
Poza tym zwykłego basha możesz zamienić na rbash (restricted bash – zobacz opis w manie do basha) albo dać zupełnie inną powłokę (ksh, csh albo ash ale są one trudne w obsługe dla początkującego użytkownika)
Konta shelowe
Konta shelowe umożliwiają użytkownikom wykonywanie komend na zdalnym serwerze. Większość początkujących administratorów uważa iż danie konta shellowego oznacza otworzenie użytkownikowi pełnego dostępu do systemu. Nie jest tak do końca.
Bez żadnych modyfikacji możemy stworzyć system, w którym żaden użytkownik nie może wykonywać żadnego programu w swoim katalogu ani katalogach ogólnie dostępnych. Uzyskamy to przez wydzielenie katalogu /home i /tmp na osobne partycje i nadanie im atrybutów noexec i nosuid oraz podlinkowanie /var/tmp do /tmp. Jeżeli nigdzie indziej żaden użytkownik nie ma możliwości zapisu, to uzyskamy w miarę bezpieczny system.
Problem powstaje gdy chcemy mieć grupę użytkowników, której udostępniamy możliwość wykonywania własnych programów ale niektórzy użytkownicy tego prawa nie dostają. W standardowy sposób jest to prawie niemożliwe. Jednak przy zastosowaniu łaty grsecurity możemy wydzielić grupę użytkowników, która może wykonywać programy jedynie z katalogów, których właścicielem jest root oraz tylko on ma prawa do zapisu do nich. Powoduje to powstanie grupy 'podejrzanych’ użytkowników którzy praktycznie mogą wykonywać tylko polecenia systemowe ale żadnych własnych.
Jeżeli chcemy wprowadzić już większe podziały, iż niektórzy mogą wykonywać te programy a inni także tamte, a szczególni wybrańcy pliki wykonywalne w swoim własnym katalogu należy skorzystać z bardziej potężnych łat bezpieczeństwa. Pozwalają one stworzyć listy dostępu do plików. RSBAC pozwala również stworzyć role, dzięki którym możemy stworzyć grupy użytkowników posiadające określone prawa w systemie (np. wykonywanie plików w własnym katalogu, korzystanie z określonych programów itp).
Kryptograficzne systemy plików
Jest cfs, poza tym masz jeszcze bestcript dla 2.2.x i 2.4.x. Ulepszenia CFS – TCFS (transparent cfs) i nieśmiertelne loopback device z IKP (były z tym problemy) Loopback jest w opisany w ktoryms howto i na http://www.juicylinux.ubu.pl
Odzywskiwanie skasowanych logów czy plików
Instnieje kilka programów, które można wykorzystać do odzyskania skasowanych danych. Pierwszy to debagfs pozwalający odzyskać pliki określając przedział czasowy kiedy usunięto plik, jego właściciela oraz wielkości. Następne to dwa narzędzia z pakietu tct (The Coroner’s Toolkit) o nazwie unrmr oraz lazarus. Unrm odzyskuje wszysktie dane z określonego urządzenia lub pliku zawierającego obraz partycji, Lazarus próbuje z nich odzyskać pliki.
Kontrola pakietów wychodzących z serwera
Do kontroli pakietów przechodzących przez serwer służą tzw. Sniffery. Przechwytują one pakiety z karty sieciowej. Do najpopularniejszych należą: tcpdump (A powerful tool for network monitoring and data acquisition) ethereal (Network traffic analyzer) iptraf (Interactive Colorful IP LAN Monitor) ipfm (A bandwidth analysis tool) hunt (Advanced packet sniffer and connection intrusion) sniffit (packet sniffer and monitoring tool) snort (flexible packet sniffer/logger that detects attacks)
Wirusy i robaki Linuksowe
Wirusy na Linuksa oczywiście istnieją ale jest ich znikoma ilość ( ostatnio podobno coś około 6, ale nikt raczej tego nie wie). Wynika to z dwóch faktów:
- podstawą filozofii Linuksa jest bezpieczeństwo
- z mnogości i szybkości rozwoju oprogramowania linuksowego
W Linuksie do każdego zadania mamy kilka programów o równorzędnych możliwościach i parametrach, każdy z tych programów ma otwarty kod i każdy może sprawdzić ewentualne luki bezpieczeństwa (co jest zaletą ale i wadą, każda dystrybucja ma inne ustawienia domyślne, czy w końcu najważniejsza rzecz użytkownicy są dość mocno od siebie izolowani i jedynie z konta root’a można wykonać większe szkody (choć nie zawsze ;-)). Z tych powodów trudno jest napisać uniwersalnego wirusa, który działałby na każdym Linuksie…
Programy antywirusowe w Linuksie oczywiście istnieją , ale są to głównie programy mające na celu zabezpieczenie użytkowników innych systemów operacyjnych i są to głównie skanery pocztowe. Więcej o tym w punkcie o skanerach pocztowych.
Bezpieczeństwo w Internecie
W Internecie jest wiele miejsc poświęconych Linuksowi i bezpieczeństwu. Podstawowe informacje o bezpieczeństwie i lukach w swojej dystrybucji znajdziesz na stronach dystrybucji. W Polsce podstawowym źródłem informacji o bezpieczeństwie jest grupa news-owa pl.comp.security. Tam dowiesz się o najnowszych wirusach i tam pomogą rozwiązać Ci twoje problemy z zabezpieczeniem komputera czy serwera (nie tylko linuksowego). Ciekawą stroną jest także www.ipsec.pl. Znajdują się tam informacje i newsy dotyczące szeroko rozumianego bezpieczeństwa. Ze stron zagranicznych warto zaglądać na:
- http://www.securityfocus.com
- http://packetstormsecurity.org/
- http://rootshell.com
- http://www.insecure.org/
- http://www.securityportal.com/
- http://www.sans.org
- http://www.linuxsecurity.com/
- www.phrack.org
- http://packetstorm.widexs.nl/defense.html ciekawa strona z dużym spisem narzędzi do ochrony systemu.
Bardzo ciekawa dla administratorów jest anglojęzyczna lista buqtraq (buqtraq_subscribe@securityfocus.com) gdzie zgłaszane są błędy bezpieczeństwa występujące w programach (nie tylko linuksowych).