Wykrywanie skanowania przez scanlogd
Napisał: Patryk Krawaczyński
06/10/2004 w Bezpieczeństwo Brak komentarzy. (artykuł nr 8, ilość słów: 753)
S
canlogd jest kolejnym programem dzięki, któremu możemy posiadać rozeznanie czy ktoś poddaje nasz system skanowaniu. Autorem scanlog’a jest ekspert od zabezpieczeń o pseudonimie Solar Designer. Scanlogd wyróżnia się prostotą instalacji i obsługą. Choć posiada proste mechanizmy wykrywania skanowania przy pomocy protokołu TCP potrafi dostarczyć nam niezbędnych informacji o próbie przeprowadzenia wywiadu na naszym systemie. Poza tym jest to bardzo mały program nie zużywający większych ilości pamięci oraz procesora, działający na różnych systemach operacyjnych. Aby w pełni wykorzystać możliwości programu będą nam potrzebne biblioteki poza systemowe. Oczywiście program można skompilować bez żadnych dodatkowych bibliotek, ale zaleca się, aby w systemie były one zainstalowane. Mowa jest tu o typowo sieciowych bibliotekach takich jak: libpcap, libnids i libnet. Lokalne kopie tych bibliotek możemy znaleźć na domowej stronie scanlog’a.
W zależności od bibliotek, które posiadamy w systemie, możemy skompilować program scanlogd na trzy różne sposoby:
- Bez użycia wymienionych wyżej bibliotek – program wykorzysta surowe gniazda (raw sockets);
- Z użyciem wszystkich trzech bibliotek, co pozwoli nam monitorować ruch w całej sieci oraz manipulację pofragmentowanymi pakietami
- Z użyciem wyłącznie jednej biblioteki libpcap – jednak nie jest to zalecane przez autora programu.
Instalację zaczynamy od ściągnięcia oraz rozpakowania programu:
gunzip scanlogd.tar.gz tar -xvf scanlogd.tar rm scanlogd.tar cd scanlogd
Jeśli się zdecydowaliśmy na surową wersję programu wydajemy polecenie: make linux. W przeciwnym przypadku musimy na początku zainstalować biblioteki zaczynając od libpcap, która jest wymagana przez dwie pozostałe. Jest ona rozwijana przez twórców narzędzia tcpdump (które występuje w pakietach instalacyjnych Slackware). Następnie musimy skompilować bibliotekę libnet. Na sam koniec będziemy mogli zainstalować w systemie libnids (pod warunkiem, że poprzednie dwie są zainstalowane). Wszystkie trzy biblioteki kompilujemy standardowo:
./configure --prefix=/usr make make install
Po poprawnej instalacji możemy skompilować program z obsługą wszystkich bibliotek (make libnids) lub tylko z obsługą libpcap (make lipcap). Po kompilacji jesteśmy zmuszeni do ręcznej instalacji programu, ze względu na to, że plik Makefile naszego programu nie posiada sekcji install:
cd ~root/scanlogd cp scanlogd /usr/local/sbin gzip scanlogd.8 cp scanlogd.8.gz /usr/local/man/man8
Następnie musimy stworzyć użytkownika scanlogd, z którego prawami program scanlogd będzie uruchamiany:
useradd -d /none -s /dev/null scanlogd
Istotnymi są, aby katalog o tej nazwie nie istniał, a powłoka nie umożliwiała logowanie się do systemu. Po tych wszystkich czynnościach możemy uruchomić program poleceniem: scanlogd. W celu sprawdzenia czy program został uruchomiony i działa w tle wydajemy polecenie: ps -u scanlogd. Jeśli chcemy, aby uruchamiał się on na starcie systemu dodajemy jego wywołanie do demona /etc/rc.local (echo “/usr/local/sbin/scanlogd” >> /etc/rc.local). Możemy także stworzyć demona zarządzającego scanlog’iem – /etc/rc.d/rc.scanlogd:
#!/bin/sh # Start/stop/restart scanlogd. # Start scanlogd: scanlogd_start() { if [ -x /usr/local/sbin/scanlogd ]; then echo "Starting Scanlogd daemon: /usr/local/sbin/scanlogd" /usr/local/sbin/scanlogd fi } # Stop scanlogd: scanlogd_stop() { killall scanlogd } # Restart scanlogd: scanlogd_restart() { scanlogd_stop sleep 1 scanlogd_start } case "$1" in 'start') scanlogd_start ;; 'stop') scanlogd_stop ;; 'restart') scanlogd_restart ;; *) echo "usage $0 start|stop|restart" esac
Następnie dodajemy jego wywołanie do skryptu /etc/rc.d/rc.inet2:
if [ -x /etc/rc.d/rc.scanlogd ]; then /etc/rc.d/rc.scanlogd start fi
Teraz wystarczy tylko poddać testom nasz mały detektor. Poniżej zawarto logi wygenerowane przez program scanlogd, który wykrył skanowanie. Skanowanie odbyło się z lokalnej maszyny, przy użyciu programu nmap, który został uruchomiony kolejno z flagami: -sS -sT -sF -sX -sN -sR. Są to kolejne metody skanowania oferowane przez program nmap, które za każdym razem zostały wykryte przez scanlogd.
Jun 11 09:37:30 darkstar scanlogd: 127.0.0.1 to 127.0.0.1 ports 706, 67, 549, 1520, 4144, ..., f??pauxy, TOS 00 @09:37:30 Jun 11 09:39:40 darkstar scanlogd: 127.0.0.1 to 127.0.0.1 ports 363, 1012, 326, 545, ..., f??pauxy, TOS 00, TTL 64 @09:39:40 Jun 11 09:42:17 darkstar scanlogd: 127.0.0.1 to 127.0.0.1 ports 16959, 236, 969, 890, 1488, ..., ?s?pauxy, TOS 00 @09:42:17 Jun 11 09:49:24 darkstar scanlogd: 127.0.0.1 to 127.0.0.1 ports 589, 44, 315, 757, 740, 477, ..., ?s??a?xy, TOS 00 @09:49:24 Jun 11 09:50:40 darkstar scanlogd: 127.0.0.1 to 127.0.0.1 ports 424, 6101, 3999, 1488, 65301, ..., fs?pauxy, TOS 00 @09:50:40 Jun 11 09:51:11 darkstar scanlogd: 127.0.0.1 to 127.0.0.1 ports 7003, 248, 5305, 1469, 693, ..., f??pauxy, TOS 00 @09:51:11
Warto wspomnieć, że przy użyciu skanowania wykorzystującego protokół UDP, program nie odnotował żadnej aktywności. Choć scanlogd nie posiada mechanizmów mylących próbę detekcji systemu lub blokujących kolejne próby, jak również wykrywania skanowania przy użyciu innych protokołów takich jak UDP czy ICMP – świetnie nadaje się do monitorowania pojedynczych hostów oraz malutkich sieci lokalnych. Może być z pewnością wykorzystany na serwerze, który oferuje usługi oparte wyłącznie na protokole TCP/IP.
Więcej informacji: scanlogd, tcpdump, packetfactory, Phrack Issue 53, art nr 13