바로 이전글에서 private 서브넷에 웹 서버 인스턴스를 생성하고 ALB로 연결까지 확인했었다.
이번에는 외부 인터넷단에서 유입되는 유해트래픽을 탐지하고 차단하는 솔루션까지 로드밸런서에 연동하는 작업을 진행한다.
WAF
Web Application Firewall, 웹 서버 자원에 대해 유입되는 HTTP(S) 트래픽을 분석하고 차단하는 방화벽의 솔루션으로 AWS의 서비스들에 대해 적용할 수 있다.
적용가능한 서비스에는 대표적으로 Cloudfront, API Gateway, Application 로드밸런서가 존재한다.
해당 서비스들의 앞단에 붙는 형식으로 Access Control list를 정의하고, 탐지 Rule을 설정함으로써 내부 자원을 보호한다.
※ WAF는 프리티어 혜택을 받지 못하는 서비스이므로 학습이후 리소스 삭제를 해주어야한다.
서비스 검색 'AWS WAF' → Create web ACL
WebACL을 생성한다.
이 앞번에서 생성한 로드밸런서에 연동할 것이므로 Regional resources, 로드밸런서를 생성한 리전을 선택해준다.
하단의 Add AWS resources로 연결할 AWS 서비스를 설정 (ALB를 선택)
다음으로 ACL에 등록할 Rule을 추가하는 부분이다.
이 Rule은 유입되는 web Request의 내용을 탐지하기 위한 pattern으로, '필터'의 개념으로 생각하면 간단하다.
Rule을 추가하려고 하면, Add Managed rule groups와 Add my own rules and rule group 2가지를 마주하게 된다.
Managed rule group : AWS에서 제공하는 대표적인 탐지룰셋과 각 보안 벤더사에서 제공하는 탐지 ruleset들 중 선택하는 옵션
My own rule / group : 탐지 룰을 직접 상세하게 설정하는 옵션
중간에 보이는 Web ACL capacity units는 rule과 rule group들에 대해 매긴 가중치로, webACL 별로 rule들의 가중치 합이 1500을 넘길수 없다.
+) 최근에 최대치가 5000으로 상승한 듯하다, 어차피 1500을 넘으면 과금이 되는듯하니 특별한 이유가 없는 이상 1500을 넘기지 않도록 적절히 설정하자
하단의 Default Action은 위에서 설정한 Rule에 하나도 탐지되지 않은 트래픽을 어떻게 처리할 것인가의 내용으로 특이하게 설정하지 않는 이상 Allow를 주는 편이다.
Managed Rule 세팅에서는 다음과 같은 rule group들을 볼 수 있다.
하단의 타 벤더사들의 rule group의 경우 기본으로 제공되는 AWS managed rule group의 성능이 충분하기도 하고, 이것들은 marketplace에서 따로 구독을 해야만 사용할 수 있기도 하여 주로 선택되지 않는다.
AWS Managed Rule group 중 free로 사용할 수 있는 항목들은 아래와 같다.
각 항목에 대한 상세한 설명은 아래 가이드를 참조
간단하게 AWS Managed 룰셋을 몇개 가져와서 설정
다음 단계는 설정한 Rule들의 우선순위를 매겨주는 것으로, 위(up)로 올라올 수록 높은 우선순위를 갖는다.
마지막 2가지 설정 후 ACL을 생성
- Cloudwatch에서의 모니터링할 Metric의 이름을 지정
- 탐지한 request를 수집(sampling)할 것인가의 여부
간단하게 2개의 Rule group만 적용된 ACL을 생성했다.
이렇게 생성한 Rule에 해당되는 트래픽이 발견된 경우의 행동을 Action이라고 하며, WAF에서는 크게 Allow, Block, Count로 분류한다.
- Allow : 해당 트래픽을 허용, 트래픽이 내부 서비스로 전송됨
- Block : 해당 트래픽을 차단, 트래픽이 내부 서비스로 전송되지 않음
- Count : 해당 Rule에서는 이 트래픽을 탐지만 함, 다음 우선순위의 Rule로 차단여부 결정권을 넘김
WAF 탐지 테스트
WAF가 적용된 로드밸런서로 Exploit을 전송해 WAF가 탐지하기까지의 과정을 직접 시연해본다.
간단하게 파라미터값에 SSRF 유도 payload를 삽입해 Request를 시도했다.
WAF 탐지내용에 EC2MetaDataSSRF_QUERYARGUMENTS 내용으로 잡힌 것을 확인할 수 있다.
추가로 Rulegroup의 각 Rule 별로 탐지 Action을 개별적으로 관리할 수 있다.
(예외로 허용처리해주어야 하는 부분 등에서 활용)
방금전에 탐지된 Rule의 Action을 Count로 변경 후 다시 시도해보았다.
Count Action으로 Request가 Block되지 않고 정상적으로 Response를 받아옴을 볼 수 있다.
WAF 요금
- 웹 ACL 개당 $5
- 적용한 규칙 개당 $1
- WAF를 거치는 Request 1백만 건당 $0.6
적용한 규칙의 갯수별로 칼같이 받는다. Rule을 효율적으로 세워서 운영하는 것이 바람직할 것이다.