w00tw00t.at.ISC.SANS.DFind:) Tu servidor está bajo ataque

abril 16, 2014
1 Star2 Stars3 Stars4 Stars5 Stars (2 votos, promedio: 5,00 de 5)
Cargando…

Cualquiera que tenga una ip en internet está expuesto a ataques, algo muy común es ver este tipo de entradas en los logs de apache.

client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

Alguién o algo está intentando encontrar una vulnerabilidad en tu equipo.
Para solucionarlo basta con instalar fail2ban y habilitar los filtros y configuración jail:

1- Instalamos fail2ban si no lo hemos instalado todavía:

sudo apt-get install fail2ban

2- Creamos el filtro apache-scan.conf:

# Fail2Ban configuration file
#
# Author: Andreas Florath
#
 
[Definition]
 
# Option:  failregex
# Notes.:  regex to match the password failure messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>\S+)
# Values:  TEXT
#
failregex = [[]client <HOST>[]] File does not exist: /var/www/2phpmyadmin
            [[]client <HOST>[]] File does not exist: /var/www/admin
            [[]client <HOST>[]] File does not exist: /var/www/administrator
            [[]client <HOST>[]] File does not exist: /var/www/database
            [[]client <HOST>[]] File does not exist: /var/www/db
            [[]client <HOST>[]] File does not exist: /var/www/dbadmin
            [[]client <HOST>[]] File does not exist: /var/www/images
            [[]client <HOST>[]] File does not exist: /var/www/myadmin
            [[]client <HOST>[]] File does not exist: /var/www/MyAdmin
            [[]client <HOST>[]] File does not exist: /var/www/mysql
            [[]client <HOST>[]] File does not exist: /var/www/mysqladmin
            [[]client <HOST>[]] File does not exist: /var/www/mysql-admin
            [[]client <HOST>[]] File does not exist: /var/www/mysqlmanager
            [[]client <HOST>[]] File does not exist: /var/www/phpmy
            [[]client <HOST>[]] File does not exist: /var/www/phpmyadmin
            [[]client <HOST>[]] File does not exist: /var/www/php-myadmin
            [[]client <HOST>[]] File does not exist: /var/www/phpmy-admin
            [[]client <HOST>[]] File does not exist: /var/www/phpmyAdmin
            [[]client <HOST>[]] File does not exist: /var/www/phpMyadmin
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin
            [[]client <HOST>[]] File does not exist: /var/www/phpmyadmin2
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.5.1-all-languages
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.6-all-languages
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.7.1-all-languages
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.7.1-all-languages-utf-8-only
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.8.1-all-languages
            [[]client <HOST>[]] File does not exist: /var/www/phpMyAdmin-2.11.8.1-all-languages-utf-8-only
            [[]client <HOST>[]] File does not exist: /var/www/phppma
            [[]client <HOST>[]] File does not exist: /var/www/pma
            [[]client <HOST>[]] File does not exist: /var/www/PMA
            [[]client <HOST>[]] File does not exist: /var/www/program
            [[]client <HOST>[]] File does not exist: /var/www/qql
            [[]client <HOST>[]] File does not exist: /var/www/sql
            [[]client <HOST>[]] File does not exist: /var/www/sqlmanager
            [[]client <HOST>[]] File does not exist: /var/www/sqlweb
            [[]client <HOST>[]] File does not exist: /var/www/webadmin
            [[]client <HOST>[]] File does not exist: /var/www/webdb
            [[]client <HOST>[]] File does not exist: /var/www/websql
            [[]client <HOST>[]] File does not exist: /var/www/e107_files
            [[]client <HOST>[]] File does not exist: /var/www/db
            [[]client <HOST>[]] File does not exist: /var/www/e107
            [[]client <HOST>[]] File does not exist: /var/www/site
            [[]client <HOST>[]] File does not exist: /var/www/web
            [[]client <HOST>[]] File does not exist: /var/www/forum
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

3- Creamos el filtro apache-w00t.conf:

vi /etc/fail2ban/filter.d/apache-w00t.conf
# Fail2Ban configuration file
#
# Author: Andreas Florath
#
 
[Definition]
 
# Option:  failregex
# Notes.:  regex to match the password failure messages in the logfile. The
#          host must be matched by a group named &amp;amp;quot;host&amp;amp;quot;. The tag &amp;amp;quot;&amp;lt;host&amp;gt;&amp;amp;quot; can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P&amp;lt;host&amp;gt;\S+)
# Values:  TEXT
#
failregex = [[]client []] client sent HTTP/1\.1 request without hostname \(see RFC2616 section 14\.23\): \/w00tw00t.at.ISC.SANS.DFind:\)
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

4. Añadimos estas lineas a jail.local o jail.conf en su defecto.

vi /etc/fail2ban/jail.local
#
# You might want to incrase the bantime
#
bantime  = 133201
 
#
# Add the following
#
[apache-w00t]
 
