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)