[AWS] WAF(Web Application Firewall, 웹 애플리케이션 방화벽)
어쩌다 WAF를 찾아보았나...
얼마전 AWS요금에서 나도 모르게 계속해서 비용이 나가고 있어서 환불받았다.
그 서비스를 언제 썼는지, 뭔지도 모르고 돈이 줄줄 새고 있었다. 그래서! 뭔지 알아보려고 한다.
Web Application Firewall, 웹 애플리케이션 방화벽이란?
: 웹 취약점과 공격으로부터 웹 애플리케이션을 보호하는 서비스
- 웹 사이트의 트래픽을 모니터링 하여 방화벽 및 IDS가 차단하지 못한 공격으로부터 웹 애플리케이션을 안전하게 보호하는 서비스
- 웹 사이트의 취약점을 노리는 http, https 기반 보안 위협과 자동화된 Bot 공격을 신속하게 탐지하고 차단
- 웹 해킹 공격으로부터 웹 서비스를 전문적으로 보호하기 위해 탄생한 정보 보호 시스템
- 웹의 비정상 트래픽을 탐지하고 차단하기 위한 방화벽
- 봇, 삽입, 애플리케이션 계층 서비스 거부(DoS)를 비롯한 악의적 공격과 원치 않는 인터넷 트래픽으로부터 웹 애플리케이션을 보호할 수 있도록 지원
- 단순 방화벽(FW)은 TCP/IP 레벨에 포함된 정보들을 기반으로 차단 룰을 설정하지만, 웹 방화벽은 웹 프로토콜 HTTP 정보를 바탕으로 차단 룰을 설정
- IP 주소, HTTP 헤더, HTTP 본문, URI 문자열, 교차 사이트 스크립팅 (XSS), SQL 삽입 및 기타 OWASP 정의 취약성을 비롯한 인터넷 위협을 방지하기 위한 규칙을 수립하고 관리할 수 있음
>> WAF는 모든 웹 보안 공격을 막는 솔루션은 아님. ( 침입 탐지, 차단 시스템(IDS/IPS) 와도 역할이 다름 )
>> WAF가 탐지하지 못하는 공격영역이 있음 : 그중 하나는 논리적 취약점 ( ex. 일반 사용자에게는 노출되지 않아야 할 페이지가 보이는 잘못된 권한부여, 불충분한 세션 관리, 서버 정보 노출, 우회를 목적으로 한 파라미터 변조 등 )
예시)
<! – 관리자페이지는 woowa.com/admin-manager 이고 계정은 manager / !@admin!@ 입니다. 배포시 주석 삭제 – !>
WAF에서 볼 때 이 주석을 보고 관리자페이지에 접속한 접근을 공격으로 구분할 방법이 없음.
이처럼 보안 솔루션은 해킹 공격의 전부가 아닌 일부를 방어해주는 것.
AWS WAF
: AWS WAF는 가용성에 영향을 미치거나 보안을 훼손하거나 과도한 리소스를 소비할 수 있는 일반적인 웹 익스플로잇 및 봇으로부터 애플리케이션을 보호하도록 도와준다.
- Layer 7의 Web Application에 대한 공격(=> DDoS 공격 또는 웹 애플리케이션 공격) 탐지 및 차단
- Nginx WAF 유료 모델을 이용하여 만든 서비스
- 사용 가능한 AWS services : CloudFront, Application LoadBalancer, API Gateway, AWS AppSync
- 보호 가능한 리소스
- Amazon CloudFront distribution
- Amazon API Gateway REST API
- Application Load Balancer
- AWS AppSync GraphQL API
- Amazon Cognito user pool
- AWS App Runner service
- AWS Verified Access instance
AWS WAF 구성요소
- 웹 ACL – 웹 ACL(access control list, 액세스 제어 목록)을 사용하여 일련의 AWS 리소스를 보호한다.
- 규칙을 추가하여 웹 ACL을 생성하고 보호 전략을 정의
- 규칙은 웹 요청 검사 기준을 정의하고, 해당 기준과 일치하는 요청에 대해 수행할 작업을 지정
- 규칙이 아직 차단하거나 허용하지 않은 요청을 차단하거나 허용할지 여부를 나타내는 웹 ACL에 대한 기본 작업을 설정
- 규칙 – 각 규칙에는 검사 기준을 정의하는 statemnet 와 웹 요청이 기준을 충족하는 경우 수행할 작업이 포함되어 있다.
- 웹 요청이 기준을 충족하면 일치
- 일치하는 요청을 차단, 허용, 계산, CAPTCHA 퍼즐이나 자동 클라이언트 브라우저 챌린지를 사용하는 봇 제어를 실행하도록 규칙을 구성할 수 있다.
- 규칙은 AWS WAF 리소스가 아님! 웹 ACL 또는 규칙 그룹의 컨텍스트에만 존재
- 규칙 그룹 – 웹 ACL 내부 또는 재사용 가능한 규칙 그룹에서 직접 규칙을 정의할 수 있다.
- AWS 관리형 규칙 및 AWS Marketplace 판매자는 사용자가 사용할 관리형 규칙 그룹을 제공합니다.
- 자신만의 규칙 그룹을 정의할 수도 있다.
AWS WAF 구조 및 할당량
- 하나의 Web ACL를 여러개의 Target에 적용 가능
- rule groups의 Max Capacity가 1500 초과할 경우 : Web ACL를 2개 이상으로 분리 생성 혹은 AWS에 요청하여 상향 신청
- * WCU(web ACL capacity units) 최대는 5000개, basic 제공 개수가 1500개, 초과시 비용 발생
- AWS Managed rule groups
>> rule group의 max capacity 를 확인해봤는데
>> 이 녀석이 내가 찾는 가장 정확한 숫자인듯 하다. WAF 한 계정당 최대 규칙 그룹 수 = 100
- AWS WAF는 다음과 같은 엔터티 설정에서 리전별 계정당 할당량이 고정되어 있어서 이러한 할당량은 변경할 수 없다.
- 3rd Party Managed rule groups : MarketPlace에서 3rd Party 제품 구매한 경우에 사용 가능
(위협탐지 면에서... AWS Marketplace 를 통해 보안 벤더사의 Ruleset 을 구매하여 사용할 수 있다고 하는데, 3rd party 제품 도입 이유가 점차 없어지고 있다고 해서 이 부분은 차이를 비교해보면 좋을듯...)
- Target
- Region 기준으로 동작 : ALB, API Gateway, AWS AppSync
- Global 동작 : CloudFront
AWS WAF 기능
- 웹 트래픽 필터링 : IP 주소, HTTP 헤더 및 본문 또는 사용자 정의 URI와 같은 조건을 기준으로 웹 트래픽 필터링
- AWS WAF Bot Control (옵션, 유료) : 일반적인 봇 트래픽을 제어하고 가시성을 확보
- AWS WAF Fraud Control (옵션, 유료) : 애플리케이션의 로그인 페이지에서 손상된 자격 증명을 사용하여 사용자 계정에 대한 무단 액세스 모니터링
- AWS Firewall Manager와 통합 : 여러 AWS 게정에 배포된 WAF를 중앙에서 구성 및 관리 가능
- 실시간 가시성 : IP 주소, 지리적 위치, URI, 사용자 에이전트 및 참조자에 관한 세부 정보를 포함하는 원시 요청을 캡처하고 실시간 지표를 제공
AWS WAF를 연동한 구성 예시
AWS WAF는 Cloudfront와 ALB, API Gateway 등의 서비스에 연동가능
-> 어느 곳에 연동하는 것이 더 나을지 고민해봐야 함.
-> 보안만 신경쓰기보다는 여러 가지 IT 전반적인 상황(위협 및 취약성, 장애 발생, 멀티 클라우드 가능성 등)을 고려하여 적절한 아키텍처를 선택할 수 있어야 한다고 함.
[Cloudfront + WAF 와 ALB + WAF를 함께 사용하는 구조]
Cloudfront의 WAF는 L7 DoS및 임계치 조절, IP Blacklist 차단 규칙으로 WAF룰을 수립하고,
ALB의 WAF는 웹 취약점 공격을 중점으로 룰을 구분하여 수립할 수 있다.
(왜 이렇게 구성하는가?
- 트래픽 급증은 이벤트와 같은 예측된 상황에서도 발생하지만, DDoS와 같은 상황에도 발생
- Volumetric 한 DDoS 공격에 대한 대비를 위해서라도 Cloudfront의 Global edge를 통해서 DDoS 공격이 처리된 후,
VPC 내에 트래픽이 유입되는 게 더욱 유리합니다.
- 그리고 L7을 겨냥한 DDoS도 있어 Cloudfront에 적용된 WAF에서 적절한 임계치 룰과 L7 DoS 차단 룰이 적용되어 있을 테니, VPC에 부적절한 트래픽 유입은 적어진다.
>> 그래서 Cloudfront에 waf 적용하여 L7 DoS및 임계치 조절을 하는거군... )
WAF에 대한 개념 및 같이 사용 가능한 AWS Service까지 알 수 있었는데, 알아보면서 보안면의 다양한 아키텍처 구성에 대해서도 더 알아보고 싶어졌다. 실습도... 해봐야지...
<참조>
- https://docs.aws.amazon.com/ko_kr/waf/latest/developerguide/limits.html
- https://imweb.me/blog?idx=79
- https://docs.aws.amazon.com/waf/latest/developerguide/how-aws-waf-works-components.html
- https://techblog.woowahan.com/2699/
- https://docs.aws.amazon.com/ko_kr/waf/latest/developerguide/limits.html
- https://www.oracle.com/kr/security/cloud-security/what-is-waf/
- https://sh-t.tistory.com/97
- https://velog.io/@woodonggyu/Getting-started-with-AWS-WAF