AWS 기술 블로그

AWS WAF에서 AWS 관리형 규칙의 동작을 커스터마이징하는 방법

이 글은 AWS Security Blog에 게시된 How to customize behavior of AWS Managed Rules for AWS WAF by Madhu Kondur and Venugopal Pai을 한국어 번역 및 편집하였습니다.

AWS WAFAWS 관리형 규칙은 자체 규칙을 작성하지 않고도 일반적인 애플리케이션 취약성 및 시스템에 대한 기타 원치 않는 액세스로부터 사용자를 보호하는 데 사용할 수 있는 AWS에서 생성한 규칙 그룹을 제공합니다. AWS 위협 연구 팀은 애플리케이션을 보호하기 위해 끊임없이 변화하는 위협 환경에 발맞추어 AWS 관리형 규칙을 업데이트합니다.

최근 AWS WAF는 사용자 정의 규칙에 중점을 둔 4가지 새로운 기능을 출시했습니다.

  • 레이블 – 규칙이 일치할 때 웹 요청에 추가할 수 있는 메타데이터입니다. 레이블을 사용하여 관리형 규칙의 동작 또는 기본 작업을 변경할 수 있습니다.
  • 버전 관리 – 관리형 규칙 그룹의 특정 버전을 선택할 수 있습니다. 버전 관리를 사용하여 이전에 테스트한 버전으로 되돌릴 수 있습니다.
  • 범위 축소 문 – 규칙 그룹이 평가하는 요청 범위를 좁히는 데 사용합니다.
  • 사용자 정의 응답 – 규칙이 연결 요청을 차단하면 AWS WAF에서 클라이언트로 사용자 정의 HTTP 응답을 다시 보냅니다.

이 블로그에서는 네 가지 사용 사례를 통해 이러한 기능을 사용하여 관리형 규칙을 커스터마이징하여 보안 상태를 개선하는 방법을 보여줍니다.

사례 1: 특정 버전을 선택하여 관리형 규칙 그룹에 대한 자동 업데이트 제어

기본적으로 관리형 규칙 그룹은 새로운 버전의 업데이트가 사용 가능해지면 자동으로 최신 버전으로 업데이트됩니다. 이렇게 하면 최신 버전의 관리형 규칙 그룹이 사용 가능해 지는 즉시 해당 규칙을 사용할 수 있습니다. 버전 관리 기능을 사용하면 특정 버전을 유지하도록 선택할 수 있습니다. 즉, 명시적으로 최신 버전을 적용할 때까지 기존 버전에서 변경되지 않습니다. 이를 통해 새 버전을 테스트하고 준비가 되면 새 버전을 당신의 웹 ACL에 적용할 수 있으며, 필요한 경우 이전에 테스트한 버전으로 돌아갈 수 있습니다.

참고: 가능한 한 최신 버전에 가까운 버전을 사용하는 것이 좋습니다.

관리형 규칙 그룹 버전을 선택하려면

  1. AWS WAF 콘솔에서 관리형 규칙 그룹을 추가한 웹 ACL로 이동합니다.
  2. 버전을 설정할 관리형 규칙 그룹을 선택하고 편집을 선택합니다.
  3. 버전 선택 셀렉트박스에서 사용하려는 버전을 선택합니다. 버전이 만료되거나 다른 버전을 선택할 때까지 이 버전을 유지하게 됩니다. – 이 게시물의 뒷부분에서 버전 만료를 관리하는 방법을 배우게 됩니다.

참고: 업데이트를 자동으로 적용하려면, 기본값으로 버전을 선택하십시오.

  1. 규칙 저장을 선택하여 구성을 저장합니다.

그림 1: AWS 관리형 규칙 버전 셀렉트박스를 보여주는 콘솔 스크린샷

알림 설정

Amazon Simple Notification Service(Amazon SNS)를 사용하여 관리형 규칙 그룹에 대한 업데이트 알림을 받을 수 있습니다. 관리형 규칙 그룹의 ARN을 사용하여 SNS 주제를 구독할 수 있습니다. AWS 관리형 규칙 업데이트에 대한 모든 SNS 알림은 동일한 메시지 형식을 사용하므로 이러한 업데이트를 프로그래밍 방식으로 사용할 수 있습니다. SNS 알림 메시지 형식에 대한 자세한 내용은 관리형 규칙 그룹에 대한 새 버전 및 업데이트 알림 받기를 참조하세요.

