AWS WAF 구축 실습(Web ACL 생성 및 배포)

안녕하세요. 이번 포스팅에서는 기본 웹 애플리케이션 인프라를 활용해서 AWS WAF를 구축해 보는 실습을 진행하려고 합니다. 기본적으로 AWS WAF가 어떻게 구축되는지 궁금하신 분들은 빠르게 읽어보고 전체적인 그림을 파악하실 수 있습니다. 전체를 파악하신 후 상세 설정 등에 대한 내용으로 확장하시면 좋을 것 같습니다.

AWS WAF 구축 실습(Web ACL 생성 및 배포)

1. 실습 목표

웹 애플리케이션용 기본 인프라를 활용해서 AWS WAF를 구축하고 웹 취약점 공격을 점검하고 차단하는 실습을 진행합니다. 웹 애플리케이션용 기본 인프라는 사전에 설치되어 있어야 하고 이 글에서는 AWS WAF를 구축해 보는 작업에 집중합니다.

1.2 실습 단계

(1) 웹 애플리케이션용 기본 인프라 정보 확인
(2) AWS WAF 생성 및 배포(Web ACL 생성 및 배포(ALB))
(3) EC2에 DVWA 설치
(4) 웹 취약점 공격 검증
(5) 자원 삭제

이 글에서는 (1), (2) 내용만 포함하고 있습니다. (3), (4), (5) 내용은 다음 글에서 확인하세요. 그리고 DVWA(Damn Vulnerable Web App, https://github.com/digininja/DVWA/blob/master/README.ko.md)는 보안에 취약한 무방비 상태의 웹 애플리케이션으로 웹 서비스의 모의 해킹을 수행하는 용도로 사용할 예정입니다.

1.3 목표 구성도

실습 목표 구성도

.

2. AWS WAF 구축을 위한 웹 서버 인프라

기본 환경으로 활용할 자원을 아래 내용을 참고해서 사전에 생성해 주세요. (아래 인프라에 대한 생성 방법도 차차 정리해서 글을 올릴 예정입니다.)

#자원태그 이름정보
1VPCMy-VPCIP CIDR: 10.0.0.0/16
2Public SubnetMy-Public_SNIP CIDR: 10.0.0.0/24 AZ: ap-northeast-2a
3Public Routing TableMy-Public_RT연결: My-Public-SN
4Internet GatewayMy-IGW연결: My-VPC
5EC2DVWA-EC2연결: My-Public-SN
6ALBMy-ALB연결: DVWA-EC2, 리스너: TCP/80
7Security GroupWeb-SG연결: DVWA-EC2, My-ALB
서비스: SSH, HTTP, 대상: 0.0.0.0/0

.

3. AWS WAF 생성 및 배포

3.1 Web ACL 생성

AWS WAF 설정을 위해 먼저 Web ACL을 생성합니다.

메뉴이동: 서비스 검색 > WAF & Shield 검색 > AWS WAF > Web ACLs > Create web ACL

Web ACL 생성 메뉴 이동

Step1: Web ACL 정의

Step1: Web ACL 정의 및 AWS 리소스 연결

  1. Resource type: Regional resources 상태 그대로 유지
  2. Region: 보호 대상 자원이 존재하는 “Asia Pacific (Seoul)” 선택
  3. Name: 원하는 이름 혹은 MyWebACL이라고 입력
  4. Associated AWS resources: Web ACL 배포 단계에서 추가할 수 있으니 그대로 유지
  5. Next 클릭

Step2: Rule과 Rule Group 추가

Step2: Rule과 Rule Group 추가

“Add rules” 버튼을 클릭 했을 때 두 가지 선택 옵션이 있습니다.

  • Add managed rule groups: 사전 정의된 규칙 그룹을 추가하는 옵션(선택)
  • Add my own rules and rule groups: 사용자 정의 규칙 추가하는 옵션
Add managed rule groups

Rule을 추가하기 위해 사전 정의된 AWS managed rule groups를 클릭합니다.

Free rule groups

AWS managed rule groups에서 조금 아래로 내려오면 “Free rule groups”에서 아래 3개 그룹을 선택합니다. (Free rule groups은 AWS WAF의 표준 서비스 요금 외에 추가 요금 없이 무료 규칙 그룹을 사용할 수 있습니다.)

  • Anonymous IP List: VPN이나 Proxy, Tor node등을 경유해 접근하는 대상을 차단 가능
  • Core rule set: OWASP에서 정의한 웹 주요 취약점을 탐지하여 차단 가능
  • SQL database: SQL Injection 공격을 탐지하여 차단 가능

OWASP(https://owasp.org/)란 오픈 소스 웹 애플리케이션 보안 프로젝트로 웹에 관한 정보 노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구해서 웹 애플리케이션의 취약점을 발표합니다. 룰 그룹을 선택 했으면 “Add rules” 버튼을 클릭합니다.

Web ACL capacity units

Web ACL capacity units (WCUs) used by your web ACL에서 WCUs 값을 확인합니다. 웹 ACL의 총 WCU는 5000개를 초과할 수 없고 1500개가 넘는 WCU를 사용하면 비용에 영향을 줍니다. 즉 1500개 이내면 AWS WAF 표준 서비스 요금 외에 추가 비용이 없습니다. AWS WAF 표준 서비스 요금 계산 방법은 이 문서에서 확인하세요.

Default web ACL action for requests that don’t match any rules에서 기본 디폴트 액션을 선택합니다. 규칙과 일치하지 않는 경우 Allow로 동작해야 하니 그대로 둡니다. 그리고 나서 “Next” 버튼을 클릭합니다.

Step3: 규칙 우선순위 설정

set rule priority

규칙은 순서대로 우선순위가 결정됩니다. 순서를 변경하려면 룰 그룹을 선택하고 Move up, Move down 버튼으로 위치를 조정합니다. 그리고 나서 “Next” 버튼을 클릭합니다.

Step4: CloudWatch 지표 설정

CloudWatch 지표를 사용하면 웹 요청, 웹 ACL 및 규칙을 모니터링할 수 있습니다. 관련 로그 저장 용량에 따라 비용이 발생됩니다. (https://aws.amazon.com/ko/cloudwatch/pricing/)
지표와 Request sampling options(상세 참고)를 설정하고 “Next” 버튼을 클릭합니다.

Step5: Web ACL 검토 및 생성

설정한 내용을 한번 더 확인 한 후 “Create web ACL” 버튼을 클릭합니다.

.

3.2 Web ACL 배포

AWS WAF의 Web ACL은 CloudFront, ALB, API Gateway 등에 배포할 수 있습니다.

Web ACL 배포

생성한 Web ACL을 클릭합니다.

Add AWS resources

Associated AWS resources 탭으로 이동하고, “Add AWS resources” 버튼을 클릭합니다.

resource type 선택

Resource type에서 배포할 자원을 선택합니다. 여기서는 Application Load Balancer를 선택하고 “Add” 버튼을 클릭해서 배포합니다.

마무리

여기 까지 AWS WAF에서 Web ACL을 생성하고 ALB에 배포하는 실습을 완료했습니다. 이후에 EC2에 웹 취약점 테스트를 위한 DVWA를 설치하고 공격을 통해 탐지하고 차단하는 실습을 진행하겠습니다.

Leave a Comment