AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
AWS WAF에서 SQLi 및 XSS 규칙에 의해 간접적으로 호출된 트래픽 패턴을 식별하려면 어떻게 해야 합니까?
AWS WAF에서 SQL 인젝션(SQLi) 및 크로스 사이트 스크립팅(XSS) 규칙에 의해 간접적으로 호출된 트래픽 패턴을 식별하려고 합니다.
간략한 설명
SQLi 및 XSS 규칙에서 간접적으로 호출하는 트래픽 패턴을 식별하기 위해 AWS WAF 규칙을 생성하고 AWS WAF 로깅을 활성화합니다. 로그는 Amazon CloudWatch Logs의 로그 그룹 또는 Amazon Simple Storage Service(Amazon S3) 버킷으로 전송합니다. 그런 다음 Amazon CloudWatch Logs Insights 또는 Amazon Athena를 사용하여 로그를 쿼리합니다.
해결 방법
AWS WAF 로그에는 terminatingRuleMatchDetails 로그 필드에는 SQLi 및 XSS 규칙을 간접적으로 호출한 패턴이 포함되어 있습니다. 이 패턴을 사용하여 SQLi 및 XSS 규칙의 오탐지 문제를 해결할 수 있습니다. 자세한 내용은 보호 팩(웹 ACL) 트래픽에 대한 로그 필드 및 보호 팩(웹 ACL) 트래픽에 대한 로그 예시를 참조하십시오.
AWS WAF 로그 예시
AWS WAF 로깅은 검사된 모든 요청의 세부 정보를 기록하며, 요청을 평가한 규칙 및 해당되는 경우 일치하는 패턴에 대한 정보를 포함합니다.
예:
{ "terminatingRuleId": "CustomRule", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "location": "BODY", "matchedData": ["<redacted>"], "matchedFieldName": "", "sensitivityLevel": "LOW" } ] }
conditionType은 일치하는 검사 유형을 정의합니다. 앞의 예에서 conditionType은 SQL 인젝션입니다.
**location(위치)**은 AWS WAF가 검사한 요청의 부분을 정의합니다. 앞의 예에서 **location(위치)**은 BODY, URL 또는 QUERY_STRING입니다.
matchedData에는 규칙을 간접적으로 호출한 요청의 특정 문자열이 포함됩니다. 로그의 민감한 정보 삭제가 활성화된 경우 일부 필드가 부분적으로 또는 완전히 마스킹될 수 있습니다.
sensitivityLevel은 규칙에 사용되는 검사 민감도 수준을 정의합니다. 기본적으로 AWS Managed Rules for SQLi 및 XSS와 같은 AWS 관리형 규칙 그룹의 로그 항목에 있는 sensitivityLevel은 LOW로 설정됩니다. 이렇게 하면 오탐지가 발생할 가능성이 줄어듭니다. 자체 규칙 그룹에 정의하는 사용자 지정 SQLi 검사 명령문에 대해서는 검사 민감도 수준을 Low(낮음) 또는 **High(높음)**로 구성할 수 있습니다.
terminatingRuleId, terminatingRuleMatchDetails, action과 같은 필드를 검토하여 요청을 규칙 평가 및 결과와 연관시킵니다.
AWS 관리형 규칙 그룹을 사용할 때 AWS WAF는 로그 이벤트의 규칙 레이블을 통해 많은 탐지 항목을 노출합니다. 수신 요청과 일치하는 관리형 규칙 시그니처를 식별하려면 종료 규칙 정보와 규칙 레이블을 모두 쿼리하십시오.
규칙에 구성된 작업에 따라 AWS WAF가 차단하지 않은 요청이라도 로그에 표시될 수 있습니다. action 및 terminatingRuleId 필드를 사용하여 평가된 요청, 수집된 요청, 차단된 요청을 구분합니다.
CloudWatch 로그 인사이트 쿼리
AWS WAF 로그가 Amazon CloudWatch Logs에 저장되어 있는 경우 CloudWatch Logs Insights를 사용하여 트래픽 패턴을 식별하는 쿼리를 실행합니다.
terminatingRuleMatchDetails 로그 필드로 CloudWatch Logs Insights 쿼리를 실행하여 트래픽 패턴을 식별합니다. 다음 예시 쿼리는 타임스탬프, 클라이언트 IP 주소, 출발지 국가, 일치 세부 정보 및 요청 ID를 반환합니다.
fields @timestamp | parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData | filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/) | display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId | limit 100
자세한 내용은 CloudWatch에서 AWS WAF 로그를 분석하려면 어떻게 해야 합니까?를 참조하십시오.
Amazon Athena 쿼리
AWS WAF 로그가 Amazon S3에 저장되어 있는 경우 Amazon Athena queries(Amazon Athena 쿼리)를 사용하여 트래픽 패턴을 식별합니다. terminatingRuleMatchDetails 로그 필드로 Amazon Athena 쿼리를 실행하여 트래픽 패턴을 식별합니다. 다음 쿼리는 타임스탬프, 클라이언트 IP 주소, 출발지 국가, 일치 세부 정보 및 요청 ID를 반환합니다.
SELECT to_iso8601(from_unixtime(timestamp / 1000)) as timestamp, terminatingRuleId, action, httpRequest.requestId as RequestID, httpRequest.clientIp as ClientIP, httpRequest.country as Country, termmatchrules.conditionType as ConditionType, termmatchrules.location as Location, termmatchrules.matchedData as MatchedData FROM waf_logs CROSS JOIN UNNEST(terminatingRuleMatchDetails) as t(termmatchrules) WHERE termmatchrules.conditionType in ('XSS', 'SQL_INJECTION')
자세한 내용은 Amazon Athena에서 AWS WAF 로그를 분석하려면 어떻게 해야 합니까?를 참조하십시오.
관련 정보
Amazon CloudWatch Logs의 AWS WAF 로그 분석
AWS WAF의 HTTP 요청에 대한 XSS 또는 SQLi 검사에서 특정 URI를 제외하려면 어떻게 해야 합니까?
This article was reviewed and updated on 2026-03-16.