Amazon SNS를 통해 새 규칙 업데이트에 대한 이메일 알림을 설정하려면

  1. AWS WAF 콘솔에서 관리형 규칙 그룹을 추가한 웹 ACL로 이동합니다.
  2. 알림을 받을 관리형 규칙 그룹을 선택하고 편집을 선택합니다.
  3. 핵심 규칙 세트 페이지에서 Amazon SNS 주제 ARN을 찾습니다. 링크를 선택하여 Amazon SNS 콘솔로 이동합니다. 4단계에서 사용할 주제 ARN을 기록해 둡니다.

그림 2: SNS 주제 ARN이 강조 표시된 콘솔 스크린샷

  1. 구독 생성 페이지에서 다음 정보를 입력합니다.
    주제 ARN: 3단계의 SNS 주제 ARN을 입력합니다.
    프로토콜: 이메일을 선택합니다.
    끝점: 알림을 보낼 이메일 주소를 입력합니다.


그림 3: SNS 구독 생성 콘솔 스크린샷

  1. 구독 생성을 선택합니다.
  2. Amazon SNS의 확인 이메일을 확인합니다. 이메일에서 구독 확인 링크를 선택하여 구독을 완료합니다.

CloudWatch 알람을 사용하여 버전 만료 알림 설정

관리형 규칙 그룹의 특정 버전을 오랫동안 유지하면 중요한 업데이트를 놓칠 위험이 있습니다. 보안성이 떨어지는 과거 버전에 계속해서 머물지 않으려면 버전 만료가 임박했을 때 알려주는 알람을 설정해야 합니다. 버전이 만료되면 관리형 규칙 그룹이 자동으로 기본 버전으로 전환됩니다. 버전 만료가 임박했을 때 알림을 받으려면 DaysToExpiry를 기반으로 Amazon CloudWatch 알람을 사용하여 알림을 설정하십시오. 다음 절차를 사용하여 사용 중인 규칙 집합의 특정 버전이 만료되기 60일 전에 알림을 설정할 수 있습니다.

CloudWatch 알람을 설정하려면

특정 버전의 규칙 집합이 만료되기 60일 전에 알려줍니다.

  1. CloudWatch 콘솔로 이동합니다.
  2. 왼쪽 탐색 창에서 모든 지표를 선택한 다음 네임스페이스 목록에서 WAFV2를 선택합니다.
  3. ManagedRuleGroup, Region, Vendor, Version을 선택합니다.
  4. 만료를 모니터링하려는 관리형 규칙 그룹을 선택합니다. 이 예에서는 AWSManagedRulesCommonRuleSetVersion_1.0을 사용합니다.
  5. 그래프로 표시된 지표를 선택하고 작업 아래 오른쪽 하단에 있는 벨 알람 아이콘을 선택합니다. 이 아이콘을 선택하면 CloudWatch 알람 콘솔로 이동합니다.


그림 4: CloudWatch 그래프로 표시된 지표

  1. 다음 세부 정보로 CloudWatch 알람을 구성한 후 다음을 선택합니다.
    통계: 최소값 선택
    기간: 5분 선택
    임계값 유형: 정적 선택
    연산자: 하한/동일 선택(<=임계값)
    임계값: 값을 60으로 입력합니다.
    알람에 대한 데이터 포인트: 낮은 값을 1로, 높은 값을 1로 입력합니다.
    누락된 데이터 처리: 누락된 데이터를 정상으로 처리(임계값을 위반하지 않음)를 선택합니다.
  2. 구성된 알람이 활성화 상태가 될 때 실행하려는 SNS 주제를 선택하고 다음을 선택합니다.
  3. 알람의 이름과 설명을 입력합니다. 다음을 선택하여 구성을 미리 보고 알람 생성을 선택하여 CloudWatch 알람 생성 프로세스를 완료합니다.

