Игровые сервера: как стать на них богом

Xakep, номер #049, стр. 049-062-1


Примеры ошибок в игровых серверах

CuTTer (cutter@real.xakep.ru)

"Хакер" неоднократно публиковал статьи, посвященные безопасности различного ПО, описанию многих распространенных ошибок на сайтах. Мы писали про эксплоиты, необходимые для поднятия прав на серверах. Но никогда не было статей рассказывающих о глюках, присутствующих на игровых серверах. Ведь очень многие играют в Counter-Strike, люди до сих пор помнят о такой классике, как Q1, Q2, но мало кто из них знает, что все они подвержены атакам, приводящим к очень забавным результатам. Об этих самых забавных результатах и о том, как их получать, повествует сей материал.

Для удобства чтения я решил структурировать статью следующим образом: вначале пойдет рассказ о каждой игре и об ее игровом сервере в отдельности (quake 1-3, half-life, cs, unreal и др.), а в конце - общие методы захвата, независимо от игры. Главное, чтобы игровые сервера работали через TCP/IP (неважно, tcp или udp). И напоследок рассказать, как можно заваливать сервера через распространенные DoS и DDoS-атаки. Что ж, поехали!

Quake

Первая квака не особо выделяются своими глюкастостями. В ней нет явного получения доступа к серверу через rcon. Отсутствуют необычные способы завалить сервер DoS-атакой, присущей именно q1. Но не стоит огорчаться, эта квака отлично "лечится" любой DoS или DDoS-атакой, если в итоге суммированный канал будет в два раза шире канала сервера.

Каким же образом можно похакать данный сервер? Вот самый гиморный способ, но он, вероятно, единственный. Если сервер работает под линухом, а такое бывает очень часто, то нужно всеми правдами и неправдами рутать данную машину. Главное тут - получить права рута на удаленной машине. Далее придется ставить снифер. Лучше всего подойдет ethereal, так как он понимает протокол Quake'а. Его придется настроить, чтобы он отфильтровал весь трафик, кроме UDP. Также надо поставить фильтр, чтобы проходили пакеты только со словами rcon. После чего снифер запускается... Теперь стоит ожидать появления админа с последующими вводами ркона. Он пришел и выполнил какие-то настройки (т.е. выполнил команду rcon). Ха! Теперь можно лезть в логи и вытаскивать этот искомый пасс. Если же это тачка под Windows, то тут придется повторять те же действия, только придется искать другой софт. Только он не должен ничего выводить на экран, а то админ тачки заметит неладное.

Второй Quake наличием ошибок радует гораздо больше. Это и бэкдор, оставленный разработчиками, позволяющий всем пользователям, имеющим IP из сети id'шников (192.246.40.0/24), делать с ку2-серверами все, что душе угодно. Т.е. если пользователь из сети id коннектится, например, на quake.ru, вводит универсальный пароль "tms", то он автоматически становится админом. Правда, замечательно? Но и это еще не все. После выкладывания всех сорсов второй кваки, было обнаружено, что сервер может неправильно обрабатывать различные запросы. И, естественно, результатом этой ошибки стала возможность получить rcon пароль. Как же это делается? Для начала необходимо скачать сорсы ку2 (брать с www.idsoftware.com). Далее открыть проект в Visual C++, перейти к файлу qcommon/cmd.c и в нем поменять строку "Cmd_TokenizeString (text, true);" на "Cmd_TokenizeString(text, false);". Пересобрать клиента, после чего получится новый файл quake2.exe. И что же теперь? А теперь можно коннектиться на какой-нибудь сервер и вводить там такую строку: say $rcon_password. После чего на экране отобразится пароль от сервера. Дело сделано.

Содержание  Вперед на стр. 049-062-2