
Практическая обучающая игра по AWS WAF с руководствами, оцениваемыми лабораторными работами и экзаменами, в которых игроки пишут правила Web ACL, чтобы блокировать реальные шаблоны атак, избегая ложных срабатываний.
Практическая обучающая игра для изучения AWS WAF через защиту от реальных атак.
English | 日本語
Для администраторов: как развернуть окружение, выдать его участникам, провести игру и выполнить очистку, описано в руководстве администратора (docs/ADMIN.md), а раздаточный материал для участников — это Начало работы для игроков (docs/PLAYER_GUIDE.md). Оба руководства в настоящее время на японском языке.
Практическое окружение для изучения AWS WAF прямо во время атаки.
Играйте в одиночку или соревнуйтесь с другими.

Процесс от чтения атаки и шагов учебника до разработки правила в лаборатории уязвимостей, запуска атаки, просмотра очков и эталонного ответа и, наконец, открытия конкурса со страницы администратора (около 70 секунд). Версия более высокого качества доступна по адресу docs/demo-en.mp4.
Записано в режиме разработки (
make dev), который оценивает по эталонному ответу вместо реального 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 стоит напрямую перед Lambda Function URL фиктивного приложения, а не перед ALB, поэтому правила Web ACL для ALB там не применяются. Установите enable_cloudfront = false, чтобы пропустить это.X-Forwarded-For (предполагается, что сайт находится за CDN).| ID | Тема | Что вы узнаете |
|---|---|---|
| tutorial-1-sqli | SQL-инъекция | Управляемые группы правил |
| tutorial-2-xss | XSS в форме отзыва | Пользовательские правила (Rule builder), проверка тела запроса, текстовые преобразования |
| tutorial-3-ipset | IP-адреса из списка угроз | IP-наборы, CIDR, X-Forwarded-For |
| tutorial-4-useragent | Сканеры уязвимостей | Сопоставление строк в заголовках, операторы OR, преобразование в нижний регистр |
| tutorial-5-ratelimit | Флуд с одного IP | Правила на основе частоты запросов, ключи агрегации |
| tutorial-6-ja4 | Скрапер, выдающий себя за браузер | Как работают отпечатки JA4 и как их читать (a_b_c), точное совпадение JA4, анализ журналов WAF |
| ID | Тема | Что вы узнаете |
|---|---|---|
| game-1-fakebot | Скрапер, выдающий себя за Googlebot | Комбинирование AND / NOT (UA говорит Googlebot, И IP не принадлежит Google) |
| game-2-admin | Внешний доступ к панели администратора | Условия на путь URI + список разрешённых IP, чувствительность к регистру |
| game-3-traversal | Обход пути (path traversal) | Наложение текстовых преобразований (двойное декодирование), избегание ложных срабатываний |
| game-4-cms | Правило XSS, блокирующее ваших редакторов | Создание исключений, приоритет правил, пересмотр существующих правил |
| game-5-bruteforce | Брутфорс логина + корпоративный NAT | Операторы scope-down, проектирование порогов |
| game-6-ja4regex | Армия ботов, постоянно меняющая свой JA4 + партнёр, использующий ту же библиотеку | Регулярные выражения JA4 (перехват общей части b), подготовка к невиданным вариантам, исключения с AND NOT |
Правила, созданные вами в обучающих заданиях, остаются на месте, поэтому в игровом режиме они иногда вызывают ложные срабатывания (этапы 4 и 5). Вам нужно пересматривать существующие правила, а не только останавливать новые атаки.
Каждое испытание гласит: «Появилась новая уязвимость. Её можно заблокировать при следующих условиях. Напишите правило». Цель — научиться писать собственные правила всякий раз, когда появляется новая уязвимость. После одной попытки вы можете увидеть JSON эталонного правила (готовый для вставки в редактор Rule JSON консоли) и объяснение. Многие испытания уровня 2 и 3 также включают правило «типичная ошибка» и объяснение, почему оно не работает.