
Jogo de treinamento prático do AWS WAF com tutoriais, laboratórios pontuados e exames nos quais os jogadores escrevem regras de Web ACL para bloquear formatos reais de ataque, evitando falsos positivos.
Um jogo de treinamento prático para aprender AWS WAF defendendo-se contra ataques reais.
English | 日本語
Para administradores: como construir o ambiente, distribuí-lo aos participantes, executá-lo e limpá-lo está coberto no Guia do administrador (docs/ADMIN.md), e o material de apoio para os participantes é o Primeiros passos para jogadores (docs/PLAYER_GUIDE.md). Ambos os guias estão atualmente em japonês.
Um ambiente prático para aprender AWS WAF enquanto sob ataque.
Jogue sozinho ou compita com outros.

O fluxo desde a leitura do ataque e das etapas de um tutorial, até projetar uma regra em um laboratório de vulnerabilidades, lançar o ataque, revisar a pontuação e a resposta modelo, e finalmente abrir um concurso a partir da página de administração (cerca de 70 segundos). Uma versão de maior qualidade está em docs/demo-en.mp4.
Gravado em modo de desenvolvimento (
make dev), que pontua com a resposta modelo em vez de um 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). O CloudFront fica diretamente à frente da Lambda Function URL do app fictício em vez do ALB, então as regras do Web ACL do ALB não se aplicam ali. Defina enable_cloudfront = false para ignorá-lo.X-Forwarded-For (assume-se que o site fica atrás de um CDN).| ID | Tópico | O que você aprende |
|---|---|---|
| tutorial-1-sqli | Injeção de SQL | Grupos de regras gerenciadas |
| tutorial-2-xss | XSS no formulário de avaliação | Regras personalizadas (Rule builder), inspeção de corpo, transformações de texto |
| tutorial-3-ipset | IPs em uma lista de ameaças | IP sets, CIDR, X-Forwarded-For |
| tutorial-4-useragent | Scanners de vulnerabilidade | Correspondência de string em cabeçalhos, instruções OR, transformação para minúsculas |
| tutorial-5-ratelimit | Inundações a partir de um único IP | Regras baseadas em taxa, chaves de agregação |
| tutorial-6-ja4 | Um scraper se passando por navegador | Como as impressões digitais JA4 funcionam e como lê-las (a_b_c), correspondência exata de JA4, análise de logs do WAF |
| ID | Tópico | O que você aprende |
|---|---|---|
| game-1-fakebot | Um scraper se passando por Googlebot | Combinar AND / NOT (o UA diz Googlebot E o IP não é do Google) |
| game-2-admin | Acesso externo ao painel de administração | Condições de caminho de URI + lista de IPs permitidos, diferenciação de maiúsculas e minúsculas |
| game-3-traversal | Path traversal | Empilhar transformações de texto (decodificação dupla), evitar falsos positivos |
| game-4-cms | Uma regra de XSS que bloqueia seus editores | Criar exceções, prioridade de regras, revisitar regras existentes |
| game-5-bruteforce | Força bruta de login + NAT corporativo | Instruções de escopo reduzido, design de limites |
| game-6-ja4regex | Um exército de bots que fica ajustando seu JA4 + um parceiro usando a mesma biblioteca | Expressões regulares JA4 (capturando a parte b compartilhada), preparação para variantes não vistas, exceções com AND NOT |
As regras que você criou nos tutoriais permanecem no lugar, então no modo jogo elas às vezes causam falsos positivos (etapas 4 e 5). Você precisa revisitar as regras existentes, não apenas impedir novos ataques.
Cada desafio diz: "Uma nova vulnerabilidade foi divulgada. Ela pode ser bloqueada sob estas condições. Escreva a regra." O objetivo é ser capaz de escrever suas próprias regras sempre que uma nova vulnerabilidade aparecer. Após uma tentativa você pode ver o JSON da regra de resposta modelo (pronto para colar no editor Rule JSON do console) e uma explicação. Muitos desafios de Nível 2 e 3 também incluem uma regra de "armadilha comum" e por que ela falha.