Amazon Web Services 한국 블로그

AWS 기반 게임 개발자를 위한 안내서 – 1부. DDoS 공격 방어 방법

전 세계에 대규모 게임 사용자를 위한 빠르고 민첩한 게임 서비스 개발을 위해 클라우드 활용은 필수가 되었습니다. 세계 최대 게임 회사의 90%가 AWS 기반 게임 서비스를 제공하고 있으며, 국내 게임 매출 상위 15개사 모두 AWS를 사용하고 있습니다. AWS 기반 게임 개발자들이 경험하는 서비스 제공 이슈를 해결 할 수 있는 모범 사례를 총 4회의 걸쳐 여러분께 공유해 드리고자 합니다.

오늘은 그 첫 시간으로 분산 서비스 거부 (Distributed Denial of Service, DDoS) 공격 패턴 및 현황과 AWS 기반 대응 방법을 자세히 알아봅니다.

1. DDoS 공격 패턴 및 현황

최근 게임 서비스 중 전통적인 게임 클라이언트 해킹과 프리 서버와 같은 백엔드 단의 해킹과 더불어 게임 서비스에 대한 DDoS 공격이 게임 보안 상에 큰 이슈로 대두되고 있습니다. DDoS란 여러 대의 공격자에 의해서 시스템을 악의적 트래픽으로 공격한 뒤 해당 시스템의 자원을 부족하게 만드는 공격입니다. DDoS 공격의 경우, 공격 벡터로 불리는 다양한 형태의 공격 유형을 가지고 있습니다. 아래 그림과 같이 크게 인프라 레벨의 자원 대상 공격과 애플리케이션 레벨의 자원 대상 공격으로 구분할 수 있습니다.

1) DDoS 공격 패턴

인프라 레벨의 공격은 OSI 레이어 3과 4의 요소에 대한 공격입니다.  대량의 데이터 또는 패킷을 발생시킴으로써 네트워크 및 시스템의 과부하를 유발하여 정상적인 서비스가 제공되지 못하게 합니다. 프로토콜의 종류에 따라 ICMP Flood, UDP Flood, SYN Flood 공격으로 구분 할 수 있습니다.

ICMP Flood나 UDP Flood의 경우 해커에 의해 감염된 장비를 활용하여 다수의 트래픽을 공격 대상에 전송하여 공격하는 방식입니다. 이러한 공격은 추적을 어렵게 하기 위하여 변조된 IP를 사용하는 경우가 많습니다. 공격 유형 중, 인터넷상에 공개된 정상적인 서비스(DNS, NTP, Memcached…)들을 타깃으로 공격 대상 IP 주소가 원본 주소로 가장한 요청을 보낸 후, 응답이 공격 대상으로 보내도록 하여 공격하는 Reflection 공격이 있습니다. 일반적으로 요청보다 응답이 몇 배 크기 때문에 적은 트래픽을 큰 트래픽으로 증폭시키는 경우가 많이 있습니다. SYN Flood의 경우 TCP 연결을 맺는 과정에서 이루어지는 3-Way Handshaking에서  공격이 발생합니다. 완전한 연결이 이루어지지 않은 연결을 관리하는 OS의 자원을 소모하게 해 많지 않은 패킷으로 효율적으로 서비스 거부 공격을 발생시킬 수 있습니다.

애플리케이션 레벨에 대한 공격은 OSI 레이어 7의 애플리케이션 레이어에 대한 공격입니다. DNS 서버의 경우 다량의 DNS 요청으로 인해 정상적인 DNS 요청에 대한 응답을 반환하지 못하도록 하는 DNS Query Flood 공격을 받을 수 있습니다. HTTP 서버의 경우 HTTP  Request Flood, Cache의 내용을 사용하지 못하도록 하는 Cache-Bursting 공격과 비정상적으로 느린 요청으로 연결을 낭비하는 Slowloris 공격을 받을 수 있습니다. SSL/TLS 을 사용하는 경우 Handshaking 과정의 서버 부하를 일으키는 SSL/TLS Abuse 등의 공격을 받을 수 있습니다.

2) DDoS 현황

