Inicio arrow Artículos arrow Seguridad arrow Prevenir ataques de fuerza bruta con fail2ban
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
957 registrados
1 hoy
1 esta semana
58 este mes
Último: czar...
Formulario de acceso



... Regenerar clave
... Registro
Prevenir ataques de fuerza bruta con fail2ban Imprimir E-Mail
viernes, 18 de mayo de 2007

Una de las molestias mas usuales a las que suele enfrentarse un administrador de sistemas es el intento de acceso a un servicio a través de ataques de fuerza bruta. Aunque este tipo de ataques no suelen dar resultado en un sistema medianamente bien configurado, sí que suelen restar algún que otro recurso al sistema contra el que atacan, ya que solicitan una y otra vez la ejecución de una parte del código del servidor consultado. Podemos actuar contra estos ataques escribiendo una simple regla en nuestro cortafuegos que deniegue el acceso a una determinada dirección en un momento dado o podemos automatizar el proceso para que se actúe contra estos ataques sin intervención del administrador. fail2ban repasa continuamente los ficheros de mensajes del sistema y de los diferentes servidores y toma decisiones en contra de aquellas direcciones que intentan y fallan el acceso de forma continuada. 


Funcionamiento

La filosofía de fail2ban es muy simple: cada uno de los servicios que corren en un sistema lanzan mensajes de información de forma periódica donde se recojen, entre otras muchas cosas, los intentos de acceso. fail2ban accede a dichos ficheros y busca coincidencias que concuerden con las opciones especificadas en el fichero de configuración. Una vez se haya encontrado una coincidencia, se obtiene la dirección IP objeto y se impide el acceso a la misma mediante la ejecución de una regla en el cortafuegos. Obviemente, se puede determinar el tiempo de denegación de acceso mediante la propia regla, que será eliminada una vez pasado el periodo prefijado. Tendremos de esta forma un control casi absoluto sobre todos aquellos demonios susceptibles de recibir un ataque por la fuerza.


Instalación del programa

Casi todas las distribuciones de linux incorporan a su lista de paquetes por defecto el programa. No obstante podemos descargar y compilar las fuentes desde la página oficial (www.fail2ban.org), teniendo en cuenta que el programa pedirá como requisito imprescindible una versión de Python igual o superior a la 4.2. La instalación en una distribución bajo Fedora Core quedaría completada de la manera siguiente:

[root@elise ~]# yum install fail2ban
Setting up Install Process
Setting up repositories

Installed: fail2ban.noarch 0:0.8.0-3.fc6
Complete!

 

Si hemos decidido instalar desde el código fuente, teclearemos los comandos siguientes para dejar instalado el programa:

[root@elise ~]# tar xvfj fail2ban-0.8.0.tar.bz2
[root@elise ~]# cd fail2ban-0.8.0
[root@elise ~]# python setup.py install


Configuración

La rama /etc/fail2ban contiene todos los archivos de configuración que necesita el programa para su correcto funcionamiento. Apuntaremos igualmente que las configuraciones aquí detalladas hacen referencia a la versión 0.8 del programa, pudiendo variar considerablemente si instalamos versiones inferiores. Básicamente tenemos cuatro secciones de configuración que pasamos a detallar a continuación.

  • fail2ban.conf - Este fichero establece opciones generales de configuración, como el nivel de logging o las rutas de los ficheros de socket o de avisos. Cada una de las opciones viene perfectamente detallada, así que abriremos el fichero y cambiaremos lo necesario para ajustar las opciones a nuestras necesidades.
  • jail.conf - fail2ban establece para su funcionamiento una serie de jails (jaulas de comunicación) que se encargan de interactuar con el servicio a "vigilar" y la acción a tomar según los parámetros establecidos. El fichero jail.conf recoge todas las secciones de cada uno de los servicios y da la oportunidad de activar o no cada una de ellas. Su estructura es muy simple: Una sección genérica ([DEFAULT]) que integra las opciones globales y diferentes subsecciones, una para cada servicio, que establecen el servicio a filtrar, el fichero de mensajes a leer y las acciones a tomar. Al igual que ocurría con el fichero anterior, la sección genérica viene muy bien documentada en el propio fichero, así que no vamos a explicarla aquí. Vamos sin embargo a transcribir un ejemplo de sección para la configuración del servicio ssh y una regla a ejecutar mediante iptables:

    [ssh-iptables]
    enabled  = true
    filter   = sshd
    action   = iptables[name=SSH, port=ssh, protocol=tcp]
               mail-whois[name=SSH, dest= Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla ]
    logpath  = /var/log/sshd.log
    maxretry = 5


    En la primera línea se establece que la regla se active con la ejecución del programa. En la segunda línea se utiliza el filtro sshd. La tercera y cuarta líneas ejecutan la acción a tomar en el caso de que la regla se cumpla (se ejecuta una regla de iptables y se manda un e-mail al administrador). La quinta línea indica el fichero de log a revisar. Finalmente, la última línea iguala el parámetro maxretry, que es el número de veces que el intento de registro sobre el servicio y para una dirección IP concreta puede fallar.

  • action.d - Bajo este directorio se encuentran los ficheros de configuración de las acciones a tomar en algún momento determinado, tanto durante la ejecución de fail2ban como cuando una regla cumple el máximo número de reintentos. Por ejemplo, la acción iptables que vimos en el ejemplo anterior quedaría como sigue en el fichero iptables.conf:

    [Definition]
    actionstart = iptables -N fail2ban-<name>
                  iptables -A fail2ban-<name> -j RETURN
                  iptables -I INPUT -p <protocol> --dport <port> -j fail2ban-<name>

    actionstop = iptables -D INPUT -p <protocol> --dport <port> -j fail2ban-<name>
                 iptables -F fail2ban-<name>
                 iptables -X fail2ban-<name>

    actioncheck = iptables -n -L INPUT | grep -q fail2ban-<name>

    actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

    actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP

    [Init]
    name = default
    port = ssh
    protocol = tcp


  • filter.d - Este directorio contiene fichero de reglas que se usarán para detectar distintos intentos de penetración no deseada en un sistema, como pueden ser fallos de contraseña, intentos repetidos de acceso a determinados ficheros, etc. Veamos una regla para el servidor vsftp que busca en su salida intentos de acceso no permitidos (el fichero se guardaría como vsftp.conf):

    failregex = vsftpd: .* authentication failure; .* rhost=<HOST>
                \[. \] FAIL LOGIN: Client "<HOST>"


    Como podemos observar, los filtros son muy sencillos de construir, así que, o bien podemos construir nuevos que se ajusten a nuestros servicios o sistemas o bien podemos modificar los que se incluyen con el paquete por defecto.

