일반적인 공격으로부터 리소스를 보호하도록 AWS WAF를 구성하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2020년 11월 27일

일반적인 공격으로부터 리소스를 보호하도록 AWS WAF를 구성하려면 어떻게 해야 하나요?

해결 방법

AWS WAF 클래식에서 AWS WAF로 마이그레이션(해당하는 경우)

AWS WAF 클래식을 사용하는 경우 AWS WAF로 마이그레이션하는 것이 좋습니다. 이 마이그레이션을 수행하기 위해 자동화된 마이그레이션 도구를 활용할 수 있습니다. 자세한 내용은 AWS WAF로 마이그레이션하는 이유는 무엇인가요?를 참조하세요.

애플리케이션에 대한 침투 테스트를 실행하여 취약성 식별

모든 애플리케이션은 자체 유형의 요청을 수신합니다. 따라서 애플리케이션을 보호하는 방화벽 규칙을 사용자 지정해야 합니다.

애플리케이션에 대한 침투 테스트를 실행하여 특정 취약성을 파악합니다. 자세한 내용은 다음을 참조하세요.

수신 요청을 검토하여 사용자 지정 규칙 최적화

애플리케이션을 보호하기 위한 사용자 지정 규칙을 만들기 전에 환경에서 수신 요청을 검토하세요.

먼저 다음을 사용하여 로그를 생성합니다.

  • AWS WAF
  • Amazon CloudFront
  • Application Load Balancer
  • Amazon API Gateway

그런 다음 이러한 로그를 Amazon Simple Storage Service(Amazon S3)에 저장합니다. 마지막으로 Amazon Athena를 사용하여 로그를 쿼리하고 패턴을 식별합니다. 예를 들어 다음과 같은 패턴을 볼 수 있습니다.

  • 존재하지 않는 URI에 대한 환경 요청
    • 이 패턴을 인식하려면 지원되는 모든 URI를 알아야 합니다.
    • 각 URI에 대한 요청 수를 계산하기 위해 AWS WAF 로그에서 수행되는 Athena 쿼리의 예:
SELECT count("httprequest"."uri") as URIcount, "httprequest"."uri"
FROM waf_logs
GROUP BY "httprequest"."uri"
ORDER BY URIcount DESC
  • 웹 서버에서 지원하지 않는 HTTP Host 헤더를 포함하는 요청 또는 웹 사이트의 도메인 이름 대신 IP 주소를 포함하는 요청
    • Host 헤더 값이 다른 요청 수를 계산하기 위해 AWS WAF 로그에서 수행되는 Athena 쿼리의 예:
SELECT header.value as HostHeader, count(header) as count
FROM waf_logs, UNNEST(httprequest.headers) AS x(header)
WHERE "header"."name" = 'Host'
GROUP BY  header
ORDER BY count DESC

패턴을 식별한 후 COUNT 모드에서 AWS WAF 규칙을 생성하여 해당 요청과 일치하도록 규칙이 구성되었는지 확인할 수 있습니다. 그런 다음 규칙을 BLOCK 모드로 이동합니다.

예를 들어 애플리케이션이 Host 헤더 “www.example.com”만 지원하는 경우:

  • “www.example.com” 값을 사용하여 HOST 헤더에 NOT match 항목 생성
  • 작업을 BLOCK으로 설정

“www.example.com”이라는 Host 헤더가 없는 환경에 대한 요청은 이제 차단됩니다. 
참고: 이 규칙은 AWS에서 제공하는 정규화된 도메인 이름(FQDN)에 대한 요청도 차단합니다.

AWS 관리형 규칙을 사용하여 일반적인 공격으로부터 보호

AWS 관리형 규칙으로 다음과 같은 요청을 비롯하여 대부분의 애플리케이션에 적용되는 일반적인 공격을 차단합니다.

  • User-Agent 포함 안 함
  • 봇 요청 표시
  • HTTP Host 헤더로 “localhost” 사용
  • PROPFIND HTTP 메서드 사용

