Wykrywanie intruzów w systemie Debian GNU/Linux

ArticleCategory:

SystemAdministration

AuthorImage:

[Photo of the Author]

TranslationInfo:

original in es José Salvador González Rivera

es to en Georges Tarbouriech

en to pl Radosław Wesołowski

AboutTheAuthor:

José Salvador González Rivera jest aktywnym członkiem Linux Users Group of Puebla (Meksyk). Jest zaangażowany w promowanie wolnego oprogramowania, a szczególnie Linuksa. Od niedawna posiada stopień naukowy z zakresu Systemów Komputerowych. Z autorem można się skontaktować używając adresów: jsgr(at)tec.com.mx lub jsgr(at)linuxpuebla.org.

Abstract:

Wojsko, administracja, przemysł, finanse - we wszystkich tych branżach cyfrowe dane mają kluczowe znaczenie. Nowoczesne sposoby przechowywania danych przynoszą jednak nie tylko korzyści, ale również zagrożenia. Elektroniczne dane łatwiej, niż tradycyjne - dają się przechwycić lub zdalnie zniszczyć. W tym artykule przedstawię techniki, oraz narzędzia, których możemy użyć w systemie Debian GNU/Linux do wykrycia i wytropienia intruzów. Artykuł ten powstał w oparciu o rzeczywiste sytuacje i problemy, które mogą przytrafić się każdemu administratorowi.

ArticleIllustration:

[debian]

ArticleBody:

Wprowadzenie

Wybór dystrybucji Linuksa nie jest łatwy, ponieważ istnieje ich bardzo wiele. Jednak większość z nich  bazuje na dystrybucji RedHat na przykład: Conectiva (Brazylia), Hispa source (Hiszpania), Mandrake (Francja), SuSE (Niemcy), Caldera oraz wiele innych wykorzystujących pakiety RPM.
Odmienną politykę przyjęli autorzy dystrybucji Slackware. Starają się oni być bliżsi tradycyjnemu systemowi Unix, dlatego stosują pakiety w formie archiwów .tgz. Prawie wszystkie obecnie rozpowszechnione dystrybucje są tworzone przez komercyjne firmy. Sprawa wygląda inaczej z Debianem, który jest tworzony przez ochotników. Ponad to zarządzanie pakietami odbywa się przy pomocy narzędzia DPKG, które może automatycznie uaktualniać pakiety korzystając z Internetu, ustala także zależności pomiędzy tymi pakietami. Takie rozwiązanie znacznie ułatwia pracę administratorowi i sprawia, że system zawsze posiada najnowsze (pozbawione błędów) wersje programów.

Dlaczego Debian GNU/Linux ?

Debian ma kilka szczególnych właściwości:

1) Nie posiada komercyjnego wsparcia, przez co nie ulega wpływom rynku.
2) Posiada doskonały system śledzenia błędów, a problemy rozwiązywane są w niecałe 48 godzin.
3) Od początku głównym założeniem było stworzenie kompletnego, niezawodnego systemu operacyjnego.
4) Jest rozwijany przez ochotników na całym świecie.

Każda nowa wersja posiada wsparcie dla nowych typów architektur sprzętowych. Obecnie są to: Alpha, ARM, HP PARISC, Intel x86, Intel IA-64, Motorola 680x0, MIPS, MIPS (DEC), Power PC, IBM S/390, Sparc, ponad to Debiana możemy spotkać na Sun UltraSparcm, oraz Hitachi SuperH. System operacyjny Linux wspiera obecnie największą liczbę platform sprzętowych.

Wśród istniejących pakietów przeznaczonych dla Debiana, możemy spotkać różne narzędzia, które w rzeczywistym czasie mogą wykryć próby włamania. Istnieją  dwa podstawowe typy: aplikacje monitorujące sieć w poszukiwaniu prób ataku, oraz badające szczególne zachowanie hosta.

Narzędzia działające po stronie serwera

W celu wykrycia prób skanowania portów używa się narzędzia o nazwie PortSentry. TripWire ma zastosowanie przy badaniu integralności systemu, natomiast LogSentry analizuje logi systemowe. Pierwszy i ostatni  wchodzą w skład pakietu TriSentry tworzonego przez Psionic Technologies.

Skanowanie portów

PortSentry monitoruje porty naszego systemu i w razie próby połączenia z portem, który jest zdefiniowany, wykonuję określoną akcję (zwykle blokuje połączenie).

