AWS WAF 도입 관련 고민

Hansu Park·2023년 11월 3일
0

AWS WAF 도입 관련 고민

도입 배경

운영 중인 서버에 대해 해외에서 EC2의 무작위 포트에 대해 지속적으로 접속을 시도하고 있음을 확인하였다. 이로 인해 서버가 중지하는 일이 발생하였다.

약 하루 기준으로 수 십 건의 접속 실패가 발생했다. 따라서 해외 IP, 봇들에 대한 접속을 막는 WAF도입을 계획하고 있다.

AWS WAF란?

WAF는 웹 서비스를 대상으로 하는 방화벽이다. TCP/IP 기반으로 동작하는 일반 방화벽에 비해 HTTP를 기반 웹 서비스를 대상으로 전문화한다. AWS WAF는  AWS에서 제공하는 WAF서비스이다.

WAF와 Web ACL(WACL)

WAF는 방화벽 자체이고, Web ACL은 이를 사용자가 설정하고 관리하고 적용할수 있도록 돕는 외부 인터페이스이다.
※WAF는  AWS에서의 WAFv2를 의미한다.

Web ACL 설정 방식

코드에서 예외처리를 하는 것과 비슷하다. 조건(식)을 선택하고, 조건에 맞는 요소들에 대해 특정 동작(Allow, Block +  Action)을 수행한다.

Web ACL 연동 위치

ALB(Application Load Balancer), cloudfront, api gateway, app sync graphQL API와 연동할 수 있다
현재 운영중인 환경내에는 다른 타입들은 사용하지 않고 ALB 만을 사용하고 있어, 다른 선택지가 없다. 

요금 정책

  1. 월마다 5달러
  2. 규칙 개수당 1달러
  3. 백만 개 요청당 0.6달러
  4. capacity 1500 초과시 증가
  5. 지능형 위협 완화(?): 고급 옵션들
    - 요금이 옵션마다 상이
    (한 달 주기로 시간 당 사용량을 기준으로 측정된다.)

*capacity
사전 정의된 규칙(managed rules)들을 사용할 경우 capacity를 소모한다. capacity 1500 초과할 경우 초과한 capacity 500당 0.2 달러가 부과된다. (요금-3번 규칙 참고)
밑에 [capacity] 로 표시하였다.

기타
적용해도 ALB에 접근하는 요청이 줄어드는 것은 아니라 요금 변화는 없습니다; (EC2 접근 요청은 줄겠지만) EC2는 시간당 요금이 나가기에 무관합니다.

사전 정의 규칙 (managed rules) 목록

★★★★☆ WAF 적용시 도입하려는 규칙들

  • [25] Amazon IP reputation list: Amazon threat intelligence(AWS 클라우드를 위해 마련된 보안 정책) 기반 규칙 (봇 차단에 유용)
  • [50] Anonymous IP list: 익명 IP(난독화 되었거나 VPN 적용된 경우)를 막음
  • [700] Core rule set: OWASP(오픈소스 웹 앱 보안 프로젝트) 포함한 핵심 보안 정책
  • [700] Known bad inputs: 이미 알려져 있는 악의적인 입력을 방지하여, 취약점 노출을 막음.
    - 이번에 발생한 서버 다운와 관련이 있다고 판단한 규칙들이다.
  • [100] admin protection: 관리자 페이지에 대한 외부 웹 앱, 악의적인 공격을 방지
    → admin 페이지가 유추하기 쉽고, 보안이 뛰어나지 않다. 그럼에도 뚫렸을 경우 핵심 데이터에 모두 접근이 가능하다. 됨.

★★★☆☆ 보통 우선순위

  • [25] Amazon IP reputation list: Amazon threat intelligence(AWS 클라우드를 위해 마련된 보안 정책) 기반 규칙 (봇 차단에 유용)
  • [50] Anonymous IP list: 익명 IP(난독화 되었거나 VPN 적용된 경우)를 막음
    → 관련이 있으나, capacity가 적고 (비싸지 않고) 적용할 다른 규칙들과 겹칠 것 같다.

★★☆☆☆ 낮은 우선순위

  • [200] linux os: LFI 공격 관련
  • [200] posix os: Linux os 관련 규칙을 도입하려면 적용되어야 함.
    이들에 대한 별도 보안 설정은 되어있지 않으나, 관련 공격이 발생한 적은 없다. 발생한 적 없는 공격이므로 무시해도 좋을 지 아니면 발생가능한 공격이므로 대비를 해야할 지 고민이다..

→ 생각: 프로덕션에는 추가하여 보안을 강화하고, 스테이지는 추가하지 않아 요금을 절약한다.

☆☆☆☆☆ 선택하지 않음 (WAF 적용시 도입이 필요하지 않다고 생각되는 규칙들)

  • [200] Sql db: sql injection 처리위한 기능, mybatis prepared statement 활용하여 관련 X
  • [200] Window os: 서버가 윈도우 os가 아님,
  • Php app: php 앱 아님
  • Wordpress app: 워드프레스 앱에 해당하지 않음.

직접 정의한 규칙 목록(custom rules)

도입 배경이 되었던 해외 IP를 블로킹하는 규칙을 커스텀하였다.

★★★★★ 해외 IP 블로킹

Source IP를 기준으로 한국이 아니라면 블록한다.
예시 (의사 코드)

if source_ip != KR: #(republic of korea)
	block()

json 설정 값

{
  "Name": "block-only-south-korea",
  "Priority": 5,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "alock-only-south-korea"
  },
  "Statement": {
    "NotStatement": {
      "Statement": {
        "GeoMatchStatement": {
          "CountryCodes": [
            "KR"
          ]
        }
      }
    }
  }
}

이외 규칙에 해당하지 않는 요청들(올바른 요청들)은 허용한다.

고찰

  • 중요한 서비스(mysql, server)의 포트번호를 기본 값이 아닌 다른 값으로 설정해줘서, 어떤 포트에 서비스가 실행되고 있는지를 유추할 수 없게 하면 좋을 것이다.
  • 공격자가 접근할 경우 암호화를 해버린 다음, 비트코인을 요구하는 경우가 있다고 한다. 가볍게 생각하면 안될 것 같다.

참고

AWS WAF 운영에 대한 이야기 
Pricing - AWS WAF - Amazon Web Services (AWS) 
AWS WAF (Web Application Firewall) 구축 및 활용**

0개의 댓글