AWS WAF, AWS Firewall Manager 및 AWS Shield Advanced
개발자 가이드 (API 버전 2015-08-24)

자습서: 일반적인 공격에 대해 신속한 AWS WAF 보호 설정

이 자습서에서는 AWS CloudFormation을 사용하여 다음과 같은 일반적인 공격으로부터 보호하도록 AWS WAF를 빠르게 구성할 수 있습니다.

  • 교차 사이트 스크립팅 공격 – 때로 공격자는 웹 애플리케이션의 취약성을 악용하기 위해 스크립트를 웹 요청에 삽입합니다. 교차 사이트 스크립팅 일치 조건은 AWS WAF에서 악성일 수 있는 스크립트가 있는지 검사할 웹 요청의 부분(예: URI 또는 쿼리 문자열)을 식별합니다.

  • SQL 명령어 주입 공격 – 때로 공격자는 데이터베이스에서 데이터를 추출하기 위해 웹 요청에 악성 SQL 코드를 삽입합니다. SQL 명령어 주입 일치 조건은 AWS WAF에서 악성일 수 있는 SQL 코드가 있는지 검사할 웹 요청의 부분을 식별합니다.

  • 알려진 잘못된 IP 주소의 공격 – IP 일치 조건을 사용하여 요청이 시작되는 IP 주소를 기반으로 웹 요청을 허용, 차단 또는 계산할 수 있습니다. IP 일치 조건은 지정하는 IP 주소 또는 IP 주소 범위를 최대 1,000개까지 나열합니다.

참고

이 자습서에서는 웹 애플리케이션용 콘텐츠를 제공하는 데 사용하는 CloudFront 배포가 있다고 가정합니다. CloudFront 배포가 없는 경우 Amazon CloudFront 개발자 안내서CloudFront 콘솔을 사용하여 웹 배포 생성 또는 업데이트 단원을 참조하십시오.

솔루션 개요

AWS CloudFormation은 템플릿을 사용하여 다음과 같은 AWS WAF 조건, 규칙 및 웹 ACL을 설정합니다.

조건

AWS CloudFormation은 다음과 같은 조건을 생성합니다.

IP 일치 조건

알려진 잘못된 IP 주소에서 나오는 요청을 필터링합니다. 이렇게 하면 IP를 목록에 쉽게 추가하여 웹 사이트에 대한 액세스를 차단할 수 있습니다. 하나 이상의 IP 주소에서 잘못된 요청을 많이 받는 경우 이 방법을 사용할 수 있습니다. 요청이 나오는 IP 주소를 기반으로 요청을 허용, 차단 또는 계산하려는 경우 이 자습서 뒷부분의 3단계: (선택 사항) IP 일치 조건에 IP 주소 추가 단원을 참조하십시오.

조건의 이름은 prefixManualBlockSet입니다. 여기서 prefix는 AWS CloudFormation 스택을 생성할 때 웹 ACL에 지정하는 이름입니다.

크기 제약 조건

본문이 8,192바이트보다 긴 요청을 필터링합니다. AWS WAF는 필터에 지정하는 요청 부분의 처음 8,192바이트만 평가합니다. 유효한 요청 본문이 8,192바이트를 절대 초과하지 않는 경우 크기 제약 조건을 사용하여 다른 방법으로는 통과할 수 있는 악성 요청을 포착할 수 있습니다.

이 자습서의 경우 AWS CloudFormation은 본문이 8,192바이트보다 긴 요청을 차단하지 않고 계산만 하도록 AWS WAF를 구성합니다. 요청의 본문이 해당 길이를 절대 초과하지 않는 경우 본문이 더 긴 요청을 차단하도록 구성을 변경할 수 있습니다. 8,192바이트를 초과하는 요청 수를 보는 방법 및 8,192바이트보다 긴 본문이 포함된 요청을 차단하도록 웹 ACL을 변경하는 방법에 대한 자세한 내용은 4단계: (선택 사항) 웹 ACL을 업데이트하여 큰 본문 차단 단원을 참조하십시오.

