- WAF 란2023년 08월 13일 23시 59분 36초에 업로드 된 글입니다.작성자: 재형이반응형
AWS WAF 개요
- AWS WAF (Web Application Firewall) 은 AWS 환경에서 발생하는 Layer 7 에 해당하는 보안 위협 (웹 애플리케이션 공격) 에 대응하기 위한 보안 서비스이다
- 이러한 공격으로는 OWASP 선정 10 대 보안 위협에 속하는 크로스 사이트 요청 위조, 크로스 사이트 스크립팅(XSS), 파일 인클루전, SQL 삽입 공격 등이 있습니다
- WAF는 크게 '규칙', '규칙 그룹', 웹 ACL이라는 3가지 요소로 구성돼 있다
1. 규칙
요청에 대한 검사 방법을 정의한다. 특정 IP 주소만 허가하는 규칙, 특정 헤더가 포함된 GET 요청만을 허거하는 규칙 등을 정의한다. 검사 방법을 AND 조건 또는 OR 조건 등으로 조합해 허가나 거부등 을 정의할 수 있다2. 규칙 그룹
이름에서 알 수 있듯이 여러 규칙을 모은 것이다. 여기서는 규칙의 우선순위를 설정할 수 있다. 주의할 점은 규칙 그룹에는 WCU(WAF Capacity Unit)라는 규칙의 상한치를 설정해야 한다. 규칙 그룹별로 WCU는 1500까지 설정할 수 있다. 규칙 내용에 따라 소모되는 WCU는 다르며, 그룹에 포함된 규칙의 WCU 값이 1500을 넘지 않게 설정해야 한다. 이 WCU는 규칙 그룹을 만들 때만 값을 지정할 수 있으며 이후에는 변경할 수 없다는 점도 주의해야 한다. 예를 들어 그룹을 정의한 뒤 규칙을 추가하거나 변경하는 경우 이 그룹 내의 합계 WCU가 제한을 넘으면 생성되지 않고 별도의 규칙 그룹을 생성해 수정해야 한다. 이름 역시 생성 후에는 변경할 수 없다.3. 웹 ACL
규칙 그룹과 적용할 AWS 자원을 연결하는 역할을 한다. 웹 ACL은 여러 규칙 그룹을 연결할 수 있지만, WCU 제한은 1500이다. 웹 ACL을 생성할 때 리전을 Globa로 할지 개별 리전으로 할지 선택해야 한다. CloudFront와 연결하는 경우에는 Global을, ALB나 API Gateway와 연결할 때는 Seoul 등의 리전을 선택해야 한다. 이때 웹 ACL과 연결할 규칙 그룹도 동일하게 리전 설정을 해야 한다는 점에 주의한다. 예를 들어 리전을 Global로 설정한 규칙 그룹과 Seoul로 설정한 웹 ACL은 연결할 수 없다.
1. AWS 관리형 규칙
AWS 관리형 규칙 그룹을 선택하거나 추가하여 다양한 위협에 대해서 애플리케이션을 보호할 수 있습니다. 관리형 규칙은 다음과 같습니다.
- OWASP 선정 10 대 보안 위협에 제시된 일반적인 위협과 보안 취약성 일부를 담당하는 기본 규칙 그룹
- OS 나 데이터베이스와 같은 애플리케이션 특성에 따라 추가적 보호를 제공하는 사용 사례에 특화된 규칙 그룹
- Amazon 위협 인텔리전스 팀이 제공하는 알려진 악성 IP 들로 구성된 IP 평판 목록
2. 사용자 지정 규칙
- AWS 관리형 규칙에 추가로 HTTP 의 헤더, 본문, 메서드, 쿼리 문자열, URI 등에 원치 않는 형태나 IP 주소 등을 차단하는 애플리케이션에 특화된 사용자 지정 규칙을 작성할 수 있습니다. 이러한 규칙은 AWS 관리형 규칙 그룹과 함께 사용되어 맞춤형 보호기능을 구현할 수 있습니다
- 기본적으로 AWS WAF에서는 JSON 포맷을 활용한 룰 생성이 가능하다.
2-1. 국가 기반의 IP 차단
출발지 국가가 중국일 경우, 차단한다.
{ "Name": "COUNTRY_BLOCK_CHINA", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "COUNTRY_BLOCK_CHINA" }, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "CN" ] } } }
2-2. 속도 기반의 IP 차단
특정 출발지 주소에서 5분 동안 1,000번 이상 웹 요청 시, 차단한다.
{ "Name": "MAX_REQUEST_1000", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "MAX_REQUEST_1000" }, "Statement": { "RateBasedStatement": { "Limit": "1000", "AggregateKeyType": "IP" } } }
2-3. HTTP Header 기반의 요청 차단
매칭을 시도할 헤더는 "User-Agent" 이고, 해당 헤더 내 대소문자 구분없이 "python" 문자열이 포함되어 있을 경우, 차단한다.
{ "Name": "USERAGENT_BLOCK_PYTHON", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "USERAGENT_BLOCK_PYTHON" }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "SingleHeader": { "Name": "User-Agent" } }, "PositionalConstraint": "CONTAINS", "SearchString": "python", "TextTransformations": [ { "Type": "LOWERCASE", "Priority": 0 } ] } } }
3. AWS Marketplace 규칙
- 보안 공급업체는 AWS WAF 에서 사용할 수 있도록 자체 제작한 규칙들을 AWS Marketplace 를 통해
공급합니다. 이 규칙들은 구독을 통해서 사용하실 수 있으며, AWS 관리형 규칙이나 사용자 지정
규칙과 함께 사용할 수 있습니다
웹 공격
- XSS
: SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법중 하나로, 권한이 없는 사용자가 악의적인 용도로 웹 사이트에 스크립트를 삽입하는 공격 기법 - CSRF
: CSRF 공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다 - SQL 인젝션
: SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위
반응형'클라우드 > AWS' 카테고리의 다른 글
ECS를 활용한 웹 애플리케이션 배포 - 개인프로젝트 (0) 2023.08.16 API Gateway 란 (0) 2023.08.14 Cognito 란 (0) 2023.08.13 DMS 란 (0) 2023.08.11 EKS 란 (0) 2023.08.11 다음글이 없습니다.이전글이 없습니다.댓글