El asombroso mundo del WAF

El asombroso mundo del WAF

Hola a todos! En esta entrada vamos a tratar de cero los WAF (Web Application Firewall). Por tanto, debemos empezar por el principio.

Como su propio nombre indica, es un firewall a nivel de aplicación web. Owasp lo define como:

Un waf es un firewall para aplicaciones HTTP. Aplica un conjunto de reglas que cubren ataques comunes como XSS, SQLi etc…

Tipos de WAF

Hay dos tipos de WAF, los que se residen en la red (es decir son un elemento más de la red) y los que se basan en el servidor de aplicaciones (residen en el servidor). Los WAF son elementos complementarios a las medidas de seguridad que soportan los Firewall clásicos.

Llegados a este punto, no nos debería resultar muy complejo entender el siguiente esquema:

Modelos de seguridad
Seguridad Positiva

Este tipo de modelo bloquea todas las peticiones. Sólo acepta las que son seguras, para distinguirlas tiene una serie de reglas.

A priori parece lo más idóneo ya que nos protegemos de nuevos ataques, pero resulta difícil de mantener si la página web tiene un desarrollo continuo pues nos veremos obligados a modificar las reglas constantemente.

 

Seguridad Negativa

Este modelo es todo lo contrario al anterior, ya que acepta todas las peticiones, bloqueando las que detecta como amenazas. Puesto a que depende de las reglas, suele ser menos fiable, pues el riesgo de bypass se incrementa.

 

¿Pero esto es seguro?

Hay que tener siempre claro que la seguridad al 100% no existe y esto es tan sólo, un nivel más de seguridad, que sin duda, es más que útil. Como se ha comentado anteriormente, un WAF funciona con reglas y por tanto, esas reglas pueden tener fallos y/o no contemplar nuevos ataques.

Para ello os recomiendo que os paséis por esta entrada: https://www.fwhibbit.es/bypass-waf donde podréis aprender a identificar un WAF, permitiéndoos conocer su funcionamiento para realizar un bypass posterior…

 

¿Cómo consigo un WAF?

En este punto debemos plantearnos si queremos un WAF comercial o uno OpenSource, obviamente las diferencias son notables. En este caso he escogido uno de los más populares, que es modsecurity (https://modsecurity.org/).


ModSecurity

Resultado de imagen de modsecurity

Es un módulo para servidores HTTP (Apache, NGINX y Microsoft IIS)  cuyo propósito es reforzar la seguridad de las aplicaciones Web. Modsecurity es OpenSource, además, provee un lenguaje de reglas y una API para implementar protecciones avanzadas, permitiendo bloquear gran cantidad de ataques webs, convirtiéndose en un efectivo sistema de prevención y detección de intrusos para servidores Web.

 

¡Desplegando ModSecurity!

Para obtener modsecurity deberemos instalar lo siguiente:

apt-get install libapache2-modsecurity

Una vez instalado, accedemos al directorio (en mi caso) de los mods disponibles en Apache, para ello visualizamos (o creamos si no existe) el fichero mod-security.conf.

<IfModule security2_module>
# Default Debian dir for modsecurity’s persistent data
SecDataDir /var/cache/modsecurity

# Include all the *.conf files in /etc/modsecurity.
# Keeping your local configuration in that directory
# will allow for an easy upgrade of THIS file and
# make your life easier
Include «/etc/modsecurity/*.conf»
</IfModule>

Como se puede observar, simplemente incluye todos los ficheros con la extensión «.conf» alojados en /etc/modsecurity. En dicho directorio, tenemos un fichero de configuración recomendado, para activarlo, simplemente debemos renombrarlo y dejarlo con la extensión .conf.

Modsecurity incluye por defecto reglas, éstas están situadas en /usr/share/modsecurity-crs y hace falta activarlas para que empiecen a funcionar, para ello creamos un enlace simbólico de las base_rules a las activated_rules, si queréis más información sobre el symlink os recomiendo leer (https://www.fwhibbit.es/symlink-hacking-shared-hosting)

Quedando de la siguiente manera:

Tan sólo nos queda activar modsecurity en nuestro sitio, para ello nos dirigimos a /etc/apache2/sites-avalaible y añadimos la información del módulo (dichas líneas incluyen «activan»  las reglas y las configuraciones de modsecurity)

<IfModule security2_module>
SecRuleEngine DetectionOnly
Include «/usr/share/modsecurity-crs/*.conf»
Include «/usr/share/modsecurity-crs/activated_rules-testing/*.conf»
</IfModule>

NOTA: DetectionOnly indica que logeé, pero que no bloqueé, de querer bloquear, también se debería editar en la configuración situada en /etc/modsecurity (séptima línea).

Por último reinciamos apache y ya tenemos modsecurity funcionando!

 

¡Probando ModSecurity!

Para probarlo de forma sencilla, inyectaremos un XSS vía GET en la página, monitorizando los logs para comprobar si la regla lo detecta y lo logea.

Para ello, monitorizamos los logs e inyectamos el XSS.

tail -f /var/log/apache2/modsec_audit.log

Como se puede comprobar a continuación la inyección es detectada y registrada.

En la primera parte del log podremos ver los detalles de la conexión:

A continuación, podremos comprobar la respuesta por parte del servidor entregada al cliente y las firmas que han detectado el ataque.

Por último, visualizaremos el tipo de ataque y el modo de actuar del WAF.

Y hasta aquí la entrada de hoy, espero que os haya gustado y fortifiquéis un poco más vuestro servidor web 😛

Un saludo,

Álvaro Díaz (@alvarodh5)

2 comentarios en «El asombroso mundo del WAF»

  1. Muchas gracias Álvaro, muy bien explicado y muy útil para cualquiera que tiene una web y quiere aumentar su nivel de seguridad. Felicitaciones por el artículo!

Los comentarios están cerrados.