추가 팁

  • 사용 중인 관리형 규칙 그룹의 버전이 만료된 경우 AWS WAF는 유효한 버전을 선택할 때까지 웹 ACL에 대한 구성 변경을 방지합니다. 최신 위협에 대비할 수 있도록 가능한 한 빨리 최신 버전으로 이동해야 합니다.
  • 웹 ACL을 통과하는 트래픽이 있는 경우에만 DaysToExpiry 지표를 받게 됩니다.
  • 웹 ACL에서 두 가지 버전의 관리형 규칙 그룹을 사용할 수 있습니다. 두 가지 다른 버전을 동시에 테스트하여 배포된 후 트래픽에 어떤 영향을 미치는지 확인하려는 경우에 유용할 수 있습니다. 예를 들어 한 버전은 Count 모드에 있고 다른 버전은 차단 모드에 있습니다.

참고: 이 워크플로는 JSON 규칙 편집기 및 API를 통해 지원되지만 콘솔을 통해서는 지원되지 않습니다.

사례 2: 레이블을 사용하여 관리형 규칙 그룹의 규칙으로 인해 발생하는 오탐지를 완화

레이블은 규칙과 연결된 작업에 관계없이 규칙이 일치하는 웹 요청에 추가할 수 있는 메타데이터입니다. 최신 버전의 AWS 관리형 규칙은 레이블을 지원합니다. 레이블이 있는 요청과 일치하는 사용자 정의 규칙을 생성하면 관리형 규칙 그룹 내에서 규칙의 동작 또는 기본 작업을 변경할 수 있습니다.

예를 들어 관리형 규칙 그룹에서 오탐지를 유발하는 규칙이 있는 경우 관리형 규칙을 Count로 재정의하고 다음과 유사한 논리로 사용자 정의 규칙을 작성하여 오탐지를 완화할 수 있습니다.

IF (조건문 1) AND NOT (조건문 2) THEN Block
조건문 1은 오탐지를 유발하는 규칙에서 생성된 레이블과 일치합니다.
조건문 2에는 오탐지를 유발하기 때문에 규칙을 평가하지 않으려는 경우에 대한 예외 조건이 포함되어 있습니다.

사용 중인 관리형 규칙 그룹의 GenericRFI_QUERYARGUMENTS 규칙으로 인해 애플리케이션에 대한 리디렉션 요청이 차단되는 시나리오를 고려하십시오. 이 규칙은 모든 쿼리 매개변수의 값을 검사하고 URL 중간에 포함된 ://와 같은 웹 애플리케이션의 RFI(원격 파일 포함)를 악용하려는 요청을 차단합니다. 쿼리 인수 범위에 있는 :// 문자로 인해 차단될 수 있는 합법적인 리디렉션 요청의 예는 다음과 같습니다.

https://ourdomain.com/sso/complete?scope=email profile https://www.redirect-domain.com/auth/email https://www.redirect-domain.com/auth/profile

유사한 적법한 요청이 차단되지 않도록 하기 위하여 레이블을 기반으로 일치시킬 사용자 정의 규칙을 작성할 수 있습니다.

1단계: 특정 관리형 규칙 그룹을 Count 모드로 설정

첫 번째 단계는 레이블이 일치하는 요청에 추가되도록 특정 관리형 규칙을 Count 모드로 설정하는 것입니다. 다음으로 관리형 규칙의 우선 순위를 사용자 정의 규칙의 우선 순위보다 높게 설정해야 합니다.

