AWSSecworkshop에서 WAF를 다루는 실습이 있기에 먼저 WAF 개념과 어떤 기능이 있는지 알아보자!
-Scenario - Protecting Workloads on AWS from the Instance to the Edge (awssecworkshops.com)
기본적으로 WAF란 무엇인가?
WAF는 Web Application Fireware의 약자로 일반적인 IP/Port 기반의 방화벽과 다르게
Web Application에 특화 된 방화벽 솔루션으로 이해하면 된다.
방화벽과 비슷하지만, OWASP TOP 10의 Web에 조금 더 특화 된 네트워크 솔루션으로 이해하면 된다.
일반적으로 WEB으로 트래픽이 인입 되기 이전에 WAF가 존재하며, 우아한 경제들에서는 위와 같이 구성했다.
클라우드 이전의 환경이라면, 위와 같이 구성하기가 매우 어려웠을 것이라고 생각된다.
클라우드가 아닌 환경에서는 Main/Backup으로 회선을 이중화하긴 하지만, 위와 같이 WAF에 대한 ELB를 만들고
WAF를 Auto Scaling 하진 않는다. 그러고 싶어도 그럴수가 없다.. 비용 문제도 있고 LB를 WAF단에서부터 하지 않는다.
이것이 클라우드를 쓰는 이점이 아닐까!?!?
AWS에서 WAF란?
AWS에서도 아주아주 편하게 WAF 서비스를 제공해준다.
- Secworkshop에서 WAF편을 진행하면서 CloudFormation으로 임시 웹서버와 WAF까지 한번에 만들 수 있다.ㅎㅎ
기본적으로 WAF에서 Web ACLs를 선택하면 현재 운영중인 WAF 서비스 목록을 볼 수 있고,
살펴 볼 WAF Name을 선택하면 아래와 같이 WAF 로그와 Rule 정보를 아주 쉽게 볼 수 있다.
■ Overview : 개요라고 보면 된다. 최근 X시간동안의 ALLOW 또는 DENY 현황을 볼 수 있다.
■ Rules : 현재 운영 중인 WAF Rule 정보를 볼 수 있다. 최대 1500개까지 Rule을 사용할 수 있다.
필요에 따라서 Add Managed rule group에서 AWS 또는 F5, Fortinet 등에서 제공해주는 Rule을 서비스 받을 수 있다.
선택하면 내가 사용할 수 있는 전체 1500개 Rule 중에서 Capacity에 기재 된 숫자만큼 Rule이 추가 되는 것이며
Action을 통해 개별 정책에 대해 Enable/Disable 할 수 있다. 물론 다 돈이다..
돈을 안들이고 싶다면, Add my own rules and rule group을 선택해서 자체 Rule을 만들면 된다!
사용자 정의 Rule은 임계치 기반, 그리고 URI 등의 Matching으로 Rule을 정의할 수 있다.
이외에도 IP 기반 그리고 정규표현식과 같이 복잡한 문자열에 대해서도 사용자 정의 Rule을 만들 수 있다.
- WAF의 꽃은 정규표현식으로 공격을 차단하는것이라고 생각한다ㅋㅋㅋ
■ Bot Control : 크롤링, 스캐너 등과 같이 Bot이 Web 서비스에 접속하는 것을 가시화하고 이를 차단해주는 서비스이다.
아래와 같이 Bot Traffic을 가시화하여, Bot의 유입 비율/Bot 요청의 허용, 차단 비율을 쉽게 보여준다.
또한 필요에 따라서 크롤링 등과 같은 Bot을 식별하기 위한 별도 WAF Rule을 또 제공해준다.
스크래핑을 정상적인 서비스 제공 범주로 봐야할지/아니면 과도한 서비스 요청으로 봐야할지 논란이 많다.
하지만 이와 같이 AWF Bot Rule을 별도로 제공해주지 않는다면 얼마나 유입되는지조차 알기가 어렵다.
그런면에서 AWS는 아주 서비스가 잘 구성되어 있고, 좋은거 같다. 물론 다 돈이지만...
■ Associate AWS resource : 말그대로, 연관 된 Resource이다. 어떤 서비스에 대해 보호하는지 나타낸다.
클라우드가 아닌 일단 베어메탈 환경에서는 보통 WAF에 IP/웹 도메인정보를 넣어서 WAF를 태우곤 한다.
하지만 AWS는 API Gateway, ALB, Appsync? 이 3가지 카테고리를 추가하는 것으로 한다.
즉, 만약 Web 서비스를 제공하고 있다면 필수로 ALB를 구성하고 이를 선택해야 함을 뜻하는거 같다. Maybe...
■ Custom response bodies : WAF로 차단 될 때, 사용자 임의의 Response 정보를 줄 수 있다.
일반적으로 WAF에서 차단 된다면 HTTP 403을 반환한다.
하지만 403을 Response로 받는다면 공격자입장에서는 차단되고 있구나! 공격에 대한 추가 정보를 제공하는 형태가 될 수 있으므로
JSON, HTML, Plan TEXT 정보 등으로 HTTP 3XX, 4XX 또는 사용자 임의의 메시지를 Response로 지정할 수 있다.
■ Logging and metric : WAF 로그를 별도 CloudWatch 또는 S3 Bucket에 저장할 수 있는 옵션이다.
기본이 Disable이며, Enable 선택 시 어떤 저장소?서비스로 로그를 전송할지 선택할 수 있다.
필요에 따라 다르겠지만, CloudWatch로 WAF 로그 전달을 해서 Monitoring하는데 많이 쓰일 거 같다.
저장하는 로그도 HTTP Methd를 할지, Header를 할지 선택이 가능하다.
다만, 한가지 아쉬운 점은 HTTP Header와 관련 된 정보만 WAF에서 볼 수 있고, Logging 된다.
즉, Body에 뭔가 악의적인 코드가 삽입 될 경우, 어떠한 Body인지 내용을 알 수가 없다..
- 지인한테 물어보니.. 이것은 AWS Korea에서도 알고 있는 문제라고 한다.
- 그래도 줄기차게.. AWS 본사에 개선요청을 하고 있다고 한다.
AWS WAF를 알아보면서, 우아한형제들의 기술블로그를 보았다.
역시.. 설명이 잘 되어있다. Good!! 아래 내용도 한번 읽어보면 좋을 것 같다!!
'기술 이모저모 > [AWS] Workshop' 카테고리의 다른 글
[AWS][Forensic][WAF] 내 테스트 서버에 공격이 들어오다(1/2) (0) | 2022.02.12 |
---|---|
[Secworkshop] Protecting workloads on AWS (0) | 2022.02.10 |
[Secworkshop] Using AWS Cognito (0) | 2022.02.02 |
[AWS][API Gateway][Lambda] API 서비스 이론만 알아보기 (0) | 2022.02.01 |
[AWS][Cognito] Cognito 사용자 인증 서비스 개념 (0) | 2022.01.31 |