#AWS#WAF#Security#Cloud

AWS WAF(Web Application Firewall)를 사용한 웹 공격 방어 설정

웹 애플리케이션 보안 및 공격 방어 설정

AWS 서비스 중 WAF(Web Application Firewall)를 직접 구성해 보며 얻은 내용


☑️ 먼저 짚고 가는 공격 유형


  • SQL Injection: 파라미터에 SQL 문을 삽입해 인증을 우회하거나 데이터를 탈취하는 공격
  • XSS: 사용자 입력에 악성 스크립트를 심어 브라우저에서 실행시키는 공격
  • DDoS: 다수의 IP가 동시에 요청을 보내 서비스 자원을 고갈시키는 공격

WAF는 이러한 애플리케이션 레벨(L7) 공격을 차단하는 데 초점을 맞춘 서비스.


☑️ AWS WAF 살펴보기


  • 배포 대상: CloudFront, ALB, API Gateway, AppSync 등 L7에서 동작하는 리소스
  • 구성 요소
    • Web ACL: 룰의 집합. 어떤 리소스에 적용할지 지정
    • Rules / Rule Groups: 실제로 트래픽을 허용·차단하는 기준
    • Log & Metrics: CloudWatch, Kinesis Firehose 등으로 분석 가능

이번 실습에서는 ALB 앞단에 Web ACL을 배치해 요청이 들어오는 시점에 필터링


☑️ Web ACL 생성 절차


  • WAF & Shield 콘솔 → Web ACL 생성


  • 이름, 리전, 연결할 리소스(ALB 등) 선택


  • 연결할 AWS 서비스를 선택하고, 적용 대상을 확인


  • 룰 추가 (Managed Rule Group 또는 직접 작성)


  • 콘솔에서 제공하는 JSON 에디터를 통해 규칙을 쉽게 작성하고 검증할 수 있다.


☑️ 룰 예시


1. 국가 기반 차단

{
  "Name": "BLOCK_KOREA",
  "Priority": 0,
  "Action": { "Block": {} },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "BLOCK_KOREA"
  },
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": ["KR"]
    }
  }
}

특정 국가에서만 접근하도록 제한하고 싶을 때 사용.


2. 속도(요청 빈도) 제한

{
  "Name": "MAX_REQUEST_1000",
  "Priority": 0,
  "Action": { "Block": {} },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "MAX_REQUEST_1000"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": "1000",
      "AggregateKeyType": "IP"
    }
  }
}

5분 동안 요청이 1000건을 초과하는 IP를 차단하는 규칙. 간단한 DDoS 완화에 유용하다.


3. User-Agent 필터링

{
  "Name": "USERAGENT_BLOCK_PYTHON",
  "Priority": 0,
  "Action": { "Block": {} },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "USERAGENT_BLOCK_PYTHON"
  },
  "Statement": {
    "ByteMatchStatement": {
      "FieldToMatch": {
        "SingleHeader": { "Name": "User-Agent" }
      },
      "PositionalConstraint": "CONTAINS",
      "SearchString": "python",
      "TextTransformations": [
        { "Type": "LOWERCASE", "Priority": 0 }
      ]
    }
  }
}

스크립트 기반 공격 시도(예: python으로된 User-Agent)를 필터링할 수 있다.