웹 애플리케이션 방화벽 및 공격 방지
간략한 요약
WAF/WAAP 필터링 및 응용 프로그램 수준에서 HTP (S )/웹 소켓 트래픽을 제어합니다. 취약점 악용 차단 (OWASP Top 10), 인증, 스캔, 자동화 된 봇 트래픽 및 L7 DDoS를 우회하려는 시도. 최신 스택은 안티 봇 엔진, API 보호, 속도 제한, 가상 패치 및 CI/CD와의 긴밀한 통합으로 보완되어 규칙이 코드만큼 안전하게 배포됩니다.
아키텍처의 역할 및 장소
Edge/CNC WAF (클라우드): 낮은 대기 시간, 글로벌 평판/관리 규칙, L7 DDoS.
자체 호스팅 WAF (on-prem/K8): 내부 네트워크와의 깊은 통합, 미세 조정.
WAAP 접근 방식: WAF + API-Gateway 함수 (스키마 유효성 검사, autZ), 안티 봇, L7 DoS, mTLS.
포함 체계: 신청 전 역 프록시; K8의 침입 컨트롤러; 서비스 메시 필터; 사이드카.
보호 모델
네거티브 보안 (서명/CRS): 알려진 기술의 빠른 범위 (SQLi/XSS/SSRF/RCE).
긍정적 인 보안 (허용 목록): "유효한" 요청 (메소드/경로/스키마/컨텐츠 유형) 만 허용하십시오.
가상 패치: 코드 수정에 대한 익스플로잇의 온라인 차단.
맥락: 정적 컨텐츠, API, 관리자, 다운로드, 웹 후크에 대한 다양한 정책.
전형적인 위협 및 조치
OWASP Top 10: SQLi, XSS, IDOR/BOLA, SSRF, 템플릿 주사, 사막화, 오해.
L7 DDoS: 느린 요청/헤더, 핫 엔드 포인트 버스트 → 보호: 속도 제한, 챌린지, 자동 차단.
봇/스크레이퍼: 동작, 주파수, "비인간적 인" 패턴, 장치 지문, 동적 토큰.
Credential Stuffing/ATO: IP/ASN에 의한 로그인의 차단/열거, 속도 규칙, 추가 요인.
다운로드: 미디어 영역에서 유형/크기/멀티 스캔 안티 바이러스, "이미지 전용".
API/GraphQL: 스키마 검증, 'maxDepth '/' maxCost', 처벌되지 않은 와일드 카드 금지, 메소드 및 헤더 제어.
정책 및 규칙 설계자
모든 응용 프로그램의 기본 골격:1. 전송: TLS 1. 2+/1. 3, HSTS, 민감한 백엔드의 mTLS.
2. 방법: 허용 목록 ('GET, POST, PUT, DELETE, PATCH, OPTIONS') 은 리소스 당 고유합니다.
3. 경로: 엄격한 마스크/regexps; 관리자/청구-별도의 접두사/도메인으로.
4. 헤더: 흰색 목록, 위험 금지 ('X-Original-IM', 비표준) 불필요하게.
5. 시체: 경로를 따라 JSON 전용/멀티 파트 전용; "로그인/검색" 에 대한 바이너리 블록 인 '콘텐츠 길이' 를 제한합니다.
6. 요율 제한: IP/ASN/키/조직 당; "비싼" 요청에 대한 별도의 제한.
7. 봇 방지: 행동 점수, "자극적이지 않은" 도전 과제, 접착 아이덴티티 (쿠키 토큰, FP JA3/SL).
8. CRS/관리 규칙: 활성화, FP 하에서 튜닝.
9. Wirth 패치: 알려진 매개 변수/공격 패턴의 빠른 차단.
10. 로그/메트릭: 균일 한 형식, 'trace _ id' 와의 상관 관계, FP/TP 보고서.
튜닝 연습: 오 탐지를 줄이는 방법
트래픽 샘플링으로 탐지 전용/카운트 모드 (그림자) 에서 새로운 규칙을 실행하십시오.
문맥에 따라 예외를 만듭니다 ('경로 =/검색', 'param = q' 는 특수 문자를 허용).
영역을 나눕니다: "공개 페이지" 대 "민감한 작업" (공격성의 임계 값이 다름).
Conveyor: 규칙 → 준비 → 카나리아 (1-5%) → prod; FP 메트릭에 의한 롤백.
회귀 테스트를 위해 "거짓" 페이로드 디렉토리를 유지하십시오.
DevSecOps에 통합
CI: Git의 정적 규칙; 테스트: 공격 디렉토리에서 실제 요청 + 합성을 재생합니다.
CD: 카나리아 계산, 기능 플래그; "정치적" 모니터링 (규칙 변경 = 변경).
RASP 및 SAST/DAST: WAF 보충제이지만 코드 수정을 대체하지는 않습니다.
관찰 가능성 및 SLO
메트릭:- WAF를 통한 p95/99 대기 시간; 차단/누락의 비율; 관리 규칙 대 사용자 정의 공유; "공격 속도".
- 봇 방지: 도전 과제/변경, FP/TP 공유.
- L7 DDoS: 버스트 속도, 자동 완화 이벤트.
- "0을 넘지 않습니다. 승인 된 운영/일에 5% FP. "
- "p95 오버 헤드 WAF
- "가상 패치 TTR 약 30 분".
- 경고: 규칙 릴리스 후 4xx/5xx 스파이크; FP 성장; captcha 통로의 하락; JWKS/mSL 유효성 저하.
샘플 구성
ModSecurity + OWASP CRS (Nginx)
nginx
Enabling ModSecurity modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main. conf;
'/등/nginx/modsec/main. (PHP 3 = 30
apache
SecRuleEngine On
Include /usr/local/owasp-modsecurity-crs/crs-setup. conf
Include /usr/local/owasp-modsecurity-crs/rules/.conf
Example of an exception for a search parameter
SecRule REQUEST_URI "@beginsWith /search" "id:900100,phase:1,pass,nolog,ctl:ruleRemoveByTag=attack-xss"
SecRule REQUEST_URI "@beginsWith /search" "id:900101,phase:2,pass,ctl:ruleRemoveTargetById=942100; ARGS:q"
AWS WAF (JSON, 요율 제한 + 국가 목록 블록)
json
{
"Name": "prod-web-acl",
"Scope": "CLOUDFRONT",
"DefaultAction": { "Allow": {} },
"Rules": [
{
"Name": "BurstLogin",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": { "ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Priority": 0, "Type": "NONE" }],
"PositionalConstraint": "CONTAINS"
}}
}
},
"Action": { "Block": {} },
"VisibilityConfig": { "MetricName": "BurstLogin", "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true }
}
]
}
Cloudflare (표현 규칙)
(http. request. uri. path contains "/admin" and ip. geoip. country ne "UA")
or (http. request. uri. path eq "/login" and cf. threat_score > 10)
or (http. request. uri. path contains "/api" and not http. request. headers["authorization"][0] contains "Bearer ")
NGINX: 간단한 방법/신체 규칙
nginx location /api/withdraw {
limit_except POST { deny all; }
if ($request_method = POST) {
set $cl $http_content_length;
if ($ cl = "") {return 411;} # length is required if ($ cl> 1048576) {return 413;} # ≤ 1MB add_header X-Idempotency-Required "true";
}
}
GraphQL: 경찰관
'maxDepth = 6', 'maxCost = 1000', 판매시 '_ _ schima' 금지, 운영 허용 목록, 헤더 검증 ('Content-Type: Application/json').
안티 봇 및 인간 친화적 인 점검
보이지 않는 도전 (captcha가없는 JS 도전), "비싼" 경로에 대한 작업 증명, 행동 분석 (움직임/타이밍).
TLS/JA3 지문, IP/ASN 평판, 프록시/VPN 목록 (합리적인 한도 내에서).
형태의 트랩 (허니팟 필드), 동적 양식/세션 토큰.
개인 정보 보호: 추적, 투명 정책, 옵션 아웃 옵션 최소화.
포커스 API
스키마 우선: 검증을위한 OpenAPI/JSON 스키마; 여분의 필드 금지.
Auth: 필수 무기명 JWT 또는 mTLS; '승인' 을 거부합니다.
평가/쿼터: 키 당/조직 당; 초과하면 - "소프트 블록 "/느림.
웹 후크: HMAC 서명, '타임 스탬프 + nonce', 짧은 수신 창.
GraphQL: 위의 리미터를 참조하십시오. 작업의 이름/레이블을 기록하십시오.
다운로드 및 미디어
크기 제한, 화이트리스트/확장, 파일 이름 변경;
AV 스캔 (다중 엔진), ImageMagick 정책 (위험한 디코더없이);
별도의 도메인, 서비스 전용 이미지에 대한 엄지 서비스.
관리자 및 중요 영역의 안전
별도의 도메인/경로, 일반적인 ASN/국가에서 mSL/금지, 하드 레이트 제한, JIT 액세스, IP 허용 목록.
추가 신호 (장치 자세, 위험 점수) → 두 번째 점검이 필요합니다.
운영, 사건 및 가상 패치
런북: 블록 규칙의 빠른 릴리스, TTL 제한, 명령 알림.
롤백 기준: 성장 4xx/5xx> 임계 값, FP> 임계 값, p95 대기 시간
사후: 회귀 규칙 세트에 테스트를 추가하고 SIEM에 SIMA 경고를 전달하십시오.
준수 및 개인 정보 보호
로그 최소값: 경로/방법/코드/블록 이유/식별자; PII/신체 비밀을 저장하지 마십시오.
정책 로그 보유 기간; 역할 별 액세스; 디스크의 암호화.
iGaming/fintech의 기능
지불/지불/지갑: 조직당 할당량, PSP에 대한 mTLS, 엄격한 경로 허용 목록, PSP 웹 후크 용 HMAC.
ATO/보너스 남용: 로그인/등록/판촉 코드, 행동 제한 및 안티 봇에 대한 속도 규칙.
콘텐츠 제공 업체/스튜디오: 개별 도메인/정책, IP/ASN 허용 목록, WAF 영향에 대한 Time-to-Wallet 모니터링/변환.
지역 요구 사항: 지구 정책 (국가/지역), GDPR의 치료 투명성.
구현 로드맵
1. 영역 인벤토리 (공개, API, 관리자 패널, 다운로드).
2. 기본 프로필: TLS, 허용 목록 방법/경로, 관리 규칙/CRS.
3. 민감한 경로에 대한 속도 제한 + 봇 방지.
4. 가상 패치 및 긴급한 규칙 프로세스 (SLA λ30 분).
5. 규칙, 준비/카나리아/그림자 모드에 대한 CI/CD.
6. 원격 측정, SLO, 규칙의 회귀 테스트.
7. 예외에 대한 정기적 인 검토 및 바이 패스의 "청소".
일반적인 실수
"모든 CRS를 최대로 켰습니다" → FP 눈사태와 팀 소진.
카나리아 및 섀도우 모드가없는 규칙.
세분화 없음: 모든 것에 대한 하나의 정책.
API/GraphQL 세부 사항을 무시합니다 (스키마/제한).
상관 관계가없고 ('trace _ id') 품질 지표가없는 로그.
FAQ
WAF가 보안 코드를 대체합니까?
아니요, 그렇지 않습니다. 이것은 완화 계층과 "가상 패치" 이지만 코드의 기술 부채는 제거해야합니다.
하드 블록을 켜야한다는 것을 이해하는 방법?
섀도우 모드 보고서에 FP가 낮고 규칙에 대한 회귀 테스트가있을 때.
API에 별도의 WAF가 필요합니까?
API 게이트웨이와의 더 나은 WAAP/통합: 체계, 제한, 인증, 웹 후크 서명.
합계
효율적인 WAF/WAAP는 DevSecOps 프로세스, 원격 측정 및 명확한 SLO가 지원하는 기본 CRS/관리 규칙, 양성 모델, 봇 방지, 한계 및 가상 패치의 조합입니다. 이 방법은 취약점에 대한 빠른 대응, 자동화 된 공격에 대한 저항, UX 및 성능에 대한 예측 가능한 영향을 제공합니다.