Ssoon

Security Automation for AWS WAF - 1) 환경 구성 본문

AWS Hacking & Security Study

Security Automation for AWS WAF - 1) 환경 구성

구구달스 2023. 9. 11. 22:07
CloudNet@가시다님이 진행하는 "AWS Hacking & Security Study" 1기 스터디입니다.
# [AWS Workshop Studio] Security Automation for AWS WAF 를 참조하였습니다.

 < 전담 보안 팀이 없는 조직의 WAF 규칙 설정의 어려움 >

이 과정을 단순화하기 위해 일반적인 웹 기반 공격을 필터링하는 AWS WAF규칙 세트를 자동으로 배포

사전에 정의된 AWS WAF 웹 ACL 을 선택해서 배포

배포가 완료되면 AWS WAF가 웹 요청을 검사하여 Amazon CloudFront 배포 또는 Application Load Balancer를 보호

출처 :&nbsp;https://catalog.us-east-1.prod.workshops.aws/workshops/e359c0ea-7392-4f6f-b5e3-798928fbdca4/ko-KR


 [ WAF Automation on AWS 아키텍처 ]

AWS WAF Web ACL을 활용해 모든 수신 메세지를 중앙에서

검사(inspection)판정(decision)을 수행

  • AWS WAF 방어기능
   
AWS Managed Rules (A) - 일반적인 애플리케이션 취약점 또는 원치 않는 트래픽의 악용으로부터 보호하기 위한 AWS에서 관리하는 핵심 규칙 집합.
Manual IP lists (B, C) - 수동으로 차단 또는 허용하려는 IP 주소를 삽입할 수 있는 두 개의 특정 AWS WAF 규칙을 생성합니다.
- IP 주소 유지 및 만료된 IP 주소를 이러한 IP 목록에서 제거하기 위한 구성도 가능합니다.
SQL Injection (D) - 일반적인 SQL 삽입 패턴을 검사하여 웹 애플리케이션에서의 SQL 삽입 공격으로부터 보호하기 위한 AWS WAF 규칙 구성.
XSS (E) - URI, 쿼리 문자열 또는 요청 본문에서의 일반적인 XSS 패턴을 검사하여 크로스 사이트 스크립팅 공격으로부터 보호.
HTTP flood (F) - 특정 IP 주소로부터의 많은 요청으로부터 보호하기 위한 기능. 웹 레이어 DDoS 공격 또는 브루트 포스 로그인 시도와 같은 공격을 방어.
- 5분 동안 100개 미만의 요청 임계값을 지원합니다.
Scanners and Probes (G) - 응용 프로그램 액세스 로그를 파싱하여 이상적인 오리진에서 생성된 오류의 비정상적인 양을 탐지하고 해당 IP 주소를 사용자가 정의한 시간 동안 차단합니다.
IP Reputation Lists (H) - IP 목록 파서 AWS Lambda 함수로, 시간당 새로운 차단 범위를 확인하기 위해 타사 IP 평판 목록을 검사합니다.
Bad Bots (I) - 공격을 시도하려는 시도된 공격을 유인하고 방어하기 위한 보안 메커니즘으로 honeypot을 자동으로 설정합니다.

CloudFormation 솔루션 배포

AWS CloudFormation 템플릿 : aws-waf-security-automations.template

 

  • AWS Console에 로그인 후 위에 Launch solution 을 클릭하고 리전을 서울(ap-northeast-2) 로 변경합니다.

  • 파라미터 : 적용한 Use Case에 따라서 각 파라메터를 선택하고 검토합니다.

 

🧿 Resource Type

  • 이 웹 ACL과 연결할 리소스를 선택

  • CloudFront
    • AWS WAF와 통합하여 웹 애플리케이션 공격을 방지하고, 웹 애플리케이션의 가용성을 높이고 성능을 최적화하는 데 사용
  • Application Load Balancer (ALB)
    • AWS WAF와 통합하여 웹 공격을 탐지하고 차단하며, 로드 밸런서 뒤의 백엔드 서버로 트래픽을 분산

  • 실습을 위해 ALB 를 선택합니다.
    • 공격 테스트 실습 AWS WAF를 이용한 방어 시나리오를 실행하시려면 Endpoint Type을 ALB로 선택합니다.


 

🧿 AWS Managed IP Reputation Rule Groups

 

IP 평판 규칙 그룹 - AWS WAF, AWS Firewall Manager, 및 AWS Shield Advanced

