Многие администраторы и игроки живут в иллюзии безопасности. Они ставят Velocity, прячутся за GameShield или StormWall и верят, что новые системные диалоги 1.21.1 защищены от перехвата.
На самом деле это полная чушь. Сегодня я покажу, как обычный MitM-p####i (Man-in-the-Middle) вскрывает любую защиту на раз-два, и почему даже гиганты индустрии бессильны перед прямым чтением байтов.
В чем суть уязвимости?
Проблема не в плагинах, а в самом протоколе Minecraft. Данные между клиентом и сервером передаются без встроенного шифрования (за исключением аутентификации на лицензионных серверах). Если злоумышленник заставит игрока подключиться через свой промежуточный сервер он увидит всё.Инструментарий ресерчера
Для теста я использовал:
VPS на Linux (Ubuntu).
SniffCraft (низкоуровневый сниффер протокола).
Немного магии с файлом hosts, чтобы обмануть L7-защиту типа GameShield.
Разбор полетов №1: Обход гигантов
Многие думают, что пробиться к Backend-серверу крупного проекта невозможно. Но через обычный dig по SRV-записям мы находим балансировщики:pool.reallyworld.me(Пример) -> ноды OVH.
Я настроил p####i-сниффер на одну из этих нод. Результат? Как только игрок вводит /reg или /l, пакет Chat Command прилетает в консоль сниффера в чистом UTF-8. Никакая защита не спасает, если вы сами добровольно отдали данные посреднику.
Пример лога::
[Play] [C --> S] Chat Command
{
"command": "reg qwerty12345 qwerty12345"
}Разбор полетов №2: Иллюзия Инновационных диалогов 1.21.1
В новых версиях появились системные диалоги ввода (не чат, а именно окна). Админы серверов надеются, что это спасет от ботов и снифферов.Тут есть нюанс: пакеты этих диалогов (Common Player Input) действительно сложнее парсить. Старые инструменты могут выдавать PARSING EXCEPTION. Но если включить логирование сырых байтов (LogRawBytes), мы увидим наш пароль прямо в HEX-дампе.
Даже если пакет битый для парсера, текст внутри него остается открытым. Изменить визуальное окно не значит зашифровать канал связи.
Как обходят GameShield и другие защиты?
Защита типа GameShield часто выдает ошибку Domain Not Found, если вы заходите через p####i. Но это обходится за 10 секунд:На своем ПК в файле hosts прописываем IP своего VPS под домен сервера.
В конфиге p####i указываем целевой домен.
Всё. L7-фильтр видит правильный Hostname в пакете Handshake и пропускает трафик.
Итог: Как не стать жертвой?
Админам: Перестаньте надеяться на секретные диалоги ввода. Используйте Modern Forwarding в Velocity с секретными ключами и жестко ограничивайте IP, с которых разрешены подключения к бэкенд.Игрокам: Никогда не заходите на тестовые сервера или сервера друзей по подозрительным IP. Если вы ввели пароль на p####i-сервере злоумышленника - его уже не вернуть.
Разработчикам: Пора признать, что протокол майнкрафта это решето. Без TLS на уровне клиента любая авторизация это лотерея.
Статья написана в целях безопасности (ИБ). Не будьте легкой добычей!