Краш-эксплойты в Minecraft: book ban, chunk ban и как от них защититься
Когда говорят о безопасности Minecraft-серверов, первое, что приходит в голову, это DDoS-атаки. Тысячи ботов, гигабиты трафика, сервер уходит в оффлайн. Но есть другая категория угроз, которая часто остается в тени: краш-эксплойты.
Один игрок. Один специально сформированный предмет или пакет. И ваш сервер падает. Или хуже того, конкретный игрок больше не может зайти на сервер, потому что его клиент крашится при загрузке чанка или инвентаря.
В этой статье разберем все основные типы краш-эксплойтов, механику их работы и конкретные шаги для защиты.
Что такое краш-эксплойт
Краш-эксплойт (crash exploit) - это целенаправленная атака, которая использует баги или слабости в коде сервера/клиента для вызова критической ошибки. В отличие от DDoS, где атакующий заваливает сервер объемом трафика, краш-эксплойт работает точечно. Достаточно одного правильно сформированного запроса.
Основные виды:
- Book ban - переполнение NBT-данных через книги
- Chunk ban - повреждение чанков, крашащих клиент при загрузке
- Packet exploits - некорректные сетевые пакеты, вызывающие исключения на сервере
- Sign exploit - переполнение данных через таблички
- Map exploit - злоупотребление данными карт
- Entity cramming - создание огромного числа сущностей в одном блоке
Каждый из них работает по-своему, и защита от них тоже отличается.
Book ban: классика жанра
Book ban, пожалуй, самый известный краш-эксплойт в Minecraft. Суть проста: игрок создает книгу с огромным объемом NBT-данных и подбрасывает ее другому игроку. Когда жертва пытается открыть инвентарь или загрузить чанк, где лежит эта книга, клиент вылетает из-за нехватки памяти.
Как это работает
NBT (Named Binary Tag) - это формат данных, который Minecraft использует для хранения информации о предметах. У каждого предмета есть NBT-тег, и у книг он может содержать текст страниц.
Проблема в том, что в vanilla Minecraft ограничения на размер NBT были долгое время слишком мягкими. Книга может содержать до 100 страниц, каждая до 32767 символов. Это дает потенциально огромный объем данных в одном предмете.
Атакующие используют модифицированные клиенты или команды, чтобы создать книги с максимально раздутыми NBT-тегами. Такая книга, попав в чей-то инвентарь или шалкер-бокс, делает этого игрока "забаненным" - он не может зайти на сервер, потому что клиент крашится при попытке десериализации NBT.
Типичный вектор атаки
- Атакующий создает книгу с огромным NBT через hack-клиент
- Кладет ее в шалкер-бокс или бросает рядом с жертвой
- Жертва подбирает предмет или открывает контейнер
- При следующем заходе клиент крашится при загрузке инвентаря
- Игрок фактически забанен, хотя формально бана нет
Защита от book ban
Paper уже давно добавил ограничения на размер NBT:
# paper-global.yml
item-validation:
book:
page-max: 100
max-page-length: 1024
book-size:
page-max: 2560
total-multiplier: 0.98
Параметр max-page-length: 1024 ограничивает длину одной страницы до 1024 символов вместо vanilla-ограничения в 32767. Это радикально снижает максимальный размер NBT книги.
book-size контролирует общий размер сериализованных данных книги. page-max: 2560 - это максимальный размер одной страницы в байтах при проверке, а total-multiplier: 0.98 гарантирует, что каждая дополнительная страница считается чуть меньше предыдущей (для расчета лимита).
Также важно:
# paper-global.yml
packet-limiter:
kick-message: '<red>Too many packets!'
limits:
all:
interval: 7.0
max-packet-rate: 500.0
ServerboundCommandSuggestionPacket:
interval: 1.0
max-packet-rate: 15.0
Это не прямая защита от book ban, но предотвращает массовую отправку пакетов, которая часто идет в комплекте с этим эксплойтом.
Chunk ban: ловушка в мире
Chunk ban работает иначе. Вместо отравленного предмета в инвентаре, атакующий повреждает чанк в игровом мире. Когда любой игрок пытается загрузить этот чанк, его клиент крашится.
Механика
Существует несколько способов создать "ядовитый" чанк:
Переполнение сущностей. Игрок создает тысячи предметов, мобов или других сущностей в одном чанке. При загрузке клиент пытается отрендерить их все и вылетает.
Поврежденные тайл-энтити. Контейнеры (сундуки, воронки) с поврежденными NBT-данными. Сервер отправляет клиенту данные тайл-энтити, и клиент не может их обработать.
Огромные структуры из знаков и табличек. Сотни табличек с длинным текстом в одном чанке создают огромный объем данных, которые нужно отправить клиенту.
Как это выглядит
Представьте: игрок летит на элитре и влетает в чанк-ловушку. Клиент зависает, потом крашится. При следующем заходе сервер спавнит игрока в том же чанке - и снова краш. Игрок застрял.
На анархии-серверах вроде 2b2t это давно превратилось в оружие. Вокруг баз строят "минные поля" из chunk ban ловушек.
Защита от chunk ban
# paper-global.yml
chunk-system:
gen-parallelism: default
io-threads: -1
worker-threads: -1
# spigot.yml
world-settings:
default:
entity-activation-range:
animals: 32
monsters: 32
raiders: 64
misc: 16
water: 16
villagers: 32
flying-monsters: 32
merge-radius:
exp: 3.0
item: 2.5
Но главная защита - это ограничение количества сущностей:
# paper-world-defaults.yml (Paper)
entities:
spawning:
per-player-mob-limit: true
max-per-chunk: 50
# bukkit.yml
spawn-limits:
monsters: 70
animals: 10
water-animals: 5
water-ambient: 20
water-underground-creature: 5
axolotls: 5
ambient: 15
Параметр max-per-chunk: 50 критически важен. Он устанавливает жесткий лимит на количество сущностей в одном чанке.
Packet exploits: атака на протокол
Packet exploits - это широкая категория атак, основанных на отправке некорректных или слишком больших сетевых пакетов серверу. В отличие от book ban и chunk ban, которые эксплуатируют игровую механику, packet exploits бьют по сетевому уровню.
Основные виды
Oversized packets. Отправка пакетов, превышающих максимально допустимый размер. Vanilla сервер по умолчанию принимает пакеты до 2 МБ. Атакующий отправляет пакет в 2 ГБ, и сервер тратит всю память, пытаясь его обработать.
Invalid packet data. Пакеты с корректным заголовком, но некорректными данными внутри. Например, пакет с ID движения игрока, но координатами NaN или Infinity. Сервер пытается обработать эти координаты и получает исключение.
Packet spam. Массовая отправка легитимных пакетов на высокой скорости. Сотни пакетов tab-complete в секунду, тысячи пакетов взаимодействия с блоками. Каждый пакет сам по себе валиден, но их объем перегружает обработчик.
Sequence break. Отправка пакетов в неправильном порядке. Например, пакет действия в игре до завершения логин-последовательности. Многие серверы не проверяют состояние соединения и крашатся.
Настройка packet limiter
Paper имеет встроенный packet limiter, и его нужно правильно настроить:
# paper-global.yml
packet-limiter:
kick-message: '<red><lang:disconnect.exceeded_packet_rate>'
limits:
all:
interval: 7.0
max-packet-rate: 500.0
ServerboundCommandSuggestionPacket:
interval: 1.0
max-packet-rate: 15.0
ServerboundMovePlayerPacket:
interval: 1.0
max-packet-rate: 50.0
ServerboundContainerClickPacket:
interval: 1.0
max-packet-rate: 20.0
ServerboundUseItemPacket:
interval: 1.0
max-packet-rate: 30.0
ServerboundSignUpdatePacket:
interval: 1.0
max-packet-rate: 5.0
Лимит all устанавливает общее ограничение: не более 500 пакетов за 7 секунд от одного игрока. Индивидуальные лимиты на конкретные типы пакетов дают более точный контроль.
ServerboundCommandSuggestionPacket ограничен до 15 в секунду - это пакет tab-complete, который часто используется в атаках, поскольку обработка автодополнения команд может быть ресурсоемкой.
Sign exploit и map exploit
Sign exploit
Таблички в Minecraft могут содержать текст. Атака заключается в отправке серверу пакета обновления таблички с чрезмерно длинным текстом или специальными символами, вызывающими ошибки при рендере.
В старых версиях сервера это позволяло создавать таблички с текстом, который крашил всех игроков в радиусе видимости. Paper исправил это, ограничив длину строк и валидируя содержимое:
# paper-global.yml
item-validation:
resolve-selectors-in-books: false
Map exploit
Карты в Minecraft хранят данные пикселей 128x128. Эксплойт работает через создание огромного количества карт с максимально сложными данными и их принудительную отправку другим игрокам. Клиент пытается отрендерить десятки карт одновременно и зависает.
Защита:
# paper-world-defaults.yml
environment:
treasure-maps:
enabled: true
find-already-discovered:
loot-tables: default
villager-trade: false
На уровне плагинов можно ограничить количество карт в инвентаре и скорость создания новых карт.
Entity cramming
Entity cramming - это атака через создание огромного числа сущностей (мобов, предметов, транспорт) в ограниченном пространстве. Когда рядом с этим местом оказывается игрок, его клиент пытается отрендерить все сущности и крашится.
Vanilla Minecraft имеет механику maxEntityCramming (по умолчанию 24), которая наносит урон сущностям при скоплении. Но это не предотвращает создание большого числа сущностей, просто убивает их со временем.
# server.properties
max-entity-collisions=8
# spigot.yml
world-settings:
default:
max-entity-collisions: 8
# paper-world-defaults.yml
entities:
spawning:
per-player-mob-limit: true
max-per-chunk: 50
behavior:
spawner-nerfed-mobs-should-jump: false
Плагин ClearLagg или аналоги могут периодически удалять лишние сущности:
/lagg clear # удалить все сущности-предметы
/lagg killmobs # удалить лишних мобов
Чем краш-эксплойты отличаются от DDoS
Это принципиально разные угрозы, и защита от них тоже разная.
| Параметр | DDoS | Краш-эксплойт |
|---|---|---|
| Тип атаки | Объемная (volumetric) | Точечная (targeted) |
| Источник | Тысячи ботов/источников | Один игрок |
| Цель | Перегрузить канал/CPU | Вызвать ошибку в коде |
| Трафик | Гигабиты | Минимальный |
| Обнаружение | Аномалия трафика | Сложно без логов |
| Защита | Сетевая фильтрация | Обновления, настройки, плагины |
| Восстановление | Автоматическое после атаки | Может потребовать ручное вмешательство |
DDoS-атаку останавливает сетевой фильтр (вроде MineGuard), который отсекает мусорный трафик до того, как он дойдет до сервера. Краш-эксплойт проходит через фильтр, потому что технически это легитимное соединение от легитимного игрока. Один пакет, один запрос.
Поэтому защита от краш-эксплойтов лежит на уровне серверного ПО. Обновления Paper, правильные настройки, плагины.
Плагины для защиты
PacketLimiter
Paper имеет встроенный packet limiter, но для более тонкого контроля есть плагин PacketLimiter. Он позволяет настраивать лимиты для каждого типа пакетов отдельно и логировать подозрительную активность.
ExploitFixer / AntiCrash
Плагины вроде ExploitFixer закрывают множество известных эксплойтов одним решением. Они проверяют NBT-данные, размеры пакетов, валидируют содержимое книг и табличек.
Типичные функции:
- Проверка размера NBT при каждом взаимодействии с инвентарем
- Блокировка книг с чрезмерным количеством страниц
- Ограничение длины текста на табличках
- Проверка валидности координат в пакетах движения
- Лимиты на взаимодействие с контейнерами
ViaVersion
Если ваш сервер поддерживает несколько версий через ViaVersion, важно держать его в актуальном состоянии. Многие краш-эксплойты работают через несовпадение версий протокола. ViaVersion регулярно закрывает такие уязвимости.
# ViaVersion config.yml
block-protocols: [] # список блокированных протоколов
block-disconnect-message: "Unsupported protocol version"
suppress-metadata-errors: true
Ключевые настройки server.properties
# server.properties
max-tick-time=60000
network-compression-threshold=256
rate-limit=0
prevent-proxy-connections=false
max-players=100
network-compression-threshold=256 - пакеты размером более 256 байт будут сжиматься. Это снижает пропускную способность, но также ограничивает возможность отправки огромных несжатых пакетов.
max-tick-time=60000 - если тик занимает больше 60 секунд, сервер считается зависшим. Установка в -1 отключает watchdog, что может быть полезно при отладке, но опасно в продакшене.
Настройки paper-global.yml для безопасности
Собранные воедино важные настройки:
# paper-global.yml
item-validation:
book:
page-max: 100
max-page-length: 1024
book-size:
page-max: 2560
total-multiplier: 0.98
resolve-selectors-in-books: false
packet-limiter:
kick-message: '<red>Connection terminated: packet rate exceeded'
limits:
all:
interval: 7.0
max-packet-rate: 500.0
ServerboundCommandSuggestionPacket:
interval: 1.0
max-packet-rate: 15.0
chunk-loading-basic:
player-max-chunk-load-rate: -1.0
player-max-chunk-send-rate: 75.0
player-max-chunk-send-rate: 75.0 ограничивает скорость отправки чанков игроку. Это снижает эффект chunk ban атак, растягивая нагрузку во времени.
Как восстановить игрока после book/chunk ban
Если игрок уже "забанен" и не может зайти на сервер, есть несколько способов его вытащить.
Способ 1: Телепортация через консоль
Если проблема в chunk ban (игрок застрял в ядовитом чанке), телепортируйте его в другое место:
/tp PlayerName 0 100 0
Это сработает, если сервер успевает обработать команду до отправки данных чанка клиенту.
Способ 2: Очистка инвентаря
Если проблема в book ban (отравленный предмет в инвентаре):
/clear PlayerName
Или, для более точечного подхода:
/clear PlayerName minecraft:written_book
/clear PlayerName minecraft:writable_book
Способ 3: Редактирование файла игрока
Если сервер крашится до обработки команд, придется редактировать данные игрока напрямую.
- Остановите сервер
- Найдите файл игрока:
world/playerdata/<UUID>.dat - Используйте NBT-редактор (NBTExplorer, NBT Studio) чтобы открыть файл
- Удалите проблемные предметы из инвентаря или измените координаты спавна
- Сохраните и запустите сервер
Способ 4: Удаление поврежденного чанка
Для chunk ban можно удалить поврежденный чанк с помощью MCEdit или Chunker:
- Определите координаты чанка из лога ошибок
- Откройте мир в MCEdit
- Удалите поврежденный чанк
- Сервер регенерирует его при следующей загрузке
Это деструктивная операция - все постройки в этом чанке будут потеряны.
Почему обновления критически важны
Большинство краш-эксплойтов работают на конкретных версиях сервера. PaperMC регулярно выпускает патчи, закрывающие известные уязвимости. Вот почему важно обновлять серверное ПО:
- Paper 1.20.4 закрыл ряд NBT-эксплойтов через ужесточение валидации
- Paper 1.21.x добавил улучшенные лимиты на пакеты и размер NBT
- Каждая минорная версия Paper содержит фиксы безопасности
Запустить обновление просто:
# Бекап текущей версии
cp paper.jar paper.jar.backup
# Скачать новую версию
wget -O paper.jar "https://api.papermc.io/v2/projects/paper/versions/1.21.4/builds/LATEST/downloads/paper-1.21.4-LATEST.jar"
Используйте конкретный номер билда вместо LATEST в продакшене. Проверяйте совместимость плагинов на тестовом сервере перед обновлением.
Подробнее о настройках безопасности Paper мы писали в статье настройки безопасности Paper и Spigot.
Сетевой уровень vs уровень приложения
Краш-эксплойты работают на уровне приложения (L7). Сетевая защита (L3/L4) от них не помогает напрямую, потому что атака идет внутри легитимного TCP-соединения.
Но сетевая защита все равно играет роль:
-
Фильтрация ботов на этапе подключения. Многие краш-эксплойты автоматизированы через бот-сети. MineGuard фильтрует ботов до того, как они подключатся к серверу, снижая количество потенциальных источников атак.
-
Ограничение числа подключений с одного IP. Если атакующий не может создать множество подключений, эффективность автоматизированных эксплойтов резко падает.
-
Анализ трафика. Системы защиты могут обнаруживать аномальные паттерны пакетов, характерные для эксплойтов.
Подробнее о защите от ботов и эксплойтов на сетевом уровне читайте в нашей статье о null-атаках и эксплойтах BungeeCord.
Чек-лист защиты
Быстрый чек-лист для администраторов:
Серверное ПО:
- Paper последней версии для вашей ветки MC
- ViaVersion обновлен (если используется)
- AntiCrash или ExploitFixer плагин установлен
Настройки:
- Book NBT limits настроены в paper-global.yml
- Packet limiter включен и настроен
- Entity limits установлены в bukkit.yml и paper-world-defaults.yml
- max-entity-collisions ограничен в spigot.yml
Мониторинг:
- Логи сервера проверяются на ошибки NBT/пакетов
- Алерты на crash-restart настроены
- Бекапы мира делаются регулярно
Сеть:
- DDoS-защита активна
- Rate limiting на подключения настроен
- Firewall закрывает ненужные порты
Если вы новичок в защите серверов, начните с нашего руководства по защите Minecraft-сервера для начинающих.
Итог
Краш-эксплойты не так заметны, как DDoS-атаки, но для конкретного игрока результат тот же: он не может играть. Book ban выбивает человека с сервера через отравленный предмет. Chunk ban превращает участок мира в ловушку. Packet exploits могут положить весь сервер одним соединением.
Защита многослойная. На уровне ПО: обновленный Paper с правильными настройками и плагинами. На уровне сети: фильтрация ботов и ограничение подключений. На уровне администрирования: регулярные бекапы и мониторинг логов.
Ни одна защита не бывает абсолютной. Новые эксплойты появляются с каждым обновлением Minecraft. Но серверы на актуальном Paper с правильной конфигурацией закрывают 95% известных атак. Остальные 5% закрываются бдительностью администратора и быстрой реакцией на инциденты.
Дополнительные меры: что ещё стоит сделать
Ограничение креатива и команд
На серверах, где игрокам доступен Creative Mode или команды /give, риск краш-эксплойтов многократно возрастает. В креативе игрок может свободно создавать предметы с произвольными NBT-тегами. Это открывает дверь для book ban, отравленных шалкер-боксов и предметов с аномальными данными.
Решение: используйте систему прав (LuckPerms, LPX) для строгого контроля доступа к опасным командам. Запретите /give для обычных игроков. Если Creative Mode необходим (например, на креативном сервере), установите плагин, который валидирует NBT-теги создаваемых предметов.
# LuckPerms: запрет опасных команд для дефолтной группы
# /lp group default permission set minecraft.command.give false
# /lp group default permission set minecraft.command.summon false
Логирование и алерты
Настройте мониторинг серверных логов на ключевые паттерны, указывающие на попытки эксплойтов:
# Паттерны для мониторинга в логах:
# "Tried to load a TOO LARGE NBT tag"
# "Disconnect: Packet too large"
# "Entity count exceeded limit"
# "Connection throttled"
Современные мониторинговые системы позволяют настроить алерты на появление таких строк в логах. Это даст вам возможность реагировать на атаки в реальном времени, а не обнаруживать их постфактум, когда игроки жалуются на невозможность зайти.
Бекапы: последняя линия обороны
Регулярные бекапы мира критически важны для быстрого восстановления после chunk ban и других деструктивных эксплойтов. Если чанк поврежден, вы можете восстановить его из бекапа вместо полного удаления.
Рекомендуемая стратегия:
- Полный бекап раз в сутки
- Инкрементальные бекапы каждые 1-2 часа
- Хранение минимум 7 дневных бекапов
- Бекапы playerdata отдельно от мира (для быстрого восстановления инвентарей)
# Простой скрипт бекапа через rsync
rsync -a --delete /path/to/server/world/ /path/to/backups/world-$(date +%Y%m%d-%H%M)/
Whitelist и верификация
На серверах с ценным контентом (RPG, SMP с историей) рассмотрите использование whitelist. Это не защитит от инсайдерских атак, но полностью исключит случайных гриферов с краш-клиентами.
Для публичных серверов, где whitelist невозможен, используйте системы верификации: AntiBot плагины, капчу на входе, привязку к Discord аккаунту. Чем сложнее попасть на сервер, тем меньше мотивации у атакующего тратить время на эксплойты.
Реальные кейсы
2b2t и культура chunk ban
На старейшем анархия-сервере 2b2t chunk ban стал частью культуры. Игроки создают "лавакасты" и chunk ban ловушки вокруг своих баз как оборонительные сооружения. Новички, исследующие мир, регулярно попадают в такие ловушки и теряют доступ к своему персонажу.
Администрация 2b2t не вмешивается, поскольку это анархия-сервер. Но на обычном SMP-сервере подобная ситуация неприемлема. Один токсичный игрок с hack-клиентом может "забанить" десятки других игроков через book ban или chunk ban, и администратор будет вынужден вручную восстанавливать каждого.
Packet exploits в соревновательных режимах
На PvP-серверах и сетях с мини-играми packet exploits используются для получения нечестного преимущества. Игроки отправляют серверу пакеты движения с невалидными координатами, что позволяет телепортироваться или двигаться с аномальной скоростью. Хуже того, некоторые эксплойты позволяют вызвать краш конкретного оппонента во время PvP-боя.
Античит-плагины (Vulcan, Grim, Polar) помогают обнаруживать такие манипуляции, но полностью закрыть все векторы атак невозможно без ограничений на уровне сервера.
Protégez votre serveur contre les attaques DDoS
Protection gratuite avec configuration en 5 minutes. 1 To de bande passante inclus.
Essayer gratuitementArticles connexes
LuckPerms: полный гайд по настройке прав на Minecraft сервере
Установка, команды, группы, наследование, префиксы и веб-редактор. Разбор всех основных задач LuckPerms с готовыми примерами.
Оптимизация JVM-флагов Java для Minecraft-серверов: полное руководство
Разбираем флаги Aikar, сравниваем G1GC, ZGC и Shenandoah, правильно настраиваем память и даём готовые наборы флагов для серверов любого размера. Практическое руководство по JVM-оптимизации.
Лучшие плагины безопасности для Minecraft 2026: честный обзор
Разбираем плагины безопасности для Minecraft серверов: авторизация, античит, защита от ботов, права доступа, логирование. Честные плюсы и минусы каждого решения с советами по настройке.