AWS WAF란
Amazon CloudFront 배포, Amazon API Gateway API, Application Load Balancer(ALB)에 전달되는 HTTP(S) 요청을 모니터링하고 필터링할 수 있게 해주는 웹 방화벽입니다.
예를 들어 특정 문자열이나 IP주소를 차단하는 정책을 설정해 두면, 기본적으로 HTTP 403 상태 코드(금지됨)로 응답하게 됩니다. 추가적으로 요청이 차단될 때 사용자 지정 오류 페이지를 반환하도록 CloudFront를 구성할 수 있습니다.
WAF 실습
본 실습에서는 CloudFormation을 통해 웹 공격에 취약하도록 의도된 web application(DVWA)와 인프라 환경을 구성하고, 웹 공격 시 AWS WAF를 통해 공격에 방어하는 체계를 구성할 예정입니다.
해당 실습은 AWS WAF WorkShop 내용을 참고해 재구성한 내용으로 자세한 내용을 아래 페이지를 참고부탁드립니다.
AWS WAF Workshop
Credits Timestamp Name Alias Activity 2019.12 Shin Eunsu @eunsshin initial creation 2020.02 Cho Yijeong @yijeong update 2020.03 Cho Yijeong @yijeong update lab based on feedback 2022.03 Kim SeongHan @senghank change CloudFormation link from S3 to Github Or
sessin.github.io
CloudFormation으로 구성시, 결과적으로 아래와 같은 환경이 구성됩니다.
DVWA 웹 공격 테스트
DVWA는 웹 공격에 취약하도록 의도된 web application입니다. AWS WAF 적용 전, 간단한 웹공격을 수행해 보겠습니다.
해당 페이지는 ALB의 DNS 이름을 통해서 접속할 수 있습니다.
실제로 자주 발생하는 SQL 공격과, XSS 공격이 동작하는지 테스트해보겠습니다.
먼저 User ID를 조회할 수 있는 페이지에 SQL 공격 구문을 입력해 봅니다.
SQL Injection이 성공하여 계정정보가 노출되는 것을 볼 수 있습니다.
두 번째로 이름을 입력폼에 입력하면, Hello 입력값을 출력하는 페이지에 XSS 공격을 수행해 보겠습니다.
(참고) 해당 XSS 공격에 활용된 구분의 경고창에 쿠키정보를 출력하는 스크립트입니다.
<script>alert(document.cookie)</script>
실행 시, 경고창에 노출되는 것을 확인할 수 있습니다.
AWS WAF Rule 적용하기
이번에는 AWS WAF를 사용하여, DVWA 서버에 접근하기 전 트래픽을 필터링하여 웹 보안을 강화해 보겠습니다.
(참고) 아래 그림은 이해를 돕기 위해 WAF 적용하기 전과 적용한 후의 트래픽을 비교한 그림입니다.
WAF를 생성했다고 해서, 웹 트래픽을 필터링하는 것이 아닌 Web ACLs에서 필터링 규칙(Rules)을 설정해주어야 합니다.
CloudFormation으로 생성된 MyWAF를 클릭합니다.
AWS에서 제공하는 Rule을 사용하기 위해 AWS managed rule groups를 선택합니다.
Core rule set 활성화하여 OWASP, CVE 취약성을 보호합니다.(XSS 웹 공격 차단)
SQL database를 활성화하여 SQL 인젝션과 같은 SQL 데이터 베이스 취약성을 보호합니다.
Add rules 버튼을 클릭하여 rule을 추가합니다.
Save 버튼을 눌러 이를 적용합니다.
MyWAF에 rule이 추가된 것을 확인할 수 있습니다.
적용한 Rule들이 정상적으로 동작을 하는지 확인하기 위해 앞서 모듈 1에서 구성했던 DVWA 웹에 접속해서 모듈 2에서 실행했던 SQL injection과 XSS를 재시도해봅니다.
SQL Injection이 403 Forbidden 메시지와 함께 차단된 것을 확인할 수 있습니다.
이전에 접속한 DVWA에서 XSS(Reflected) 탭으로 이동해 아래 문자를 입력 후, Submit 합니다.
이전 공격 테스트에서 차단되지 않았던 XSS이 403 Forbidden 메시지와 함께 차단된 것을 확인할 수 있습니다.