일반적인 공격으로부터 리소스를 보호하도록 AWS WAF를 구성하려면 어떻게 해야 하나요?
일반적인 공격으로부터 리소스를 보호하도록 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 호스트 헤더가 포함된 요청 또는 웹사이트의 도메인 이름 대신 IP 주소를 포함하는 요청
-
호스트 헤더 값이 다른 요청을 계산하기 위해 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 모드로 이동합니다.
예를 들어, 애플리케이션이 호스트 헤더 “www.example.com”만 지원하는 경우
- 호스트 헤더에 값이 “www.example.com”인 NOT match를 생성하세요.
- 동작을 BLOCK으로 설정합니다.
호스트 헤더에 “www.example.com”이 없는 사용자 환경에 대한 모든 요청은 이제 차단됩니다.
참고: 또한 이 규칙은 AWS에서 제공한 FQDN(정규화된 도메인 이름)에 대한 요청을 차단합니다.
AWS 관리형 규칙을 사용하여 일반적인 공격으로부터 보호
AWS 관리형 규칙을 사용하면 다음과 같은 요청을 포함하여 대부분의 애플리케이션에 적용되는 일반적인 공격을 방지할 수 있습니다.
- User-Agent 포함 안 함
- 봇 요청 제시
- HTTP 호스트 헤더로 "localhost" 사용
- PROPFIND HTTP 메서드 사용
이러한 기준 규칙 그룹을 COUNT 모드의 웹 액세스 제어 목록(웹 ACL)에 포함합니다. 규칙 그룹에서 “카운트 모드 활성화”를 선택해야 합니다. 그런 다음 AWS WAF 로그와 CloudWatch 지표를 검토하여 관리형 규칙이 합법적인 트래픽과 일치하는지 확인합니다. 그렇지 않으면 “Enable Count mode”를 비활성화하여 규칙 그룹을 BLOCK으로 이동합니다. AWS 관리형 규칙 그룹에서 특정 규칙을 비활성화하려면 해당 규칙의 “규칙 재정의 작업”을 선택합니다.
참고: 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 로그에서 동일한 기간 동안 모든 IP 주소의 요청 수를 계산하기 위해 수행한 샘플 Athena 쿼리:
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 보안 자동화 템플릿을 사용하여 일반적인 공격을 방지하세요.
AWS WAF 보안 자동화 템플릿을 사용하여 일반적인 공격으로부터 추가 보호를 제공합니다. 예를 들어, 다음에 대한 보호를 활성화할 수 있습니다.
- 스캐너 및 프로브
- 불량 봇
- 잘못된 IP 주소
참고: 이 솔루션은 비용이 발생하는 다른 AWS 서비스를 사용합니다.
SQL 명령어 삽입 및 크로스 사이트 스크립팅으로부터 보호
SQL 명령어 삽입 및 크로스 사이트 스크립팅(XSS) 공격으로부터 애플리케이션을 보호하려면 내장된 SQL 명령어 삽입 및 크로스 사이트 스크립팅 엔진을 사용하세요. HTTP 헤더, 쿼리 문자열 또는 URI와 같은 HTTP 요청의 다양한 부분에서 공격을 수행할 수 있다는 점을 기억하세요. 내장된 완화 엔진과 비교하여 HTTP 요청의 여러 부분을 검사하도록 AWS WAF 규칙을 구성합니다.
참고: 완화 엔진의 규칙은 환경에 대한 합법적인 요청에 의해 트리거될 수 있습니다. 자세한 내용은 AWS 관리형 규칙으로 인한 오탐지를 감지하여 허용 목록에 추가하려면 어떻게 해야 하나요?를 참조하세요.
CloudFront에서의 액세스를 제한합니다(CloudFront에서 AWS WAF를 사용하는 경우)
- CloudFront IP 주소를 기반으로 액세스를 제한합니다.
- 오리진 요청에 대해 CloudFront에 사용자 지정 헤더를 추가합니다. 오리진에서는 사용자 지정 헤더와 값이 있는 경우에만 액세스를 허용합니다. 오리진이 Application Load Balancer 또는 API Gateway인 경우 오리진에서 AWS WAF를 사용하여 사용자 지정 헤더 및 값이 포함된 요청을 허용하세요.
DDoS 공격으로부터 보호
분산 서비스 거부(DDoS) 공격으로부터의 보호에 대한 자세한 내용은 DDoS 복원력에 대한 AWS 모범 사례 및 AWS Shield 기능을 참조하세요.
관련 콘텐츠
- 질문됨 5년 전lg...
- AWS 공식업데이트됨 2년 전