Blokowanie skanera w00tw00t.at.ISC.SANS.DFind:)
Napisał: Patryk Krawaczyński
23/09/2009 w Bezpieczeństwo, Debug 1 komentarz. (artykuł nr 160, ilość słów: 349)
W
ielu użytkowników posiadających własny serwer WWW np. Apache – od dłuższego czasu może zaobserwować w własnych logach access_log oraz error_log występowanie następujących wpisów:
89.19.27.114 - - [20/Sep/2009:05:33:39 +0000] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 226 "-" "-" [Sun Sep 20 05:33:39 2009] [error] [client 89.19.27.114] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Są to ślady jakie zostawia skaner DFind testujący web serwery pod kątem luk w zabezpieczeniach. Posiada on możliwość skanowania wybranego adresu IP lub całych ich zakresów. Ze względu na fakt, iż proces skanowania odbywa się z różnych adresów IP blokując ręcznie jeden adres IP – ślady w logach zaczynają pojawiać się z innego.
Skaner ten możemy zablokować za pomocą jednego prostego skryptu – w00t.sh. Skrypt ten sprawdza, co określony czas występowanie określonej sygnatury / frazy w logach serwera Apache oraz na bieżąco blokuje znalezione przy niej adresy IP – zarówno te stare jak i nowe. Wszystko to odbywa się przy pomocy dwóch plików, które rotują między sobą unikatowe wpisy:
#!/bin/sh grep w00t /var/log/httpd/access_log | cut -f 1 -d ' ' | sort | uniq >> /tmp/denyw00t cat /tmp/denyw00t | sort | uniq > /tmp/blacklisted.list cat /tmp/blacklisted.list > /tmp/denyw00t /sbin/iptables -N w00t 2> /dev/null /sbin/iptables -F w00t cat /tmp/blacklisted.list | xargs -iX -n 1 iptables -A w00t -i eth0 -p tcp -s X -j DROP /sbin/iptables -D INPUT -j w00t 2> /dev/null /sbin/iptables -I INPUT -j w00t echo "`date` Blokowanie skanera w00t" >> /var/log/userscripts
Skrypt ten wystarczy umieścić w /etc/cron.hourly
aby, co godzinę były wychwytywane nowe adresy IP. Jego wywołanie również wskazane jest na końcu pliku /etc/rc.d/rc.local
tak, by po restarcie całego serwera wyłapane już adresy IP zostały od razu zablokowane. Interfejs eth0 należy podmienić na swój interfejs zewnętrzny. Jeśli używamy TCP Wrappers możemy wykorzystać kod:
#!/bin/bash for ip in $(< /tmp/blacklisted.list); do let n=`grep -c $ip /etc/hosts.deny` if [ $n -eq 0 ]; then echo "ALL:$ip" >> /etc/hosts.deny fi done
Update: 02.04.2010 – 14:01
W czasie rzeczywistym skaner ten możemy zablokować za pomocą iptables:
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 80 -m string --string "w00t" --algo bm -j DROP
Więcej informacji: www.novirustanks.org, www.techsoar.com
Jeśli pragniemy zablokować skaner na poziomie Varnish’a wystarczy dodać wpis w sekcji
sub vcl_fetch
: