Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
waf-dojo — 튜토리얼, 점수 기반 실습, 시험으로 구성된 실습형 AWS WAF 훈련 게임으로, 플레이어가 오탐을 피하면서 실제 공격 형태를 차단하는 Web ACL 규칙을 작성합니다. | Kitploit
도구/GitHubGitHub/nishikawaakira/waf-dojo
Defensive ToolsVulnerability AnalysisWeb Application ExploitationWAF BypassWeb SecurityCTFCloud SecurityLearning & EducationLearning Paths & CoursesLabs & Practice
GitHubnishikawaakira/waf-dojo
18431일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

waf-dojo

튜토리얼, 점수 기반 실습, 시험으로 구성된 실습형 AWS WAF 훈련 게임으로, 플레이어가 오탐을 피하면서 실제 공격 형태를 차단하는 Web ACL 규칙을 작성합니다.

저장소 보기

WAF Dojo

실제 공격을 방어하며 AWS WAF를 배우는 실습형 트레이닝 게임입니다.

English | 日本語

관리자용: 환경 구축 방법, 참가자에게 배포하는 방법, 운영 및 정리 방법은 관리자 가이드 (docs/ADMIN.md)에 다루고 있으며, 참가자용 배포 자료는 플레이어 시작 가이드 (docs/PLAYER_GUIDE.md)에 있습니다. 두 가이드 모두 현재 일본어로 제공됩니다.

공격을 받는 상황에서 AWS WAF를 배우기 위한 실습 환경입니다.

  1. 튜토리얼: 화면에 들어오는 공격이 어떤 모습인지(샘플 요청)와 단계별 설정 안내가 표시됩니다. 안내를 따라가며 Web ACL을 구성합니다.
  2. 게임 모드: 튜토리얼을 클리어하면 해금됩니다. 공격의 개요만 주어지며, 직접 규칙을 설계해 공격을 막아야 합니다.
  3. 점수: 차단한 공격 수와 실수로 차단한 일반 사용자 수를 기준으로 점수가 매겨지며, 결과는 리더보드에 등록됩니다.

혼자 플레이하거나 다른 사람과 경쟁할 수 있습니다.

데모

WAF Dojo demo

튜토리얼의 공격과 단계를 읽고, 취약점 랩에서 규칙을 설계하고, 공격을 실행하고, 점수와 모범 답안을 확인한 뒤, 마지막으로 관리자 페이지에서 콘테스트를 여는 흐름(약 70초)입니다. 고화질 버전은 docs/demo-en.mp4에 있습니다.

실제 AWS WAF 대신 모범 답안으로 채점하는 개발 모드(make dev)에서 녹화되었습니다.

아키텍처

                    ┌───────────────────── 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)
  • targetapp: 모든 요청에 200을 반환하는 더미 앱으로, 4xx가 발생하면 WAF가 차단한 것이다.
  • trafficgen: 시나리오에 따라 공격 요청과 일반 사용자 요청을 섞어 보낸 뒤 결과를 채점한다. Terraform으로 구성된 플레이어 자신의 ALB로만 전송한다. uTLS를 사용해 브라우저(Chrome / Firefox / Safari)와 공격 도구에 대해 서로 다른 TLS ClientHello를 생성하므로, JA4 지문으로 이들을 구별하는 연습을 할 수 있다.
  • gameapi: Lambda Function URL에서 제공되는 게임 UI 및 API.
  • ALB는 Web ACL을 하나만 가질 수 있으므로, 각 플레이어는 자신만의 ALB와 Web ACL을 갖는다.
  • CloudFront의 본문 검사 한도(기본 16 KB, 최대 64 KB)를 경험하기 위해, 각 플레이어는 CloudFront 배포와 CloudFront 범위의 Web ACL(wafdojo-<name>-cf, us-east-1)도 갖는다. CloudFront는 ALB가 아닌 더미 앱의 Lambda Function URL을 직접 앞단에서 처리하므로, ALB의 Web ACL 규칙은 여기에 적용되지 않는다. 이를 건너뛰려면 enable_cloudfront = false로 설정한다.
  • JA4는 HTTPS에서만 계산되므로, ALB는 HTTPS(443)에서 수신한다. 도메인 없이 동작하기 위해 자체 서명 인증서를 생성하여 ACM으로 가져온다(개인 키는 Terraform state에 남는다).
  • 소스 IP는 X-Forwarded-For의 문서용 주소(RFC 5737)로 표현된다(사이트가 CDN 뒤에 있다고 가정한다).

시나리오

튜토리얼 (단계 포함, 모두 클리어하면 게임 잠금 해제)

