# AWS WAF

## 개요

Panther는 AWS S3를 통해 Amazon Web Services (AWS) Web Application Firewall (WAF) 로그를 수집하는 것을 지원합니다.

## AWS 온보드하는 방법 **WAF** 로그를 Panther로

WAF 로그를 Panther로 가져오려면, AWS 계정에서 데이터를 스트리밍하기 위해 Panther Console에 S3 버킷을 설정해야 합니다.

1. Panther Console의 왼쪽 탐색 표시줄에서 **구성** > **로그 소스**.
2. 클릭 **새로 만들기**.
3. "AWS"를 검색하여 사용 가능한 로그 소스 목록을 확인하세요.
4. 선택 **AWS WAF Web ACL**.
5. 선택 **AWS S3 버킷** 을 소스로 선택하여 설정을 시작합니다. 다음을 따르세요. [데이터 전송을 위한 S3 구성에 대한 Panther의 문서](https://docs.panther.com/ko/data-onboarding/data-transports/aws/s3).

## Panther에서 만든 탐지 규칙

에서 Panther의 사전 작성된 AWS 룰을 확인하세요. [panther-analysis Github 저장소](https://github.com/panther-labs/panther-analysis/tree/master/rules).

## 지원되는 AWS WAF 로그

### AWS.WAFWebACL

WAFWebACL 로그는 웹 액세스 제어 목록(ACL) 트래픽 정보를 나타냅니다. 자세한 내용은 [웹 ACL 트래픽 로깅에 대한 AWS 문서](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html).

```yaml
schema: AWS.WAFWebACL
parser:
  native:
    name: AWS.WAFWebACL
description: WAF 웹 ACL 트래픽 정보 로그.
referenceURL: https://docs.aws.amazon.com/waf/latest/developerguide/logging.html
fields:
  - name: action
    required: true
    description: 'WAF에 의해 적용된 동작입니다. 종료 룰에 대한 가능한 값은 ALLOW와 BLOCK입니다. COUNT는 종료 룰에 대해 유효한 값이 아닙니다.'
    type: string
  - name: formatVersion
    description: 로그의 형식 버전입니다.
    type: smallint
  - name: httpRequest
    required: true
    description: 요청에 대한 메타데이터입니다.
    type: object
    fields:
      - name: args
        description: HTTP 요청 쿼리 문자열입니다.
        type: string
      - name: clientIp
        description: 요청을 보내는 클라이언트의 IP 주소입니다.
        type: string
        indicators:
          - ip
      - name: country
        description: 요청의 출발 국가입니다. AWS WAF가 원산지 국가를 판별할 수 없으면 이 필드를 -로 설정합니다.
        type: string
      - name: headers
        description: 헤더 목록입니다.
        type: array
        element:
          type: object
          fields:
            - name: name
              description: 헤더 이름입니다.
              type: string
            - name: value
              description: 헤더 값입니다.
              type: string
      - name: httpMethod
        description: 요청의 HTTP 메서드입니다.
        type: string
      - name: httpVersion
        description: HTTP 버전입니다. 예: HTTP/2.0.
        type: string
      - name: requestId
        description: 기본 호스트 서비스에서 생성되는 요청의 ID입니다. Application Load Balancer의 경우 이는 추적 ID입니다. 그 외 모든 경우에는 요청 ID입니다.
        type: string
        indicators:
          - trace_id
      - name: uri
        description: 요청의 URI입니다.
        type: string
  - name: httpSourceId
    required: true
    description: 소스 ID입니다. 이 필드는 연결된 리소스의 ID를 보여줍니다.
    type: string
  - name: httpSourceName
    description: '요청의 소스입니다. 가능한 값: Amazon CloudFront의 CF, Amazon API Gateway의 APIGW, Application Load Balancer의 ALB, AWS AppSync의 APPSYNC.'
    type: string
  - name: nonTerminatingMatchingRules
    description: 요청과 일치하는 룰 그룹의 비종료 룰 목록입니다. 이들은 항상 COUNT 룰(일치하지만 비종료인 룰)입니다.
    type: array
    element:
      type: object
      fields:
        - name: ruleId
          description: 룰 ID입니다.
          type: string
        - name: action
          description: 구성된 룰 작업입니다. 비종료 룰의 경우 값은 항상 COUNT입니다.
          type: string
        - name: ruleMatchDetails
          description: 요청과 일치한 룰에 대한 자세한 정보입니다. 이 필드는 SQL 삽입 및 사이트 간 스크립팅(XSS) 일치 룰 문에 대해서만 채워집니다.
          type: array
          element:
            type: object
            fields:
              - name: conditionType
                description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
                type: string
              - name: location
                description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
                type: string
              - name: matchedData
                description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
                type: array
                element:
                  type: string
  - name: rateBasedRuleList
    description: 요청에 적용된 속도 기반 룰 목록입니다.
    type: array
    element:
      type: object
      fields:
        - name: limitKey
          description: 'AWS WAF가 요청이 단일 소스에서 도착하는지, 따라서 속도 모니터링 대상인지 판단하는 데 사용하는 필드입니다. 가능한 값: IP.'
          type: string
        - name: limitValue
          description: 속도 제한을 위해 요청을 집계하는 데 속도 기반 룰이 사용하는 IP 주소입니다. 요청에 유효하지 않은 IP 주소가 포함되어 있으면 limitvalue는 INVALID입니다.
          type: string
        - name: maxRateAllowed
          description: limitKey로 지정된 필드에서 동일한 값을 가진 요청 중 5분 동안 허용되는 최대 요청 수입니다. 요청 수가 maxRateAllowed를 초과하고 룰에 지정된 다른 조건도 충족되면 AWS WAF가 이 룰에 지정된 작업을 트리거합니다.
          type: bigint
        - name: rateBasedRuleId
          description: 요청에 적용된 속도 기반 룰의 ID입니다. 이 룰이 요청을 종료한 경우 rateBasedRuleId의 ID는 terminatingRuleId의 ID와 같습니다.
          type: string
        - name: rateBasedRuleName
          description: 요청에 적용된 속도 기반 룰의 이름입니다.
          type: string
  - name: ruleGroupList
    description: 이 요청에 적용된 룰 그룹의 목록입니다. 앞의 코드 예제에서는 하나만 있습니다.
    type: array
    element:
      type: object
      fields:
        - name: excludedRules
          description: 제외한 룰 그룹 내 룰 목록입니다. 이러한 룰의 작업은 COUNT로 설정됩니다.
          type: array
          element:
            type: object
            fields:
              - 이름: exclusionType
                설명: 제외된 룰이 COUNT 작업을 갖는다는 것을 나타내는 유형입니다(가장 가능성이 높은 값은 EXCLUDED_AS_COUNT입니다).
                type: string
              - name: ruleId
                설명: 룰 그룹 내에서 제외된 룰의 ID입니다.
                type: string
        - name: nonTerminatingMatchingRules
          description: 요청과 일치하는 룰 그룹의 비종료 룰 목록입니다. 이들은 항상 COUNT 룰(일치하지만 비종료인 룰)입니다.
          type: array
          element:
            type: object
            fields:
              - name: ruleId
                description: 룰 ID입니다.
                type: string
              - name: action
                description: 구성된 룰 작업입니다. 비종료 룰의 경우 값은 항상 COUNT입니다.
                type: string
              - name: ruleMatchDetails
                description: 요청과 일치한 룰에 대한 자세한 정보입니다. 이 필드는 SQL 삽입 및 사이트 간 스크립팅(XSS) 일치 룰 문에 대해서만 채워집니다.
                type: array
                element:
                  type: object
                  fields:
                    - name: conditionType
                      description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
                      type: string
                    - name: location
                      description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
                      type: string
                    - name: matchedData
                      description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
                      type: array
                      element:
                        type: string
        - 이름: ruleGroupId
          설명: 룰 그룹의 ID입니다. 룰이 요청을 차단한 경우, ruleGroupID의 ID는 terminatingRuleId의 ID와 동일합니다.
          type: string
        - 이름: terminatingRule
          설명: 요청을 종료한 룰 그룹 내의 룰입니다. 이 값이 null이 아닌 경우, ruleid와 작업(action)도 포함됩니다. 이 경우 작업은 항상 BLOCK입니다.
          type: object
          fields:
            - name: ruleId
              description: 룰 ID입니다.
              type: string
            - name: action
              description: 구성된 룰 작업입니다. 비종료 룰의 경우 값은 항상 COUNT입니다.
              type: string
            - name: ruleMatchDetails
              description: 요청과 일치한 룰에 대한 자세한 정보입니다. 이 필드는 SQL 삽입 및 사이트 간 스크립팅(XSS) 일치 룰 문에 대해서만 채워집니다.
              type: array
              element:
                type: object
                fields:
                  - name: conditionType
                    description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
                    type: string
                  - name: location
                    description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
                    type: string
                  - name: matchedData
                    description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
                    type: array
                    element:
                      type: string
  - 이름: terminatingRuleId
    설명: 요청을 종료한 룰의 ID입니다. 요청을 종료하는 것이 아무것도 없으면 값은 Default_Action입니다.
    type: string
  - 이름: terminatingRuleMatchDetails
    description: 요청과 일치한 종료 룰에 대한 자세한 정보입니다. 종료 룰은 웹 요청에 대한 검사 프로세스를 종료하는 작업을 가집니다. 종료 룰의 가능한 작업은 ALLOW 및 BLOCK입니다. 이는 SQL 인젝션 및 사이트 간 스크립팅(XSS) 매치 룰 문에 대해서만 채워집니다. 둘 이상의 항목을 검사하는 모든 룰 문과 마찬가지로 AWS WAF는 첫 번째 일치 항목에 작업을 적용하고 웹 요청 검사를 중지합니다. 종료 작업이 있는 웹 요청에는 로그에 보고된 위협 외에도 다른 위협이 포함될 수 있습니다.
    type: array
    element:
      type: object
      fields:
        - name: conditionType
          description: 취약성 유형입니다. SQL_INJECTION 또는 XSS입니다.
          type: string
        - name: location
          description: 일치를 제공한 요청 매개변수 유형입니다. ALL_QUERY_ARGS, HEADER 등이 될 수 있습니다.
          type: string
        - name: matchedData
          description: 일치를 제공하는 문자열 목록입니다. 예: ["10", "AND", "1"]
          type: array
          element:
            type: string
  - 이름: terminatingRuleType
    설명: '요청을 종료한 룰의 유형입니다. 가능한 값: RATE_BASED, REGULAR, GROUP, MANAGED_RULE_GROUP.'
    type: string
  - 이름: 타임스탬프
    required: true
    설명: 밀리초 단위의 타임스탬프.
    유형: 타임스탬프
    시간 형식: unix_ms
    isEventTime: true
  - 이름: webaclId
    required: true
    설명: 웹 ACL의 GUID입니다.
    type: string
```
