Про те, як я випадково впустив сервер браузерної гри від ЕА

Про те, як я випадково впустив сервер браузерної гри від ЕА

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

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

Image