이러한 규칙은 웹 요청 출처의 소스 IP 주소를 사용합니다. 하나 이상의 프록시 또는 로드 밸런서를 통과하는 트래픽이 있는 경우 웹 요청 오리진에는 클라이언트의 발신 주소가 아닌 마지막 프

docs.aws.amazon.com

  • Activate Amazon IP reputation List Managed Rule Group Protection
    • AWS에서 관리하는 IP 평판 목록을 사용하여 애플리케이션에 대한 요청을 차단
  • Activate Anonymous IP List Managed Rule Group Protection
    • 특정 사용자나 장치와 연결되지 않는 IP 주소인 익명 IP 주소로부터 애플리케이션을 보호

 

🧿 AWS Managed Baseline Rule Groups

 

기준 규칙 그룹 - AWS WAF, AWS Firewall Manager, 및 AWS Shield Advanced

규칙에 대해 게시하는 정보AWSManaged Rules 규칙 그룹은 규칙을 사용하는 데 필요한 충분한 정보를 제공하되 악의적인 사용자가 규칙을 우회하는 데 사용할 수 있는 정보는 제공하지 않기 위한 것

docs.aws.amazon.com

  • Activate Core Rule Set Managed Rule Group Protection
    • "Core Rule Set"은 웹 애플리케이션에서 일반적으로 발생하는 웹 공격을 탐지하고 차단하기 위한 미리 정의된 보안 규칙 집합
      • 필요한 WCU: 700. 용량 제한을 초과하여 WebACL 스택 배포가 실패하지 않도록 계정에 충분한 WCU 용량이 있어야 합니다.
        • WCU (Write Capacity Unit): WCU는 DynamoDB 테이블에 데이터를 쓰는 작업에 필요한 처리량을 나타냅니다. 쓰기 작업은 데이터를 추가하거나 업데이트하는 작업을 포함합니다.
  • Activate Admin Protection Managed Rule Group Protection
    • "Admin Protection" 규칙 그룹은 웹 애플리케이션에 대한 관리자 또는 관리 인터페이스를 공격으로부터 보호하기 위한 규칙
      • 필요한 WCU: 100
  • Activate Known Bad Inputs Managed Rule Group Protection
    • "Known Bad Inputs" 규칙 그룹은 이미 알려진 악의적인 입력 데이터를 검출하여 웹 애플리케이션에서 사용자로부터의 해로운 입력을 차단
      • 필요한 WCU: 200.

 

🧿 AWS Managed Use-case Specific Rule Groups

 

사용 사례별 규칙 그룹 - AWS WAF, AWS Firewall Manager, 및 AWS Shield Advanced

규칙에 대해 게시하는 정보AWSManaged Rules 규칙 그룹은 규칙을 사용하는 데 필요한 충분한 정보를 제공하되 악의적인 사용자가 규칙을 우회하는 데 사용할 수 있는 정보는 제공하지 않기 위한 것

docs.aws.amazon.com

  • Activate SQL Database Managed Rule Group Protection
    • 웹 애플리케이션에서 발생할 수 있는 SQL 인젝션 공격을 탐지하고 차단
      • 필요한 WCU: 200
  • Activate Linux Operating System Managed Rule Group Protection
    • 웹 애플리케이션을 호스팅하는 서버에서 Linux 운영 체제를 사용할 때 관련된 보안 위협을 탐지하고 차단
      • 필요한 WCU: 200
  • Activate POSIX Operating System Managed Rule Group Protection
    • 웹 애플리케이션을 호스팅하는 서버에서 POSIX 호환 운영 체제를 사용할 때 관련된 보안 위협을 탐지하고 차단
      • POSIX는 "Portable Operating System Interface"의 약어로, 컴퓨터 운영 체제에서 프로그램을 작성할 때 사용되는 API (Application Programming Interface) 및 명세의 집합을 정의하는 표준
      • 필요한 WCU: 100
  • Activate Windows Operating System Managed Rule Group Protection
    • 웹 애플리케이션을 호스팅하는 서버에서 Windows 운영 체제를 사용할 때 관련된 보안 위협을 탐지하고 차단
      • 필요한 WCU: 200
  • Activate PHP Application Managed Rule Group Protection
    • PHP로 개발된 웹 애플리케이션에서 발생할 수 있는 보안 위협을 탐지하고 차단
      • 필요한 WCU: 100
  • Activate WordPress Application Managed Rule Group Protection
    • WordPress로 개발된 웹 사이트 또는 블로그에서 발생할 수 있는 보안 위협을 탐지하고 차단
      • 필요한 WCU: 100

 

 

