|
https://store.steampowered.com/news/app/570/view/4115798034511159059?l=koreana
'전선과 전선 사이'를 찾아주신 여러분 모두 반갑습니다. 이 블로그 특집에서는 개발진들이 도타처럼 독특한 게임을 만들어 가면서 맞닥뜨리는 어려움, 버그 수정, 그리고 가끔의 즐거운 사건들을 다룹니다.
이번에는 인터넷에 관한 이야기를 하고자 합니다. 전혀 안 될 때를 제외하고 어떤 식으로든 되긴 하는데, 되어야 하는 방식대로가 아니라 어떤 식으로 다르게 작동하는지를 다룹니다. 고객의 인터넷이 어떤 식으로 멈췄고, 저희가 어떤 식으로 고쳤는지를 다루는 이야기입니다.
인터넷은 우리가 생각하는 것보다 더 험난한 영역입니다. 2단계 식별과 신뢰할 수 있는 쿠키의 안전한 테두리를 벗어나면, 악의적인 트롤링이 무작위로 끊임없이 일어나는 망망대해가 펼쳐집니다. 그뿐만 아니라 그저 여러분의 삶을 아주 괴롭게 만들 수 있다는 이유 하나만으로 그런 행동을 하는 능력도 갈수록 더 늘어납니다.
과거 2014년의 트롤링 방법은 분산형 서비스 거부(DDoS) 공격이었습니다. '분산형'이란 다수의 인터넷 호스트가 악의적으로 특정 대상 IP에 트래픽을 과도하게 일으켜 네트워크 스택을 압도하도록 한다는 뜻입니다. 이는 볼류메트릭 공격이라고 하는데, 네트워크에 침입하려는 것이 목적이 아닙니다. 그저 서비스를 거부하도록 하려는 것입니다. 분산형 서비스 거부란 적법한 서비스를 원하는 적법한 사용자들이 좋지 않은 트래픽에 밀려난다는 뜻입니다.
디도스(DDoS) 공격의 문제점은 2014년 말까지는 컴퓨터 공학에서 고급 학위를 딴 슈퍼 해커가 데이터 유출을 시도하면서 저지르는 행위가 아니었다는 사실이었습니다. 그야말로 아무나 의향만 있다면 비용을 지불하고 서비스나 봇을 사용하여 그러한 공격을 했습니다. 그 이유는 아주 분명합니다. 어떤 사람들은 순전히 훼방 행위를 목적으로 그런 짓을 즐기지만, 또 어떤 사람들은 별도의 동기가 있었습니다. 디도스(DDoS) 공격은 자신이나 응원하는 누군가가 지는 상황일 때 매치를 중단시킬 확실한 방법이었습니다. 이러한 짜증 나는 상황은 어쩌다 일어나는 일이 아니었습니다. 플레이어들이 경쟁하는 게임에 노골적으로 행해지는 폭력 행위로 바뀌어 가고 있었습니다.
2015년을 시작하고 몇 달까지는 도타와 CS:GO에 대한 디도스 공격이 엄청나게 증가하는 양상이 관측되었는데, 마찬가지로 다른 회사에서도 엄청나게 증가했다는 보고가 있었습니다. 누군가가 아주 갑자기 이러한 행위를 아주 쉽게 할 수 있도록 만든 것이었습니다.
2015년 8월, The International은 디도스 공격을 받았습니다. 경기가 진행되던 프로 선수들에게는 영향이 없었으나, 2시간이 넘도록 중계진은 매치에 들어가 벌어지는 상황을 설명하고 해설을 덧붙일 수 없었습니다. 스트리밍을 TV 방송으로 내보내는 일도 문제가 되었습니다. 선수들은 갑자기 아무것도 없는 상태에서 경기를 치르는 상태가 되었습니다. 수백만 명이 지켜보는 가운데 수백만 달러를 걸고 치르는 프로 게임 대회인데, 5달러짜리 프로그램을 가진 임의의 사람들이 방해하고 있었습니다. Valve에서 그냥 좌시할 수 있는 문제가 아니었습니다.
저희는 디도스 공격을 해결할 몇 가지 방안을 시도한 끝에 한 가지 효과가 있는 방법에 도달했습니다. 처음에는 강력한 네트워크 스위치로 트래픽을 필터링하려고 해봤습니다. 안타깝게도, 이런 유형의 필터링은 본질적으로 게임 트래픽을 처리하기 어렵습니다. 게임 서버는 특성상 원치 않는 UDP(사용자 데이터그램 프로토콜) 트래픽을 임의의 IP 주소에서 수신합니다. 원하지 않는 광고 우편물을 걸러주는 우체국이 있다고 상상해 보세요. 이제 여러분의 직업이 문의 사항 응답자이고 임의의 낯선 사람들로부터 적법한 우편물을 항상 수천 톤씩 받는다고 상상해 보세요. 우체국은 우편물이 광고물인지 아닌지를 알지 못합니다. 게임 서버로 유입되는 트래픽은 바로 이런 식으로 나타납니다. 게다가, UDP 패킷 안의 소스 IP는 안전하지 않으며, 쉽게 도용될 수 있습니다. 저희 우체국은 심지어 봉투에 적힌 반송 주소에서도 단서를 찾아볼 수 없습니다. 광고 우편물의 발송인들이 주소를 조작해 놓기 때문입니다.
Steam은 게임 콘텐츠에 많은 비트를 제공하는데, 이를 위해 대규모 네트워크를 구축했습니다. 저희는 이미 이 네트워크를 활용하여 전용 링크로 게임 트래픽을 전송하며, 우수한 피어링을 확보하고, 네트워크 엔지니어링 최우수 사례를 사용하는 등의 작업을 수행하고 있었습니다. 이 때문에 플레이어의 핑 시간이 낮게 유지되었지만, 디도스 공격을 막아주지는 못했습니다. 문제는 UDP 프로토콜은 안전하지 않기에, 저희에게 자체 네트워크가 있긴 했어도 비공개로 보호되지는 않았습니다.
공격자가 저희 네트워크를 사용하여 저희 서비스를 공격하지 못하도록 막고자, 저희는 모든 진입점을 통제하고 보안을 유지해야 했습니다. 저희는 게임 트래픽용 프록시를 생성하고, 전체 네트워크상에서 릴레이로 전송되는 데이터의 모든 패킷을 하나하나 라우팅하는 방법으로 이를 실현했습니다. 이제 클라이언트는 게임 서버와 통신하려면, 인증하는 동시에 트래픽을 프록시로 게임 서버에 보내는 릴레이를 거쳐야만 했습니다. 즉, 서버의 IP 주소가 항상 숨겨진 상태가 되므로, 공격자는 어디를 공격할지 전혀 알 수 없었습니다.
다시 앞에서 썼던 고전적인 우체국 비유로 말해 보면, 광고물 폭탄을 보내는 발송자 입장에서는 쓰레기 광고물을 보낼 주소가 없는 것입니다. 지역 내 모든 우체국에 광고물 폭탄을 보내 발송해달라고 요청할 수도 있겠지만, 인증하지 않으면 우체국은 처리해 주지 않을 겁니다. (게다가, 우체국에서는 누군가 한 사람에게 편지 10만 통을 보내려 하면 좀 수상하다고 생각하겠죠.)
그렇다면 그냥 릴레이를 공격할 수도 있지 않을까요? 기술적인 면에서 보면, 가능한 이야기입니다. 하지만 기본적으로 중계 시스템은 무한대로 보유하고 있으며, 저희는 이 시스템이 공격받도록 구축해 놓았습니다. '릴레이'란 프로그램이 실행되는 컴퓨터를 또 다르게 지칭하는 말입니다. 중계 시스템을 공격하거나 오프라인으로 전환해버릴 수 있지만, 프로토콜은 그러한 상황까지 가정하고 설계되었습니다. 클라이언트에서 게임을 플레이하려고 하는데 릴레이와 연결이 끊기면, 다른 릴레이로 전환하기만 하면 됩니다. 릴레이는 게임 서버를 지키는 단 하나의 목적으로 전 세계에 흩어져 존재하는 수백 개의 졸이라고 생각하면 됩니다. (게다가, 릴레이를 무너뜨리는 건 생각보다 쉽지 않습니다. 중계 시스템은 아주 견고하게 설계되었으며, 네트워크의 특정 부분에 자리 잡고 있으므로, 오프라인이 되도록 구축되었지만, 아직은 한 개도 잃지 않았습니다.)
해결책은 간단하지만 효과적이었습니다. 이전에는 누군가가 게임을 방해하려고 한다면, 그저 단일 게임 서버(장벽이 매우 낮음)를 과부하 상태가 되도록 하기만 하면 되었습니다. 이제는 반드시 데이터 센터 전체를 과부하 상태로 해야 하므로, 장벽이 훨씬, 훨씬, 훨씬 더 높아진 셈입니다. 아직도 그 정도의 결과가 생길 수 있는 공격이 들어오나요? 물론입니다. 이런 일을 해낼 만한 공격 중에 온라인에서 누구나 5달러로 살 수 있는 게 있나요? 아니요. 이렇게 정교한 공격은 공식적으로는 보통의 사람들이 감당할 수 있는 금액 수준을 벗어나 있다고 알려졌습니다.
이렇게 새로운 시스템을 가동하면서, 저희는 깨달음을 얻었습니다. 저희가 자체 네트워크를 직접 통제한다면, 일반적인 인터넷 작동 방식에 구애받지 않을 것이란 사실이었습니다. 이를 활용하여 고객 경험을 훨씬 더 좋게 개선할 수 있습니다. 일반적인 인터넷으로 IP 주소 하나에서 다른 주소로 패킷을 전송할 때는, 사용하는 경로가 경계 경로 프로토콜(BGP)에 의해 결정됩니다. 이는 패킷이 네트워크를 타고 어떻게 이동하는지를 결정하는 라우팅 알고리즘인데, 사용되는 경로를 선택할 수는 없습니다.
하지만 수백 개의 범세계적 릴레이와 데이터 센터로 구성된 가상 사설망이라면, 근본적으로 클라이언트에서 게임 서버로 가는 경로를 선택할 수 있는데, 보통은 기본 경로보다 더 빠르게 가는 지름길이기 마련입니다. Steam 데이터그램 릴레이(SDR)를 사용하는 분은, Steam 오버레이에서 핑 시간과 저희가 제공하는 경로가 표시되므로, 어떻게 최적화되었는지 직접 확인하실 수 있습니다.
도타 게임 서버를 보호하고자 시작된 기능이었지만, 모두가 예상하던 것 이상으로 발전했습니다. SDR 네트워크는 통상적으로 초당 1억 4천만 패킷과 550기가비트를 전달합니다. 저희는 데이터 센터 31곳에 5테라비트 이상의 용량의 릴레이를 갖추고 있습니다. 현재 Steam 데이터그램 릴레이라고 부르는 시스템은 디도스 공격만 막는 것이 아니라, 모든 도타 고객의 연결성을 높이고 핑을 낮추는 역할도 하고 있습니다. 그리고 도타뿐만이 아니라, 이를 활용하려는 Steam에 있는 모든 게임에 도움이 되는 것입니다.
도타의 전선과 전선 사이를 살짝 엿보는 이번 시간이 즐거우셨기를 바랍니다. 아주 기술적인 내용이었는데, 끝까지 읽어주셔서 감사합니다! 다음으로 다뤘으면 하는 내용이 있다면 언제든지 편하게 알려주셨으면 합니다.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
해당 글이 올라온 타이밍이 좀 오묘하긴 하지만 게임사나 방송사에선 취할 수 있는 최선의 방법을 적용하여 해결한 것 같네요
현재 개인에 대한 공격을 못막는건 아직 어쩔 수 없지만 게임사 입장에선 이를 어떻게 해결하는지 잘 설명해준 것 같아 공유해봅니다!
|
첫댓글 라이엇에선 이걸로 디도스 막을 준비 하고 있는중일까
게임성은 완벽 그 자체인 인생게임인데 ㅠㅠ 지랄맞은 진입장벽 때문에 사람이 없는게 너무 아쉽다
사설망 구축하고 vpn 설치했다는건가