특정 관리형 규칙 그룹을 Count 모드로 설정하려면

  1. AWS WAF 콘솔에서 웹 ACL로 이동하고 규칙 탭을 선택합니다. 규칙 추가를 선택한 다음 관리형 규칙 그룹 추가를 선택합니다.
  2. AWS 관리형 규칙 그룹을 선택합니다.
  3. 무료 규칙 그룹에서 핵심 규칙 세트를 찾아 웹 ACL에 추가 토글을 선택하여 웹 ACL에 추가합니다.
  4. 편집을 선택합니다.
  5. 규칙 목록에서 규칙 옆에 있는 Count 토글을 선택하여 오탐지를 생성하는 규칙을 Count 작업으로 설정합니다. 이 예제는 GenericRFI_QUERYARGUMENTS 규칙에 대한 작업을 Count로 변경합니다. 이렇게 하면 일치하는 모든 요청이 우선 순위에 따라 후속 WAF 규칙으로 전송되고 일치하는 요청이 있을 때마다 레이블 awswaf:managed:aws:commonruleset:GenericRFI_QueryArguments가 추가됩니다.
  6. 규칙 저장을 선택합니다.
  7. 규칙 추가를 다시 선택하여 규칙 우선 순위를 설정할 수 있는 다음 창으로 이동합니다. 관리형 규칙은 다음 단계에서 만들 사용자 정의 규칙보다 우선 순위가 높아야 합니다.
  8. 저장을 선택하여 구성을 저장합니다.

2단계: 관리형 규칙보다 우선 순위가 낮은 웹 ACL에 사용자 정의 규칙 추가

찾고 있는 레이블이 있고 오탐지에 대한 예외 조건에 해당하지 않는 요청들을 차단하기 위한 사용자 정의 규칙을 웹 ACL에 만듭니다. 이 사용자 정의 규칙의 우선 순위는 관리형 규칙보다 낮게 설정해야 합니다.

관리형 규칙보다 우선 순위가 낮은 사용자 정의 규칙을 추가하려면

  1. AWS WAF 콘솔에서 웹 ACL 규칙 탭으로 이동하여 규칙 추가를 선택하고 내 고유 규칙 및 규칙 그룹 추가를 선택합니다.
  2. 규칙 유형으로 규칙 빌더를 선택합니다.
  3. 규칙 이름을 입력하고 타입일반 규칙으로 선택합니다.
  4. If a request 셀렉트박스를 사용하여 matches all the statements (AND)를 선택합니다.
  5. 조건문 1은 요청에서 찾고 있는 레이블이 있는지 확인합니다. 이 예에서는 다음 세부 정보로 구성됩니다.
    검사: 레이블 있음을 선택합니다.
    레이블: 레이블을 선택합니다.
    일치 키: awswaf:managed:aws:commonruleset:GenericRFI_QueryArguments를 선택합니다.
  1. 오탐지가 발생한 요청들이 조건문 기준과 일치되지 않고 적법한 요청으로 처리되도록 모든 후속 조건문에는 부정(NOT) 설정을 활성화 해야 합니다. 이 예에서는 요청의 쿼리 문자열에 https://www.redirect-domain.com/이 포함되어 있는지 확인하는 조건문 2에 부정(NOT) 설정을 활성화합니다.
    활성화: 조건문 결과 부정 선택
    검사: 모든 쿼리 매개변수 선택
    일치 유형: 문자열 포함 선택
    일치시킬 문자열: https://www.redirect-domain.com/을 입력
    텍스트 변환: 없음 선택
  1. 작업에서 차단을 선택하고 규칙 추가를 선택합니다.
  2. 규칙 우선 순위 설정 창에서 사용자 정의 규칙의 규칙 우선 순위를 AWS 관리형 규칙 규칙보다 낮게 설정합니다.
  3. 저장을 선택합니다.

사례 3: 범위 축소 문을 사용하여 관리형 규칙 그룹과 일치하는 트래픽 범위를 좁힘

범위 축소 문을 모든 규칙 그룹에 추가하여 규칙 그룹이 평가하는 요청 범위를 좁힐 수 있습니다. 이를 통해 규칙 그룹에서 평가하길 원하는 요청을 걸러내거나 기준을 충족하지 않는 요청들을 제외할 수 있습니다.

AmazonIPReputationList에 대해 평가하지 않으려는 신뢰할 수 있는 IP 주소 목록이 있는 경우를 생각해 보십시오. 평가에서 해당 트래픽을 제외하는 범위 축소 문을 사용하여 이러한 신뢰할 수 있는 IP 주소를 차단하지 않도록 할 수 있습니다.

1단계: 허용된 IP 목록에 대한 IP 집합 만들기

