본문 바로가기

클라우드 네이티브 WAF 정책 튜닝: 오탐은 줄이고 방어는 그대로

라이프 by A Sentio 2025. 9. 25.

목차

    클라우드 환경에서 웹 애플리케이션 방화벽(WAF)을 운영하다 보면 가장 큰 고민은 단연 오탐(False Positive)입니다. 보안을 강화하려다 정상적인 사용자까지 차단하는 일은 비즈니스에 직접적인 타격을 주니까요. 그렇다고 규칙을 무작정 비활성화하면 L7 방어 효과가 떨어져 딜레마에 빠지게 됩니다.

    이 문제의 핵심 해결책은 바로 '지속적인 튜닝'에 있습니다. 이 글에서는 실제 운영 관점에서 클라우드 네이티브 WAF(AWS WAF, Cloudflare WAF 등) 정책을 효과적으로 튜닝하는 절차와 사례를 구체적으로 다룹니다. 핵심은 다음과 같은 반복적인 사이클입니다.

    Count 모드 적용 → 레이블 기반 예외 처리 → 속도 기반 규칙 정교화 → 점진적 차단 전환

    이 가이드를 통해 오탐은 최소화하면서 강력한 L7 보안을 유지하는 방법을 알아보세요.

    1. 모든 튜닝의 시작: 관리형 규칙과 'Count' 모드

    WAF 정책 튜닝의 첫걸음은 새로운 규칙을 절대 바로 '차단(Block)' 모드로 적용하지 않는 것입니다. 항상 '카운트(Count)' 모드를 먼저 사용해 정책이 실제 트래픽에 미치는 영향을 분석해야 합니다.

    • Count 모드로 안전하게 검증: 신규 규칙이나 업데이트를 적용할 때, Count 모드는 트래픽을 차단하지 않으면서 어떤 요청이 규칙에 탐지되는지 로그와 지표로만 기록합니다. 이를 통해 어떤 레이블이 얼마나 자주 발생하는지 파악한 후 안전하게 차단 모드로 전환할 수 있습니다.
    • 레이블(Label) 활용: 최신 WAF는 탐지된 요청에 특정 '레이블'을 붙여줍니다. 예를 들어 AWS WAF는 awswaf:managed:aws:core-rule-set:SQLi_Body와 같은 세분화된 레이블을 제공합니다. 이 레이블은 오탐의 원인이 되는 특정 서브 규칙을 정확히 식별하고, 해당 규칙만 예외 처리하는 데 결정적인 역할을 합니다. (AWS WAF의 웹 요청 레이블링 자세히 보기)

    Cloudflare WAF 역시 관리형 규칙과 사용자 지정 규칙을 함께 사용하며, Attack Score와 같은 최신 탐지 기술로 오탐과 미탐 사이의 균형을 맞춥니다.

    2. 정교한 공격 방어: 속도 기반(Rate-Based) 규칙 튜닝

    단순히 많은 요청을 보내는 디도스(DDoS) 공격이나 무차별 대입 공격을 막기 위해 속도 기반 규칙은 필수입니다. 하지만 임계값을 잘못 설정하면 정상적인 사용자가 차단될 수 있어 정교한 튜닝이 필요합니다.

    임계값 설정 방법

    차단 임계값은 비즈니스 특성에 맞춰 설정해야 합니다. 로그인, 검색 API 등 주요 경로의 정상적인 분당/5분당 요청량(TPS)을 측정한 후, p95~p99 값을 기준 임계값으로 설정하는 것이 좋습니다.

    집계 키(Key) 정교화

    기본적으로 IP 주소 단위로 요청을 집계하지만, 이는 공유 오피스나 모바일 환경에서 오탐을 유발할 수 있습니다. 더 정교한 제어를 위해 커스텀 키를 조합하세요.

    • 로그인 경로: IP 주소 + User-ID 헤더 조합으로 특정 계정의 과도한 시도를 탐지
    • 검색 API: IP 주소 + URI 경로 조합으로 특정 경로에 대한 비정상적 트래픽을 제어
    • AWS WAF: 커스텀 키를 조합하면 더 정밀하게 공격을 묶을 수 있습니다. 단, 키가 추가될수록 WCU(WAF Capacity Unit)가 증가하여 비용이 늘어날 수 있다는 점을 유의해야 합니다. (AWS WAF 속도 기반 규칙 설명)
    • Cloudflare WAF: 새로운 레이트 리미팅 엔진은 ‘동일한 특성(With the same characteristics)’을 기준으로 키를 지정하여 캐시 또는 오리진 서버 기준으로 유연하게 설정할 수 있습니다. (Cloudflare Rate Limiting 파라미터)

    3. 오탐 줄이기의 핵심: 정밀한 예외 처리

    오탐이 발생했을 때 규칙 전체를 비활성화하는 것은 최악의 선택입니다. 대신, 문제가 되는 특정 서브 규칙의 레이블만 조건부로 제외하는 것이 바람직합니다.

    다음과 같은 절차를 따르세요.

    1. 원인 식별: WAF 로그에서 오탐을 유발한 요청과 해당 요청에 붙은 레이블을 확인합니다.
    2. 좁은 범위 예외 추가: 해당 레이블이 탐지되더라도, 특정 조건에서는 예외 처리하는 규칙을 추가합니다. 예를 들어 관리자 페이지(starts_with(path,"/admin"))나 특정 IP 대역에서 오는 요청은 허용하는 방식입니다.
    3. 예외 규칙 회수: 이벤트나 특정 작업이 종료되면 임시로 추가했던 예외 규칙은 다시 제거하여 보안 공백을 최소화합니다.

    4. CDN/프록시 환경에서의 원본 IP 처리

    CloudFront나 여러 프록시 뒤에 WAF가 있다면, 사용자의 실제 IP를 정확히 식별하는 것이 중요합니다.

    • AWS WAF: X-Forwarded-For와 같은 헤더를 전달된 IP(Forwarded IP)로 명시적으로 설정하여 WAF가 실제 클라이언트 IP를 기준으로 규칙을 평가하도록 해야 합니다. 잘못된 헤더 값에 대비한 대체 동작(Fallback) 설정도 가능합니다. (AWS WAF의 Forwarded IP 주소 사용 가이드)
    • Cloudflare: 오리진 서버에는 CF-Connecting-IP 헤더로 실제 사용자 IP를 전달합니다. X-Forwarded-For 헤더가 없는 경우, Cloudflare가 CF-Connecting-IP 값으로 채워주므로 원본 식별에 활용할 수 있습니다.
    • 운영 팁: 여러 프록시를 거치는 환경에서는 신뢰할 수 있는 프록시 IP 목록을 정의하고, 그 외의 소스에서 온 X-Forwarded-For 헤더는 신뢰하지 않도록 설정하여 IP 스푸핑 공격을 방지해야 합니다.

    5. 실전 튜닝 워크플로우: 체크리스트와 롤백 계획

    안전하고 체계적인 WAF 정책 배포를 위해 다음 체크리스트를 따르세요.

    1. 스테이징 환경 적용: 변경 사항을 운영 환경에 적용하기 전, 스테이징 환경에서 먼저 테스트합니다.
    2. Count 모드로 데이터 수집: 운영 환경에 배포 시 최소 24~72시간 동안 Count 모드로 운영하며 로그와 지표를 수집합니다.
    3. 레이블 기반 예외 처리: 수집된 데이터를 분석하여 오탐을 유발하는 레이블을 식별하고, 정밀한 예외 규칙을 추가합니다.
    4. 임계값 조정: 속도 기반 규칙의 임계값이 너무 낮거나 높지 않은지 확인하고 조정합니다.
    5. 점진적 차단 전환: 카나리 배포 방식으로 일부 트래픽에만 차단 모드를 적용하고, 문제가 없으면 점진적으로 전체 트래픽으로 확대합니다.
    6. 롤백 계획 문서화: 문제 발생 시 즉시 이전 버전으로 되돌릴 수 있도록 롤백 절차를 명확히 문서화하고, 레이블 기반 예외 규칙을 임시 비활성화할 수 있는 토글 기능을 마련해두는 것이 좋습니다.

    심화 고려사항: 비용, 성능, 그리고 멀티 리전

    비용 및 성능 지표

    WAF 운영 시 다음 지표를 꾸준히 모니터링해야 합니다.

    • 주요 지표: 요청당 처리 지연 시간(p95), 차단율, 오탐율(비즈니스 지표 연계), WCU 사용량, 로깅 및 데이터 전송 비용
    • 간단 비용 계산식:
      월 실효 비용 = (총요청 수 × 규칙 평가 비용) + 튜닝 운영 인력 비용 − (오탐 감소로 인한 매출 손실 절감액)

    멀티 리전 배포

    • CloudFront (글로벌): WAF 정책은 Global(us-east-1) 리전에 생성되며, 전 세계 엣지 로케이션에서 동작합니다.
    • ALB/API Gateway (리전): 리전별 서비스에는 각 리전에 맞는 WAF 정책이 필요하며, 멀티 리전 환경에서는 정책 동기화 전략이 중요합니다.
    • 원점(Origin) 보호: CDN을 우회하여 원점 서버로 직접 들어오는 공격을 막기 위해, 원점 서버에는 CDN 전용 보안 그룹이나 서명된 요청만 허용하는 설정을 추가하는 것이 좋습니다.

    WAF 규칙 유형별 튜닝 포인트 비교

    구분 목적 장점 오탐 위험 튜닝 포인트 비용
    관리형 규칙 OWASP Top10 등 알려진 공격 방어 신속한 자동 업데이트 중간 (일부 규칙이 민감) 레이블 기반 예외, 스코프다운 규칙 평가 기반 과금
    사용자 정의 규칙 애플리케이션 특화 규칙 정밀한 제어 설계 오류 시 높음 패턴/경로/메서드 정합성 검증 개발 및 운영 시간
    속도 기반 규칙 트래픽 폭주 및 DoS 완화 간단하고 효과적 키/임계값 부정확 시 높음 집계 키 정교화, 임계값 조정 WCU 증가 (키 조합)
    봇 관리 악성 봇 및 스크래핑 차단 정상 사용자 경험 보호 튜닝 미흡 시 CAPTCHA 과다 평판 및 행위 점수 기반 임계값 플랜 또는 옵션 비용

    자주 묻는 질문 (FAQ)

    Q1. 속도 기반 규칙의 집계 키는 어떻게 정하는 것이 가장 좋나요?
    A. 처음에는 기본값인 IP 주소로 시작하세요. 이후 로그인이나 검색처럼 민감한 경로는 IP + Path 또는 IP + Method로, 특정 계정의 남용을 막고 싶다면 User-ID 헤더와 같은 커스텀 키로 전환하는 것이 효과적입니다. 단, 과도한 키 조합은 WCU를 증가시켜 비용이 상승할 수 있음을 유의해야 합니다.

    Q2. CDN 뒤에 서버가 있어 실제 사용자 IP를 알 수 없습니다. 어떻게 하죠?
    A. AWS WAF에서는 X-Forwarded-For 헤더를 Forwarded IP로 사용하도록 설정하세요. Cloudflare는 CF-Connecting-IP 헤더를 통해 실제 사용자 IP를 오리진 서버에 전달해주므로, 애플리케이션 단에서 이 헤더를 참조하면 됩니다.

    Q3. 오탐이 발생했을 때 가장 안전한 완화 절차는 무엇인가요?
    A. 다음 단계를 따르는 것이 좋습니다.
    1. 해당 규칙을 즉시 Count 모드로 전환합니다.
    2. 로그를 분석해 오탐을 유발한 레이블과 특정 경로를 확인하고, 해당 조건만 예외 처리합니다.
    3. 필요한 경우 속도 기반 규칙의 임계값을 상향 조정합니다.
    4. 충분히 모니터링한 후 다시 차단 모드로 복귀합니다.

    Q4. 악성 봇과 정상 사용자는 어떻게 구분하나요?
    A. IP 평판, 브라우저 지문, 행위 기반 점수(예: Cloudflare Attack Score)와 속도 기반 규칙(세션 쿠키, User-Agent 등 활용)을 조합하여 의심스러운 요청에만 CAPTCHA와 같은 챌린지를 적용하는 방식이 효과적입니다.

    Q5. 정책 변경 후 얼마나 오랫동안 테스트해야 하나요?
    A. 비즈니스 트래픽의 변동성을 고려해 최소 24~72시간 동안 Count 모드로 관찰한 후 점진적으로 차단 모드로 전환하는 것을 권장합니다. 규칙별 트리거 수치와 함께, 오탐으로 인한 회원가입/결제 실패율과 같은 비즈니스 지표를 함께 모니터링하는 것이 중요합니다.


    관련 자료 및 내부 참조

    면책 문구: 본 글에 포함된 정책 및 요금 정보는 변경될 수 있으며, 실제 적용 사례는 환경에 따라 다를 수 있습니다. 항상 최신 공식 문서를 확인하시기 바랍니다.

    공식 출처

    • 트위터 공유하기
    • 페이스북 공유하기
    • 카카오톡 공유하기