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

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

Не буду писать название браузерной игры, для топика это не важно. Речь идет про браузерную стратегию от 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 паролей. Почему так — не знаю, возможно, свою роль играет менталитет, ведь при получении писем ЕА заранее предупреждает не отправлять никому ваши логины/пароли, но наш человек давно уже отвык читать разного рода предупреждения, наверное, зря :)
Поделиться публикацией

Похожие публикации

Комментарии 25
    +4
    А как вы узнали подробности о связи между действиями ваших ботов и появлением огромного количества элитных ресурсов у игроков?
      +7
      В игре есть чат где все игроки живо обсуждали происходящее, туда же, с радостными возгласами, они начали скидывать ссылки на скрины своих игровых аккаунтов, которые были полностью «прокачаны» и забиты ресурсами. Происходило это прямо во время работы ботов. После чего я сложил два плюс два и у меня получилась картина произошедшего.
        +1
        Ну, внезапное обогащение игроков во время работы ботов действительно сложно объяснить простым совпадением.
        Просто ваше объяснение произошедшего строится на определенных предположениях (скопление запросов от «министров», возможное отсутствие проверки валидности запросов при их выполнении).
        Поэтому интересно, построены ли эти предположения на знании о специфике работы и устройстве серверов игры или это именно просто предположения?
          0
          Это мои личные предположения, основывающиеся на анализе сложившейся ситуации, никакого подтверждения кроме фактов от самих игроков, лагов и падения сервера у меня нет и не может быть. Возможно, принципиальная схема сбоя была другой, но то что это произошло из-за массовой отправки внутренней почты лично у меня не вызывает сомнений.
            0
            Может была классика жанра в виде вылета за границу массива в коде сервера, а дальше — черт знает как в памяти сервера лежали прочие данные и чем они были перезаписаны.
              0
              Так вроде же как в браузерках классика — это как раз подвешивание сервера (часто намеренное), чтобы он при торможении неправильно обрабатывал ситуации. И затем размножение ресурсов и всё подобное, не требующее ничего от читопользователя, кроме бразуера.
      +23
      вспоминается история про хакера и солонки
        +1
        Спасибо за статью, интересно. Ну а что же это за таинственная XSS-уязвимость?
          +3
          Пожалуй напишу, действительно, делать из этого «тайну покрытую мраком» смысла нет.

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

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

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

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

            Реализация задуманного не заняла много времени, я отправил по одному письму примерно 1000 игрокам, после чего получил около 100-120 паролей. Не знаю уместно ли тут слово *facepalm*, но кроме него ни в тот момент, ни сейчас на ум ничего не приходит. В тот же вечер я провел подобный эксперимент на одном из европейских серверов той же игры — проделав лишь отправку письма «якобы» от администрации — после чего из 1000 игроков я получил лишь 10-20 паролей. Почему так — не знаю, возможно, свою роль играет менталитет, ведь при получении писем ЕА заранее предупреждает не отправлять никому ваши логины/пароли, но наш человек давно уже отвык читать разного рода предупреждения, наверное, зря :)
              +2
              Спасибо за пояснение. Кстати, советую вам обновить им (пояснением со скриншотами) текст статьи, дабы её будущие читатели не рылись в комментах.
            0
            Несколько лет назад начинал играть в эту игру, еще тогда была мысль потестить на наличие XSS, но руки так и не дошли, поэтому будет очень интересно про нее почитать.
              0
              Если кому интересно станет о какой игре речь: www.lordofultima.com
                0
                Мде, пойду ограничение на солонки рассылку в своей столовой игрушке поставлю.
                  +3
                  Так игратся гораздо интереснее чем просто играть в игру.
                    +16
                    Может я слишком старомоден, но я бы не стал издеваться над пользователями и игрой just for fun, а потом еще и хвастаться этим здесь.
                      +12
                      Я предполагал что у некоторых (или многих) будет подобное отношение к топику, поэтому немного нервничал публикуя его.
                      Но, во-первых, я ни в коей мере не хвастаюсь — мне действительно показалось интересным что у крупной онлайн игры могут быть проблемы при отправке почты игровыми методами, пусть и с помощью ботов, не без взлома и тому подобного.

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

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

                        Например, я занимался в детстве такой же фигней как и ты и даже иногда хуже. Но особого злого умысла в этом не было. Сейчас же, работаю в ИТ индустрии делаю игрушки на благо народа. Хотя, однажды работая на Playdom нашей команде удалось положить 117 баз данных в клаудах и завалить большинство приложений Playdom и Disney ^^
                          0
                          Мне кажется, на сколько я помню эту историю, там хватило действий одного молодца. Правда разгребали вы потом это уже всей командой.

                          да, и не обманывай чесных людей. НгаКК и «благо народа» вещи не совместимые.
                            0
                            Мнение оно мнением — автору теперь в ближайшие лет 15 в EU/US лучше не ездить.

                            Этичность самого поступка мне до фиолетовой звезды.

                            Просто некорректно заманивать читателей словом «случайно» в статью описывающуют преднамеренную DOS-атаку на проект — случайно, это когда одно письмо отправил и все полегло.
                        –1
                        Пост в двух словах:
                        > О том, как я случайно уронил сервер
                        > было запущено 5 или 6 одновременных ботов
                        > можно отправить 201 письмо и делать это можно раз в 1-2 секунды
                          0
                          не отправлять никому ваши логины/пароли
                          Тем, у кого есть полномочия, ваш логин/пароль просто не требуется…
                            0
                            Выбор в качестве момента проверки команды на исполнимость момента перед постановкой команды в очередь вместо момента получения команды из очереди — упрощает архитектуру игровой системы и тем самым несколько повышает быстродействие: не нужна процедура асинхронной передачи игроку (или его боту-«министру») отчёта о выполнении команды, не нужно закладывать в «министра» ожидание отчёта о выполнении команды. Особенно актуально для браузерной игры: меньше активности, инициированной «сервером» (на самом деле, игровой системой), обратную связь игроку на команду можно выдавать не асинхронно, а синхронно — в течение одного AJAX-запроса.

                            Разумеется, от такого выбора страдает надёжность, но она, на столько я понял, у них не «пойнт» — не банк же они чтобы обеспечивать целостность транзакций. Да и проблему, судя по статье, решать решили не «в корне». В общем, сомнительно. Но объяснимо.
                              0
                              если бы это был сервер российской компании-скорее всего в один прекрасный день к вам бы из милиции пришли
                                0
                                Надеюсь, mirai не поставит на каждую железяку такого бота.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое