Valve рассказала, как защищала Доту от DDoS-атак. И заодно спасла весь Steam

Блог о разработке Доты продолжается.

Valve продолжает рассказывать о сложностях, ошибках и курьезах при разработке Доты. Мы уже знаем, как поломался Течис и как совершенствовали звуконепроницаемые кабинки на Инте. Очередной текст вышел вместе с весенним обновлением Dota Plus в ночь с 5 на 6 марта.

Далее компания рассказывает, как справлялась с DDoS-атаками и придумала универсальный инструмент.

Между линий: как отказать отказу в доступе

Это история об интернете и о том, как он не работает как нужно, если вообще работает (но на самом деле не работает). Мы расскажем, как у наших клиентов переставал работать интернет и как мы это исправили.

Загружаю...

Интернет – не такая уж и обузданная территория, как нам кажется. Стоит выйти за безопасные пределы двухфакторной идентификации и доверенных файлов cookie, и вы окажетесь на диких просторах. Тут с легкостью можно наткнуться на вездесущих троллей, которые желают (и все чаще получают возможность) испортить вам жизнь просто так, забавы ради.

В далеком 2014 году эти тролли использовали распределенные атаки типа «отказ в обслуживании» (DDoS-атаки) – «распределенными» их называют потому, что в их ходе злоумышленник с помощью множества интернет-хостов заваливает трафиком определенный IP-адрес, чтобы перегрузить стек протоколов. Такие атаки еще называются «объемными», и с их помощью пытаются не проникнуть в сеть, а вызвать отказ в доступе к ней. Соответственно, распределенный отказ в доступе – это когда поток постороннего трафика мешает реальным людям пользоваться той или иной службой.

Проблема DDoS-атак заключалась в том, что к концу 2014 года их совершали не суперхакеры с ученой степенью в информационной сфере, занимающиеся похищением данных. Их совершали практически все, кто хотел заплатить за услугу, а всем остальным занимались боты. И причина была очевидна. Кто-то занимался этим исключительно из любви к вандализму, но у некоторых был мотив: DDoS-атака позволяла гарантированно прервать матч, в котором проигрывали вы или тот, за кого вы болели. Из досадного неудобства атаки превратились в прямую угрозу для любой игры, где можно соревноваться.

Загружаю...

В первые месяцы 2015 года мы наблюдали огромный всплеск числа DDoS-атак на Dota и CS:GO, и другие компании также сообщали о том, что атак стало значительно больше. Кто-то неожиданно упростил этот процесс и сделал его доступным кому угодно.

В августе 2015 года DDoS-атаки помешали ходу The International. Они никак не повлияли на соревнующихся игроков, но на протяжении более двух часов мешали студийным комментаторам и аналитикам присоединиться к матчу и провести качественную трансляцию. Онлайн-трансляция матчей была под угрозой. Игры в одночасье стали проходить будто в вакууме. Профессиональный турнир с миллионами зрителей и миллионами долларов на кону пострадал из-за того, что невесть кто запустил программку за пять долларов. Такую проблему нельзя было игнорировать.

Прежде чем прийти к рабочему решению, мы перепробовали многое. Сначала мы попытались отфильтровать трафик с помощью мощного сетевого коммутатора. К сожалению, подобная фильтрация плохо подходит для игрового трафика. Для игровых серверов принятие незапрошенного UDP-трафика от различных IP-адресов – обычное дело. Представьте, что ваше отделение почты отсеивает нежелательные письма, но в то же время вы ведете рубрику «Советы читателям» в местной газете, и поэтому вам постоянно пишут незнакомые люди. В таких условиях почтовому отделению никак не понять, какие письма настоящие, а какие нет. Примерно так же игровые серверы воспринимают трафик. Более того, IP-адреса отправителей в протоколе UDP не защищены, и их можно легко подделать, так что даже обратный адрес не может служить признаком важности письма, ведь злоумышленники могут сфальсифицировать эти данные.

Загружаю...

Через Steam проходит крупный поток игровых данных, и для этого была выстроена большая сеть. Мы активно пользовались этой сетью, чтобы отправлять игровой трафик по специальным маршрутам, обеспечивать хороший обмен данными, задействовать передовые технологии и так далее. В результате игроки получали хорошее время отклика в сетевых играх, но не были защищены от DDoS-атак. Незащищенность UDP-протокола не позволяла сделать частной даже нашу собственную сеть.