조건의 이름은 prefixLargeBodyMatch입니다. 여기서 prefix는 AWS CloudFormation 스택을 생성할 때 웹 ACL에 지정하는 이름입니다.

SQL 명령어 주입 조건

악성일 수 있는 SQL 코드가 포함된 요청을 필터링합니다. 조건에는 요청의 다음 부분을 평가하는 필터가 포함됩니다.

  • 쿼리 문자열(URL 디코드 변환)

  • URI(URL 디코드 변환)

  • 본문(URL 디코드 변환)

  • 본문(HTML 디코드 변환)

조건의 이름은 prefixSqliMatch입니다. 여기서 prefix는 AWS CloudFormation 스택을 생성할 때 웹 ACL에 지정하는 이름입니다.

교차 사이트 스크립팅 조건

악성일 수 있는 스크립트가 포함된 요청을 필터링합니다. 조건에는 요청의 다음 부분을 평가하는 필터가 포함됩니다.

  • 쿼리 문자열(URL 디코드 변환)

  • URI(URL 디코드 변환)

  • 본문(URL 디코드 변환)

  • 본문(HTML 디코드 변환)

조건의 이름은 prefixXssMatch입니다. 여기서 prefix는 AWS CloudFormation 스택을 생성할 때 웹 ACL에 지정하는 이름입니다.

규칙

AWS CloudFormation 스택을 생성할 때 AWS CloudFormation은 다음 규칙을 생성하고 해당 조건을 각 규칙에 추가합니다.

prefixManualIPBlockRule

AWS CloudFormation은 prefixManualBlockSet 조건을 이 규칙에 추가합니다.

prefixSizeMatchRule

AWS CloudFormation은 prefixLargeBodyMatch 조건을 이 규칙에 추가합니다.

prefixSqliRule

AWS CloudFormation은 prefixSqliMatch 조건을 이 규칙에 추가합니다.

prefixXssRule

AWS CloudFormation은 prefixXssMatch 조건을 이 규칙에 추가합니다.

웹 ACL

AWS CloudFormation은 AWS CloudFormation 스택을 생성할 때 지정하는 이름이 있는 웹 ACL을 생성합니다. 웹 ACL에는 지정된 설정과 함께 다음 규칙이 포함됩니다.

prefixManualIPBlockRule

기본적으로 이 규칙의 조건에는 IP 주소가 포함되지 않습니다. 요청이 나오는 IP 주소를 기반으로 요청을 허용, 차단 또는 계산하려는 경우 이 자습서 뒷부분의 3단계: (선택 사항) IP 일치 조건에 IP 주소 추가 단원을 참조하십시오.

prefixSizeMatchRule

기본적으로 AWS WAF는 본문이 8,192바이트보다 긴 요청을 계산합니다.

prefixSqliRule

AWS WAF는 이 규칙의 설정을 기반으로 요청을 차단합니다.

prefixXssRule

AWS WAF는 이 규칙의 설정을 기반으로 요청을 차단합니다.

요구 사항

이 자습서에서는 웹 애플리케이션용 콘텐츠를 제공하는 데 사용하는 CloudFront 배포가 있다고 가정합니다. CloudFront 배포가 없는 경우 Amazon CloudFront 개발자 안내서CloudFront 콘솔을 사용하여 웹 배포 생성 또는 업데이트 단원을 참조하십시오. 이 자습서에서는 AWS CloudFormation을 사용하여 프로비저닝 프로세스를 간소화합니다. 자세한 내용은 AWS CloudFormation 사용 설명서 단원을 참조하십시오.

예상 소요 시간

이 자습서를 완료하기 위한 예상 시간은 CloudFront 배포가 이미 있는 경우 15분 또는 CloudFront 배포를 생성해야 하는 경우 30분입니다.

비용

이 자습서를 진행하는 동안 생성하는 리소스와 관련된 비용이 있습니다. 자습서를 완료한 후 리소스를 삭제하여 비용 발생을 방지할 수 있습니다. 자세한 내용은 AWS WAF 요금Amazon CloudFront 요금 단원을 참조하십시오.