분산 공격의 특성상 공격자를 구별해내는 방식으로는 방어가 어려우며 최근 대역폭 확장, IoT 장비 급증, 다양한 공격 형태와 복잡성 증대로 인해 그 규모가 계속하여 증가하고 있습니다. 게임 역시 DDoS 공격으로부터 자유로울 수 없습니다. 해외의 경우 여러 메이저 게임들 역시 대규모 DDoS 공격을 받은 내용이 잘 알려져 있습니다. 또한, 국내 게임의 경우에도 중국 및 동남아시아에 서비스 출시를 준비하는 게임을 타깃으로 금전을 요구하는 협박성 DDoS 공격이 곳곳에서 이루어지고 있습니다.

이러한 협박성 공격에 대해 금전을 지불하는 방식으로 문제를 해결할 경우, 공격자들 사이에서 정보를 공유하는 다크 웹을 통하여 해당 내용이 퍼지는 경우가 많습니다. 이로써, 또다시 수많은 다른 공격자들의 공격 목표가 되기도 합니다.  따라서 단순히 금전적 보상이 아닌, 공격하지 못하게 꼼꼼히 대비하여 공격자가 공격을 포기할 때까지 다양한 방식으로 대응해나가는 자세가 반드시 필요합니다.

2. DDoS 방어를 위해 제공되는 AWS 서비스

많은 게임사가 AWS를 통해 글로벌하게 게임을 운영하고 있습니다. 그 과정에서 AWS는 많고 다양한 유형의 DDoS 공격을 경험하였으며, 해당 경험을 통해 DDoS 방어에 필요한 여러 서비스를 직접 개발하여 제공하고 있습니다.

1) AWS Shield

AWS Shield는 AWS의 DDoS 공격을 방어하기 위해 개발된 서비스입니다. 기존의 DDoS 공격을 막기 위해 제공되는 솔루션들의 경우, 방어를 적용하기 위해 네트워크 아키텍처에 많은 변경을 해야 했습니다. 하지만 AWS Shield의 경우, AWS 서비스에 이미 내장된 구조이기 때문에 큰 아키텍처의 변경 없이도 DDoS 방어에 빠르게 활용할 수 있습니다.

AWS Shield는 그 역할 및 기능에 따라 AWS Shield Standard와 AWS Shield Advanced로 구별됩니다.

(1) AWS Shield Standard 
모든 AWS 고객에게 무료로 제공되고 있는 기본적 보호 장치입니다. 가장 일반적이고 빈번하게 발생하는 웹서비스를 대상으로 하는 네트워크 및 전송 계층의 DDoS 공격으로부터 서비스를 보호합니다. Amazon CloudFront와 Amazon Route53를 사용하여 서비스를 구성할 경우, 알려진 모든 인프라(계층 3 및 4) 공격으로부터 보호할 수 있습니다.

(2) AWS Shield Advanced 
Amazon CloudFront, Amazon Route 53, Amazon EC2, Elastic IP, ELB, AWS Global Accelerator에서 실행되는 애플리케이션을 대상으로 하는 공격에 대해 더 높은 수준의 보호를 제공합니다. AWS Shield Standard가 제공하는 보호 이외에, 대규모 DDoS 공격에 대한 추가 보호 및 완화, 거의 실시간으로 제공되는 CloudWatch 상의 공격 유형에 대한 지표 및 DDoS 감지 여부에 대한 지표를 통한 공격 가시성, 웹 애플리케이션 방화벽인 AWS WAF를 무료로 통합하여 제공하고 있습니다. 또한, AWS에서 DDoS 방어를 전담하는 팀인 AWS DDoS Response Team (DRT) 와 연결되어 각 리소스 별 사용자 지정 완화 정책을 제공 받을 수 있습니다.

DDoS로 인하여 리소스 사용이 증가할 경우, EC2, ELB, CF, AWS Global Accelerator ,Route53 에 대한 요금 보호를 제공합니다. 서비스 메뉴를 통하여 현재 보호되고 있는 리소스에 대한 정보, 현재 발생하고 있는 공격 상황과 최근의 공격 받았던 기록 등의 정보를 제공하여 DDoS에 대한 가시성을 제공합니다. 또한, 글로벌 위협 환경 대시보드를 통해 전체 AWS 에서 확인되는 DDoS 위협 환경을 파악할 수 있습니다.

실제 공격 발생 시 비지니스 서포트 이상의 구독을 가지고 있는 경우 AWS 내의 DDoS 대응 팀(DRT)의 지원을 받을 수 있습니다. Shield Advacned의 경우 최소 1년 이상의 사용 약정이 요구되지만, PoC(Proof of Concept) 를 원하실 경우, 별도의 신청 절차를 통해 2달 동안만 사용하고 구독을 취소할 수 있으며, 본사 담당자의 승인을 통해 테스트 크레딧을 지원받으실 수 있습니다.

비용구조는 기본 월 사용료($3,000)와 데이터 송신 사용요금(리전별 상이)으로 구성되어 있으며, 여러 개의 리전 및 계정을 운영하고 있더라도 기본 사용료는($3,000) 매달 한 번만 납부하면 됩니다. 따라서, 게임 종류에 따라 AWS 계정을 여러 개 사용하고 있고 글로벌 서비스 지역에 따라 다양한 리전을 사용하고 있을 경우, 데이터 송신 사용요금 이외 기본 월 사용료는 $3,000만 납부하면 됩니다. 또한, Shield Advanced를 통해 보호되는 리소스들에 대해서는 AWS WAF가 무료로 제공합니다.

2) AWS Web Application Firewall

AWS WAF는 API Gateway, Application Load Balancer, CloudFront의 앞에 적용할 수 있는 웹 애플리케이션 방화벽 서비스입니다.  웹 애플리케이션이나 API 서비스의 경우 DDoS 외에도 SQL Injection이나 Cross Site Scripting 등 애플리케이션의 취약점에 대한 보안 공격을 많이 받습니다. 일반적인 공격 패턴을 차단하는 보안 규칙을 제공하며, 사용자가 정의한 특정 패턴을 필터링하는 규칙을 생성할 수도 있습니다. AWS WAF를 사용하게 되면 Web ACL을 구성하여 규칙에 따라 요청을 허용, 혹은 거부, 아니면 매칭된 요청의 개수만 집계 처리할 수 있습니다. 규칙은 IP 주소, HTTP 헤더, HTTP 본문, URI 문자열, SQL 명령어 주입 및 교차 사이트 스크립팅 등의 조건을 활용하여 만들 수 있고, 과도한 요청을 막기 위한 속도 기반 규칙도 추가할 수 있습니다.

규칙을 직접 생성하지 않고도 사용할 수 있도록 관리형 규칙도 제공하고 있습니다. 최근 WAF의 기능 추가를 통하여 AWS에서 제공하는 관리형 규칙을 추가하여 OWASP 10대 웹 애플리케이션 취약점에 대한 규칙과 Common Vulnerabilities and Exposures (CVE)에 대한 규칙 등을 자동으로 갱신하여 제공하고 있습니다. 또한, AWS 마켓플레이스에서 보안 전문 서드파티 업체의 관리형 규칙을 구매하여 사용할 수도 있습니다. 그 외에 사용자 지정 규칙을 추가하여 특정 국가의 요청을 거부 혹은 해당 국가의 요청만 허용할 수도 있으며, 동일 원본에서부터 일정 시간 간격에 요청 수를 제한하는 규칙을 적용할 수도 있습니다.

적용된 규칙들에 대해서는 실시간으로 지표를 허용 그리고 거부하는 내용에 대한 지표를 확인할 수 있습니다. WAF에 의해서 막히게 되는 요청의 경우에는 샘플 요청 정보를 제공하여 더욱 효과적인 필터링을 적용할 수 있습니다. 본 서비스의 요금은 생성한 웹 접근 제어 목록(ACL)의 수, 웹 ACL에 추가한 규칙의 수 그리고 수신한 웹 요청의 수를 기준으로 부과되며 약정의 조건은 따로 없습니다. 실제 해당 비용을 직접 계산해보실 수도 있습니다.

3) AWS Global Accelerator

AWS Global Accelerator 는 AWS의 글로벌 네트워크를 통해 사용자에게 애플리케이션으로 이어진 경로를 최적화하여 TCP 및 UDP 트래픽의 성능을 개선하는 서비스입니다.  AWS Global Accelerator 는 애플리케이션 엔드포인트를 단일 또는 여러 AWS 지역에 배포하고, 고정된 진입점으로 정적 IP 를 제공한 후 각 엔드포인트의 상태를 모니터링하고 비정상적인 엔드포인트의 트래픽을 30초 안에 정상 엔드포인트로 리다이렉션할 수 있습니다.

