Pull to refresh

О том, как я случайно уронил сервер браузерной игры от ЕА

Reading time 5 min
Views 56K
Собственно не знал как точнее выразить содержание топика в названии — поэтому решил сыграть на том, что кому-нибудь будет интересна моя небольшая история. Топик про то как важно тестирование и продуманная архитектура вашего приложения, даже если вы серьезная организация.

Не буду писать название браузерной игры, для топика это не важно. Речь идет про браузерную стратегию от Electronic Arts (EA Games).

Собственно далее сама история.

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


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

Идеей стало создание простого чат-бота для игры, который умел логиниться, поддерживать коннект и немного спамить в чат заготовленными фразами вроде «Привет, дивный мир!», написан он был на простом PHP, запускался по крону раз в минуту с обычного виртуального сервера. Собственно бот успешно ловил баны от модераторов когда мне пришла в голову другая идея. Дело в том, что в игре присутствует внутренняя почта. Идея была очень проста, спарсив имена всех топовых игроков сервера (получилось что-то около 1500 ников) мой бот, точнее 5 его копий запускаемых по крону, начали рассылать письма, выбирая в качестве получателей случайный ник. Сразу скажу что письма были беззлобные, просто для подтверждения самого факта спама, потому что защиты от получаемых писем в игре не было предусмотрено, в итоге люди достаточно сильно страдали когда в их ящике оказывалось 100 или 200 ненужных писем. Знаю, что это не очень красиво, но в тот момент меня менее всего заботило отношение людей к этому, я воспринимал все как небольшую игру в игре.

Через некоторое время я обратил внимание на важную деталь при отправке внутренней почты в игре (что собственно и сыграло роковую роль), а именно, поле «Копия», на которое раньше я даже не смотрел. Собственно скриншот отправки письма:



Оказалось, что поле Копия может содержать до 200 имен разделенных двоеточием, что позволяет отправлять копию письма на каждый ник, в итоге, за один раз, можно отправить 201 письмо и делать это можно раз в 1-2 секунды. Если же ботов будет несколько, то становится понятно, что это уже приличная нагрузка на сервер (о чем я понял позже).

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

Дело в том, что в игре, кроме всего прочего, есть механизм сохранения излишков ресурсов, если, к примеру, переполняется ваш склад — вам надо с ними что-то делать. Поэтому разработчиками был предусмотрен механизм перевода обычных ресурсов в другие виды, необходимые для различного рода улучшений, строительства и так далее. Если мне не изменяет память, то 10 000 Древесины превращается в 1 Сумеречное дерево, ну или как-то так. Также, в игре существуют платные услуги, так называемые министры, которые при переполнении склада автоматически вместо игрока переводят ресурсы в элитные.

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

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

Впоследствии, сервер стал заметно лагать после того как было запущено 5 или 6 одновременных ботов и благополучно ушел в даун.

Таких результатов, в виде упавшего сервера и разрушения экономики я, конечно же, не предполагал, но это показывает как бывает важна правильная архитектура и тестирование.

Кстати, на следующий день я получил вот такое письмо по электронной почте:

Hi iSteely,
my name is David and I am the Global Community Manager at EA Phenomic and responsible for *название игры*.

We noticed your recent activity in *название игры* and started to mute your accounts in the chat and to ban your accounts and IPs. I would like to know your reason for these raging activities on our servers and what you want to achieve with it.

I hereby recommend you to stop it, as we won´t stop banning your accounts. Behavior like this might also affect all of your other EA accounts and games.

Best regards,
David Erhard

В ходе переписки я извинился за причиненные неудобства и обещал больше не вытворять подобных кульбитов, так что все закончилось благополучно.

update: Кстати, в последствии, они приняли меры и уже не позволяют игрокам отправлять такое количество писем, ограничивая действия какими-то разумными временными рамками. Так что, можно сказать, я лишь указал на проблему

Самое интересное, что в той же игре была найдена очень неприятная XSS позволяющая творить «жуткие» вещи. Писал о ней в ЕА, чинили они ее очень долго, месяца два, за это время я провел пару экспериментов с ее использованием, могу рассказать, если сообществу это будет интересно.

Про XSS:
При отправке письма в поле «Тема» была XSS-уязвимость, собственно украсть cookies через нее получалось, но не все, а лишь самые банальные — настройки языка, внешнего вида и так далее, нужную же cookie с сессией получить не удалось, видимо из-за HTTP-only. Возможно, я что-то делал не так, не суть.

Так вот, в поле Тема возможно было вставить 100 символов, а благодаря тому что оно не фильтровалось можно было вставлять любые HTML-теги, что собственно я и проделал, вставив туда заранее созданную страничку через «iframe», получалось примерно следующее (скрины не сохранились, сделал пример, чтобы было понятнее):


Это обычное письмо, которое получал игрок.


А это пример какую зону можно было перекрыть с помощью тегов «iframe», «div», «img» ну или другими, фактически, туда можно было вставить даже ролик с youtube (чем собственно я и занимался), особым шиком стала фоновая загрузка музыки, которая продолжала играть даже после закрытия письма.

Впоследствии мне пришла в голову очередная «гениальная» идея. Если подставить в письмо скриншот с официального сайта и написать на нем EA managment или нечто похожее — люди будут думать что им пишет администрация игры, чем можно воспользоваться в корыстных целях. Сразу отмечу что у меня не было интереса в получении чужих аккаунтов, я все-равно не знал что с ними делать и причинать вред людям не собирался, но чувство интереса было огромным. «Неужели получится? Неужели, после всего что произошло на сервере кто-то попадется?» — примерно такие у меня были в то время мысли.

Реализация задуманного не заняла много времени, я отправил по одному письму примерно 1000 игрокам, после чего получил около 100-120 паролей. Не знаю уместно ли тут слово *facepalm*, но кроме него ни в тот момент, ни сейчас на ум ничего не приходит. В тот же вечер я провел подобный эксперимент на одном из европейских серверов той же игры — проделав лишь отправку письма «якобы» от администрации — после чего из 1000 игроков я получил лишь 10-20 паролей. Почему так — не знаю, возможно, свою роль играет менталитет, ведь при получении писем ЕА заранее предупреждает не отправлять никому ваши логины/пароли, но наш человек давно уже отвык читать разного рода предупреждения, наверное, зря :)
Tags:
Hubs:
+70
Comments 25
Comments Comments 25

Articles