첫 번째 단계는 허용된 IP 목록을 포함하는 IP 집합을 만드는 것입니다. IP 집합은 특정 AWS 리전에서 사용할 용도로 생성할 수 있으며, 만약 웹 ACL이 Amazon CloudFront 배포와 연결된 경우 글로벌 용도로 생성할 수도 있습니다.

IP 집합을 생성하려면

  1. AWS WAF 콘솔에서 IP 집합을 선택한 다음 IP 집합 생성을 선택합니다.
  2. IP 집합 이름에 Allowed IPs를 입력합니다. IP 주소에 허용할 IP를 입력합니다. 완료되면 IP 집합 생성을 선택합니다.


그림 5: IP 집합을 생성하는 콘솔 스크린샷

2단계: 관리형 규칙 그룹에 범위 축소 문 추가

IP 집합을 생성한 후에는, IP 집합의 IP에서 발생하는 트래픽이 관리형 규칙 그룹의 규칙에 대해 평가되지 않도록 관리형 규칙 그룹에 범위 축소 문을 추가할 수 있습니다.

범위 축소 문을 추가하려면

  1. 웹 ACL의 규칙 탭에서, 규칙 추가를 선택하고 관리형 규칙 그룹 추가를 선택합니다.
  2. AWS 관리형 규칙 그룹을 선택합니다.
  3. 무료 규칙 그룹에서 Amazon IP 평판 목록을 켜 웹 ACL에 추가하고 편집을 선택합니다.
  4. 범위 축소 문 활성화를 선택합니다.


그림 6: 범위 축소 문 활성화를 보여주는 콘솔 스크린샷

  1. 이전에 만든 허용된 IP 목록에서 생성되지 않은 요청만 이 규칙 그룹에 대해 평가되도록 조건을 추가합니다. If a request 셀렉트박스를 사용하여 doesn’t match the statements (NOT)을 선택합니다.
    검사: Originates from an IP address in을 선택합니다.
    IP 집합: Allowed-IPs 선택
    발신주소로 사용할 IP 주소: 소스 IP 주소를 선택합니다.


그림 7: Scope down 문 구성 콘솔 스크린샷

  1. 이 규칙을 웹 ACL에 추가하려면 규칙 저장을 선택합니다.

사례 4: 사용자 정의 응답을 사용하여 관리형 규칙 그룹에 대한 기본 차단 작업 변경

AWS WAF는 수신 요청을 차단할 때 응답 코드 403(금지됨)을 보냅니다. 규칙이 요청을 차단할 때 기본 차단 응답 대신에 사용자 정의 응답 기능을 사용하여 클라이언트에 사용자 정의 HTTP 응답을 다시 보낼 수 있습니다. 사용자 정의 응답을 사용하여 상태 코드, 응답 헤더 및 응답 본문을 사용자 정의할 수 있습니다.

VPN을 통해 애플리케이션에 연결할 수 있는 클라이언트에게 응답하고 싶다고 가정해 보겠습니다. 사용자 정의 응답을 사용하여 오류 코드 400(잘못된 요청) 및 정적 본문 메시지(“VPN을 통해 연결하지 마십시오”)를 전송하여 이 동작이 권장되지 않음을 사용자에게 알리려고 합니다. 이렇게 하려면 AWS 관리형 규칙 그룹 AWSManagedRulesAnonymousIpList를 사용한 다음 awswaf:managed:aws:anonymous-ip-list:AnonymousIPList 레이블을 사용하여 사용자 정의 규칙을 설정할 수 있습니다.

1단계: 사용자 정의 응답 본문 만들기

사용자 정의 응답을 만드는 첫 번째 단계는 사용자 정의 응답 본문을 만드는 것입니다. 이것은 맞춤 응답을 보낼 때 표시되는 메시지입니다.

사용자 정의 응답 본문을 생성하려면

  1. AWS WAF 콘솔에서 웹 ACL을 열고 사용자 정의 응답 본문 탭을 선택합니다.
  2. 사용자 정의 응답 본문 생성을 선택합니다.
  3. 응답 본문 개체 이름에 이 응답의 이름(예: Custom-body-IP-list)을 입력합니다.
  4. 응답 본문에 대한 콘텐츠 유형을 선택합니다.
  5. 응답 본문에 클라이언트에게 보내려는 응답을 입력합니다.
  6. 저장을 선택합니다.


