Diez consejos para sacar partido al WAF de última generación
El equipo de Technical Account Management de Fastly asesora a los clientes para que aprovechen al máximo nuestro WAF de última generación con tecnología de Signal Sciences. Todos los días trabajamos con clientes de todos los sectores, resolvemos sus dudas y les transmitimos nuestros conocimientos para que todo vaya como la seda.
Ahora ha llegado tu turno. En este artículo encontrarás una lista de prácticas recomendadas para que todo el mundo pueda sacar todo el jugo al WAF de última generación.
Prácticas recomendadas del WAF de última generación
1. Evitar la suplantación de IP de clientes
Este paso tan básico suele pasarse por alto, pero es necesario captar la IP real del cliente; de lo contrario, un atacante podría burlar el WAF con un simple cambio en los encabezados correspondientes.
El agente del WAF de última generación utiliza el encabezado X-Forwarded-For
para identificar la dirección IP del cliente. Un ejemplo podría ser client-ip-header="Fastly-Client-IP"
. Este encabezado es muy fácil de suplantar cambiando la dirección IP.
En la documentación para clientes proponemos una solución que consiste en poner un encabezado distinto y configurar el agente de forma que utilice ese encabezado para determinar la IP real del cliente. También recomendamos configurar el agente para que lea la dirección IP X-Forwarded-For de derecha a izquierda, en vez de izquierda a derecha como suele ser habitual, mediante el ajuste local-networks="private"
.
En el caso de los despliegues locales (módulo/agente), conviene asegurarse de que validamos las direcciones IP reales antes de que el agente del WAF reciba el encabezado. Por ejemplo, NGINX cuenta con ngx_http_realip_module, que valida la dirección IP del cliente.
A los clientes que tienen la CDN de Fastly delante del WAF les conviene poder enviar la dirección IP mediante VCL personalizado, tal y como explicamos aquí. Así, se envía la IP real del cliente al encabezado Fastly-Client-IP
.
Los encabezados alternativos se pueden configurar en la IU, mientras que, en el caso de despliegues del WAF fuera de la nube, hemos documentado los pasos aquí.
Si hablamos de despliegues con WAF en la nube, podemos configurarlos en la misma instancia del WAF seleccionando Advanced en Instance Location para indicar el encabezado correspondiente:
Ahora que hemos identificado los encabezados que hay que usar como dirección IP real del cliente, podemos aplicar umbrales combinando las IP con señales.
2. Configurar umbrales ante posibles ataques
Podemos ver si las IP se aproximan a los umbrales sin sobrepasarlos navegando a Observed Sources -> Suspicious IPs.
La creación de umbrales es una importante funcionalidad del WAF de última generación, dado que permite evitar el bloqueo de tráfico legítimo cuando se detecta un falso positivo. Cuando las IP no alcanzan los umbrales actuales de señales de ataque, es posible que al WAF se le estén escapando ataques potenciales.
El umbral predeterminado de todas las señales de ataque es de 50 peticiones por minuto. Sin embargo, en la captura anterior vemos que hay dos IP que superan el 75 % del umbral, lo cual significa que han logrado pasar unas 37 peticiones que pretenden realizar un ataque por inyección de código SQL (SQLi). En muchos casos, es lógico reducir el umbral si no queremos que lleguen ataques excesivos. Recomendamos hacer pruebas y validar antes de cambiar el umbral para asegurarse de que no haya ningún problema que afecte a la producción.
En el caso del ataque por SQLi del ejemplo anterior, sería bueno rebajar el umbral de ataque correspondiente a 25 por minuto.
Lo ideal es ir rebajando poco a poco, pero puede que prefieras bloquear de golpe todas las peticiones maliciosas, como las de SQLi. Puedes hacerlo creando una regla de petición que bloquee esa señal.
3. Bloquear ataques de IP maliciosas
Esta regla de peticiones te permite usar las señales de IP maliciosas para bloquear peticiones de atacantes al instante, sin esperar a que se activen los umbrales.
El WAF de última generación recaba información de IP de distintas fuentes, una de las cuales es la lista de IP maliciosas del SANS Institute, que se importa del SANS Internet Storm Center. Se añaden IP a esta lista por diferentes motivos, como pueden ser la exploración de puertos, la detección como fuente de bots o el origen de ataques de ransomware. A las IP de esta lista se las etiqueta con la señal Malicious IP. Asimismo, el WAF de última generación importa cada cierto tiempo una lista de nodos de salida TOR de The Tor Project, y a estas IP las etiqueta con la señal Tor Traffic. Por último, la plataforma del WAF integra la funcionalidad de reputación de IP, que observa comportamientos maliciosos dirigidos a todos los clientes del WAF y los añade a la lista interna de reputación de amenazas. Estas IP llevarán la señal SigSci IP.
Estas tres señales no son garantía de que alguien actúa con malas intenciones, razón por la cual recomendamos combinarlas con las señales de ataque del sistema que ya vienen definidas en el WAF de última generación. Así, la regla siguiente bloqueará al instante todo intento de ataque contra tu aplicación de una fuente de amenazas conocida:
4. Bloquear peticiones provenientes de países de la lista de la OFAC
Podemos crear una regla que bloquee toda petición proveniente de países sancionados según la lista de la Oficina de Control de Activos Extranjeros de Estados Unidos (OFAC, por sus siglas en inglés). La captura siguiente muestra una lista de sitios utilizados para identificar los códigos de países de la lista:
Como habrás visto, no especificamos regiones en la lista, puesto que necesitamos algo más que el código de país para determinar el origen geográfico de una IP.
Para resolver esto, podemos aprovisionar tu CDN de Fastly para que envíe la información del ASN en un encabezado. Este se puede usar para crear una lista de todos los ASN a los que se debe impedir el acceso a tu aplicación mediante la creación de una lista similar y una regla de peticiones.
5. Bloquear peticiones de agentes de usuario maliciosos conocidos
Se trata de algo muy sencillo: queremos asegurarnos de que se utilice un agente de usuario válido para acceder a la aplicación. Para ello, podemos crear una lista de agentes de usuario no deseados y bloquearlos de inmediato. Por ejemplo, aquí tenemos una lista de agentes de usuario que no se espera que usen la aplicación:
Nota: Esta lista distingue entre mayúsculas y minúsculas, por lo que puede ser mejor que utilices comodines para abarcar todas las posibilidades.
Ya es posible utilizar esta lista en una regla de peticiones para bloquear de inmediato:
6. Bloquear peticiones con encabezados de host no válidos
Esta regla bloquea a cualquier usuario que intente acceder a la aplicación directamente mediante una dirección IP, o bien sin rellenar el encabezado del host. Podemos crear una lista de dominios válidos que se pueden usar para acceder a la aplicación o enumerarlos como se muestra a continuación:
Esta regla permite identificar en qué casos el encabezado del host no se corresponde con el dominio de la aplicación, añadir una señal que etiquete esta petición como Invalid Request y, por último, incorporar una segunda acción para bloquear.
Atención: Esta regla solo se debe usar si tienes total confianza en el encabezado del host que usarás para identificar las peticiones válidas. En caso contrario, primero pruébala en modo de registro.
7. Bloquear IP que se hayan marcado en el propio sitio
Nota: Esta señal solo está incluida con la licencia Premier.
La señal Site-Flagged-IP indica que la petición proviene de una IP que se ha marcado por superar los umbrales de ataque de un sitio concreto. Encontrarás más información en la documentación sobre las señales: System Signals - Signal Sciences Help Center
Podemos usar la regla siguiente para bloquear peticiones provenientes de direcciones IP que lleven la marca correspondiente. Así, si una IP muestra un comportamiento malicioso, podemos impedirle todo el acceso a la aplicación.
8. Limitación del número de intentos de enumeración
Nota: Esta funcionalidad solo está disponible con la licencia Premier.
A menudo, los atacantes intentan enumerar la aplicación o API mediante técnicas diversas. Por ejemplo, si un atacante intenta acceder por la fuerza a los archivos y directorios o llevar a cabo un ataque de relleno de credenciales, es probable que genere muchos errores 4XX y 5XX.
Para evitar que los intentos de enumeración lleguen demasiado lejos, podemos servirnos de las reglas de limitación de volumen para proteger la aplicación o API. Esta regla cubrirá casos de uso más amplios, pero se puede modificar según requiera el contexto.
En esta captura de pantalla, buscamos peticiones que generen una respuesta 4XX o 5XX. Cuando vemos tal petición, podemos considerar que se trata de un intento de enumeración, y la señal correspondiente llevará la cuenta (en este caso, Suspected Attacker). Así, en cuanto se alcance el umbral, se bloquearán todas las peticiones posteriores del atacante.
9. Notificaciones de nuevas versiones y funcionalidades
Activa las notificaciones de nuevas versiones y funcionalidades. Las notificaciones de nuevas funcionalidades te darán información sobre mejoras del producto, pero solo para nuevas versiones del agente. Ahí se incluyen revisiones de errores o mejoras del agente que se hayan aplicado a la versión de lanzamiento del agente.
Para activar las notificaciones, dirígete a Corp Manage > Corp Integration y selecciona los siguientes eventos:
Los anuncios de nuevas funcionalidades se publican en Announcements - Signal Sciences Help Center.
Los eventos creados por nuevas versiones se refieren solamente a las versiones del agente y se pueden ver en Agent - Signal Sciences Help Center.
10. Generación de registros con API o Syslog
Es importante recopilar datos de los registros, sobre todo los que mejoran la observabilidad de tu producto de seguridad. Estamos hablando, por ejemplo, de capturar los datos de registros del WAF de última generación y exportarlos a tu SIEM. Hay varios procedimientos para hacerlo dependiendo de la situación. Los repasamos en esta entrada del blog.
Si te parece fácil capturar datos ocultos o de muestra, la mejor solución pasa por usar la API para extraer los datos del panel del WAF de última generación. Aquí tienes un ejemplo de un script de Python que te servirá para extraer datos mediante la API. Si usas Splunk, aprovecha la aplicación de Splunk, que también funciona a través de la API.
Si prefieres manejar datos sin muestrear ni ocultar, la siguiente opción sería capturar registros del agente y reenviarlos a un servidor Syslog. Para ello, hay que habilitar la creación de registros de depuración en el agente. Añade las siguientes configuraciones a agent.conf:
debug-log-web-inputs = 1
debug-log-web-outputs = 1
log-out = “/var/log/sigsci.log”
La opción para habilitar la creación de registros de depuración no se encuentra disponible actualmente para los clientes que usan el WAF en la nube.
Protege tus aplicaciones con el WAF de última generación
Esperamos que estas recomendaciones te ayuden a sacar el máximo partido al WAF de última generación de Fastly y puedas proteger tus aplicaciones mejor que nunca, estén donde estén. Si necesitas más ayuda, el equipo de Technical Account Management de Fastly está a tu disposición.
En la página del producto encontrarás más información sobre el WAF de última generación.