enabled = true
port    = http,https
filter  = apache-w00t
logpath = /var/log/apache*/*error.log
maxretry = 1
 
[apache-scan]
 
enabled = true
port    = http,https
filter  = apache-scan
logpath = /var/log/apache*/*error.log
maxretry = 1

5. Por último reiniciamos fail2ban

service fail2ban restart

NOTA IMPORTANTE: Habilitar fail2ban sólo reduce la posibilidad del ataque. Si hay aplicaciones obsoletas o problemáticas en tu equipo probablemente consigan hackearlo!

3 pensamientos en “w00tw00t.at.ISC.SANS.DFind:) Tu servidor está bajo ataque

  1. babyadmin

    Holas , excelente post añadiré estos filtros en cuanto pueda a mi fail2ban .
    Podrías hacer un post que enseñé como hacer un filtro para phpmyadmin , pues he intentado crear , copiando y pegando , una jail para esto y no me ha salido bien . Resulta que el al reiniciar el fail2ban para activar el filtro me dice fail , lo he probado con 2 filtros diferentes .
    Si pregunto alguna barbaridad que conste que soy ultranovato en esto .

    [apache-phpmyadmin]
    enabled = true
    port = http,https
    filter = apache-phpmyadmin
    logpath = /var/log/apache*/*error.log
    maxretry = 3

    # Fail2Ban configuration file
    #
    # Bans bots scanning for non-existing phpMyAdmin installations on your webhost.
    #
    # Author: Gina Haeussge
    #

    [Definition]

    docroot = /var/www
    badadmin = PMA|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2

    # Option: failregex
    # Notes.: Regexp to match often probed and not available phpmyadmin paths.
    # Values: TEXT
    #
    failregex = [[]client []] File does not exist: %(docroot)s/(?:%(badadmin)s)

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

    [apache-myadmin]

    enabled = true
    port = http,https
    filter = apache-myadmin
    banaction = iptables-allports
    action = %(action_mwl)s
    logpath = /var/log/apache*/*error.log
    maxretry = 2

    [Definition]
    failregex = ^[[]client []] File does not exist: *myadmin* *\s*$
    ^[[]client []] File does not exist: *MyAdmin* *\s*$
    ^[[]client []] File does not exist: *mysqlmanager* *\s*$
    ^[[]client []] File does not exist: *setup.php* *\s*$
    ^[[]client []] File does not exist: *mysql* *\s*$
    ^[[]client []] File does not exist: *phpmanager* *\s*$
    ^[[]client []] File does not exist: *phpadmin* *\s*$
    ^[[]client []] File does not exist: *sqlmanager* *\s*$
    ^[[]client []] File does not exist: *sqlweb* *\s*$
    ^[[]client []] File does not exist: *webdb* *\s*
    ignoreregex =

    No se si es por tener un script con las reglas de iptables ya predefinidas que hay alguna incompatibilidad , aunque me parece que no tendría que haberla en un principio .
    Perdón por el ladrillo .
    Gracias .

    1. Hackeando el GenomaHackeando el Genoma Autor

      Que buena idea @babyadmin ! Pero ten en cuenta que lo que estás haciendo es un ban para los bots que intentan detectar dónde está tu instalación de phpmyadmin, no un bloqueo de fuerza bruta.

      Para crear un filtro de fail2ban que bloquee los ataques bruteforce de phpmyadmin lo primero que necesitamos es un log con los intentos fallidos de entrada. Esto no lo hace phpmyadmin por defecto, pero puedes usar apache para registrar estos intentos fallidos. Como es un poco extenso, he creado este post donde explico cómo hacerlo: http://hackeandoelgenoma.com/?p=1196

      Por otro lado, si lo que quieres es bloquear a los bots que intentan rastrear tu instalación phpmyadmin, entonces, vas por el camino correcto, pero sin conocer el error exacto que te está dando es un poco difícil, así a primera vista creo que te falta lo siguiente en el filtro:

      [INCLUDES]

      # Read common prefixes. If any customizations available — read them from
      # common.local
      before = common.conf

      He creado otro post donde te explico paso a paso cómo hacerlo: http://hackeandoelgenoma.com/?p=1192

  2. babyadminbabyadmin

    Mil gracias por responder y por los dos post que has creado , me interesan las dos maneras de proteger phpmyadmin.
    Ya averigué por que me daba fail el programa , resulta que en la carpeta filter.d escribía el archivo como apache-phpmyadmin.con en lugar de apache-phpmyadmin.conf , es decir era error tipográfico.
    Con esto solucionado continué configurando el fail2ban con la ayuda de tus nuevos posts .

    El de “bloquear a los bots que intentan rastrear tu instalación phpmyadmin” no he comprobado si me funciona o no , aunque en principio parece que si pero el de “crear un filtro de fail2ban que bloquee los ataques bruteforce de phpmyadmin” pues no me salen errores pero no banea y el archivo /var/log/apache2/phpmyadmin_access.log está vacío.
    Se me escapan muchas cosas (LogFormat/CustomLog, apache_note,mod_php, mod_fcgi) asin que seguiré estudiando el tema .

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *