NFsec Logo

Blokowanie skanera w00tw00t.at.ISC.SANS.DFind:)

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

Kategorie K a t e g o r i e : Bezpieczeństwo, Debug

Tagi T a g i : , , , , , ,

1 komentarz.

  1. Jeśli pragniemy zablokować skaner na poziomie Varnish’a wystarczy dodać wpis w sekcji sub vcl_fetch:

        if (req.url ~ "^/w00tw00t") {
    	error 403 "Not permitted";
        }