WAF에서 오탐 감소: OWASP 규칙과 AI 컨텍스트 결합

발행: (2025년 12월 31일 오후 04:54 GMT+9)
8 분 소요
원문: Dev.to

Source: Dev.to

WAF에서 오탐 감소를 위한 표지 이미지: OWSQL 규칙과 AI 컨텍스트 결합

문제

모든 API 요청이 동일한 무게를 갖는 것은 아니다.

  • 제품 카탈로그 서비스는 초당 수만 건의 요청을 처리하며 100 ms 지연을 허용할 수 없습니다.
  • 고감도 관리자 패널은 ≈10 요청 / 초를 처리하며 해당 지연을 허용할 수 있습니다.

대부분의 웹 애플리케이션 방화벽(WAF) – ModSecurity, Cloudflare, Fastly – 은 전체 애플리케이션에 단일 기본 규칙 세트를 적용합니다. 사용자 정의 규칙을 지원하지만, 많은 수동 설정 없이 경로별 보안 프로파일을 제공하지 않습니다.

속도 vs. 정확도

  • 규칙 기반 WAF는 마이크로초 단위로 SQL‑i/XSS 공격을 탐지하지만, 컨텍스트가 부족해 많은 오탐을 발생시킵니다.
  • LLM 기반 보안은 컨텍스트를 이해하지만 각 요청에 용납할 수 없는 지연을 추가합니다.

솔루션: 결정론적 패턴 매칭과 확률적 AI를 결합한 하이브리드 접근 방식.

Argus – 하이브리드 오픈‑소스 WAF (Go)

Argus는 다음을 결합합니다:

  • Coraza (OWASP‑호환 규칙 엔진) – 빠른 패턴 매칭을 제공.
  • Gemini LLM – 상황에 맞는 분석을 수행.

세 가지 위험 프로파일을 제공하여 개발자가 라우트별로 지연 시간과 컨텍스트 사이의 적절한 균형을 선택할 수 있습니다.

핵심 과제

  1. 속도와 컨텍스트 인식을 어떻게 병합하면서 이진 선택을 강요하지 않을까?
  2. 외부 의존성이 실패할 때 WAF는 어떻게 성능 저하가 발생할까?
  3. 프로덕션에서 채택을 어떻게 손쉽게 만들 수 있을까?

속도와 컨텍스트 결합

결정론적 정규식 기반 규칙은 대부분의 공격을 포착합니다. AI 컨텍스트를 추가하면 정상적인 요청이 의심스러워 보이는 경우(예: DELETE TABLE을 언급하는 튜토리얼)에도 오탐을 제거할 수 있습니다.

각 엔드포인트마다 지연 시간과 보안 예산이 다르기 때문에 Argus는 전역 설정 대신 개발자가 경로별로 모드를 선택하도록 합니다.

솔루션: 세 가지 모드

ModeBehaviour
Latency FirstCoraza가 allow / block을 결정합니다; AI가 관여하지 않습니다.
Paranoid모든 요청이 Coraza의 검사 후에 Gemini에 의해 검증됩니다.
Smart ShieldCoraza가 요청을 차단할 때만 Gemini가 실행되어 오탐을 제거합니다.

각 요청에 대한 Gemini 판정은 나중에 관리자가 분석할 수 있도록 데이터베이스에 기록됩니다.

Request processing flowchart showing WAF Coraza filter followed by three modes: LatencyFirst (immediate block/allow), SmartShield (AI verification on WAF blocks), and Paranoid (AI checks all requests)

복원력: AI가 실패하면 어떻게 될까?

Argus는 Smart ShieldParanoid 모드에 Gemini API를 사용합니다. Google 서비스에 장애가 발생하면:

  • OWASP 규칙은 여전히 명백한 위협을 차단합니다 (SQLi, XSS 등).
  • AI 레이어는 단순히 사라지지만, 핵심 보호는 유지됩니다.

회로 차단기

3‑상태 회로 차단기는 점진적인 서비스 저하를 보장합니다:

상태조건동작
Closed (정상)Gemini 응답 중선택된 모드로 요청이 흐릅니다.
Open연속 3회 Gemini 실패30 초 동안 열려 있음; 모든 모드가 Coraza만 사용하도록 전환됩니다.
Half‑Open30 초 타임아웃 후Gemini에 단일 테스트 요청을 보냅니다.
• 성공 → Closed
• 실패 → 또 다른 30 초 동안 Open

Circuit breaker state diagram showing three states: HalfOpen, Closed, and Open, with transitions based on test success/failure and timeout conditions

프로덕션에서 바로 적용하기

Argus는 내부 복잡성을 두 가지 간단한 통합 경로 뒤에 숨깁니다.

1. Go SDK

네이티브 Go 애플리케이션의 경우, Argus는 http.Handler를 감싸는 미들웨어입니다.

package main

import (
    "net/http"
    "time"

    "github.com/priyansh-dimri/argus"
)

func main() {
    waf, _ := argus.NewWAF()

    client := argus.NewClient(
        "https://argus-5qai.onrender.com",
        "api-key",
        20*time.Second,
    )

    cfg := argus.Config{
        Mode: argus.SmartShield, // or argus.LatencyFirst / argus.Paranoid
    }

    shield := argus.NewMiddleware(client, waf, cfg)

    http.Handle("/api/", shield.Protect(yourHandler))
    http.ListenAndServe(":8080", nil)
}

2. Docker 사이드카

Node, Python, Ruby, PHP 등으로 작성된 서비스의 경우, Argus를 가벼운 사이드카 리버스 프록시로 실행하면 됩니다. 코드 변경이 전혀 필요하지 않습니다.

docker run -d \
  --name argus-sidecar \
  -p 8000:8000 \
  -e TARGET_URL=http://host.docker.internal:3000 \
  -e ARGUS_API_KEY=api-key \
  -e ARGUS_API_URL=https://argus-5qai.onrender.com/ \
  ghcr.io/priyansh-dimri/argus-sidecar:latest

모든 트래픽은 애플리케이션에 도달하기 전에 사이드카를 통해 라우팅됩니다.

Source:

핫 경로 최적화

미들웨어가 모든 요청의 핵심 경로에 위치하기 때문에 성능이 가장 중요합니다. Argus:

  • 적절한 경우 최근 Gemini 응답을 캐시합니다.
  • Coraza 경로에서 할당을 최소화합니다.
  • 잠금 없는 원자 연산으로 서킷‑브레이커 로직을 실행합니다.

이러한 최적화 덕분에 추가 지연 시간이 지연에 민감한 서비스의 허용 범위 내에 충분히 머무르면서도 LLM의 상황별 안전망을 제공할 수 있습니다.


즐거운 해킹 되세요!

During development we focused on optimizing the hot path, achieving:

- **262 µs** processing time for clean requests.  
- **151 ns** overhead for the circuit breaker (atomic state checks instead of mutexes).  
- **56 %** parallel efficiency when scaling up to 4 cores.

You can check out the source code and contribute at  
[github.com/priyansh-dimri/argus/](https://github.com/priyansh-dimri/argus/).
Back to Blog

관련 글

더 보기 »

RGB LED 사이드퀘스트 💡

markdown !Jennifer Davis https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex: 내가 만드는 이유

소개 안녕하세요 여러분. 오늘은 제가 누구인지, 무엇을 만들고 있는지, 그리고 그 이유를 공유하고 싶습니다. 초기 경력과 번아웃 저는 개발자로서 17년 동안 경력을 시작했습니다.