Strona domowa znajduje się pod adresem http://www.psionic.com/products/portsentry.html. PortSentry dostępny jest dla systemów: Solaris,BSD, AIX, SCO, Digital Unix,HP-UX, oraz oczywiście Linux.

Zainstalowanie pakietu w systemie Debian GNU/Linux sprowadza się do wydania następującego polecenia:

apt-get install portsentry

Program możemy uruchomić w jednym z trybów: classic, stealth, advanced, a konfiguracja zależy od wpisów w pliku /usr/local/psionic/portsentry/portsentry.conf.

Opis głównych opcji można znaleźć w artykule z ES Linux Magazine, którego autorem jest José Torres Luque. Oto niektóre z nich:

TCP_PORTS, w tym miejscu definiujemy które porty mają być kontrolowane, czy to w trybie classic, czy też stealth. Autor programu dostarcza trzy listy portów, zależne od poziomu bezpieczeństwa, który mamy zamiar zastosować. Maksymalnie można zdefiniować 64 porty.

UDP_PORTS, podobnie jak wyżej, z tym, że definiujemy porty UDP.

ADVANCED_PORTS_TCP, ADVANCED_PORTS_UDP, wskazuje najwyższy numer portu, używany w trybie zaawansowanym. Każdy port, którego numer jest niższy od zdefiniowanego będzie sprawdzany. Wyjątkiem są porty wyłączone z obserwacji. Najwyższy możliwy numer portu to 65535, jednak w celu uniknięcia fałszywych alarmów zalecam zdefiniowanie liczby mniejszej niż 1024.

ADVANCED_EXCLUDE_TCP, ADVANCED_EXCLUDE_UDP, lista portów wyłączonych z monitoringu w trybie zaawansowanym. Opcja ta ma szczególnie zastosowanie dla serwisów takich jak ident.

IGNORE_FILE, tutaj należy podać ścieżkę do pliku, w którym znajdują się adresy IP wyłączone z monitoringu. Najlepszym rozwiązaniem jest dodanie do tego pliku adresów interfejsu lo oraz lokalnej sieci.

KILL_ROUTE, opcja ta umożliwia dodanie komendy, która zablokuje atakującemu dostęp do naszego hosta. Na przykład: iptables -I INPUT -s $TARGET$ -j DROP, gdzie $TARGET$ odnosi się do adresu napastnika.

KILL_RUN_CMD, wskazujemy komendę, która zostanie wykonana przed zablokowaniem dostępu.

SCAN_TRIGGER, definiuje liczbę prób, po której zostanie uaktywniony alarm.

PORT_BANNER, wyświetla wiadomość po połączeniu się z portem kontrolowanym przez portsentry.

Po skonfigurowaniu należy uruchomić program wybierając jeden z trzech trybów jako parametr. Dla protokołu TCP są to : -tcp (podstawowy tryb), -stcp(tryb stealth), -atcp (zaawansowany tryb), natomiast dla protokołu UDP odpowiednio: -udp, -sudp, -audp.

Analiza integralności

TripWire pozwala na sprawdzanie integralności systemu. Strona domowa projektu znajduję się pod adresem http://www.tripwire.org . Narzędzie to jest dostępne za darmo dla Linuksa, jak również w wersji komercyjnej dla systemów operacyjnych takich jak: Windows NT, Solaris, AIX i HP-UX.

Instalacja narzędzia w Debianie sprowadza się do wydania następującego polecenia:

apt-get install tripwire

Do przechowywania informacji potrzebne sa dwa klucze: "site key", uzywany do szyfrowania plików konfiguracyjnych, oraz "local key", uzywany do szyfrowania informacji mówiącej o statusie monitorowanych plików.

Konfiguracji dokonuje się w pliku /etc/tripwire/twpol.txt, po skonfigurowaniu należy ten plik "załadować":

twadmin -m P /etc/tripwire/twpo.txt

Aby stworzyć nową bazę danych zawierającą obecny status plików należy wydać polecenie:

tripwire -m i 2

Żeby dokonać sprawdzenia integralności systemu plików należy wpisać polecenie:

tripwire -m c

Plik konfiguracyjny moze byc usuniety. Zapobiegnie to poznaniu konfiguracji przez wlamywacza.

rm /etc/tripwire/twcfg.txt /etc/tripwire/twpol.txt

Aby go ponownie stworzyć wydaj polecenie:

twadmin -m p > /etc/tripwire/twpol1.txt twadmin -m f > /etc/tripwire/twcfg.txt

Sprawdzanie dzienników systemowych