또한, DDoS 방어와 관련하여 본 서비스를 사용하면 내부 ALB 및 프라이빗 EC2 에 대한 엔드포인트를 노출하지 않을 수 있습니다. 대규모 DDoS 공격이 들어오더라도 AWS 글로벌 인프라를 활용한 AWS Shield 자동화 및 사용자 정의 완화 정책을 사용하여 공격을 방어할 수 있습니다. 본 서비스의 요금은 시간당 $0.025의 기본요금과 요청을 지원하는 AWS 리전(소스)과 응답이 향하는 AWS 엣지로케이션(대상)에 따라 달라지는 데이터 전송 프리미엄 요금으로 구성되어 있습니다.

3. DDoS 방어를 위한 아키텍처 및 대응 방법 

지금까지 DDoS에 대한 공격 패턴과 이를 방어할 수 있는 AWS 서비스를 소개했습니다. 이제 DDoS 공격에 대해 강한 방어력을 가진 서비스를 구현하기 위해 좋은 아키텍처와  모범 사례 등을 살펴보겠습니다.

1) 강한 방어력을 가진 아키텍처 구성 방법

(1) 확장이 가능한 서비스 구조를 준비합니다

DDoS 공격이 발생할 때 정상적인 요청을 완벽히 걸러내기는 매우 어렵습니다. 즉, 상당수의 공격 요청이 실제 서비스 레벨에 도달하는 것도 충분히 발생할 수 있는 일입니다. 따라서, 공격이 발생할 경우 즉각적으로 서버를 확장하여 공격에 대응할 수 있어야 합니다. AWS에서는 Elastic Load Balancing과 Auto Scaling을 사용하여 확장 가능한 구조를 만들 수 있습니다. 이러한 기능들을 통해 공격이 발생할 경우에는 사용자의 개입 없이도 서비스 규모를 확장하여 중단없이 서비스를 운영할 수 있습니다.

(2) 공개적으로 노출되는 서비스 엔드포인트를 최소화합니다

Amazon Virtual Private Cloud를 사용하여 서비스를 독립적인 네트워크에서 구성해야 합니다. 그리고 백엔드 서비스는 모두 프라이빗 서브넷에 두고, 서비스를 위한 최소한의 자원만 공개 서브넷에 위치시키는 구조를 권장합니다. 인스턴스 레벨의 보안을 높이기 위해 각 자원에 접근하는데 필요한 최소한의 규칙을 보안 그룹에 적용해야 하며, 서브넷 단계에서의 보안을 높이기 위해서 네트워크 ACL을 사용해야 합니다.

HTTP를 사용하여 서비스를 제공하는 경우 AWS CloudFront 또는 Application Load Balancer를 사용하고, TCP나 UDP를 사용하여 서비스를 제공하는 경우 AWS Global AcceleratorNetwork Load Balancer 등  AWS 에서 제공하는 엔드포인트를 사용하여 서비스를 노출할 수 있습니다. 이러한 서비스들은 모두 공격 트래픽에 대한 자동 확장이 적용되어 효과적인 노출 지점을 제공할 수 있습니다. 더불어, AWS Shield Standard가 무료로 적용되기 때문에 DDoS  기본적인 공격 유형에 대한 방어를 무료로 적용받을 수 있습니다.

(3) 웹 애플리케이션 방화벽을 사용합니다

애플리케이션으로 들어오는 HTTP 패킷의 내용에 따라 공격을 방어하기 위해서 AWS WAF를 비롯하여 다양한 웹 애플리케이션 방화벽을 사용합니다.

(4) 부하 상황에서의 서비스 안정성을 미리 검증합니다

