정보보안/클라우드보안

[프로젝트] AWS WAF를 통한 웹 공격 방어(2)

테크리빗 2025. 4. 18. 20:44

이전 게시글에서는 AWS WAF의 개념과 AWS에서 제공하는 관리형 룰(Managed Rule)을 활용하여 SQL Injection과 XSS 공격을 차단하는 실습을 진행했습니다.

 

[프로젝트] AWS WAF를 통한 웹 공격 방어(1)

AWS WAF란 Amazon CloudFront 배포, Amazon API Gateway API, Application Load Balancer(ALB)에 전달되는 HTTP(S) 요청을 모니터링하고 필터링할 수 있게 해주는 웹 방화벽입니다. 예를 들어 특정 문자열이나 IP주소를 차

rybbit-life-debugging.tistory.com

 

이번 포스팅에서는 한 단계 더 나아가, 아래와 같은 실습을 진행해보려 합니다.

 

1. custom rule을 작성해, 국가별 또는 User-agent별 차단

2. JSON 기반으로 복잡한 룰(Rule)을 구성

 

custom rule(국가별 트래픽 차단)

첫 번째로 AWS WAF에서 제공하는 국가별 IP 정보를 기준으로 특정 국가에서 유입되는 트래픽을 차단하는 실습을 진행하도록 하겠습니다.

 

Add my own rules and rule groups를 클릭합니다. 
(이 메뉴를 선택하면 새로운 WAF Rule을 생성하거나 미리 만들어 둔 Rule Group을 Web ACL에 추가할 수 있습니다.)

 

나머지는 기본값으로 두고 Name을 작성합니다.(싱가포르에서 오는 트래픽을 차단하기 위해,  SG-Block이라는 이름을 사용하였습니다.)

 

어떤 조건에서 룰이 동작할 것인지 작성하는 부분입니다.
('Signapore라는 국가에서 트래픽이 들어오면'이라는 조건을 위해 아래와 같이 설정합니다.)

 

조건이 일치하면 어떤 행동을 취할지 작성하는 부분으로 차단(Block)을 선택 후, Add rule을 클릭합니다.

 

Rule이 추가된 것을 확인하고, Save 버튼을 클릭합니다.

 

Rule이 추가된것을 볼 수 있습니다.

 

(참고) 최대 5000개의 룰 설정이 가능하며, 1500 이상 룰 적용 시 과금이 적용되는 것을 볼 수 있습니다.

 

랩 과정에서 지정된 국가를 차단하는 환경을 가상으로 구성하기 위하여 Chrome에서 사용할 수 있는 “[Browsec VPN](https://chromewebstore.google.com/search/browsec))” 을 설치하도록 하겠습니다.

 

Change 버튼을 눌러 국가를 Singapore로 설정하여 브라우저의 트래픽이 Singapore에서 발생되는 것처럼 설정합니다.

 

이후 DVWA 접속 시 접속이 차단된 것을 확인할 수 있습니다.

 

 

custom rule(User-agent별 차단)

Custom Rule 적용 실습 두 번째로, AWS WAF에서 제공하는 문자열 일치 기반으로 특정 user-agent로 유입되는 트래픽을 차단하는 실습을 진행하도록 하겠습니다.

 

Add my own rules and rule groups를 클릭합니다. 

 

Rule 이름을 작성합니다.(나머지는 기본값으로 설정)

 

룰 적용 조건을 작성합니다. 해당 룰은 iphone이라는 문자열이 헤더에 존재하면 발생합니다.

 

조건 만족 시, 차단하도록 설정하고, Add rule 버튼을 클릭합니다.

 

iphone-Block 룰이 생성되었으며, Save 버튼을 클릭합니다.

 

적용이 완료되었습니다.

 

랩 과정에서 특정 user-agent 값을 차단하는 환경을 가상으로 구성하기 위하여 Chrome에서 사용할 수 있는 “[User-Agent Switcher]([Chrome 웹 스토어 - 검색결과](https://chromewebstore.google.com/search/user%20agent%20switcher))” 을 설치하도록 하겠습니다.

 

크롬 브라우저에서 User-Agent Switcher을 선택한 후 아래와 같이 iOS - iPhone6을 차례대로 선택합니다.

 

선택 시 익스텐션 바에 IP6라고 표시되어 있는 것을 볼 수 있습니다.

 

이후 DVWA 접속 시 접속이 차단된 것을 확인할 수 있습니다.

 

 

JSON을 통한 복잡한 Rule 구성

이번 실습에서는 가상의 상황을 가정해 보도록 하겠습니다.

당신은 팀의 보안 담당자입니다. 서비스하고 있는 웹 애플리케이션에서 최근에 한국 IP로 지속적으로 공격이 들어오고 있어 확인을 해보니 다음과 같은 특징이 있었습니다. 

1. 공격의 대부분은 한국에서 온 공격이다. 하지만 한국에서는 실제 고객들이 요청하는 정상 트래픽도 있다. 
2. 한국에서 오는 공격은 request body 가 비정상적으로 커서 100byte 이상이거나 header “_x-value_” 의 값이 “_bot_“이나 “_BOT_“으로 들어온다.

이제 당신은 새로운 규칙을 작성해서 정상 요청을 막지 않는 선에서 악의적인 공격을 막아야 합니다.

참고로 중첩문 (nested statement)를 포함하는 Rule은 Rule visual editor에서 편집할 수 없습니다. 따라서 해당 시나리오에서는 JSON editor를 사용해서 Rule을 작성해야 합니다.

 


 

JSON 기반 Rule 설정을 하기 위해 Add my own rules and rule groups를 클릭합니다. 

 

해당 조건을 만족하기 위해 아래와 같은 JSON rule을 작성합니다.

참고로 JSON rule을 살펴보면 AND문안에 OR문이 중첩되어 있는 구조를 확인할 수 있습니다.

 

조건을 정리해 보면, 요청이 한국에서 왔고, 요청 Body가 100B보다 크거나, 요청 헤더 `x-value`가 `"bot"`인 경우 → 차단

 

Rule JSON editor를 클릭하여 JSON을 입력합니다.

 

Add rule 버튼을 클릭합니다.

 

Save 버튼을 클릭합니다.

 

TestRule이 생성된 것을 확인할 수 있습니다.

 

테스 트을 위해 WSL을 실행하고, DVWA 웹의 endpoint 값을 변수로 export 합니다.

(endpoint값은 모듈 1에서 생성한 CloudFormation Stack “MyDVWA”의 Output 탭에서 찾을 수 있는 “AlbEndpoint” 값입니다.)

 

공격자를 가장하여 다음과 같은 요청을 보내보면, 403 Forbideen으로 차단된 것을 볼 수 있습니다.

 

WAF에 조건에 없는 요청은 정상적으로 응답을 받을 수 있습니다.

728x90