Si revisamos los logs del servidor web, de vez en cuando aparecen toda una serie de peticiones del tipo:

193.108.81.203 - - [12/Jan/2011:16:48:31 +0100] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 488 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:34 +0100] "GET /db/scripts/setup.php HTTP/1.1" 404 471 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:35 +0100] "GET /mysql/scripts/setup.php HTTP/1.1" 404 473 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:35 +0100] "GET /typo3/phpmyadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:38 +0100] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 477 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:38 +0100] "GET /pma/scripts/setup.php HTTP/1.1" 404 472 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:39 +0100] "GET /web/phpMyAdmin/scripts/setup.php HTTP/1.1" 404 479 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:39 +0100] "GET /xampp/phpmyadmin/scripts/setup.php HTTP/1.1" 404 480 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:39 +0100] "GET /web/scripts/setup.php HTTP/1.1" 404 472 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:39 +0100] "GET /websql/scripts/setup.php HTTP/1.1" 404 474 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:40 +0100] "GET /webadmin/scripts/setup.php HTTP/1.1" 404 476 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:40 +0100] "GET /sqlweb/scripts/setup.php HTTP/1.1" 404 474 "-" "ZmEu"
193.108.81.203 - - [12/Jan/2011:16:48:40 +0100] "GET /websql/scripts/setup.php HTTP/1.1" 404 474 "-" "ZmEu"

En este caso, la IP parece ser del Reino Unido, pero va variando, así como la petición característica que hace al principio y el user agent del final, "Zemu". En otras ocasiones, la petición es /w00tw00t.at.ISC.SANS.DFind:).

Es algo que ya lleva un tiempo por el mundo, ya que se pueden encontrar referencias en Google de cómo mínimo un par de años. Podemos filtrar y bloquear esta clase de escaneos de varias maneras.

iptables

Con iptables, a través de un script que bloquea la IP automáticamente, aunque se deben crear una reglas previamente y programar su ejecución periódica en el cron.

Con iptables, para bloquear una IP concreta, ejecutamos:

$ sudo iptables -I INPUT -s 193.108.81.203 -j DROP

Ahora vamos a crear las reglas que necesita el script:

$ sudo iptables -N drop_w00t
$ sudo iptables -A INPUT -j drop_w00t
$ sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Guardaremos las reglas y las haremos permanentes ejecutando:

$ sudo iptables-save

También podemos incluir una IP en la cadena que acabamos de crear:

$ sudo iptables -A drop_w00t -s 211.94.188.52 -j DROP

Podemos ver las IP bloqueadas en este momento (el argumento -n nos muestra las IPs, si no lo ponemos nos saldrá el dominio al que resuelve la IP, si es que lo hay):

$ sudo iptables -L drop_w00t -n

    Chain drop_w00t (1 references)
    target     prot opt source               destination
    DROP       all  --  193.108.81.203       0.0.0.0/0
    DROP       all  --  62.215.201.252       0.0.0.0/0
    DROP       all  --  80.232.176.202       0.0.0.0/0
    DROP       all  --  92.243.22.73         0.0.0.0/0
    DROP       all  --  211.94.188.52        0.0.0.0/0
    DROP       all  --  116.255.163.100      0.0.0.0/0

Si queremos borrar una regla, primero averiguamos qué número tiene:

$ sudo iptables -L INPUT -n --line-numbersbash

Y después borramos la regla usando ese número:

$ sudo iptables -D INPUT [número]bash

Podemos borrar una IP bloqueada dentro de una regla:

$ sudo iptables -D drop_w00t [número]bash

fail2ban

También se puede filtrar con fail2ban, añadiendo una nueva opción.

A partir de la versión 0.8.1 ya están definidas las acciones necesarias a llevar a cabo con iptables. Si tenemos una versión anterior, podemos seguir los pasos previos definidos en el enlace anterior.

Lo primero es crear un filtro, /etc/fail2ban/filter.d/apache-w00tw00t.conf:

# 193.108.81.203 - - [12/Jan/2011:16:48:31 +0100] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 488 "-" "ZmEu"
[Definition]

# Option: failregex
# Notes.: regex to match the w00tw00t scan messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching.
# Values: TEXT

failregex = ^ -._"GET \/w00tw00t\.at.*"._

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT

ignoreregex =

Declaramos el filtro en /etc/fail2ban/jail.conf para que si detecta el escaneo en el fichero de log del Apache, banee al usuario durante un tiempo:

[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables-allports[name=w00tw00t]
mail-whois[name=w00tw00t, dest=]
logpath = /var/log/apache2/other_vhosts_access.log
maxretry = 1
bantime = 86400

mod_security

Y por último, también se puede utilizar mod_security, añadiendo las siguientes reglas:

SetEnvIfNoCase Request_URI "w00tw00t.at.blackhats.romanian.anti-sec" drop
SetEnvIfNoCase Request_URI "w00tw00t.at.ISC.SANS.DFind" drop
SetEnvIfNoCase Request_URI "w00tw00t.at.ISC.SANS.test0" drop

Lo malo es que mod_security no nos protegerá de esa IP contra otros servicios.


Entradas relacionadas


Published

Category

admin

Tags

Contacto