LogCheck jest częścią LogSentry i pozwala na analizowanie logów w bardzo skuteczny sposób. Tworzy raporty, w których uwzględnia błędy wymagające przeczytania, ponad to umożliwia logowanie zdarzeń przy użyciu jednego z czterech poziomów: ignore (zignoruj), unusual activity (działanie nadzwyczajne), violation of security (naruszenie bezpieczeństwa), attack (atak).

Więcej informacji o LogCheck można znaleźć na stronie http://www.psionic.com/products/logsentry.html. Dostępne są wersje dla systemów: Solaris, BSD, HP-UX, Linux.

Instalacja pakietu:

apt-get install logcheck

Spowoduje to zainstalowanie programu logtail w katalogu /usr/local/bin, który trzyma listę logów już przeanalizowanych. Ponad to zastaną zainstalowane następujące pliki:

Logcheck.sh,
Skrypt zawierający podstawową konfigurację.

Logcheck.hacking,
Przechowuje zasady definiujące poziom aktywności.

Logcheck.ignore,
Ignorowane wyrażenia.

Logcheck.violations,
Wyrażenia które zostaną uznane jako naruszenie bezpieczeństwa.

Logcheck.violations.ignore,
Te wyrażenia mają zostać zignorowane.

Program logcheck można uruchamiać przy pomocy crona na przykład co godzinę: 0 * * * */bin/sh /usr/local/etc/logcheck.sh

Narzędzia sieciowe

Snort jest narzędziem do wykrywania prób ataków poprzez siec. Strona domowa dostępna jest pod adresem http://www.snort.org. Program możemy zainstalować na następujących systemach: BSD, Solaris, AIX, Irix, Windows, MacOS X i oczywiście Linux.

Instalacja Snorta w Debianie jest standardowa i wymaga wydania polecenia:

apt-get install snort

Snort pracuje w trzech różnych trybach: jako sniffer, logger pakietów, oraz jako detektor intruzów.

Może być uruchomiony z następującymi parametrami:

-l katalog
wskazuje katalog, w którym przechowywane są pliki z logami.

-h IP
definiuje adres IP sieci, którą chcemy kontrolować.

-b
przechwytuje każdy pakiet jako dane binarne (w formacie tcpdumpa).

-r
plik przetwarza plik binarny.

Snort jako sniffer i rejestrator pakietów

Działając jako sniffer program czyta każdy pakiet przechodzący przez sieć i wyświetla go na konsoli, podczas gdy działając jako logger pakietów zapisuje je do pliku.

Snort -v

Pokazuje adresy IP oraz nagłówki

Snort -dv

Pokazuje krążące dane

Snort -dev

Bardziej szczegółowy sposób

Snort - tryb wykrywania intruzów

W tym trybie snort informuje nas o skanowaniu portów, atakach typu DoS (Deny of Service), exploitach itd, w zależności od zasad zdefiniowanych w pliku /usr/local/share/snort. Plik z definicjami może być pobrany ze strony, a serwer może go odświeżać co godzinę.

Konfiguracja jest bardzo prosta i polega na zmianie wpisów dotyczących naszej sieci, oraz katalogów, w pliku snort.conf. Zmień tylko IP :

var HOME_NET IP

a następnie uruchom program:

snort -c snort.conf

Dzienniki zdarzeń przechowywane są w pliku /var/log/snort, korzystając z tego pliku możemy poznać adresy IP napastników. Oczywiście jest to tylko krótki opis możliwości snorta i zalecana jest dalsza analiza tematu. Według większości organizacji, magazynów, oraz grup zajmujących się bezpieczeństwem snort jest najlepszym narzędziem typu "Intrusion Detection System" zarówno dla Unixa, jak i Windowsa. Ze strony niektórych firm takich jak Silicon Defense, lub Source Fire można uzyskać komercyjne wsparcie, pojawiają się nawet graficzne interfejsy, które pozwalają na bardziej atrakcyjną formę prezentacji wyników.

Czasami występują sytuacje nadzwyczajne, kiedy pojawiają się problemy jak dotąd nie brane pod uwagę. Wymagają one natychmiastowego rozwiązania.

Najczęściej ich przyczyną są ataki crackerów, którzy chcą ukraść lub zmienić dane znajdujące się w naszym systemie, wykorzystać nasz serwer do ataku na inne maszyny, lub po prostu zainstalować snieffera lub rootkita w celu zdobycia większych uprawnień

Inne przydatne programy