ID주제배우는 내용
tutorial-1-sqliSQL 인젝션관리형 규칙 그룹
tutorial-2-xss리뷰 양식의 XSS사용자 지정 규칙(Rule builder), 본문 검사, 텍스트 변환
tutorial-3-ipset위협 목록에 있는 IPIP 집합, CIDR, X-Forwarded-For
tutorial-4-useragent취약점 스캐너헤더 문자열 매칭, OR 문, 소문자 변환
tutorial-5-ratelimit단일 IP로부터의 플러드속도 기반 규칙, 집계 키
tutorial-6-ja4브라우저로 위장한 스크레이퍼JA4 지문의 동작 방식과 읽는 법(a_b_c), 정확한 JA4 매칭, WAF 로그 분석

게임 모드 (단계 없음, 응용 기술)

ID주제배우는 내용
game-1-fakebotGooglebot으로 위장한 스크레이퍼AND / NOT 조합(UA가 Googlebot이고 IP가 Google의 것이 아님)
game-2-admin관리자 패널에 대한 외부 접근URI 경로 조건 + IP 허용 목록, 대소문자 구분
game-3-traversal경로 순회텍스트 변환 중첩(이중 디코딩), 오탐 방지
game-4-cms편집자를 차단하는 XSS 규칙예외 구성, 규칙 우선순위, 기존 규칙 재검토
game-5-bruteforce로그인 무차별 대입 + 기업 NAT범위 축소 문, 임계값 설계
game-6-ja4regexJA4를 계속 바꾸는 봇 군단 + 같은 라이브러리를 쓰는 파트너JA4 정규식(공유되는 b 부분 포착), 미지의 변형 대비, AND NOT을 사용한 예외

튜토리얼에서 만든 규칙은 그대로 유지되므로, 게임 모드에서는 때때로 오탐을 일으킨다(스테이지 4와 5). 새로운 공격을 막는 것뿐 아니라 기존 규칙을 재검토해야 한다.

취약점 랩 (41개 챌린지, 단계 없음)

각 챌린지는 다음과 같이 시작한다. "새로운 취약점이 나왔다. 다음 조건에서 차단할 수 있다. 규칙을 작성하라." 목표는 새로운 취약점이 나타날 때마다 스스로 규칙을 작성할 수 있게 되는 것이다. 한 번 시도하면 모범 답안 규칙 JSON(콘솔의 Rule JSON 편집기에 바로 붙여넣을 수 있음)과 해설을 볼 수 있다. 많은 Level 2 및 3 챌린지에는 "흔한 함정" 규칙과 그것이 실패하는 이유도 포함되어 있다.

레벨내용챌린지
레벨 1: 권고문 따르기무엇을 검사할지, 어떻게 매칭할지, 정확한 문자열까지 명시한 지침을 정밀한 규칙으로 변환Log4Shell, Spring4Shell, Shellshock, Confluence OGNL, F5 BIG-IP iControl REST, Next.js 미들웨어 우회, Apache HTTP Server 경로 순회, Text4Shell, Metabase GeoJSON (CVE-2021-41277), ProxyLogon (CVE-2021-26855), Confluence Velocity (CVE-2023-22527)
레벨 2: 권고문을 WAF로 변환산문 형태의 조건으로부터 검사 대상 컴포넌트, 변환, 매칭 유형을 직접 선택PHP-CGI (CVE-2024-4577), Citrix ADC, FortiOS SSL-VPN, WebLogic 콘솔, Confluence 설정, Spring Cloud Function, Struts 2 S2-045, vCenter vROps, XXE, GraphQL 인트로스펙션, ProxyNotShell, CRLF 인젝션, X-Original-URL, F5 BIG-IP TMUI (CVE-2020-5902), TeamCity (CVE-2024-27198)
레벨 3: PoC로부터 도출하기완화 지침 없음. 공격의 본질을 찾아내고 두 가지 변형과 오탐 모두에 대비난독화된 Log4Shell, SSRF (메타데이터), SSTI, OS 명령 인젝션, 프로토타입 오염, 오픈 리다이렉트, 파일 업로드, PAN-OS GlobalProtect (CVE-2024-3400), 원본 권고문 읽기: Ivanti Connect Secure (CVE-2023-46805 / CVE-2024-21887), GitLab (CVE-2023-7028)
레벨 4: 관리형 규칙과 WAF의 한계관리형 규칙이 정상 트래픽을 차단할 때 보호를 유지하면서 수정 (규칙별 Count 재정의 + 레이블 매칭). 본문 검사 한도와 같은 WAF 자체의 한계에 대비핵심 규칙 세트 SizeRestrictions_BODY (대용량 업로드), NoUserAgent_HEADER (IoT 기기), GenericRFI_QUERYARGUMENTS (내부 웹훅 도구), 8 KB 벽 (본문 검사 한도와 초과 크기 처리, ALB에서는 8 KB로 고정), CloudFront의 16 KB 벽을 64 KB로 확장 (플레이어 자신의 CloudFront에서 직접 경험)

