Los diez mejores consejos para sacar partido del WAF de última generación
El equipo de Technical Account Management de Fastly aconseja a los clientes para que saquen el máximo provecho del WAF de última generación, con tecnología de Signal Sciences. Trabajamos a diario con clientes de todos los sectores, respondiendo a sus dudas y compartiendo conocimientos para que todo vaya como la seda.
Esta vez, queremos compartir el conocimiento contigo. En este artículo encontrarás una lista de prácticas recomendadas, para que todo el mundo pueda sacar provecho del WAF de última generación.
1. Evitar la suplantación de IP de clientes
Este paso tan básico no siempre se lleva a cabo. Es necesario captar la IP real del cliente; si no, 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 poniendo otra dirección IP en el encabezado.
En nuestra documentación para clientes proponemos una solución, que consiste en pasar un encabezado distinto y luego configurar el agente para que use dicho encabezado para determinar la IP real del cliente. También recomendamos configurar el agente para que lea la dirección IP de X-Forwarded-For de derecha a izquierda, en vez de izquierda a derecha como suele ser por defecto, 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 NGWAF reciba el encabezado. Por ejemplo, NGINX cuenta con el ngx_http_realip_module que validará la dirección IP del cliente.
A los clientes que tienen la CDN de Fastly delante del NGWAF 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 otros encabezados se pueden configurar en la IU, mientras que en el caso de los despliegues sin WAF en la nube, aquí se explican los pasos que hay que seguir.

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 ataques son 50 peticiones en un minuto. No obstante, vemos que en la captura anterior hay dos IP que superan el 75 % del umbral, es decir, entraron unas 37 peticiones 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, con el fin de asegurarse de que no hay ningún problema que afecte a la producción.
Partiendo del ataque con SQLi del ejemplo anterior, queremos rebajar el umbral de ataque de SQLi a 25 por minuto.
Lo ideal es ir rebajando poco a poco, o puede que prefieras bloquear todas las peticiones maliciosas, como las de SQLi, de golpe. 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 múltiples fuentes, una de las cuales es la lista de IP maliciosas del SANS Institute, que se importa cada cierto tiempo 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 les etiqueta con la señal Malicious IP. Asimismo, el WAF de última generación importa una lista de los nodos de salida de TOR del The Tor Project, y estas IP reciben la 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 de una fuente de amenazas conocida.

4. Bloquear peticiones provenientes de países de la lista de OFAC
Podemos crear una regla que bloquee toda petición proveniente de países sancionados según la lista de la Office of Foreign Assets Control (OFAC). 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. 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 espero que usen mi 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 puedo utilizar esta lista en una regla de peticiones para bloquear de inmediato:

6. Bloquear peticiones con encabezados host no válidos
Esta regla bloquea a todo usuario que intente acceder a la aplicación directamente mediante una dirección IP, o bien sin rellenar el encabezado host. Podemos crear una lista de dominios válidos que se pueden usar para acceder a la aplicación, o los puedes enumerar como se muestra a continuación:

Para que esta regla te permita identificar cuándo coincide el encabezado host con el dominio de tu aplicación, basta con añadir una señal llamada Domain Request.
Acto seguido, crea otra regla de peticiones que bloquee todo lo que no coincida con la señal Domain Request, y luego añade una señal que etiquete la petición en cuestión como Invalid Request.

7. Acceso al dominio con limitación de volumen (DDoS de la aplicación)
Nota: esta funcionalidad solo está disponible con la licencia Premier.
La limitación de volumen en la capa de la aplicación para protegerse de ataques de DDoS es una opción muy popular. La regla anterior, que identificaba peticiones de dominios, también nos permite crear una regla de limitación de volumen para regular el tráfico.

En este ejemplo, si observamos 100 peticiones de domino en un minuto, tendríamos que bloquear el acceso al dominio y devolver un código de respuesta 429.
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 fuerza bruta 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). La señal de acción, Domain Request (activada en una etapa anterior), identificará el dominio cuyo acceso bloquearemos (ver el apartado anterior). Así, bloquearemos la primera petición que llegue una vez se haya alcanzado el umbral de intentos de enumeración.
9. Notificaciones de nuevos lanzamientos y funcionalidades
Activa las notificaciones de New Feature Announcements and Releases. Las notificaciones de New Feature Announcements te darán información sobre mejoras del producto para lanzamientos del agente solamente. 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 lanzamientos se refieren solamente a los lanzamientos de 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. Se puede tratar, por ejemplo, de capturar los datos de registros del WAF de última generación y exportarlos a tu SIEM. Para hacerlo, hay varios procedimientos que repasamos en esta entrada del blog según cada caso de uso.
Si te parece fácil capturar datos ocultos o de muestra, la mejor solución puede pasar 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 Splunk App, que también funciona a través de API.
Si te sientes más cómodo manejando 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”
Para los clientes que usan el Cloud WAF, hoy por hoy la opción para habilitar la creación de registros de depuración no se encuentra disponible.
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 TAM 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.