
Jeu d'entraînement pratique AWS WAF avec tutoriels, laboratoires notés et examens où les joueurs rédigent des règles Web ACL pour bloquer de vraies formes d'attaque tout en évitant les faux positifs.
Un jeu d'entraînement pratique pour apprendre AWS WAF en défendant contre de véritables attaques.
English | 日本語
Pour les administrateurs : la procédure de création de l'environnement, de distribution aux participants, d'exécution et de nettoyage est décrite dans le Guide d'administration (docs/ADMIN.md), et le document remis aux participants est Premiers pas pour les joueurs (docs/PLAYER_GUIDE.md). Les deux guides sont actuellement en japonais.
Un environnement pratique pour apprendre AWS WAF en pleine attaque.
Jouez en solo ou affrontez d'autres joueurs.

Le déroulé, depuis la lecture de l'attaque et des étapes d'un tutoriel, jusqu'à la conception d'une règle dans un laboratoire de vulnérabilités, le lancement de l'attaque, la consultation du score et de la réponse modèle, et enfin l'ouverture d'un concours depuis la page d'administration (environ 70 secondes). Une version de meilleure qualité est disponible à l'adresse docs/demo-en.mp4.
Enregistré en mode développement (
make dev), qui calcule le score avec la réponse modèle au lieu d'un véritable AWS WAF.
┌───────────────────── 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 place directement devant la Lambda Function URL de l'application factice plutôt que devant l'ALB, donc les règles du Web ACL de l'ALB ne s'y appliquent pas. Définissez enable_cloudfront = false pour l'ignorer.X-Forwarded-For (on suppose que le site se trouve derrière un CDN).| ID | Sujet | Ce que vous apprenez |
|---|---|---|
| tutorial-1-sqli | Injection SQL | Groupes de règles managées |
| tutorial-2-xss | XSS dans le formulaire d'avis | Règles personnalisées (Rule builder), inspection du corps, transformations de texte |
| tutorial-3-ipset | IP figurant sur une liste de menaces | Ensembles d'IP, CIDR, X-Forwarded-For |
| tutorial-4-useragent | Scanners de vulnérabilités | Correspondance de chaînes sur les en-têtes, instructions OR, transformation en minuscules |
| tutorial-5-ratelimit | Rafales depuis une seule IP | Règles basées sur le débit, clés d'agrégation |
| tutorial-6-ja4 | Un scraper se faisant passer pour un navigateur | Comment fonctionnent les empreintes JA4 et comment les lire (a_b_c), correspondance JA4 exacte, analyse des journaux WAF |
| ID | Sujet | Ce que vous apprenez |
|---|---|---|
| game-1-fakebot | Un scraper se faisant passer pour Googlebot | Combiner AND / NOT (l'UA indique Googlebot ET l'IP n'est pas celle de Google) |
| game-2-admin | Accès externe au panneau d'administration | Conditions sur le chemin URI + liste d'IP autorisées, sensibilité à la casse |
| game-3-traversal | Path traversal | Empiler les transformations de texte (double décodage), éviter les faux positifs |
| game-4-cms | Une règle XSS qui bloque vos éditeurs | Créer des exceptions, priorité des règles, revoir les règles existantes |
| game-5-bruteforce | Force brute sur la connexion + NAT d'entreprise | Instructions de portée (scope-down), conception des seuils |
| game-6-ja4regex | Une armée de bots qui modifie sans cesse son JA4 + un partenaire utilisant la même bibliothèque | Expressions régulières JA4 (cibler la partie b commune), se préparer aux variantes inédites, exceptions avec AND NOT |
Les règles que vous avez créées dans les tutoriels restent en place, donc en mode jeu elles provoquent parfois des faux positifs (étapes 4 et 5). Vous devez revoir les règles existantes, pas seulement arrêter de nouvelles attaques.
Chaque défi se lit ainsi : « Une nouvelle vulnérabilité est sortie. Elle peut être bloquée sous ces conditions. Écrivez la règle. » L'objectif est de pouvoir écrire vos propres règles dès qu'une nouvelle vulnérabilité apparaît. Après une tentative, vous pouvez voir le JSON de la règle de correction (prêt à coller dans l'éditeur Rule JSON de la console) et une explication. De nombreux défis de niveau 2 et 3 incluent également une règle « piège courant » et la raison de son échec.