서버 확장으로 공격에 대응할 수 있는 서비스 구조가 아니거나, 확장 속도가 느려서 단일 공격 지점에 트래픽 부하가 몰리는 경우도 충분히 발생할 수 있습니다. 이러한 경우, 평소에는 문제가 없던 서비스의 기능이 예측하지 못한 형태로 동작하게 됩니다. 연결형 서비스에서 기존 연결이 끊기거나, 네트워크 부하로 인해 CPU 사용률이 올라가는 상황 등 예외 상황에 대한 처리가 미리 준비되지 않으면,  공격 상황에서 서비스가 비정상적으로 종료될 수 있습니다. 부하가 발생할 경우의 서비스 동작에 대해 미리 테스트를 통해 확인하여, 공격 시 문제가 될 수 있는 지점을 미리 파악해야 합니다.

(5) 서비스의 동작을 모니터링하고 경보를 등록합니다

DDoS 공격을 받게 되는 경우에는 서비스로 유입되는 데이터와 패킷, HTTP 요청의 수가 급증하게 됩니다.

주로 순간적으로 트래픽이 급증하는 DDoS 공격 상황에서,  빠르게 이상 상황을 확인하기 위해서는 일반적인 5분 간격의 모니터링 지표 등록이 아닌 1분 간격의 모니터링 지표를 사용하도록 세부 모니터링 기능을 활성화합니다.

먼저, 서비스의 정상적인 상황에서 최고와 최저 트래픽 상황이 어떻게 되는지 잘 이해해야 합니다. 문제를 확인할 수 있는 NetworkIn, NetworkPacketIn, CPUUtilization, ALB의 RequestCount 등의 지표를 통해 해당 수치들이 급증하는 상황을 상시 모니터링합니다. 또한, 해당 상황이 발생할 경우 경보를 설정하여 최대한 빠르게 문제 상황을 확인할 수 있도록 준비합니다. 더불어, CloudWatch 이상 탐지를 사용하게 되면 통계 및 기계 학습 알고리즘을 활용하여 정상 및 이상 범위를 자동으로 지정해주기 때문에 정상 지표에 대한 수동 관리의 부담을 줄일 수 있습니다. AWS Shield Advanced에 가입한 경우라면, 보호 리소스로 등록된 해당 항목들에 대해 추가적인 보호 규칙을 적용할 수 있습니다. 또한, 각각의 리소스별 공격 벡터 지표와 리소스별 DDoS 공격 여부를 확인할 수 있는 지표를 추가로 제공 받을 수 있습니다.

(6) DDoS가 발생했을 때 어떻게 대응할지에 대한 런북을 작성합니다

모든 서비스는 명시적이든 명시적이지 않든 일련의 작업 프로세스에 관한 규정을 가지고 있으며, 이러한 작업 프로세스를 통상적으로 런북이라 부릅니다. DDoS 가 발생했을 때 어떻게 작업을 진행해야 하는지에 대한 작업 프로세스도 런북으로 작성하여 준비해야 합니다. 이러한 런북을 통해 자동화할 수 있는 부분들은 자동화를 진행하여 사람의 개입이 필요한 상황을 줄이고 대응 속도를 높일 수 있습니다. 특히, 초기 DDoS 공격임을 판단하고 관련된 사용자에게 알림을 보내어 대응팀을 준비하는 과정은 자동화를 통해서 그 시간을 대폭 개선할 수 있습니다.

(7) 클라이언트에서 접근하기 위한 서버 엔드포인트 정보를 DNS 를 사용합니다

DDoS 공격에 대한 완화 처리를 하는 과정에서는 주로 서비스의 아키텍처 구조가 변경되고, 클라이언트가 서비스에 접근하는 엔드포인트가 변경되는 경우가 많습니다.  이때, 클라이언트가 DNS 항목을 사용하여 서비스에 접근할 수 있다면, 별도의 클라이언트 변경 없이 DNS 항목의 수정만으로 해당 접속 정보를 변경하고 반영하여 서비스를 이어갈 수 있습니다.

2) 실제 DDoS 공격 시 대응 방법

AWS 상에서 실제 DDoS 공격을 받고 있다고 판단된다면, 다음과 같이 대응할 수 있습니다.

(1) 실제 DDoS 공격이 발생하는지 그리고 공격의 유형이 어떻게 되는지 확인합니다

