# AWS WAF

## 개요

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

## AWS 온보딩 방법 **WAF** 로그를 Panther로

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

1. Panther 콘솔의 왼쪽 탐색 모음에서 클릭하세요 **구성** > **로그 소스**.
2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. **새로 만들기**.
3. 사용 가능한 로그 소스 목록을 보려면 "AWS"를 검색하세요.
4. 선택하세요 **AWS WAF 웹 ACL**.
5. 선택하세요 **AWS S3 버킷** 소스를 선택하여 설정을 시작하세요. [데이터 전송을 위해 S3를 구성하는 Panther 문서](https://docs.panther.com/ko/data-onboarding/data-transports/aws/s3).

## 다음의 경우 통합에 제한이 발생할 수 있습니다:

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