Los filtros y las acciones se tienen que combinar bajo las secciones del archivo de configuración jail.conf y así construir reglas que impidan intentos de acceso continuados (y fallidos) a determinados servicios.


Probar el funcionamiento

Ante todo y si no lo hemos hecho ya, arrancaremos el programa:

[root@elise ~]# fail2ban-client start

Este comando llamará a la parte servidor de fail2ban y todos las configuraciones establecidas se cargarán de forma conveniente. Para comprobar que nuestras reglas funcionan de forma correcta podemos utilizar el programa fail2ban-regex incluido en el paquete de distribución. Dicho programa comprueba un fichero de mensajes contra una regla específica y muestra las ocurrencias encontradas. Puede utilizarse de la siguiente forma:

[root@elise ~]# fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/postfix.conf

Running tests
=============
Use regex file : /etc/fail2ban/filter.d/postfix.conf
Use log file   : /var/log/smtpd.log

Results
=======
Failregex:
[1] reject: RCPT from (.*)\[<HOST>\]: 554

Number of matches:
[1] 2 match(es)

Addresses found:
[1]
    218.165.75.215 (Sun May 13 08:38:17 2007)
    58.153.34.102 (Sun May 13 21:26:19 2007)

Date template hits:
2 hit: Month Day Hour:Minute:Second
0 hit: Weekday Month Day Hour:Minute:Second Year
0 hit: Weekday Month Day Hour:Minute:Second
0 hit: Year/Month/Day Hour:Minute:Second
0 hit: Day/Month/Year:Hour:Minute:Second
0 hit: Year-Month-Day Hour:Minute:Second
0 hit: TAI64N
0 hit: Epoch

Success, the total number of match is 2

However, look at the above section 'Running tests' which could contain important
information.

Tambien podemos comprobar, si está a nuestro alcance, el funcionamiento de fail2ban haciendo cumplir alguna de la reglas de forma real. Para comprobar si el programa funciona, observaremos la salida del fichero de mensajes propio en /var/log/fail2ban.log:

2007-05-13 21:26:21,927 fail2ban.actions: WARNING [postfix] Ban 58.153.34.102
2007-05-13 23:06:22,641 fail2ban.actions: WARNING [postfix] Unban 58.153.34.102


Limitaciones

La principal limitación que podemos encontrarnos al correr fail2ban en cualquier entorno es el funcionamiento propio del programa y su interacción con el sistema. Al ser un programa de procesamiento de ficheros de mensajes, jamás podrá actuar contra un ataque si dichos mensajes no están escritos previamente. Muchos demonios de mensajes almacenan en memoria (buffer) una cantidad determinada de información antes de escribirla en el fichero, lo cual degrada enormemente la efectividad de fail2ban.

Otra limitación evidente es el tiempo de respuesta del programa ante un ataque automatizado. Este tipo de ataques lanzan una multitud de solicitudes en un periodo muy corto de tiempo y, aunque fail2ban responde a la lectura de los ficheros de log en segundos, es fácil que se produzcan más intentos de acceso que los especificados en maxretry antes de la ejecución de la regla prevista. No obstante, siempre es preferible este sistema que la escritura a mano de la regla.


Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
Siguiente >