
Juego de entrenamiento práctico de AWS WAF con tutoriales, laboratorios puntuados y exámenes en los que los jugadores escriben reglas de Web ACL para bloquear formas de ataque reales mientras evitan falsos positivos.
Un juego de entrenamiento práctico para aprender AWS WAF defendiéndose de ataques reales.
English | 日本語
Para administradores: cómo construir el entorno, distribuirlo a los participantes, ejecutarlo y limpiarlo se cubre en la Guía del administrador (docs/ADMIN.md), y el material para los participantes es Primeros pasos para jugadores (docs/PLAYER_GUIDE.md). Ambas guías están actualmente en japonés.
Un entorno práctico para aprender AWS WAF mientras se está bajo ataque.
Juega en solitario o compite con otros.

El flujo desde leer el ataque y los pasos de un tutorial, hasta diseñar una regla en un laboratorio de vulnerabilidades, lanzar el ataque, revisar la puntuación y la respuesta modelo, y finalmente abrir un concurso desde la página de administración (unos 70 segundos). Hay una versión de mayor calidad en docs/demo-en.mp4.
Grabado en modo de desarrollo (
make dev), que puntúa con la respuesta modelo en lugar de con un AWS WAF real.
┌───────────────────── per player ──────────────────┐
Browser ── Lambda Function URL (gameapi: UI + API) │
│ async invoke │
▼ │
Lambda (trafficgen) ── HTTPS ─▶ ALB ◀── Web ACL (edited by the player)
│ │ │
│ ▼ │
│ Lambda (targetapp: dummy online shop) │
▼ └────────────────────────────────────┘
DynamoDB (runs, best scores, locks)
wafdojo-<name>-cf, us-east-1). CloudFront se sitúa directamente delante de la Lambda Function URL de la aplicación ficticia en lugar del ALB, por lo que las reglas de la Web ACL del ALB no se aplican allí. Establece enable_cloudfront = false para omitirlo.X-Forwarded-For (se asume que el sitio está detrás de una CDN).| ID | Tema | Lo que aprendes |
|---|---|---|
| tutorial-1-sqli | Inyección SQL | Grupos de reglas administrados |
| tutorial-2-xss | XSS en el formulario de reseñas | Reglas personalizadas (Rule builder), inspección del cuerpo, transformaciones de texto |
| tutorial-3-ipset | IPs en una lista de amenazas | Conjuntos de IP, CIDR, X-Forwarded-For |
| tutorial-4-useragent | Escáneres de vulnerabilidades | Coincidencia de cadenas en encabezados, sentencias OR, transformación a minúsculas |
| tutorial-5-ratelimit | Inundaciones desde una única IP | Reglas basadas en tasa, claves de agregación |
| tutorial-6-ja4 | Un scraper que se hace pasar por un navegador | Cómo funcionan las huellas JA4 y cómo leerlas (a_b_c), coincidencia exacta de JA4, análisis de registros del WAF |
| ID | Tema | Lo que aprendes |
|---|---|---|
| game-1-fakebot | Un scraper que se hace pasar por Googlebot | Combinar AND / NOT (el UA dice Googlebot Y la IP no es de Google) |
| game-2-admin | Acceso externo al panel de administración | Condiciones de ruta URI + lista de IP permitidas, sensibilidad a mayúsculas y minúsculas |
| game-3-traversal | Path traversal | Apilar transformaciones de texto (doble decodificación), evitar falsos positivos |
| game-4-cms | Una regla XSS que bloquea a tus editores | Crear excepciones, prioridad de reglas, revisar reglas existentes |
| game-5-bruteforce | Fuerza bruta de inicio de sesión + NAT corporativo | Sentencias de acotación (scope-down), diseño de umbrales |
| game-6-ja4regex | Un ejército de bots que no deja de modificar su JA4 + un socio que usa la misma biblioteca | Expresiones regulares de JA4 (capturar la parte b compartida), prepararse para variantes no vistas, excepciones con AND NOT |
Las reglas que creaste en los tutoriales permanecen activas, por lo que en el modo juego a veces provocan falsos positivos (etapas 4 y 5). Necesitas revisar las reglas existentes, no solo detener nuevos ataques.
Cada desafío dice: "Ha salido una nueva vulnerabilidad. Se puede bloquear bajo estas condiciones. Escribe la regla." El objetivo es poder escribir tus propias reglas cada vez que aparezca una nueva vulnerabilidad. Tras un intento puedes ver el JSON de la regla de respuesta modelo (listo para pegar en el editor Rule JSON de la consola) y una explicación. Muchos desafíos de nivel 2 y 3 también incluyen una regla de "error común" y por qué falla.