Web Application Firewall y protección contra ataques
Resumen breve
WAF/WAAP filtra y controla el tráfico HTTP (S )/WebSocket a nivel de aplicación: bloquea la explotación de vulnerabilidades (OWASP Top 10), intentos de elusión de autenticación, análisis, tráfico bot automatizado y L7 DAAP DoS. La pila moderna se complementa con un motor anti-bot, protección API, rate limiting, parches virtuales, así como una estrecha integración con CI/CD para que las reglas se enrollen con la misma seguridad que el código.
Roles y espacio en la arquitectura
Edge/CDN WAF (nube): baja latencia, reputación global/Managed Rules, L7 DDoS.
Self-hosted WAF (on-prem/K8s): integración profunda con redes internas, configuración fina.
Enfoque WAAP: WAF + API-Gateway funciones (schema-validation, authZ), anti-bot, L7 DoS, mTLS.
Esquemas de inclusión: Reverse-proxy antes de la aplicación; Controlador de Ingress en K8s; Filtros Service Mesh; sidecar.
Modelo
Seguridad negativa (firmas/CRS): cobertura rápida de técnicas conocidas (SQLi/XSS/SSRF/RCE).
Seguridad positiva (allow-list): sólo permitimos consultas «válidas» (métodos/rutas/esquemas/tipos de contenido).
Virtual Patching: bloqueo en línea de exploit a código de fix.
Contexto: diferentes políticas para contenido estático, API, almirante, descargas, webhooks.
Amenazas y medidas modelo
OWASP Top 10: SQLi, XSS, IDOR/BOLA, SSRF, inyecciones en los patrones, deserialización, misconfigs.
L7 DDoS: consultas/encabezados lentos, burst en endpoints calientes → protección: rate-limits, challenge, auto-block.
Bots/scrapers: comportamiento, frecuencia, patrones «no humanos», device-fingerprinting, tokens dinámicos.
Credential Stuffing/ATO: interceptación/sobrecarga de inicio de sesión → anomalía por IP/ASN, velocidad de reglas, factores adicionales.
Descargas: tipo/tamaño/multi-scan por antivirus, «image-only» en los medios de comunicación.
API/GraphQL: schema-validation, 'maxDepth '/' maxCost', prohibición de comodines sin nombre, control de métodos y encabezados.
Formuladores de directivas y reglas
Un «esqueleto» básico para cualquier aplicación:1. Transporte: TLS 1. 2+/1. 3, HSTS, mTLS en backends sensibles.
2. Métodos: allow-list ('GET, POST, PUT, DELETE, PATCH, OPTIONS') es único en el recurso.
3. Caminos: máscaras/regexpas estrictas; admin/facturación - en un prefijo/dominio separado.
4. Encabezados: listas blancas, prohibición de peligrosos ('X-Original-URL', no estándar) sin necesidad.
5. Cuerpos: JSON-only/Multipart-only a lo largo de la ruta; límites 'Content-Length', bloque de binarios en 'login/search'.
6. Rate limits: per-IP/ASN/clave/organización; límites individuales a las solicitudes «caras».
7. Anti-bot: puntuación conductual, desafíos «no molestos», pegamento de identidades (cookies, JA3/TLS FP).
8. CRS/Managed Rules: activado, ajuste bajo FP.
9. Parches virtuales: bloqueo rápido de parámetros/patrones de ataque conocidos.
10. Registros/métricas: formato único, correlación con 'trace _ id', informes FP/TP.
Práctica de afinación: cómo reducir los falsos positivos
Ejecute las nuevas reglas en el modo Aprot-only/Count-mode (shadow) con una muestra de tráfico.
Crear excepciones por contexto ('path =/search', 'param = q' permitir simuladores especiales).
Dividir zona: «páginas públicas» vs «operaciones sensibles» (el umbral de agresividad es diferente).
Transportador: regla → estaging → canario (1-5%) → prod; rollback en métricas FP.
Mantener un directorio de payload «falso» para pruebas de regresión.
Integración en DevSecOps
CI: reglas estáticas en Git; pruebas: réplica de consultas reales + sintética del catálogo de ataques.
CD: carteles canarios, banderas de los fiches; supervisión «política» (cambio de reglas = cambio).
RASP y SAST/DAST: WAF complementa, pero no reemplaza, la corrección de código.
Observabilidad y SLO
Métricas:- p95/99 latencia a través de WAF; Porcentaje de bloqueados/omitidos; share Managed Rules vs custom; «attack rate».
- Anti-bot: fracción de desafío/entrega, FP/TP.
- L7 DDoS: burst-rate, auto-mitigation events.
- "No más de 0. 5% FP para operaciones autorizadas/día".
- «p95 overhead WAF ≤ 10 мс».
- «TTR parche virtual ≤ 30 minutos».
- Alarmas: ráfaga de 4xx/5xx después de la liberación de las reglas; crecimiento de FP; caída del paso del capch; degradación de la validación JWKS/mTLS.
Ejemplos de configuración
ModSecurity + OWASP CRS (Nginx)
nginx
Enabling ModSecurity modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main. conf;
`/etc/nginx/modsec/main. conf`:
apache
SecRuleEngine On
Include /usr/local/owasp-modsecurity-crs/crs-setup. conf
Include /usr/local/owasp-modsecurity-crs/rules/.conf
Example of an exception for a search parameter
SecRule REQUEST_URI "@beginsWith /search" "id:900100,phase:1,pass,nolog,ctl:ruleRemoveByTag=attack-xss"
SecRule REQUEST_URI "@beginsWith /search" "id:900101,phase:2,pass,ctl:ruleRemoveTargetById=942100; ARGS:q"
AWS WAF (JSON, rate limit + lista de países)
json
{
"Name": "prod-web-acl",
"Scope": "CLOUDFRONT",
"DefaultAction": { "Allow": {} },
"Rules": [
{
"Name": "BurstLogin",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": { "ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
"PositionalConstraint": "CONTAINS"
}}
}
},
"Action": { "Block": {} },
"VisibilityConfig": { "MetricName": "BurstLogin", "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true }
}
]
}
Cloudflare (Expression Rules)
(http. request. uri. path contains "/admin" and ip. geoip. country ne "UA")
or (http. request. uri. path eq "/login" and cf. threat_score > 10)
or (http. request. uri. path contains "/api" and not http. request. headers["authorization"][0] contains "Bearer ")
NGINX: regla simple sobre métodos/cuerpos
nginx location /api/withdraw {
limit_except POST { deny all; }
if ($request_method = POST) {
set $cl $http_content_length;
if ($ cl = "") {return 411;} # length is required if ($ cl> 1048576) {return 413;} # ≤ 1MB add_header X-Idempotency-Required "true";
}
}
GraphQL: Limitadores
'maxDepth = 6', 'maxCost = 1000', prohibición de '__ schema' en ventas, operaciones allow-list, validación de encabezados ('Content-Type: application/json').
Controles anti-bot y humanos
Desafío invisible (JS-challenge sin capchi), proof-of-work en caminos «caros», análisis de comportamiento (movimientos/tiempos).
TLS/JA3-fingerprinting, reputación IP/ASN, listas proxy/VPN (dentro de límites razonables).
Trampas (campos de honeypot) en formularios, tokens dinámicos de formulario/sesión.
Protección de la privacidad: minimización del seguimiento, políticas transparentes, opciones opt-out.
Enfoque API
Schema-first: OpenAPI/JSON Schema para validación; Prohibición de campos superfluos.
Auth: necesariamente Bearer JWT o mTLS; reject без `Authorization`.
Rate/Quota: per-key/per-org; cuando se excede - «soft block «/slowing.
Webhooks: firma HMAC, 'timestamp + nonce', ventana de recepción corta.
GraphQL: ver los limitadores anteriores; loguear el nombre/etiqueta de la operación.
Descargas y medios
Límite de tamaño, mitelistas MIME/extensiones, cambio de nombre de archivo;
AV-scan (multi-motor), ImageMagick policy (sin descodificadores peligrosos);
Servicio de thumb en un dominio independiente, solo imágenes de servidor.
Seguridad de Almirantes y Zonas Críticas
Dominio/ruta independiente, mTLS/prohibición con ASN/países compartidos, límites de rate rígidos, accesos JIT, lista IP allow.
Las señales adicionales (device posture, risk score) → requerir una segunda verificación.
Operaciones, incidentes y parches virtuales
Runbook: liberación rápida de reglas de bloque, restricción TTL, notificación de comandos.
Criterios de retroceso: crecimiento 4xx/5xx> umbral, FP> umbral, p95 latency↑.
Post-mortem: agregar una prueba a un conjunto de reglas de regresión, fijar una alerta SIGMA en SIEM.
Cumplimiento y privacidad
Lógica mínimo: ruta/método/código/causa del bloque/identificadores; no almacenar PII/secretos del cuerpo.
Períodos de retención de registros de políticas; Acceso - por funciones; cifrado en disco.
Características para iGaming/fintech
Pagos/pagos/billeteras: cuotas per-org, mTLS a PSP, hojas de rutas de allow estrictas, HMAC para webhooks PSP.
ATO/bonus abuse: reglas de velocity en login/registro/códigos promocionales, límites de comportamiento y anti-bot.
Proveedores de contenido/estudios: Dominios/políticas individuales, Lista allow IP/ASN, monitoreo de Time-to-Wallet/conversiones en el impacto de WAF.
Requisitos regionales: políticas geográficas (países/regiones), transparencia de los tratamientos para el RGPD.
Hoja de ruta de implementación
1. Inventario de zonas (públicas, API, administración, descargas).
2. Perfil básico: TLS, allow-list, Managed Rules/CRS.
3. Rate limits + anti-bot en rutas sensibles.
4. Parches virtuales y proceso de reglas urgentes (SLA ≤ 30 min).
5. CI/CD para reglas, stage/canario/shadow-mode.
6. Telemetría, SLO, pruebas de regresión de reglas.
7. Revisión periódica de las excepciones y «limpieza» de las rondas.
Errores típicos
«Incluyeron todos los CRS al máximo» → la avalancha de FP y el agotamiento del equipo.
Reglas sin canario y modo shadow.
Falta de segmentación: una política para todo.
Ignora las características específicas de la API/GraphQL (schema/limits).
Registros sin correlación ('trace _ id') y sin métricas de calidad.
FAQ
¿WAF reemplaza el código seguro?
No. Es una capa de mitigación y un «parche virtual», pero es obligatorio eliminar la deuda técnica en el código.
¿Cómo entender que es hora de incluir bloques duros?
Cuando el informe de modo shadow muestra una FP baja y hay pruebas de regresión de reglas.
¿Necesita una WAF separada para la API?
Mejor integración WAAP/con gateway API: esquema, límites, autenticación, firmas de webhooks.
Resultado
Un WAF/WAAP eficiente es una combinación de CRS/Managed Rules básicos, modelo positivo, anti-bot, límites y parches virtuales, respaldados por procesos DevSecOps, telemetría y SLO claros. Este enfoque proporciona una respuesta rápida a vulnerabilidades, resistencia a ataques automatizados y un impacto predecible en UX y performance.