
WAF 기능 테스트를 위한 프로그램
엔터프라이즈 WAF 평가 도구 — 실제 공격 페이로드. 실제 결과. 규정 준수 보고서.
WAF Tester는 사용자가 제공한 URL에 실제 공격 페이로드를 전송하고 차단 여부를 보고하여 웹 애플리케이션 방화벽을 평가합니다. Windows 데스크톱 앱(Electron)과 어디서나 실행되는 Python CLI로 제공됩니다.

이 도구는 승인된 보안 테스트 전용입니다. 소유한 시스템 또는 명시적인 서면 허가를 받은 시스템에만 사용하십시오. 제3자 시스템에 대한 무단 테스트는 컴퓨터 사기 및 남용 법률(CFAA) 및 해당 관할권의 동등한 법률을 위반할 수 있습니다. 저자는 오용에 대한 어떠한 책임도 지지 않습니다.
| Suite | Tests | What It Covers |
|---|---|---|
| OWASP / CWE Core | 44 | SQL 인젝션 (12개 변종), XSS (10개 변종), 경로 탐색, 명령어 인젝션, XXE, SSRF, Log4Shell, SSTI, 오픈 리다이렉트 |
| Rate Limiting | 3 | 버스트 플러드 (30개 동시), 순차 플러드, X-Forwarded-For IP 로테이션 우회 |
| Bot Detection | 10 | sqlmap, Nikto, Nmap, Scrapy, Masscan, HeadlessChrome, python-requests, curl, 빈 UA, Accept 헤더 누락 |
| Bypass Attempts | 15 | 이중 URL 인코딩, 유니코드 전각, 널 바이트, 대소문자 변형, 주석 난독화, CRLF 인젝션, 호스트 헤더 인젝션, 메소드 오버라이드, 경로 트릭 |
| API Security | 10 | GraphQL 인트로스펙션/배치/열거, JWT none 알고리즘 및 알고리즘 혼동, 대량 할당, HTTP 메서드 변조, BOLA, Content-Type 혼동 |
| Business Logic | 8 | 음수 수량, 0원 제출, 관리자 엔드포인트 접근, HTTP 파라미터 오염, 계정 열거, 과도한 데이터 노출, 강제 브라우징, 권한 상승 |
모든 테스트는 하나 이상의 규정 준수 프레임워크에 태그되어 있습니다:
HIGH, LIKELY 또는 UNCERTAIN으로 평가됩니다.git clone https://github.com/kpomin57/waf-tester.git
cd waf-tester
npm install
npm start
npm run build
출력은 dist/에 NSIS 설치 프로그램과 포터블 .exe로 나타납니다. 대상 컴퓨터에는 사전 요구 사항이 필요하지 않습니다. Electron이 자체 런타임을 번들로 제공합니다.
Python이 가능한 모든 곳에서 실행되는 단일 파일 Python 버전 — Linux 서버, CI/CD 파이프라인, Docker 컨테이너, WSL 또는 Windows .exe를 사용할 수 없는 모든 환경.
pip install rich requests
python waf_tester.py --url https://target.example.com
90개 테스트를 모두 실행하고, 인증 확인을 요청하며, 색상 코딩된 결과를 터미널에 출력하고, JSON 및 HTML 보고서를 현재 디렉토리에 저장합니다.
# 모든 제품군 실행
python waf_tester.py --url https://app.example.com
# OWASP 및 API 제품군만 실행
python waf_tester.py --url https://app.example.com --suites owasp,api
# Bearer 토큰 인증
python waf_tester.py --url https://app.example.com/api \
--auth-type bearer --auth-value eyJhbGciOiJIUzI1NiJ9...
# API 키 인증
python waf_tester.py --url https://app.example.com/api \
--auth-type apikey --auth-header X-API-Key --auth-value mykey123
# 폴더에 보고서 저장, 확인 건너뛰기 (CI/CD)
python waf_tester.py --url https://app.example.com \
--output-dir ./reports --confirm
# 터미널 출력만 — 파일 저장 안 함
python waf_tester.py --url https://app.example.com --output terminal
# Burp Suite를 통한 트래픽 라우팅
python waf_tester.py --url https://app.example.com --proxy http://127.0.0.1:8080
docker run --rm -v $(pwd)/reports:/reports \
python:3.12-slim sh -c \
"pip install rich requests -q && python waf_tester.py \
--url https://target.example.com \
--output-dir /reports --confirm"
- name: WAF Evaluation
run: |
pip install rich requests
python waf_tester.py \
--url ${{ secrets.WAF_TARGET_URL }} \
--suites owasp,api,bypass \
--output json \
--output-dir ./reports \
--confirm
- name: Upload report
uses: actions/upload-artifact@v3
with:
name: waf-report
path: reports/
Python CLI는 모든 테스트 트래픽을 Burp Suite를 통해 라우팅하여 WAF Tester가 보내는 모든 페이로드의 전체 HTTP 기록을 제공합니다. 이 기능은 요청 및 응답의 수동 검사, 페이로드 미세 조정, 예상치 못한 WAF 동작 문제 해결, 흥미로운 결과에 Burp의 자체 스캐너 또는 리피터 사용에 유용합니다.
Burp Suite는 로컬 프록시 리스너(기본값 127.0.0.1:8080)를 실행합니다. WAF Tester의 프록시 환경 변수를 해당 주소로 지정하면 도구가 만드는 모든 요청이 대상에 도달하기 전에 Burp를 통과합니다. WAF가 본 것과 정확히 동일한 상태 코드, 헤더, 본문을 포함한 전체 요청 및 응답과 함께 각 페이로드를 Burp의 HTTP 기록에서 볼 수 있습니다.
1. Burp Suite를 시작하고 프록시 리스너가 활성 상태인지 확인:
Burp 열기 → 프록시 → 프록시 설정 → 리스너가 127.0.0.1:8080에 있는지 확인 (다른 포트인 경우 기록).
2. Burp의 CA 인증서를 내보내고 신뢰 (일회성 설정):
WAF Tester는 HTTPS 대상에 연결하므로 Burp가 TLS를 가로채야 합니다. Burp → 프록시 → 프록시 설정 → CA 인증서 가져오기/내보내기 → DER로 내보내기로 이동합니다. 시스템에서 신뢰할 수 있는 루트 CA로 설치하거나 아래 환경 변수를 설정하여 확인을 건너뜁니다(실험실 사용에는 적합하지만 프로덕션에는 적합하지 않음).
3. --proxy와 함께 WAF Tester 실행:
python waf_tester.py --url https://target.example.com --proxy http://127.0.0.1:8080
On Windows:
python waf_tester.py --url https://target.example.com --proxy http://127.0.0.1:8080
환경 변수를 계속 사용할 수도 있습니다:
HTTPS_PROXY=http://127.0.0.1:8080 HTTP_PROXY=http://127.0.0.1:8080 \
python waf_tester.py --url https://target.example.com
4. Burp의 인터셉션 끄기:
Burp → 프록시 → 인터셉트에서 인터셉션이 꺼져 있는지 확인하십시오. 그렇지 않으면 Burp가 모든 요청에서 일시 중지되어 수동으로 전달할 때까지 기다리며 WAF Tester가 시간 초과됩니다. Burp가 트래픽을 가로채지 않고 수동으로 기록하기를 원합니다.
5. Burp의 HTTP 기록에 요청이 도착하는지 확인:
각 WAF Tester 페이로드는 별도의 항목으로 나타납니다. 아무 요청이나 마우스 오른쪽 버튼으로 클릭하여 Repeater로 보내 수동으로 조정하고 다시 보내거나 Intruder로 보내 추가 퍼징을 할 수 있습니다.
Burp CA 인증서가 신뢰되지 않는 경우 도구에서 SSL 확인을 일시적으로 비활성화하여 --no-verify 해결 방법을 추가합니다. 또는 시스템 전체에 Burp CA 인증서를 신뢰하거나 초기 테스트를 위해 HTTP(HTTPS 아님) 대상을 사용합니다.
신뢰도 수준:
HIGH — 모호함이 없는 강력한 차단 상태 (403, 406, 429)LIKELY — 응답 본문에 WAF 키워드가 있거나 기준과 상태가 다름UNCERTAIN — 합법적인 앱 오류일 수 있는 소프트 차단 (400, 503)# Juice Shop (WAF 없음 — 모두 우회 예상)
docker run -d -p 3000:3000 bkimminich/juice-shop
# ModSecurity with OWASP CRS (대부분 차단 예상)
docker run -d -p 80:80 owasp/modsecurity-crs:nginx
waf-tester/
├── src/
│ ├── main.js # Electron 메인 프로세스 — 모든 테스트 로직 및 IPC
│ ├── preload.js # 보안 컨텍스트 브리지
│ └── renderer/
│ ├── index.html # 앱 셸
│ ├── styles.css # 다크 밀리터리/SOC UI 테마
│ └── app.js # UI 로직, 필터, 라이브 피드, 내보내기
├── waf_tester.py # Python CLI — 단일 파일, 설정 불필요
├── package.json
└── README.md
waf_tester.py) 추가 — 단일 파일, 어디서나 실행MIT — 자세한 내용은 LICENSE를 참조하세요.
체크리스트 규정 준수를 넘어서는 WAF 검증이 필요한 보안 엔지니어를 위해 제작되었습니다.
| Flag | Description | Default |
|---|
--url | 대상 URL (필수) | — |
--suites | 실행할 쉼표로 구분된 제품군 | all |
--auth-type | none / bearer / apikey / cookie / basic | none |
--auth-value | 토큰, 쿠키 문자열 또는 API 키 값 | — |
--auth-header | API 키 인증을 위한 헤더 이름 | X-API-Key |
--auth-user | 기본 인증을 위한 사용자 이름 | — |
--auth-pass | 기본 인증을 위한 비밀번호 | — |
--no-baseline | 기준 비교 비활성화 | off |
--no-rotate-ua | User-Agent 로테이션 비활성화 | off |
--waf-header | X-WAF-Tester 식별 헤더 전송 | off |
--output | terminal, json, html (comma-separated) | 모두 |
--output-dir | 보고서 파일 저장 디렉토리 | . |
--timeout | 요청당 제한 시간(초) | 10 |
--proxy | 모든 요청에 대한 프록시 URL (예: http://127.0.0.1:8080) | off |
--confirm | 인증 확인 프롬프트 건너뛰기 | off |
| Score | Grade | Meaning |
|---|
| 90–100% | A | 우수 — WAF가 거의 모든 공격 벡터를 차단함 |
| 80–89% | B | 좋음 — 조사할 가치가 있는 사소한 격차 |
| 65–79% | C | 보통 — 눈에 띄는 우회 벡터 존재 |
| 50–64% | D | 나쁨 — 상당한 보호 격차 |
| < 50% | F | 심각 — WAF가 대체로 비효과적 |