Продолжение позновательной экскурсии о способах взлома пиратских серверов world of warcraft. Как я уже писал ранее способов существовало великое множество, одни из них работали хорошо и долго, другие же быстро фиксили.
DENIAL OF SERVICE (DDos)
Первым по популярности можно поставить этот вид атак. Действует назло админам и позволяет повысить ЧСВ школьникам.
Средний аптайм фри-сервера составляет примерно одни сутки.
Порой даже ничего не надо было делать, он мог упасть сам из-за кривого кода :).
Но все же чаще всегда находились такие места, как призыв мобов (неигровых персонажей, «серверных созданий»), у которых не было КД (cooldown, время между повторным использованием заклинания), и можно было просто флудить, вызывая большое количество этих самых мобов.
В итоге сервер ложился, админы смотрели краш-логи (если хватало знаний) и пытались зафиксить багу, пока все игроки разносили игровой форум с темами «Сервер снова лег?!».
Также часто серверы роняли и через небезызвестную утилиту LOIC (low orbital ionic cannon). Защищались обычно через iptables + connlimit.
WPE
Любой читер, кто играл в WoW (хотя не только), знает эту программу.
Winsock Packet Editor (WPE) — это пакетный снифер/редактор, который в основном предназначен для читерства в онлайн-играх.
WPE позволяет изменять данные на уровне TCP. Используя WPE, можно выбрать один из запущенных процессов и изменить данные до того, как они будут отправлены на сервер. Также можно просто сохранять все пакеты для последующего их анализа.
Он поддерживает различные фильтры, которые можно сохранять и применять, когда понадобится. WPE часто используют для пентеста «тонких клиентов» (например, разные апплеты в браузере, работающие не по HTTP).
Итак, здесь открывается целое поле для атаки!
Разберем обычную ситуацию — покупку предмета у вендора.
На сетевом уровне это выглядит так: игрок отправляет пакет на покупку с ID выбранного предмета, сервер смотрит, рядом ли игрок с вендором, достаточно ли денег у игрока на покупку этой вещи, и если все ОK — «кладет» эту вещь ему в сумку.
Но что произойдет, если мы заменим ID покупаемой вещи?
Во-первых — как его узнать?
Есть база WoW — wowhead.com. Находим нужную вещь (какой-нибудь крутой элемент экипировки), смотрим в URL, там ID вещи и так же находим текущую вещь, которую продает вендор.
Теперь смотрим сетевой трафик через WPE, находим ID вещи (в Hex, причем «обратной записью»), которую покупаем сейчас, и заменяем на то, что нашли на wowhead.
В итоге на сервере смотрится стоимость (обычно вещи, которые нужно «выбивать» с боссов, не имели цены в базе или имели очень низкую, так как и не задумывалось, что их можно покупать), и если игрок рядом — ему отдается вещь, которой и не было в продаже у вендора :).
Уязвимость успешно работала во времена патча 1.*. Потом ее логично зафиксили — проверяли список предметов, которые вообще есть у вендора.
В эту же копилку — использование заклинаний игроком.
Смотрим ID спелла (заклинания), который используем сейчас, подменяем на ID спелла какого-нибудь босса с большим дамагом — в итоге ходим и кастуем как босс :).
Это работало вообще очень долго и было исправлено вроде только в WotLK (патч 3.*).Фильтры для WPE или программы, автоматизирующие подмену пакетов, обычно легко находились на читерских форумах в свободном доступе.
И по этой же схеме работали всякие speed hack’и, teleporter’ы и тому подобное. Пространство для «обмана» сервера было велико, античиты в то время были в основном на серверной стороне (если вообще были) — всякие AC, AC2.
У Blizzard’а на официальном сервере был (и есть) Warden, который работает по принципу анализа запущенных процессов на клиенте, снимает сигнатуры и отправляет на сервер (игроки даже пытались раздуть судебный процесс на этой почве).
Его реализация на эмуляторах появилась сравнительно недавно. Нельзя не упомянуть о платных античитах для клиентов, играющих на эмуляторах, но они стоят денег, и обычно серверная часть только под Windows, когда чаще всего сервер WoW работает под Linux (конечно, есть wine, но это уже костыли, да и игроков бывает по несколько тысяч на сервер).