1단계: 일반적인 공격에 대해 AWS WAF 보호를 설정하는 AWS CloudFormation 스택 생성

다음 절차에서는 AWS CloudFormation 템플릿을 사용하여 일반적인 공격에 대해 AWS WAF 보호를 설정하는 스택을 생성합니다.

중요

이 솔루션을 배포하는 AWS CloudFormation 스택을 생성하면 다른 서비스에 대한 요금이 발생하기 시작합니다. 요금은 AWS CloudFormation 스택을 삭제할 때까지 계속 누적됩니다. 자세한 내용은 5단계: (선택 사항) AWS CloudFormation 스택 삭제 단원을 참조하십시오.

잘못된 요청을 제출하는 IP 주소를 차단하기 위한 AWS CloudFormation 스택을 생성하려면

  1. AWS CloudFormation 스택을 생성하는 프로세스를 시작하려면 AWS 리소스를 생성하려는 리전에 대한 링크를 선택합니다.

  2. AWS Management 콘솔에 아직 로그인하지 않았다면 메시지가 표시될 때 로그인합니다.

  3. [Select Template] 페이지에서 [Specify an Amazon S3 template URL]을 선택합니다. 템플릿 URL에서 https://s3.amazonaws.com/cloudformation-examples/community/common-attacks.json을 입력합니다.

  4. [Next]를 선택합니다.

  5. [Specify Details] 페이지에서 다음 값을 지정합니다.

    [Stack Name ]

    기본 이름(CommonAttackProtection)을 사용할 수도 있고 이름을 변경할 수도 있습니다. 스택 이름에는 공백이 포함될 수 없으며 AWS 계정 내에서 고유해야 합니다.

    이름

    AWS CloudFormation에서 생성할 웹 ACL의 이름을 지정합니다. 지정하는 이름은 AWS CloudFormation에서 생성하는 조건과 규칙의 접두사로도 사용되므로 모든 관련 객체를 쉽게 찾을 수 있습니다.

  6. [Next]를 선택합니다.

  7. (선택 사항) [Options] 페이지에서 태그와 고급 설정을 입력하거나 입력란을 공백으로 둡니다.

  8. [Next]를 선택합니다.

  9. [Review] 페이지에서 구성을 검토한 다음 [Create]를 선택합니다.

    생성을 선택하면 AWS CloudFormation은 솔루션 개요에서 식별된 AWS WAF 리소스를 생성합니다.

2단계: CloudFront 배포와 웹 ACL 연결

AWS CloudFormation에서 스택을 생성한 후에는 CloudFront 배포를 연결하여 AWS WAF를 활성화해야 합니다

참고

웹 ACL 한 개를 원하는 개수 만큼의 배포와 연결할 수 있지만, 특정 배포에는 웹 ACL 한 개만 연결할 수 있습니다.

웹 ACL을 CloudFront 배포에 연결하려면

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/waf/에서 AWS WAF 콘솔을 엽니다.

  2. 탐색 창에서 [Web ACLs]를 선택합니다.

  3. CloudFront 배포와 연결할 웹 ACL을 선택합니다.

  4. [Rules] 탭의 [AWS resources using this web ACL]에서 [Add association]을 선택합니다.

  5. 메시지가 표시되면 [Resource] 목록을 사용하여 이 웹 ACL을 연결할 배포를 선택합니다.

  6. [추가]를 선택합니다.

  7. 이 웹 ACL을 추가 CloudFront 배포와 연결하려면 4~6단계를 반복합니다.

3단계: (선택 사항) IP 일치 조건에 IP 주소 추가

AWS CloudFormation 스택을 생성할 때 AWS CloudFormation은 IP 일치 조건을 생성하여 규칙에 추가하고 규칙을 웹 ACL에 추가한 다음 IP 주소를 기반으로 요청을 차단하도록 웹 ACL을 구성했습니다. 하지만 IP 일치 조건에는 IP 주소가 포함되지 않습니다. IP 주소를 기반으로 요청을 차단하려는 경우 다음 절차를 수행합니다.