🧿 Custom Rule - Scanner & Probes

사용자 지정으로 만든 스캐너 및 프로브 공격을 탐지하고 차단하는 규칙 그룹

  • 스캐너 및 프로브 공격은 웹 애플리케이션의 취약점을 찾기 위해 다양한 방법으로 웹 애플리케이션을 공격하는 행위입니다. 스캐너 및 프로브 공격은 다음과 같은 방법으로 수행될 수 있습니다.
    • 웹 애플리케이션의 URL을 입력하여 접근 가능 여부를 확인하는 방법
    • 웹 애플리케이션에 대한 요청을 보내 응답을 분석하는 방법
    • 웹 애플리케이션에 대한 공격 코드를 보내 취약점을 유발하는 방법

  • Activate Scanner & Probe Protection
    • AWS WAF가 웹 애플리케이션에 대한 스캐너 및 프로브 공격을 감지하고 차단
    • Activate Scanner & Probe Protection 의 활성화(yes)를 선택한 경우, CloudFront distribution 혹은 Application Load Balancer의 애플리케이션 액세스 로그를 저장할 S3 버킷(Application Access Log Bucket Name)의 이름을 필수로 지정해야 합니다.
  • Application Access Log Bucket Name
    • AWS WAF가 웹 애플리케이션의 액세스 로그를 저장할 Amazon S3 버킷의 이름을 나타냅니다.
    • 액세스 로그는 웹 트래픽 및 보안 이벤트를 기록하는 데 사용됩니다.
  • Application Access Log Bucket Prefix
    • 액세스 로그 파일이 Amazon S3 버킷에 저장될 때 사용할 접두사
    • 로그 파일을 구분하고 정리하는 데 도움
  • Is bucket access logging turned on?
    • Amazon S3 버킷 액세스 로깅이 활성화되었는지 여부
    • 액세스 로그를 활성화하려면 AWS WAF에서 액세스 로그를 저장할 S3 버킷을 지정
  • Error Threshold
    • 액세스 로그를 생성할 때 발생할 수 있는 오류의 최대 수를 지정
    • 오류가 이 임계치를 초과하면 경고 또는 조치
  • Keep Data in Original S3 Location
    • 세스 로그가 S3 버킷의 원래 위치에 유지되어야 하는지 여부를 나타내는 설정
    • 액세스 로그를 다른 위치로 이동하려면 이 설정을 "No"로 설정 

 

 

🧿 Custom Rule - HTTP Flood

사용자 지정으로 만든 HTTP Flood 공격을 탐지하고 차단하는 규칙 그룹

  • Activate HTTP Flood Protection
    • AWS WAF가 웹 애플리케이션에 대한 HTTP Flood 공격을 감지하고 차단
      • AWS WAF 비율 기반 규칙에는 100보다 큰 값이 필요 (Lambda/Athena 로그 파서 옵션을 선택한 경우 0보다 큰 값을 사용할 수 있습니다)
  • Default Request Threshold
    • 모든 국가에 대한 기본 HTTP Flood 공격 요청 임계치
    • 특정 시간 동안 받은 요청 수를 기준으로 공격을 탐지하고 차단
    • 임계값은 기본 5분 주기로 계산
  • Request Threshold by Country
    • 국가별로 서로 다른 HTTP Flood 공격 요청 임계치를 설정
    • 특정 국가에서 공격이 더 증가할 경우 해당 국가에 대한 보안 임계치를 조정
  • Group By Requests in HTTP Flood Athena Query
    • AWS WAF가 HTTP Flood 공격을 분석할 때, Athena 쿼리를 통해 요청을 그룹화
    • 공격 패턴을 파악하고 대응하기 위한 데이터를 분석할 때 도움
  • WAF Block Period
    • HTTP Flood 공격을 탐지한 후 차단하는 기간을 설정
    • 기간 동안 공격자의 요청을 거부하고 차단
  • Athena Query Run Time Schedule (Minute)
    • Athena 쿼리를 수행하여 HTTP Flood 공격 데이터를 분석하는 일정을 설정
    • 정기적으로 데이터를 분석하여 보안 조치를 취할 수 있도록 도움
    • 기본적으로 Athena 쿼리는 5분마다 실행

 

 

🧿 Custom Rule - Bad Bot