Чтобы нашу же сеть не использовали для атак на наши сервера, нам нужно было контролировать и защищать все входы и выходы. Для этого мы создали серверы-посредники, которые направляли через ретрансляторы абсолютно весь игровой трафик вплоть до последнего пакета. В результате все клиенты, которые пытались связаться с игровыми серверами, стали проходить аутентификацию и перенаправляться с помощью ретрансляторов. А значит, IP-адреса серверов всегда были скрыты от конечного пользователя, и злоумышленники уже не знали, какие адреса нужно атаковать.

Возвращаясь к нашему старомодному сравнению, злоумышленникам больше не было известно, какой адрес заваливать письмами. Они могли отправить письмо хоть в каждое почтовое отделение с просьбой переслать его дальше, но без подтверждения личности письмо никуда бы не ушло (более того, почтовому отделению показалось бы немного подозрительным, что кто-то пытается отправить одному человеку сто тысяч писем).

Загружаю...

Но разве нельзя атаковать ретрансляторы? Технически – можно. Но мы создали их именно для этого, и у нас их практически безграничное количество. «Ретранслятор» – это, по сути, компьютер с запущенной программой. Его можно атаковать или вывести из сети, но протокол разрабатывался с учетом такой возможности. Если во время игры клиент теряет связь с ретранслятором, просто задействуется другой. Ретрансляторы – словно сотни игральных фишек, разбросанных по миру с единственной целью: защищать игровые серверы. (Кстати говоря, остановить работу ретранслятора сложнее, чем кажется. Они довольно хорошо спроектированы и расположены в определенной части сети, поэтому, хоть они и созданы, чтобы принимать на себя удар, еще ни один из них не вышел из строя.)

Решение оказалось простым, но эффективным. Раньше, чтобы помешать игре, достаточно было одолеть один игровой сервер (и сделать это крайне легко). Теперь же, по сути, нужно остановить работу всего дата-центра (и сделать это гораздо, гораздо, гораздо сложнее). Существуют ли атаки, которым это под силу? Разумеется. Существуют ли атаки, которым это под силу и которые кто угодно может купить за пять долларов? Нет. Столь изощренная атака официально стала слишком дорогой для большинства людей.

Мы запустили новую систему, и у нас случилось прозрение: мы не будем привязаны к правилам обычного интернета, если станем управлять собственной частной сетью. С ее помощью мы можем еще сильнее улучшить качество обслуживания. Пользуясь обычным интернетом и отправляя пакет с одного IP-адреса на другой, вы получаете маршрут от протокола граничного шлюза (англ. Border Gateway Protocol или BGP). Этот алгоритм маршрутизации определяет, как ваш пакет будет перемещаться по сети, и вы не можете на него повлиять.

Загружаю...

Но благодаря виртуальной частной сети, состоящей из сотен ретрансляторов и дата-центров по всему миру, мы, по сути, можем выбрать собственный маршрут от клиента до игрового сервера – и зачастую он быстрее, чем маршрут по умолчанию. Пользователям Steam Datagram Relay (SDR) мы показываем время отклика и выделенный нами маршрут, чтобы они могли сами увидеть, как он оптимизируется.

Функция, изначально защищавшая серверы одной игры, превзошла все ожидания. Сеть SDR без проблем доставляет до 140 миллионов пакетов и 550 гигабит данных в секунду. Наши ретрансляторы в 31 дата-центре могут хранить более 5 терабит информации. Эта система не только предоставляет защиту от DDoS-атак, но и повышает скорость подключения и снижает время отклика у всех игроков – не только в Доте, но и в любой другой игре в Steam, которая захочет воспользоваться этой возможностью.

Надеемся, вас порадовал очередной взгляд за кулисы Доты. В этот раз было много технических подробностей, так что спасибо, что дочитали до конца! И не стесняйтесь сказать нам, о чем вы хотите услышать в следующий раз.

* * *

Топ-турниры в Доте теперь идут почти бесконечно. Собрали полный календарь

Мемный телеграм Руслана Керимова (и о Доте, конечно, тоже)

Загружаю...