COUNT 모드의 웹 액세스 제어 목록(ACL)에 이러한 기준 규칙 그룹을 포함합니다. 규칙 그룹에서 [“Count 모드 사용(Enable Count mode)”]을 선택해야 합니다. 그런 다음 AWS WAF 로그와 CloudWatch 지표를 검토하여 관리형 규칙이 합법적인 트래픽과 일치하는지 확인합니다. 그렇지 않으면 [“Count 모드 사용(Enable Count mode)”]을 비활성화하여 규칙 그룹을 BLOCK으로 이동합니다. AWS 관리형 규칙 그룹에서 특정 규칙을 비활성화하려면 해당 규칙에 대해 [“규칙 재정의 작업(Override rules action)”]을 선택합니다.

참고: AWS 관리형 규칙은 환경에 대한 합법적인 요청에 의해 트리거될 수 있습니다. 자세한 내용은 AWS 관리형 규칙에서 발생한 거짓 긍정을 감지하여 수신 허용 목록에 추가하려면 어떻게 해야 하나요?를 참조하세요.

중요: AWS 관리형 규칙은 일반적인 웹 위협으로부터 사용자를 보호하도록 설계되었습니다. 설명서에 따라 사용할 경우 AWS 관리형 규칙 그룹은 애플리케이션에 대한 다른 보안 계층을 추가합니다. 그러나 AWS 관리형 규칙 그룹은 사용자가 선택한 AWS 리소스에 의해 결정되는 보안 책임을 대신하기 위한 것이 아닙니다. AWS의 리소스가 제대로 보호되는지 확인하려면 공동 책임 모델을 참조하세요.

합법적인 요청 비율을 사용하여 AWS WAF 기준 설정

트래픽 분석을 수행하여 AWS WAF 로그에서 Amazon Athena 또는 Amazon Quicksight를 사용하여 합법적인 클라이언트 IP 주소의 요청 수를 식별합니다. 이 분석에서 얻은 정보를 사용하여 합법적인 클라이언트의 요청 비율에 따라 AWS WAF 기준을 설정합니다. 그런 다음 AWS WAF 비율 기반 규칙을 구성하는 동안 임계값을 설정합니다.

주어진 기간(2020년 11월 16일 오전 9~오후 10시) 사이에 단일 IP 주소(x.x.x.x)로부터의 요청 수를 계산하기 위해 AWS WAF 로그에 대해 수행되는 샘플 Athena 쿼리:

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE httprequest.clientip LIKE 'x.x.x.x' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"

AWS WAF 로그에 대해 수행된 샘플 Athena 쿼리는 동일한 기간 사이의 모든 IP 주소에서 발생한 요청 수를 계산합니다.

SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC

AWS WAF Security Automations 템플릿을 사용하여 일반적인 공격 방지

AWS WAF Security Automations 템플릿을 사용하여 일반적인 공격으로부터 추가적인 보호 기능을 제공합니다. 예를 들어 다음과 같은 보호 기능을 사용할 수 있습니다.

  • 스캐너 및 프로브
  • 불량 봇
  • 잘못된 IP 주소

참고: 이 솔루션은 비용이 발생하는 다른 AWS 서비스를 사용합니다.

SQL 주입 및 교차 사이트 스크립팅으로부터 보호

SQL 주입 및 교차 사이트 스크립팅(XSS) 공격으로부터 애플리케이션을 보호하려면 기본 제공 SQL 주입교차 사이트 스크립팅 엔진을 사용합니다. HTTP 헤더, 쿼리 문자열 또는 URI와 같은 HTTP 요청의 여러 부분에서 공격을 수행할 수 있습니다. 기본 제공 완화 엔진과 비교하여 HTTP 요청의 여러 부분을 검사하도록 AWS WAF 규칙을 구성합니다.

참고: 환경에 대한 합법적인 요청에 의해 완화 엔진의 규칙이 트리거될 수 있습니다. 자세한 내용은 AWS 관리형 규칙에서 발생한 거짓 긍정을 감지하여 수신 허용 목록에 추가하려면 어떻게 해야 하나요?를 참조하세요.

CloudFront의 액세스 제한(CloudFront에서 AWS WAF를 사용하는 경우)

DDoS 공격으로부터 보호

분산 서비스 거부(DDoS) 공격으로부터 보호하는 방법에 대한 자세한 내용은 DDoS 복원력을 위한 AWS 모범 사례 및 AWS Shield 기능을 참조하세요.</p


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?