WAF(Web Application Firewall)는 HTTP/HTTPS 트래픽을 검사해 SQL 인젝션, XSS, CSRF 등 웹 애플리케이션 공격을 탐지·차단하는 보안 솔루션이다.
WAF 배포 유형
| 유형 | 특징 | 예시 |
|---|
| 네트워크 WAF | 하드웨어, 고성능, 낮은 지연 | F5 BIG-IP ASM |
| 호스트 WAF | 서버에 설치, 유연한 설정 | ModSecurity, NAXSI |
| 클라우드 WAF | SaaS, 설치 불필요 | Cloudflare, AWS WAF |
| 인라인 WAF | 트래픽 직접 차단 | 대부분 |
| 아웃오브밴드 WAF | 미러 트래픽 분석, 차단 불가 | 탐지 전용 |
OWASP ModSecurity CRS 규칙 예시
apache
# ModSecurity + OWASP Core Rule Set (CRS)
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
# SQL Injection 탐지 (CRS 규칙 예시)
SecRule ARGS "@detectSQLi" "id:942100, phase:2, block, msg:'SQL Injection Attack Detected', logdata:'Matched Data: %{MATCHED_VAR} found within %{MATCHED_VAR_NAME}', tag:'OWASP_CRS/WEB_ATTACK/SQL_INJECTION', severity:'CRITICAL'"
# XSS 탐지
SecRule ARGS "@detectXSS" "id:941100, phase:2, block, msg:'XSS Attack Detected'"
hcl
resource "aws_wafv2_web_acl" "main" {
name = "production-waf"
scope = "REGIONAL"
default_action { allow {} }
# AWS 관리형 규칙: 일반 위협
rule {
name = "AWSManagedRulesCommonRuleSet"
priority = 1
override_action { none {} }
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "CommonRuleSet"
sampled_requests_enabled = true
}
}
# 속도 제한 (Rate Limiting)
rule {
name = "RateLimit"
priority = 2
action { block {} }
statement {
rate_based_statement {
limit = 2000 # 5분간 IP당 최대 요청
aggregate_key_type = "IP"
}
}
visibility_config { ... }
}
}
WAF 우회 기법과 대응
우회 기법:
- 인코딩 변형: URL 인코딩, Unicode, Base64
(%27 → ' / ' → ')
- 대소문자 혼용: sElEcT * fRoM users
- 주석 삽입: SELECT/**/password/**/FROM users
- HTTP 파라미터 오염(HPP): ?id=1&id=1 UNION SELECT
대응:
- 정규화(Normalization) 후 검사
- 다층 디코딩 처리
- 양/음성 로직 병행 (허용목록 + 차단목록)
- 행동 기반 분석 (ML WAF)
관련 문서
- •[[dlp|DLP (데이터 유출 방지)]]
- •[[soar|SOAR]]
- •[[vulnerability-management|취약점 관리]]