AWS WAF은 웹 애플리케이션 방화벽으로, 웹 응용 프로그램이나 API를 다양한 웹 공격으로부터 보호하는 데 사용됩니다. 이를 통해 사용자는 SQL 인젝션이나 크로스 사이트 스크립팅과 같은 전형적인 공격 벡터를 완화하는 보안 규칙을 설정하고 사용자 정의 필터링 규칙을 정의하여 들어오는 트래픽을 제어할 수 있습니다.
주요 개념
웹 ACL (접근 제어 목록)
웹 ACL은 웹 애플리케이션이나 API에 적용할 수 있는 규칙 모음입니다. 웹 ACL을 리소스와 연결하면 AWS WAF는 웹 ACL에 정의된 규칙을 기반으로 들어오는 요청을 검사하고 지정된 조치를 취합니다.
규칙 그룹
규칙 그룹은 여러 웹 ACL에 적용할 수 있는 재사용 가능한 규칙 모음입니다. 규칙 그룹을 사용하면 다른 웹 애플리케이션이나 API 간에 일관된 규칙 세트를 관리하고 유지할 수 있습니다.
각 규칙 그룹에는 실행 중인 규칙, 규칙 그룹 및 웹 ACL에 사용되는 운영 리소스를 계산하고 제어하는 용량이 있습니다. 생성 중에 값을 설정하면 수정할 수 없습니다.
규칙
규칙은 AWS WAF가 들어오는 웹 요청을 검사하는 데 사용하는 조건 집합을 정의합니다. 주요 규칙 유형은 다음과 같습니다:
일반 규칙: 지정된 조건을 사용하여 웹 요청을 허용, 차단 또는 계산할지 여부를 결정합니다.
요청률 기반 규칙: 특정 IP 주소에서 5분 동안의 요청 수를 계산합니다. 여기서 사용자는 임계값을 정의하고 IP에서 이 한도를 초과하는 요청 수가 5분 내에 발생하면 해당 IP에서의 후속 요청이 임계값 아래로 떨어질 때까지 차단됩니다. 요청률 기반 규칙의 최소 임계값은 2000개의 요청입니다.
관리형 규칙
AWS WAF는 AWS 및 AWS Marketplace 판매자가 유지 관리하는 사전 구성된 관리형 규칙 세트를 제공합니다. 이러한 규칙 세트는 일반적인 위협에 대한 보호를 제공하며 새로운 취약점을 해결하기 위해 정기적으로 업데이트됩니다.
IP 세트
IP 세트는 허용하거나 차단하려는 IP 주소 또는 IP 주소 범위의 목록입니다. IP 세트를 사용하면 IP 기반 규칙을 관리하는 프로세스를 간소화할 수 있습니다.
정규식 패턴 세트
정규식 패턴 세트에는 웹 요청에서 검색할 패턴을 정의하는 하나 이상의 정규식이 포함됩니다. 이는 특정 문자 시퀀스를 필터링하는 등 더 복잡한 일치 시나리오에 유용합니다.
잠금 토큰
잠금 토큰은 WAF 리소스를 업데이트할 때 동시성 제어에 사용됩니다. 이를 통해 여러 사용자나 프로세스가 동시에 동일한 리소스를 업데이트하려고 시도할 때 변경 사항이 실수로 덮어쓰이지 않도록 보장합니다.
API 키
AWS WAF의 API 키는 특정 API 작업에 대한 요청을 인증하는 데 사용됩니다. 이러한 키는 암호화되어 안전하게 관리되어 WAF 구성을 변경할 수 있는 권한이 있는 사용자만이 액세스할 수 있도록 보장됩니다.
예시: CAPTCHA API 통합.
권한 정책
권한 정책은 AWS WAF 리소스에서 작업을 수행할 수 있는 사용자를 지정하는 IAM 정책입니다. 권한을 정의함으로써 WAF 리소스에 대한 액세스를 제어하고 권한이 있는 사용자만이 구성을 만들거나 업데이트하거나 삭제할 수 있도록 보장할 수 있습니다.
범위
AWS WAF의 범위 매개변수는 WAF 규칙과 구성이 지역 응용 프로그램 또는 Amazon CloudFront 배포에 적용되는지를 지정합니다.
REGIONAL: Application Load Balancers (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, Amazon Cognito 사용자 풀, AWS App Runner 서비스 및 AWS Verified Access 인스턴스와 같은 지역 서비스에 적용됩니다. 이러한 리소스가 위치한 AWS 지역을 지정합니다.
CLOUDFRONT: 글로벌인 Amazon CloudFront 배포에 적용됩니다. CloudFront에 대한 WAF 구성은 콘텐츠가 제공되는 위치와 관계없이 us-east-1 지역을 통해 관리됩니다.
주요 기능
모니터링 기준 (조건)
조건은 AWS WAF가 모니터링하는 들어오는 HTTP/HTTPS 요청의 요소를 지정합니다. 이는 XSS, 지리적 위치 (GEO), IP 주소, 크기 제약, SQL 인젝션 및 패턴 (문자열 및 정규식 일치)을 포함합니다. 국가별로 CloudFront 수준에서 제한된 요청은 WAF에 도달하지 않음에 유의해야 합니다.
각 AWS 계정은 다음을 구성할 수 있습니다:
각 유형당 100개의 조건 (정규식의 경우 10개의 조건만 허용되지만 이 제한은 증가할 수 있음).
100개의 규칙 및 50개의 웹 ACL.
최대 5개의 요청률 기반 규칙.
응용 프로그램 로드 밸런서에 WAF를 구현할 때 초당 10,000개의 요청 처리량.
규칙 조치
각 규칙에는 다음 옵션 중 하나가 할당됩니다:
허용: 요청이 적절한 CloudFront 배포 또는 응용 프로그램 로드 밸런서로 전달됩니다.
차단: 요청이 즉시 종료됩니다.
계산: 규칙의 조건을 충족하는 요청을 계산합니다. 이는 규칙 테스트에 유용하며 허용 또는 차단으로 설정하기 전에 규칙의 정확성을 확인하는 데 사용됩니다.
CAPTCHA 및 Challenge: CAPTCHA 퍼즐 및 음성 챌린지를 사용하여 요청이 봇에서 오지 않았는지 확인합니다.
웹 ACL 내에서 규칙과 일치하지 않는 요청은 기본 조치 (허용 또는 차단)을 수행합니다. 웹 ACL 내에서 정의된 규칙 실행 순서는 중요하며 일반적으로 다음 순서를 따릅니다:
화이트리스트 IP 허용.
블랙리스트 IP 차단.
해로운 시그니처와 일치하는 요청 차단.
CloudWatch 통합
AWS WAF는 모니터링을 위해 CloudWatch와 통합되어 있으며 AllowedRequests, BlockedRequests, CountedRequests, PassedRequests와 같은 메트릭을 제공합니다. 이러한 메트릭은 기본적으로 매 분마다 보고되며 두 주 동안 보관됩니다.
열거
CloudFront 배포와 상호 작용하려면 미국 동부 (버지니아 북부) 지역을 지정해야 합니다:
CLI - CloudFront 범위를 사용할 때 미국 동부 지역을 지정하세요: --scope CLOUDFRONT --region=us-east-1.
API 및 SDK - 모든 호출에 대해 지역 엔드포인트 us-east-1을 사용하세요.
지역 서비스와 상호 작용하려면 지역을 지정해야 합니다:
예시: 유럽 (스페인) 지역을 사용한 예시: --scope REGIONAL --region=eu-south-2
# Web ACLs ### Retrieve a list of web access control lists (Web ACLs) available in your AWS accountawswafv2list-web-acls--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve details about the specified Web ACLawswafv2get-web-acl--name<value>--id<value>--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve a list of resources associated with a specific web access control list (Web ACL)aws wafv2 list-resources-for-web-acl --web-acl-arn <value> # Additional permissions needed depending on the protected resource type: cognito-idp:ListResourcesForWebACL, ec2:DescribeVerifiedAccessInstanceWebAclAssociations or apprunner:ListAssociatedServicesForWebAcl
## Retrieve the Web ACL associated with the specified AWS resourceaws wafv2 get-web-acl-for-resource --resource-arn <arn> # Additional permissions needed depending on the protected resource type: cognito-idp:GetWebACLForResource, ec2:GetVerifiedAccessInstanceWebAcl, wafv2:GetWebACL or apprunner:DescribeWebAclForService
# Rule groups ### List of the rule groups available in your AWS accountawswafv2list-rule-groups--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve the details of a specific rule groupaws wafv2 get-rule-group [--name <value>] [--id <value>] [--arn <value>] [--scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>]
## Retrieve the IAM policy attached to the specified rule groupaws wafv2 get-permission-policy --resource-arn <rule-group-arn> # Just the owner of the Rule Group can do this operation
# Managed rule groups (by AWS or by a third-party) ### List the managed rule groups that are availableawswafv2list-available-managed-rule-groups--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## List the available versions of the specified managed rule groupaws wafv2 list-available-managed-rule-group-versions --vendor-name <value> --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
## Retrieve high-level information about a specific managed rule groupaws wafv2 describe-managed-rule-group --vendor-name <value> --name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--version-name <value>]
## Retrieve high-level information about all managed rule groupsawswafv2describe-all-managed-products--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve high-level information about all managed rule groups from a specific vendoraws wafv2 describe-managed-products-by-vendor --vendor-name <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# IP sets ### List the IP sets that are available in your AWS accountawswafv2list-ip-sets--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve the specific IP setawswafv2get-ip-set--name<value>--id<value>--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve the keys that are currently being managed by a rate-based rule.awswafv2get-rate-based-statement-managed-keys--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>\--web-acl-name<value>--web-acl-id<value>--rule-name<value> [--rule-group-rule-name <value>]# Regex pattern sets ### List all the regex pattern sets that you manageawswafv2list-regex-pattern-sets--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieves the specified regex pattern setsaws wafv2 get-regex-pattern-set --name <value> --id <value> --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1>
# API Keys ### List API keys for the specified scopeawswafv2list-api-keys--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>## Retrieve decrypted API keyawswafv2get-decrypted-api-key--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>--api-key<value># Logs ### List of logging configurations (storage location of the logs)aws wafv2 list-logging-configurations --scope <REGIONAL --region=<value> | CLOUDFRONT --region=us-east-1> [--log-scope <value>]
## Retrieve the logging configuration settings associated with a specific web ACLaws wafv2 get-logging-configuration --resource-arn <value> [--log-scope <CUSTOMER | SECURITY_LAKE>] [--log-type <value>]
# Miscelaneous ### Retrieve a list of the tags associated to the specified resourceawswafv2list-tags-for-resourceresource-arn<value>## Retrieve a sample of web requests that match a specified rule within a WebACL during a specified time rangeaws wafv2 get-sampled-requests --web-acl-arn <value> --rule-metric-name <value> --time-window <value> --max-items <1-500> --scope <value>
## Obtains the web ACL capacity unit (WCU) requirements for a specified scope and rulesetawswafv2check-capacity--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>--rules<value>## List of available releases for the AWS WAFv2 mobile SDKawswafv2list-mobile-sdk-releases--platform<IOS|ANDROID>## Retrieves information for the specified mobile SDK releaseawswafv2get-mobile-sdk-release--platform<value>--release-version<value>
포스트 익스플로잇 / 우회
공격자의 관점에서 이 서비스는 공격자가 WAF 보호 및 네트워크 노출을 식별하여 다른 웹을 침해하는 데 도움을 줄 수 있습니다.
그러나 공격자는 또한 이 서비스를 방해하여 웹이 WAF로 보호되지 않도록 할 수도 있습니다.
많은 삭제 및 업데이트 작업에서는 잠금 토큰을 제공해야 할 수 있습니다. 이 토큰은 리소스에 대한 동시성 제어에 사용되며, 동일한 리소스를 동시에 업데이트하려는 여러 사용자 또는 프로세스에 의해 변경이 실수로 덮어쓰여지지 않도록 보장합니다. 이 토큰을 얻기 위해 특정 리소스에 대해 해당 목록 또는 가져오기 작업을 수행할 수 있습니다.
wafv2:AssociateWebACL 권한은 공격자가 웹 ACL(액세스 제어 목록)을 리소스에 연결하여 보안 제어를 우회하고 무단 트래픽이 응용 프로그램에 도달하도록 허용함으로써 SQL 인젝션 또는 크로스 사이트 스크립팅(XSS)과 같은 취약점을 통한 공격을 유발할 수 있습니다. 반면 wafv2:DisassociateWebACL 권한을 가진 공격자는 보안 보호 기능을 일시적으로 비활성화하여 감지 없이 리소스를 취약점에 노출시킬 수 있습니다.
공격자는 AWS WAF에서 관리하는 IP 세트를 생성, 업데이트 및 삭제할 수 있습니다. 이는 악의적인 트래픽을 허용하는 새로운 IP 세트를 생성하거나, 합법적인 트래픽을 차단하기 위해 IP 세트를 수정하거나, 악의적인 IP 주소를 포함하도록 기존 IP 세트를 업데이트하거나, 신뢰할 수 있는 IP 주소를 제거하거나, 중요한 자원을 보호하기 위해 만들어진 중요한 IP 세트를 삭제할 수 있어 위험할 수 있습니다.
**wafv2:DeleteLoggingConfiguration**을 가진 공격자는 지정된 웹 ACL에서 로깅 구성을 제거할 수 있습니다. 이후 wavf2:PutLoggingConfiguration 및 iam:CreateServiceLinkedRole 권한을 가지고 있는 공격자는 로깅 구성을 생성하거나 교체할 수 있습니다(삭제한 후), 로깅을 완전히 방지하거나 Amazon S3 버킷, Amazon CloudWatch Logs 로그 그룹 또는 Amazon Kinesis Data Firehose와 같은 권한이 없는 대상으로 로그를 리디렉션할 수 있습니다.
생성 프로세스 중에 서비스는 지정된 로깅 대상에 로그를 작성할 수 있도록 필요한 권한을 자동으로 설정합니다:
Amazon CloudWatch Logs: AWS WAF는 지정된 CloudWatch Logs 로그 그룹에 리소스 정책을 생성합니다. 이 정책은 AWS WAF가 로그를 로그 그룹에 작성하는 데 필요한 권한을 보장합니다.
Amazon S3 버킷: AWS WAF는 지정된 S3 버킷에 버킷 정책을 생성합니다. 이 정책은 AWS WAF가 지정된 버킷에 로그를 업로드하는 데 필요한 권한을 부여합니다.
Amazon Kinesis Data Firehose: AWS WAF는 Kinesis Data Firehose와 상호 작용하기 위해 특별히 생성된 서비스 링크드 역할을 생성합니다. 이 역할은 AWS WAF가 구성된 Firehose 스트림으로 로그를 전달할 수 있도록 합니다.
잠재적 영향: 보안 이벤트에 대한 가시성을 흐리게 하고 사건 대응 프로세스를 어렵게 만들며 AWS WAF로 보호된 환경 내에서 은밀한 악의적 활동을 용이하게 할 수 있습니다.
wafv2:DeleteAPIKey
이 권한을 가진 공격자는 기존 API 키를 삭제하여 CAPTCHA를 효과 없게 만들고, 양식 제출 및 액세스 제어에 의존하는 기능을 방해할 수 있습니다. 이 CAPTCHA의 구현에 따라 CAPTCHA 우회 또는 리소스에서 오류 관리가 적절하게 설정되지 않은 경우 DoS로 이어질 수 있습니다.
# Delete API keyawswafv2delete-api-key--api-key<value>--scope<REGIONAL--region=<value>|CLOUDFRONT--region=us-east-1>
잠재적 영향: CAPTCHA 보호를 비활성화하거나 응용 프로그램 기능을 방해하여 보안 침해 및 잠재적 데이터 도난 발생 가능.
wafv2:TagResource, wafv2:UntagResource
공격자는 AWS WAFv2 리소스인 Web ACL, 규칙 그룹, IP 세트, 정규식 패턴 세트 및 로깅 구성에서 태그를 추가, 수정 또는 제거할 수 있습니다.