DDoS 공격의 경우 다양한 공격 유형을 복합적으로 사용하는 경우가 많습니다. 각 공격 유형마다 해당 유형에 대한 대응 방식이 달라지기 때문에 현재 공격이 어떤 유형인지 파악하는 것이 방어 조치의 기본이 됩니다. 가장 정확하고 확실한 방법으로는 공격을 받는 인스턴스 상에서 어떠한 패킷을 전송받고 있는지에 대한 패킷 덤프를 얻는다든지, 어떠한 요청에 대해서 처리하는지에 대한 요청 처리 로그를 확인하는 것입니다. 다만,  DDoS 상황이 발생하고 나면 해당 인스턴스에 접근하기가 쉽지 않고, 공격의 규모가 크다면 공격 발생 도중에는 확보하기는 매우 어렵습니다.

이럴 경우 AWS에서 제공하고 있는 VPC 흐름 로그나, CloudFront 액세스 로그, ALB 액세스 로그, WAF 웹 ACL 트래픽 로그, Global Accelerator 흐름 로그 등의 네트워크 로그를 활성화하여 정보를 수집할 수 있습니다. 이러한 로그들은 S3 에 보관한 후 Amazon Athena를 활용하여 손쉽게 분석할 수 있습니다. 공격 유형 별로 각각 특징적인 로그 정보를 발생시키기 때문에 분석을 통해 대략적인 공격 유형을 파악할 수 있습니다.

 

(2) 대상 EC2 인스턴스를 DDoS 공격 규모에 대응 가능한 인스턴스 유형으로 변경합니다

AWS는 다양한 EC2 인스턴스 유형을 제공하고 있으며, 제공되는 성능 제한이 다르게 구성되어 있습니다. 만약, 서비스를 위해  최적의 EC2 인스턴스를 사용하고 있는 경우라면 공격이 들어왔을 때 해당 공격의 규모가 EC2 인스턴스의 성능 한계를 넘게 되어 서비스가 중단되는 경우가 발생합니다.  그러한 경우 EC2 인스턴스의 유형을 향상된 네트워킹을 지원하고 DDoS 공격 규모를 수용할 수 있을 만큼의 성능을 보유한 인스턴스로 변경하여 서비스를 유지할 수 있습니다.

(3) AWS 서포트 케이스를 사용하여 AWS 엔지니어의 지원을 받습니다

AWS Support는 AWS를 사용하여 서비스를 제공할 때 발생할 수 있는 이슈 해결을 위한 기본 장치입니다. 기술적인 내용에 대한 이슈 해결은 개발자 지원 이상에서만 지원이 되고, 더욱 빠른 처리를 받기 위해서는 비즈니스 지원 이상을 가입해야 유의미한 시간 내에 응답을 받을 수 있습니다.

우선, DDoS 공격이 의심되고 해당 공격이 서비스에 영향을 주는 경우, 공격을 받는 대상 IP 정보 및 공격을 받고 있는 AWS 리소스 정보 등을 간단히 정리하여 서포트 케이스를 오픈해야 합니다. 문제를 정확히 이해하기 위한 정보 수집 방법 및 문제 해결을 위한 방법 그리고 개선을 위한 방법 등에 대해서 자세히 안내를 받을 수 있습니다. 만약 AWS Shield Advanced에 가입되어 있는 경우 서포트 케이스를 바탕으로 AWS 내부의 DDoS Response Team (DRT)로 부터의 전문적인 지원을 받으실 수 있습니다. DDoS 방어에 대한 많은 경험이 있는 DRT와 직접 연계하여 상황 파악, 방어, 향후의 문제 해결 방안을 논의할 수 있고, 그러한 과정 중에 개발한 사용자 지정 완화 정책을 각 보호 리소스에 대해 배포할 수 있습니다.

또한, 사용자가 허용한 경우 DRT에서 자동으로 사용자의 AWS WAF 규칙을 적용할 수 있습니다. 더불어, AWS Shield Engagement Lambda 함수를 사용하게 되면 DRT 의 지원을 더 빠르게 받을 수 있습니다. DDoS 로 인한 비상 상황이 발생한 경우 경보를 발생 시켜 AWS Lambda 함수를 구동하고,  서포트 케이스를 자동으로 생성하여 DRT 에 즉각적인 알림을 전달할 수 있습니다. 이 경우 온라인 회의 및 화상 회의 도구인 Amazon Chime을 통해 서포트 엔지니어와 DRT 담당자가 모인 대화방에 참여하여 빠르게 공격에 대응할 수 있습니다.