Znajdowanie snifferów

Sniffer jest narzędziem, które ustawia nasz interfejs sieciowy w tryb promiscuous i służy do podsłuchiwania całego ruchu w sieci. Program ifconfig dostarcza wyczerpujących informacji na temat interfejsu sieciowego. Przykład:

eth0 Link encap:Ethernet HWaddr 00:50:BF:1C:41:59
inet addr:10.45.202.145 Bcast:255.255.255.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7180 errors:0 dropped:0 overruns:0 frame:0
TX packets:4774 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:8122437 (7.7 MiB) TX bytes:294607 (287.7 KiB)
Interrupt:10 Base address:0xc000

Jednak, gdy plik ifconfig zostanie zamieniony, badź też, jezeli sniffer jest uruchomiony na innej maszynie, naleźy sprawdziź połaczenia zewnętrzne, albo spróbować znaleźc logi sniffera.

Aby sprawdzić, czy interfejsy znajdujące się wewnątrz naszej sieci są w trybie promiscuous można użyć narzędzia o nazwie neped, które zostało stworzone przez Hiszpańską grupę hakerów. Nie jest ono częścią Debiana, ale może być pobrane z : ftp://apostols.org/AposTools/snapshots/neped/neped.c
Notka: serwer nie działa od kilku tygodni.

Oto wyniki działania programu:

neped eth0
----------------------------------------------------------
> My HW Addr: 00:80:F6:C2:0E:2A
> My IP Addr: 192.168.0.1
> My NETMASK: 255.255.255.0
> My BROADCAST: 192.168.1.255
----------------------------------------------------------
Scanning ....
* Host 192.168.0.2, 00:C2:0F:64:08:FF **** Promiscuous mode detected !!!
End.

Kiedy wysyłamy pakiet z adresu 191.168.0.1 na adres 192.168.0.2 musimy znać adres MAC karty sieciowej. Adres taki uzyskujemy wysyłając pakiet z zapytaniem o adres MAC komputera o danym adresie IP na adres broadcast naszej sieci. Wszystkie maszyny odczytają zapytanie, lecz tylko właściwa maszyna na nie odpowie.

W naszym przypadku neped sprawdził wszystkie adresy IP. Jednak, aby wykryć sniffera nie używa on adresu broadcast, lecz innego specjalnie spreparowanego. Tylko komputery, których interfejsy są w trybie promiscuous odczytają pakiet i odpowiedzą na niego.

Znalazłem ten program w Internecie, a dokładnie w artykule na temat wykrywania podsłuchu. Przytoczony był tam podobny przykład. Jeżeli znasz adres URL tego artykułu wyślij mi emalia, ponieważ moja kopia gdzieś się zapodziała :-).

Rootkity

Rootkity pozwalają na zdobycie przez zwykłego użytkownika dodatkowych uprawnień. W skrócie, zamieniają one nasze pliki binarne na inne by później uzyskać dostęp do systemu. Dlatego należy sprawdzać, czy posiadamy tylko oryginalne wersje. Do tego celu służy narzędzie o nazwie, chkrootkit, które można zainstalować wydając polecenie:

apt-get install chkrootkit

Strona domowa znajduje się pod adresem www.chkrootkit.org, natomiast w wyniku użycia programu zostają sprawdzone następujące pliki:

aliens, asp, bindshell, lkm, rexedcs, sniffer, wted, z2, amd, basename, biff, chfn, chsh, cron, date, du, dirname, echo, egrep, env, find, fingerd, gpm, grep, hdparm, su, ifconfig, inetd, inetdconf, identd, killall, ldsopreload, login, ls, lsof, mail, mingetty, netstat, named, passwd, pidof, pop2, pop3, ps, pstree, rpcinfo, rlogind, rshd, slogin, sendmail, sshd, syslogd, tar, tcpd, top, telnetd, timed, traceroute, w, write

Aby użyć programu wystarczy wydać polecenie:

chkrootkit.

Sprawdzi ono pliki pod kątem znanych rootkitów i snifferów. Są jeszcze inne narzędzia do sprawdzania wymiany dzienników (chkwtmp and chklastlog). Z kolei ifpromisc powie czy nasz interfejs jest w trybie promiscuous.

Warto przeczytać

Zanim zaczniesz korzystać z oprogramowania - zapoznaj się z podręcznikami systemowym. Poniżej przedstawiłem kilka odnośników, z których sam korzystałem. jeżeli znasz inne lub masz jakieś sugestie napisz do mnie list.