AWS CloudFormation 파라미터 값을 편집하려면

  1. https://console.aws.amazon.com/waf/에서 AWS WAF 콘솔을 엽니다.

  2. 탐색 창에서 [IP addresses]를 선택합니다.

  3. [IP match conditions] 창에서 편집하려는 IP 일치 조건을 선택합니다.

  4. IP 주소 범위를 추가하려면:

    1. 오른쪽 창에서 [Add IP address or range]를 선택합니다.

    2. CIDR 표기법을 사용하여 IP 주소 또는 범위를 입력합니다. 다음은 두 가지 예제입니다.

      • IP 주소 192.0.2.44를 지정하려면 [192.0.2.44/32]를 입력합니다.

      • 192.0.2.0부터 192.0.2.255까지의 IP 주소 범위를 지정하려면 [192.0.2.0/24]를 입력합니다.

      AWS WAF는 /8 및 /16~/32 사이의 모든 범위 등의 IPv4 주소 범위를 지원합니다. AWS WAF는 /16, /24, /32, /48, /56, /64 및 /128 등의 IPv6 주소 범위를 지원합니다. CIDR 표기법에 대한 자세한 내용은 클래스 없는 도메인 간 라우팅에 대한 Wikipedia 항목을 참조하십시오.

      참고

      AWS WAF는 IPv4 및 IPv6 IP 주소를 모두 지원합니다.

    3. IP 주소를 추가하려면 [Add another IP address]를 선택한 다음 값을 입력합니다.

    4. 추가를 선택합니다.

4단계: (선택 사항) 웹 ACL을 업데이트하여 큰 본문 차단

AWS CloudFormation 스택을 생성할 때 AWS CloudFormation은 요청 본문이 8,192바이트보다 긴 요청을 필터링하는 크기 제약 조건을 생성했습니다. 또한 조건을 규칙에 추가하고 규칙을 웹 ACL에 추가했습니다. 이 예제에서 AWS CloudFormation은 요청을 차단하지 않고 요청을 계산하도록 웹 ACL을 구성했습니다. 이 방법은 유효한 요청을 실수로 차단하지 않도록 하려는 경우에 유용합니다.

8,192바이트보다 긴 요청을 차단하려는 경우 다음 절차를 수행합니다.

웹 ACL에서 규칙에 대한 작업을 변경하려면

  1. https://console.aws.amazon.com/waf/에서 AWS WAF 콘솔을 엽니다.

  2. 탐색 창에서 [Web ACLs]를 선택합니다.

  3. 편집하려는 웹 ACL을 선택합니다.

  4. 오른쪽 창에서 [Rules] 탭을 선택합니다.

  5. [Edit Web ACL]을 선택합니다.

  6. prefixLargeBodyMatchRule에 대한 작업을 변경하려면 원하는 옵션을 선택합니다(여기에서 prefix는 웹 ACL의 이름에서 지정한 값입니다).

  7. [Save changes]를 선택합니다.

5단계: (선택 사항) AWS CloudFormation 스택 삭제

솔루션 개요의 설명과 같이 일반적인 공격에 대한 보호를 중지하려는 경우 1단계: 일반적인 공격에 대해 AWS WAF 보호를 설정하는 AWS CloudFormation 스택 생성에서 생성한 AWS CloudFormation 스택을 삭제합니다. 이렇게 하면 AWS CloudFormation에서 생성한 AWS WAF 리소스가 삭제되고 해당 리소스에 대한 AWS 요금 청구가 중단됩니다.

AWS CloudFormation 스택을 삭제하려면

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  2. 스택에 대한 확인란을 선택합니다. 기본 이름은 CommonAttackProtection입니다.

  3. [Delete Stack]을 선택합니다.

  4. 확인하려면 [Yes, Delete]를 선택합니다.

  5. 스택 삭제 진행률을 추적하려면 스택에 대한 확인란을 선택한 다음 하단 창에서 [Events] 탭을 클릭합니다.

관련 리소스

Lambda 함수, AWS CloudFormation 템플릿 및 SDK 사용 예를 포함한 AWS WAF 샘플은 https://github.com/awslabs/aws-waf-sample의 GitHub를 참조하십시오.