최근 웹 애플리케이션 보안의 복잡성이 증가함에 따라 Cloudflare의 WAF(Web Application Firewall)와 같은 보안 솔루션의 역할이 더욱 중요해지고 있습니다. 하지만 수백만 건의 요청을 처리하는 과정에서 발생하는 오탐(False Positive)은 불가피한 과제입니다. Cloudflare는 이러한 문제를 해결하고 정밀한 규칙 튜닝을 지원하기 위해 '페이로드 로깅(Payload Logging)' 기술을 도입했습니다.
WAF의 규칙이 왜 특정 요청을 차단했는지 정확히 알 수 없다면, 보안 아키텍트는 블랙박스 안에서 싸우는 것과 같습니다.
Cloudflare의 WAF는 Managed Rules, Custom Rules, Rate Limiting 등 다양한 도구를 통해 Layer 7 공격을 방어합니다. 이 엔진은 Rulesets 엔진 위에서 작동하며, 표현식(Expression)이 일치할 때 특정 액션을 수행합니다. 하지만 복잡한 OR 연산이나 Base64 디코딩, URL 디코딩과 같은 변환 로직이 포함된 경우, 어떤 부분에서 매칭이 발생했는지 파악하기 매우 어렵습니다.
페이로드 로깅의 근간은 Cloudflare가 공개한 오픈소스 필터링 엔진인 Wirefilter입니다. 이 엔진은 Rust로 작성되었으며, 추상 구문 트리(AST)를 컴파일하는 Trait을 구현합니다.
- 재평가(Re-evaluation): 규칙 엔진이 True를 반환하면, 실행 컨텍스트가 페이로드 로깅 컴파일러로 전달되어 재평가됩니다.
- 데이터 구조:
Map<Field, Value>형태로 로그가 생성되어, 변환 후의 실제 값과 매칭된 필드를 정확히 매핑합니다. - 보안 및 프라이버시: 고객의 퍼블릭 키로 암호화되어 저장되므로, Cloudflare 내부에서도 원본 데이터를 열람할 수 없습니다.
암호화된 로그는 Logpush를 통해 고객의 인프라나 Cloudflare Workers로 전달됩니다. 고객은 전용 CLI 툴이나 Worker를 통해 자신의 프라이빗 키로 로그를 복호화하여 보안 이벤트를 정밀 분석할 수 있습니다.
아키텍트의 분석 (Architect's Analysis)
이번 페이로드 로깅 업데이트는 단순한 기능 추가 이상의 의미를 갖습니다. 기술적 관점에서 주목해야 할 포인트는 세 가지입니다.
첫째, Rust 언어의 선택이 주는 이점입니다.Wirefilter 엔진이 Rust로 구현된 것은 성능과 안전성 사이의 완벽한 균형을 보여줍니다. AST 파싱과 런타임 재평가는 메모리 안전성이 보장되어야 하며, 초당 수백만 개의 요청을 처리하는 엣지 환경에서 오버헤드를 최소화해야 합니다. Rust는 이러한 고성능 저수준 제어에 최적화된 선택입니다.
둘째, 'Privacy-first' 기반의 암호화 아키텍처입니다.민감한 데이터가 포함될 수 있는 HTTP 페이로드를 로그로 남기는 것은 보안상 위험할 수 있습니다. 하지만 고객 소유의 키를 이용한 비대칭 암호화를 강제함으로써, 컴플라이언스 준수와 가시성 확보라는 두 마리 토끼를 잡았습니다.
셋째, 운영 효율성(Operational Efficiency)의 극대화입니다.과거에는 오탐을 수정하기 위해 추측에 의존하거나 복잡한 테스트를 반복해야 했습니다. 이제는 매칭된 실제 필드와 변환된 값을 즉시 확인함으로써, MTTR(Mean Time To Repair)을 획기적으로 단축할 수 있습니다. 이는 특히 Managed Rules와 같이 내부 로직이 비공개인 규칙을 다룰 때 강력한 무기가 됩니다.
원문 출처: Get better visibility for the WAF with payload logging
댓글
댓글 쓰기