(4) 케이스 스터디

그럼, 실제 MMORPG에 DDoS 공격이 들어왔을 때 어떻게 대응할 수 있는지 사례를 들어 설명해 드리도록 하겠습니다.

보통 MMORPG의 경우 클라이언트와 서버가 직접 TCP 연결을 맺어 통신을 주고받으며 실시간으로 클라이언트의 의도 및 상태를 전달하고 변경된 서버의 상태를 클라이언트에 동기화하는 방식이 일반적입니다. 실시간 트래픽 처리를 위해 서버를 상태 저장형으로 구현되는 경우가 많아 스케일 아웃 등 서버를 확장하기가 어렵습니다. 실제 본 사례의 경우에도,  MMORPG 서버와 웹 서버에 DDoS 공격이 들어와 서버를 바로 확장할 수 없는 구조였습니다. 하지만, 하기와 같이 AWS의 서비스들을 활용하여 DDoS 공격에 따른 피해를 완화할 수 있습니다.

웹 서버의 경우 ALB를 사용하여 AWS Shield Standard와 AWS WAF를 적용하여 쉽게 공격을 완화할 수 있었습니다. 공격을 받은 MMORPG의 경우 AWS Shield Standard나 AWS WAF로는 방어가 안 되는 TCP 서비스이기 때문에,  AWS Shield Advanced PoC를 2달 동안 신청하였습니다. 이후, 공격 대상이 되는 엔드포인트를 모두 보호 리소스로 등록하여 공격에 대한 추가적인 보호와 함께 CloudWatch Metrics에 추가되는 정보를 통해 어떠한 공격이 들어오는지 가시성을 확보하였습니다. 또한 공격에 대해 보다 구체적인 가시성 확보를 위해 VPC 흐름 로그를 활성화하였습니다.

이를 통해 VPC의 트래픽에 대한 로그를 모두 남겨 공격의 형태와 IP 정보를 확보할 수 있었습니다. 확보된 가시성 정보로 부터 공격의 종류 및 공격 트래픽의 규모를 확인하여 서비스를 제공하는 EC2 인스턴스를 대규모 트래픽을 처리할 수 있는 인스턴스 유형으로 교체하였습니다. 또한 AWS Global Accelerator를 EC2에 연결하여 트래픽을 분산 처리하도록 한 후 다양한 사용자 지정 패킷 필터링 처리를 진행했습니다. DRT와의 협업을 통하여 서비스 대상 국가 GeoIP 필터링, SYN 패킷 수 제한 필터링을 사용하였고, 이를 통해 서비스로의 공격 트래픽을 획기적으로 줄일 수 있었습니다.

4. 마치며

DDoS 공격이 나와는 상관없는 문제일 거라고 생각하는 경우가 많이 있습니다. 하지만 현재 발전해가고 있는 IT 환경은 공격자들에게 큰 규모의 DDoS 공격을 쉽게 가능하게끔 만들어주고 있습니다. 특히 게임 서비스의 경우 DDoS 로 인한 서비스 장애가 게임 사용자의 만족도 그리고 매출에 직접적인 영향을 미치게 됩니다. 위의 설명들이 DDoS 공격 상황에서도 가용성을 유지할 수 있는 게임 서비스 아키텍처 구성에 많은 도움이 되었으면 하고 바라봅니다.

더 자세한 내용으로 AWS의 AWS Best Practices for DDoS Resiliency whitepaper를 참고하시길 바라며, 추가 궁금하신 내용 및 기술 지원이 필요하신 내용에 대해서는 언제든지 aws-gaming-korea@amazon.com으로 문의하시면 됩니다.

다음 글에서는 게임 출시 전 반드시 챙겨야 할 것들이라는 주제로 만나뵙겠습니다. AWS와 함께 강력한 보안 기능을 가진 탄탄한 게임 서비스를 만드시는데 도움이 되시길 바랍니다.

– 장준성, AWS 게임 솔루션즈 아키텍트
– 박진성, AWS 게임 솔루션즈 아키텍트
– 김진우, AWS 게임 어카운트 매니저