챌린지가 길러주는 것:

  • 공격의 본질 보기 (PoC에서 눈에 띄는 부분이 아니라 공격이 없으면 안 되는 부분을 겨냥하기)
  • 검사 대상 선택 (URI 경로 / 쿼리 / 특정 파라미터 / 특정 헤더 / 모든 헤더 / 본문)
  • 정규화 (중첩 URL 디코딩, 소문자화, NORMALIZE_PATH, JS_DECODE)
  • 매칭 유형 (starts-with, 정규식, 크기를 통한 헤더 존재 여부, 허용 목록)
  • 벤더 완화책 이식 (예: AWS WAF 정규식은 lookahead를 지원하지 않음)
  • 오탐 방지 (모든 챌린지에는 __typename, /mgmt-news, ${name} 같은 유사한 정상 트래픽이 포함됨)

공격 요청은 실제 공격의 형태를 무해하게 재현한 것이며, 모든 외부 목적지는 attacker.example과 같은 예약 도메인을 사용합니다.

모범 답안에 대한 품질 보증

  • go test ./...는 46개 랩, 시험, 운영 챌린지의 모범 답안이 모든 공격을 차단하고 정상 요청은 차단하지 않는지 확인합니다 (internal/wafrule의 평가기가 AWS WAF의 매칭을 로컬에서 재현).
  • 또한 각 흔한 함정 규칙이 실제로 공격을 통과시키거나 오탐을 일으키는지도 확인합니다.
  • 모범 답안과 함정 규칙의 JSON은 AWS WAF CheckCapacity API로 구문 검사를 마쳤습니다.
  • 실제 AWS (ALB + WAF)에서 모든 챌린지가 규칙 없이 공격을 통과시키고 모범 답안으로 100점을 받는 것을 확인했습니다. ALB는 한 번 디코딩한 후 사이트 루트 위로 올라가는 경로를 WAF보다 먼저 400으로 거부하므로, 테스트에서도 그런 경로가 사용되지 않도록 확인합니다. 재확인하려면 (리소스는 생성되지 않음):
mkdir -p /tmp/rules && WAFDY_EXPORT_RULES=/tmp/rules go test -run TestExportLabRules ./internal/scenario/
for f in /tmp/rules/*.json; do aws wafv2 check-capacity --scope REGIONAL --cli-binary-format raw-in-base64-out --rules file://$f; done

Level 4에서 사용되는 Core 규칙 세트만으로도 700 WCU를 소비합니다. 실습 모델 답안은 합계 약 1,000 WCU에 달하며, 이는 튜토리얼 및 게임 규칙과 함께 Web ACL 한도(기본값 1,500 WCU)에 근접합니다. 이미 숙달한 챌린지의 규칙을 삭제해도 기록은 유지됩니다.

Level 4 관리형 규칙은 AWS가 공개한 규칙 설명을 바탕으로 평가기에서 재현한 것입니다(실제 내용은 공개되지 않으므로 정확한 재현은 아닙니다). 규칙 및 레이블 이름은 AWS의 DescribeManagedRuleGroup API를 통해 실제 이름과 대조하여 확인했습니다.

운영 훈련 (2개 챌린지, 정찰 포함)

실제 운영과 마찬가지로 먼저 Count 규칙으로 "정찰"(점수 미반영)을 수행하고 WAF 로그를 분석한 뒤 실제 실행에 들어갑니다.

챌린지내용
오탐 원인 찾기로그에서 XSS 규칙을 트리거하는 정상 트래픽(파트너의 이메일 템플릿 동기화)을 찾아 예외를 설정합니다. 정상 트래픽은 화면에 표시되지 않습니다
로그에서 봇 식별하기Logs Insights에서 /login 요청을 집계하여 크리덴셜 스터핑 봇의 JA4를 찾습니다. JA4는 화면에 표시되지 않습니다

시험 (3개 챌린지, 공격 세부 정보 및 모델 답안 비공개)

아직 보지 못한 실습 공격의 변형을 전송하는 테스트입니다. 실습 모델 답안을 복사하는 것만으로는 통과할 수 없습니다.

챌린지내용
Log4Shell 변형중첩, 이중 인코딩, JSON 이스케이프를 사용하여 헤더, 쿼리, 본문 어디든 Log4Shell 삽입
경로 순회 대장정경로, 쿼리, 쿠키, JSON에서 Linux 및 Windows 스타일의 다양한 인코딩을 사용한 순회
닫혀 있어야 할 문대문자, 중복 슬래시, ../ 우회, ;, 인코딩을 통한 .git, .env, actuator 등에 대한 접근

게임 요소

도구 다운로드