Bezplatne programy monitorujace, Sieci komputerowe
[ Pobierz całość w formacie PDF ]
Bezpłatne programy monitorujące
Lekcja samoobrony
Autor:
Maciej Koziński
Uruchamiając własny serwer w wydzierżawionym pomieszczeniu czy podłączając
notebooka w obcej sieci, możemy co prawda liczyć na wspłpracę lokalnych guru od
bezpieczeństwa, ale z pewnością spokojniejsi będziemy, mogąc polegać na własnych
działaniach... Do dyspozycji mamy kilka bezpłatnych narzędzi wspierających host
security.
Ich zaletą jest prostota, niewielkie wymagania środowiska pracy, uniwersalność oraz łatwość zastosowania.
Praktycznie w każdych warunkach mogą być uzupełnieniem bardziej wyrafinowanych narzędzi (nie musimy mieć
jakichkolwiek uprawnień poza uprawnieniami roota na własnym komputerze).
Klasyka host security
tcp wrappers (autorstwa Wietse Venema) to jeden ze starszych i lepiej znanych pakietw z klasy host security.
Jego rolą jest monitorowanie i kontrola połączeń w warstwie aplikacji. Działa jako typowy "wrapper", czyli
pośredniczy w wywołaniu odpowiedniego programu-serwera usługowego, uruchamianego z poziomu
superserwera inetd. Poniższe linie (pochodzą z pliku konfiguracyjnego /etc/inetd.conf) ilustrują sposb
skonfigurowania do pracy serwera tcp wrappers o nazwie tcpd:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s
Jak widać, inetd przekazuje połączenie wywoływanemu programowi, uruchamiany zaś z odpowiednimi
parametrami tcpd wykonuje szereg operacji, zanim zadecyduje o uruchomieniu serwera usługowego. Operacje te
obejmują zazwyczaj: sprawdzenie uprawnień dostępu dla danego klienta przez porwnanie z access list,
zanotowanie w dzienniku systemowym odpowiedniego komunikatu, ewentualnie wykonanie operacji specjalnych
zadeklarowanych przez użytkownika.
Są dwie składnie plikw konfiguracyjnych tcp wrappers. Pierwsza, prostsza, obejmuje dwa pliki - /etc/hosts.allow i
/etc/hosts.deny, w ktrych możemy zdefiniować listy dostępu w postaci dwch lub trzech oddzielonych
dwukropkami pl. Pierwsze pole dopasowuje serwer usługowy, drugie - usiłującego uzyskać dostęp klienta,
trzecie, opcjonalne - zawiera komendy do wykonania w przypadku dopasowania zgłoszonego połączenia do
dwch pierwszych pl. Dopasowanie dotyczy pierwszego trafienia, tzn. pierwszy z napotkanych pasujących
wpisw jest uznawany za obowiązujący. Reguła ta jest bardzo istotna przy dopasowywaniu nakładających się
podzbiorw, co pokażemy na przykładach.
Ponieważ w składni prostej wpisw dokonujemy w dwu plikach z listami dostępu, istotna jest ich kolejność.
Najpierw badany jest /etc/hosts.allow, dopasowanie żądanego połączenia do listy dostępu z tego pliku pozwala
nawiązać połączenie. Jeśli odpowiedniej listy dostępu nie znaleziono w /etc/hosts.allow, badany jest
/etc/hosts.deny. Znalezienie tam pasującego wpisu powoduje odrzucenie połączenia. Jeśli połączenie nie zostało
opisane w żadnym z wymienionych plikw - tcpd domyślnie zezwala na połączenie.
Zasady konstruowania list dostępu wyjaśnimy na przykładach. Załżmy, że nasza polityka zabezpieczeń zezwoli
tylko na dostęp z lokalnej sieci IP o adresach z zakresu 192.168.1.0/255.255.255.255 i tylko do wybranych usług.
Polityka taka jest określona w dokumentacji tcp wrappera jako "mostly closed". Odpowiednie wpisy w
/etc.hosts.allow mogą wyglądać tak:
in.telnetd popper : 192.168.1.
zaś /etc/hosts.deny może wyglądać tak:
ALL : ALL
Wpisy te zapewniają dostęp do demonw protokołw telnet i POP3 z komputerw o adresach IP 192.168.1.x i
zabraniają pozostałym dostępu do wszystkich usług. Słowo ALL jest jednym z wyrażeń globalnych używanych w
listach dostępu tcp wrappers (patrz ramka na str. 92).
Zdefiniujmy bardziej złożoną listę dostępu. Załżmy, że chcemy umożliwić dostęp do usługi telnet z klasy adresw
"prywatnych" 192.168.0.0/ 255.255.0.0 z wyłączeniem klasy 192.168.255.0/255.255.255.0. Pliki przybiorą postać:
/etc/hosts.allow
in.telnetd : 192.168. EXCEPT 192.168.255.
popper : 192.168.
sshd : KNOWN@KNOWN
/etc/hosts.deny
in.telnetd : 192.168.255. : (echo "Próba nieuprawnionego
dost•pu do us•ugi %d z %c" | /bin/mail -s Alert root)
ALL : ALL
Powyższe zestawienie zawiera dwa istotne elementy. Pierwszy to zdefiniowanie wyrażeniem globalnym EXCEPT
klasy wyłączonej z danej listy dostępu. Pula adresowa 192. 168.255.0 stanowi podzbir większej całości o
adresach 192.168.x.x. Gdyby zakaz dostępu interakcyjnego telnet do tego właśnie podzbioru zdefiniować jako
osobny rekord w /etc/hosts.deny, nie byłby on skuteczny - pierwsze dopasowanie adresu z puli 192.168. 255.x
odbyłoby się na podstawie szerszego, dotyczącego całej klasy 192.168.x.x wpisu w /etc/hosts.allow na taki dostęp
zezwalającego (zgodnie z opisanym wyżej algorytmem).
Drugie istotne novum to linia w /etc/hosts.deny, notująca prby uzyskania połączenia protokołem telnet z
inkryminowanej klasy. Sekwencja zawartych w trzecim polu w nawiasach komend zostanie wykonana w
przypadku dopasowania adresu i protokołu. Dopasowanie takie nastąpi z klasy 192.168.255.x, ponieważ linia z
/etc/ hosts.allow pomija tę pulę adresw IP. Makra %c i %d zawierają informację na temat klienta usiłującego
uzyskać połączenie (patrz też tabela poniżej).
Linia z wpisem dla serwera Secure Shell (sshd) zawiera zezwolenie dostępu dla wszystkich klientw
legitymujących się identyfikatorem przedstawianym przy użyciu protokołu IDENT oraz zarejestrowanym wpisem w
DNS.
Drugi rodzaj składni oferowanej przez tcp wrappers jest bogatszy i wymaga wpisw tylko w pliku /etc/hosts.allow.
Jest uzyskiwany przy kompi-lacji pakietu z definicją PROCESS_OPTIONS (flaga kompilatora -
DPROCESS_OPTIONS). Podobnie jak w prostszej składni, pierwsze pole zawiera listę opisującą serwery usługowe,
drugie dopasowuje klientw, zaś trzecie i kolejne (liczba pl nie jest stała - obligatoryjne są trzy pola) zezwolenie
na dostęp lub jego brak, lub inną akcję. Zdefiniujmy listy dostępu z przykładu drugiego w drugim typie składni:
in.telnetd : 192.168.255. : DENY : spawn echo "Próba nieuprawnionego
dost•pu do us•ugi %d z %c" | /bin/mail -s Alert root) : banners /etc/tcpd/banners
in.telnetd : 192.168. : ALLOW : banners /etc/tcpd/banners
popper : 192.168. : ALLOW
sshd : KNOWN@KNOWN : ALLOW
ALL : ALL : DENY : banners /etc/tcpd/banners
Istotną rżnicę widać już w pierwszej linii - na początku sprawdzamy, czy adres komputera, ktry chce korzystać z
telnetu należy do określonej puli adresw (jest ona pod-zbiorem puli z drugiej linii - jeśli adres będzie należał do
puli 192.168.255.x, obowiązuje pierwsza linia), podejmujemy akcję powiadamiającą (komendy wywołane opcją
spawn) oraz wyświetlamy użytkownikom odpowiedni napis z informacją (znajduje się w pliku
/etc/tcpd/banners/in.telnetd). Argumentem opcji banners jest podkatalog, zaś plik musi mieć tę samą nazwę co
daemon, dla ktrego został wywołany. W plikach bannerw mogą być używane makra z tabeli. Pełną listę opcji
używanych w rozszerzonej składni przedstawia tabela poniżej.
Pakiet tcp wrappers jest rozpowszechniany z praktycznie każdą liczącą się dystrybucją Linuksa. Można go rwnież
skompilować dla większości dostępnych na rynku systemw operacyjnych Unix. Pakiet zawiera własną bibliotekę
procedur, umożliwiającą rozbudowę napisanych we własnym zakresie serwerw usługowych o listy dostępu w
formacie tcp wrappers.
Port audit - aktywna obrona
Jeśli nie możemy stosować pasywnej obrony hosta opartej na filozofii "mostly closed", wwczas przyda się z
pewnością Port Sentry, stanowiący część większego projektu Abacus. Narzędzie służy do monitorowania
aktywności na poszczeglnych portach TCP oraz UDP i dynamicznego, aktywnego reagowania na zagrożenie.
Symptomem takowego jest skanowanie portw w celu odkrycia usług udostępnianych przez nasz host.
Reakcja Port Sentry na tego typu zagrożenie obejmuje zalogowanie przy użyciu mechanizmu syslog () takiego
zdarzenia w dziennikach systemowych i przeciwdziałanie przez zablokowanie dostępu jedną z trzech metod:
wpis do /etc/hosts.deny dla tcp wrappers (skuteczność wpisu może zależeć od zdefiniowanych już list
dostępu - zakładamy jednak filozofię "mostly open" bez specjalnych zakazw, ale i bez specjalnych
zezwoleń mogących zniweczyć efekt wpisu w /etc/hosts.deny);
wstawienie do tablicy routingu nieistniejącej trasy do intruza (metoda skuteczna przy atakach przez TCP,
nie działa przy niektrych "ślepych" atakach UDP);
uruchomienie odpowiedniego filtrowania pakietw przez ipfwadm czy ipchains. Pakiet oferuje też
możliwość uruchomienia dowolnego skryptu w reakcji na skanowanie portw.
Port Sentry ma dwa zasadnicze tryby pracy. Podstawowy, w ktrym podłącza się do strzeżonych portw funkcją
systemową bind (). Tryb ukryty "stealth" jest dostępny wyłącznie dla systemu Linux i obejmuje śledzenie
"surowych" gniazdek (raw sockets). Port Sentry wykrywa zarwno skanowanie poprzez pełne połączenie (funkcją
systemową connect () ), jak i tryby skanowania skrytego (SYN/half open, FIN, NULL, XMAS, UDP).
Demon obserwujący aktywność na portach może być uruchomiony tylko dla jednego z protokołw transportowych
TCP lub UDP. Jeśli chcemy chronić przed skanowaniem usługi korzystające z obu protokołw, musimy uruchomić
dwie kopie Port Sentry.
Pakiet może zostać tak skonfigurowany, aby ignorować aktywność dobrze znanych i często żądających rozmaitych
połączeń hostw. Można oczywiście wybrać zakres portw do obserwacji.
Port Sentry jest dobrym, prostym uzupełnieniem tcp wrappera. Warto też skorzystać z innych pakietw projektu
Abacus: Host Sentry i Logcheck. Pierwszy, napisany w Pythonie, znajduje się we wczesnej fazie rozwoju, pozwala
na odkrycie nieprawidłowości. Drugi automatyzuje przeglądanie logw systemowych w poszukiwaniu symptomw
ataku na host.
* * *
Zajrzyj
-
ftp.win.tue.nl/pub/security
- pakiet tcp wrappers
Opisane programy są idealnym narzędziem obrony stacji roboczych, notebookw, eksperymentalnych,
tymczasowych i zapasowych serwerw, a także maszyn stojących w wydzierżawionych pomieszczeniach, na
wystawach czy prezentacjach w "otwartych" sieciach.
Wyrażenia globalne
(wildcards) używane w składni list dostępu tcp wrappers (man 5 hosts_access)
Makrodefinicje
używane w listach dostępu tcp wrappers (man 5 hosts_access)
Opcje
rozszerzonej składni tcp wrappers (man 5 hosts_options)
[ Pobierz całość w formacie PDF ]