그림 8: AWS WAF 콘솔에서 사용자 정의 응답 본문 생성

2단계: 관리형 규칙 그룹의 작업 재정의

사용자 정의 응답을 보내는 데 사용하는 규칙은 Count 모드여야 합니다. 이렇게 하면 일치하는 모든 요청이 우선 순위에 따라 후속 WAF 규칙으로 전송됩니다. 다음 예에서 관리형 규칙 그룹 AWSManagedRulesAnonymousIpList의 AnonymousIPList 규칙은 Count 모드로 설정됩니다. 관리형 규칙 그룹의 작업을 재정의하는 방법에 대한 자세한 내용은 규칙 그룹 또는 해당 규칙의 작업 재정의를 참조하세요.

그림 9: AWS 관리형 규칙을 재정의하는 콘솔 스크린샷

3단계: 요청을 차단하고 사용자 정의 응답을 클라이언트에 다시 보내는 규칙 만들기

이 단계에서는 AWS WAF 레이블 기능을 사용합니다. 위의 사례 2에서 설명한 것처럼 관리형 규칙에 의해 생성된 레이블과 일치하는 사용자 정의 규칙을 만들어야 합니다. 이 경우 사용자 정의 응답을 보내도록 사용자 정의 규칙을 구성해야 합니다.

사용자 정의 규칙을 생성하려면

  1. 사용자 정의 응답 섹션을 펼치고 사용을 선택하십시오.
  2. 응답 코드에서 클라이언트로 보내려는 사용자 정의 HTTP 상태 코드를 입력합니다.
  3. (선택 사항) 사용자 정의 응답 헤더를 추가하려면 응답 헤더 섹션을 사용하십시오.
  4. Choose how you would like to specify the response body에서, 1단계에서 생성한 사용자 정의 응답 본문을 선택합니다.
  5. (선택 사항) 로그에서 활동을 추적하기 위해 추가 레이블을 생성하려는 경우 레이블 추가를 사용할 수 있습니다.
  6. 규칙 추가를 선택합니다.
  7. 사용자 정의 규칙의 규칙 우선 순위를 AWS 관리형 규칙보다 낮게 설정하십시오.
  8. 저장을 선택합니다.


그림 10: 규칙에 대한 사용자 정의 응답 본문을 구성하는 콘솔 스크린샷

요약

이 게시물에서는 웹 애플리케이션을 보호하고 위험을 최소화하기 위하여 레이블, 버전 관리, 범위 축소 문 및 사용자 정의 응답과 같은 새로운 AWS WAF 기능이 AWS 관리형 규칙의 동작을 어떻게 커스터마이징할 수 있는지 설명했습니다. 당신은 레이블과 요청 속성을 결합하여 AWS 관리형 규칙을 커스터마이징하여 요청을 허용/차단하거나 레이블을 사용하여 로그 필터링하는 것과 같이 다양한 방식으로 이러한 기능을 사용할 수 있습니다.

다른 AWS WAF 관련 보안 블로그 게시물에서 AWS WAF에 대해 더 자세히 알아볼 수 있습니다.

더 많은 AWS 보안 뉴스를 원하십니까? Twitter에서 팔로우하세요.

Gabin Lee

Gabin Lee

이갑인 Edge Specialist SA는 CloudFront, Global Accelerator, WAF, Shield 등과 같은 AWS Edge 서비스를 이용하고 있는 고객들을 집중적으로 지원하고 있으며, 다양한 Edge 서비스를 활용하여 확장 가능하고 탄력적이며 안전한 아키텍처를 구축하는 것에 열정적입니다. 이갑인 Edge Specialist SA는 웹 개발자로 커리어를 시작하여 국내 로컬 CDN 필드 및 글로벌 CDN 필드에서 솔루션 개발, 서비스 운영, 기술 지원 등 다양한 역할을 담당하며 다양한 고객들의 서비스 여정을 함께했습니다.