DEV Community

Willie Reyes
Willie Reyes

Posted on

Reglas Personalizadas en Web Application Firewall nativo AWS

Este post es basado en la presentacion que realize en el evento de la comunidad de AWS Ecuador

Temas

Evolución de reglas básicas a custom rules avanzadas
Casos de uso reales de implementación
Integración con CloudFront, ALB
Métricas y monitoreo con CloudWatch

Características principales

  • Protección en tiempo real
  • Filtrado de tráfico basado en reglas personalizables
  • Inspección profunda de headers, body y query strings
  • Respuesta automática a amenazas detectadas

Integración nativa con AWS

  • Compatible con CloudFront, Application Load Balancer, API Gateway
  • Despliegue rápido sin cambios en infraestructura
  • Escalabilidad automática según demanda

Control granular

  • Reglas personalizadas según necesidades específicas
  • Listas blancas y negras de IPs
  • Rate limiting para prevenir ataques DDoS

Monitoreo y visibilidad

  • Métricas en tiempo real en CloudWatch
  • Logs detallados de todas las solicitudes
  • Dashboards para análisis de seguridad

AWS Reglas Gestionadas (Managed Rules)

¿Qué son?
Reglas preconfiguradas mantenidas por AWS y terceros
Se actualizan automáticamente con nuevas amenazas
Fáciles de implementar sin experiencia en seguridad

AWS Reglas Gestionadas (Managed Rules)

Core Rule Set (CRS)

  • Protección contra vulnerabilidades OWASP Top 10
  • Inyección SQL, XSS, inclusión de archivos
  • Reglas generales para aplicaciones web

Known Bad Inputs

  • Bloquea patrones de ataque conocidos
  • Exploits comunes y técnicas de evasión
  • Firmas de malware y herramientas de hacking

Mejores prácticas

  • Comenzar en modo Count
  • Implementar gradualmente
  • Monitorear falsos positivos
  • Documentar configuraciones

Ventajas de las reglas gestionadas

  • Mantenimiento automático
  • Experiencia de expertos en seguridad
  • Implementación inmediata
  • Cobertura amplia de amenazas

Configuración de logging

  • Habilitar logs en Web ACL
  • Destino: CloudWatch Logs, S3, Kinesis
  • Formato JSON estructurado
  • Retención configurable

Hasta este punto todo puede ir perfecto en la configuración de WAF con solo un par de clicks al habilitar las reglas.

Desafíos al usar las reglas gestionadas por AWS.

Al usar reglas gestionadas por AWS pueden ocurrir problemas con el funcionamiento correcto de una aplicación por el bloqueo de tráfico legítimo debido a la complejidad de las diferentes aplicaciones y/o el uso de patrones no adecuados en el desarrollo de software, lo recomendable es validar con la acción contar antes del bloqueo y al activar las reglas de contar a bloqueo comenzar a monitorear la aplicación.

Aparecen los problemas ciertas opciones dentro del uso de la aplicación comienzan a fallar y todos te miran feo jaja

Solución

Identificar las reglas que ocasionaron problemas con la aplicación, analizar el request y los diferentes valores dentro del mismo como los métodos HTTP: GET, POST, PUT, DELETE, PATCH, etc. el URI/Path: La ruta del recurso solicitado el cuerpo del request en general, encontrar porque la regla administrada hizo match con el tráfico legítimo de la aplicación.
Revisar patrones de ataques recibidos
Revisar y revisar logs de tráfico.
Crear reglas personalizadas para comenzar a limpiar tráfico malicioso.

Configuración y Habilitación

La primera regla recomendada es regla basada en ip, esta regla me ayuda a bloquear o permitir tráfico, un caso de uso puede ser también configurar una lista blanca de direcciones ip para que tráfico legítimo de algún proceso no se vea afectado.

Antes de avanzar con la configuración de reglas personalizadas vamos a detallar qué son los WCU y qué impacto tienen en la facturación.

WCU en AWS WAF

Los WCU (Web ACL Capacity Units) son unidades de capacidad que miden la complejidad computacional de las reglas en AWS WAF.

¿Cómo funcionan?

Cada regla que añades a tu Web ACL consume una cantidad determinada de WCU según su complejidad:

  • Reglas simples: 1 WCU (ej: bloquear una IP específica)
  • Reglas con expresiones regulares: 3-10 WCU
  • Reglas de rate limiting: 2 WCU
  • Reglas administradas de AWS: varían (generalmente 10-50 WCU)
  • Reglas de grupos de terceros: pueden variar significativamente

Límites
Límite por defecto: 1,500 WCU por Web ACL
Puedes solicitar aumentos a AWS Support si necesitas más capacidad

Costos de AWS WAF

El modelo de precios incluye:

Web ACL: ~$5.00/mes por Web ACL
Reglas: ~$1.00/mes por regla
Requests: ~$0.60 por millón de requests

Nota importante sobre WCU y costos: Los WCU NO se cobran directamente. Son solo una medida de capacidad computacional para gestionar el límite de complejidad de tu Web ACL. Pagas por la cantidad de reglas y requests, no por los WCU consumidos.

La segunda regla recomendada es regla basada en tasas (rate based) ayuda a limitar la cantidad de request en una ventana específica de tiempo, para esto se puede analizar en promedio el tráfico que se recibe desde un cliente (IP) y analizar cuantos request por minuto envía, basado en un promedio se puede configurar por ejemplo 1000 request por minuto e ir evaluando el tráfico.
El request 1001 sera bloqueado automaticamente

Luego podemos ir agregando reglas basadas en ataques comunes, por ejemplo si las reglas administradas por aws no funcionan del todo se crean este tipo de reglas para limpiar tráfico malicioso.
Tienen opción de hacerlo directo en la consola o configurar en formato json.

Esta regla sirve para restringir peticiones comunes de ataques a servidores php wordpress entre otros.
Analiza por extensión de archivo .php o por texto dentro de la petición.

Parte fundamental para monitorear el trafico es la revisión de logs, pueden usar Data Firehose para luego ver con athena o enviar a cloudwatch grupo de logs o log groups y realizar sentencias SQL o Log Insights QL

En la configuración de la regla se activa el registro o log y se coloca como destino cloudwatch loggroups

Top IPs bloqueadas
sql
fields @timestamp, httpRequest.clientIp, action
| filter action = "BLOCK"
| stats count() by httpRequest.clientIp
| sort count desc
| limit 10

Análisis de reglas activadas
sql
fields @timestamp, terminatingRuleId, action
| filter action = "BLOCK"
| stats count() by terminatingRuleId
| sort count desc

Alertas recomendadas

Análisis de reglas activadas
sql
fields @timestamp, terminatingRuleId, action
| filter action = "BLOCK"
| stats count() by terminatingRuleId
| sort count desc

Top comments (0)