사용자 지정으로 만든 Bad Bot 공격을 탐지하고 차단하는 규칙 그룹

  • Activate Bad Bot Protection
    • 웹 애플리케이션으로 들어오는 "Bad Bot" 또는 악성 봇의 요청을 감지하고 차단
    • Bad Bot은 악의적인 목적으로 웹 사이트에 액세스하는 자동화된 프로그램 또는 스크립트
  • ARN of an IAM role that has write access to CloudWatch logs in your account
    • AWS 계정 내에서 CloudWatch 로그에 쓰기 권한을 가진 IAM (Identity and Access Management) 역할의 Amazon Resource Name (ARN)
    • AWS WAF가 악성 봇을 탐지하고 관련 데이터를 CloudWatch 로그에 기록하는 데 필요한 권한을 제공

 

 

🧿 Custom Rule - Third Party IP Reputation Lists

사용자 지정으로 만든 규칙 그룹으로, 외부 IP 주소 평판 목록을 활용하여 악성 IP 주소를 차단

  • Activate Reputation List Protection

 

 

🧿 Legacy Custom Rules

웹 애플리케이션의 보안을 강화하기 위해 사용자가 직접 설정하고 구성할 수 있는 규칙 세트를 제공

  • Activate SQL Injection Protection
    • AWS WAF가 웹 애플리케이션에서 발생할 수 있는 SQL Injection (SQL 주입) 공격을 감지하고 차단
  • Sensitivity Level for SQL Injection Protection
    • SQL Injection 공격을 감지하는 민감도 수준
    • 공격 패턴을 탐지하고 차단하는 정확성을 제어
    • 높은 민감도는 더 정확한 공격 탐지를 제공하지만, 잘못된 긍정적인 결과가 발생할 가능성이 높아집니다. 즉, 정상적인 트래픽을 잘못 차단할 수 있습니다. 낮은 민감도는 잘못된 차단을 줄이지만 공격을 놓칠 수 있습니다.
  • Activate Cross-site Scripting Protection
    • AWS WAF가 웹 애플리케이션에서 발생할 수 있는 Cross-site Scripting (XSS) 공격을 감지하고 차단

 

 

🧿 Allowed and Denied IP Retention Settings

허용된 및 거부된 IP 주소 목록의 유지 기간 및 알림 설정을 관리하는 기능

  • Retention Period (Minutes) for Allowed IP Set
    • 웹 애플리케이션에 대한 액세스가 허용된 IP 주소가 얼마 동안 유지될지를 결정
    • 이 값을 60으로 설정하면 특정 IP 주소가 웹 애플리케이션에 액세스를 허용한 후 60분 동안은 계속 허용됩니다. 이후에는 더 이상 액세스를 허용하지 않습니다.
    • 0에서 15 사이의 숫자를 입력하면 15로 처리됩니다. IP 보존을 사용하지 않도록 설정하려면 기본값 -1로 둡니다.
  • Retention Period (Minutes) for Denied IP Set
    • 웹 애플리케이션에 대한 액세스가 거부된 IP 주소가 얼마 동안 유지될지를 결정
    • 이 값을 30으로 설정하면 특정 IP 주소가 웹 애플리케이션에 액세스를 거부당한 후 30분 동안은 계속 거부됩니다. 이후에는 다시 액세스를 허용할 수 있습니다.
    • 0에서 15 사이의 숫자를 입력하면 15로 처리됩니다. IP 보존을 사용하지 않도록 설정하려면 기본값 -1로 둡니다.
  • Email for receiving notification upon Allowed or Denied IP Sets expiration
    • 허용된 또는 거부된 IP 주소 목록이 만료될 때 알림을 받을 이메일 주소
    • IP 주소가 만료되기 전에 알림을 받아서 필요한 조치를 취할 수 있도록 도움

  • 실습을 위해 S3 버킷을 생성합니다.

  • 생성한 버킷 이름을 아래와 같이 입력하고 다음을 선택합니다.

  • 다음을 눌러 4번째 단계에서 아래와 같이 IAM 리소스 생성 승인, 생성 승인을 선택 > 스택을 생성합니다.

  • 스택 생성 확인

  • 생성된 Web ACLs 과 Rules 확인

  • CloudFormation 으로 생성된 스택의 Resource 에서 ReputationListsParser 선택 

  • 외부에서 평판 리스트를 가져오는 Lambda funtion 을 확인

 
Comments