original in es José Salvador González Rivera
es to en Georges Tarbouriech
en to pl Radosław Wesołowski
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.
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.
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.
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.
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.
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.
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
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
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.
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
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ń
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 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.
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.