- Баллы
- 76
В последнее время, да и раньше, майнкрафт сервера часто подвергаются взлому и будут подвергаться в будущем. Ломать пытаются как обычные школьники, так и более продвинутые, чтобы заработать себе на обеды (увести вашу бд) или просто позабавиться и крашнуть проект. Странно, но внятного туториала нет ни на spigotmc, ни на rubukkit. Во всяком случае, я не нашел его, поэтому решил написать сам.
На самом деле, меня также ломали, что уж тут греха таить, да и я вовсе не специалист в защите, также рядовой участник minecraft комьюнити, как и многие.
В данном туториале мы рассмотрим базовые элементы защиты, которые усложнят хацкерам жизнь.
Важно! Если у вас уже лежит на дедике зараженный плагин, то все приведенные ниже действия довольно-таки бесполезны, перед скачиванием необходимо проверить плагин и отключить авто-обновления. Также в подобной ситуации придется переустанавливать ОС и перекачивать плагины.
Ох уж эти открытые порты.
Сколько серверов было взломано через порты, наверное никто не знает. Хотя закрыть их не так уж и сложно. Достаточно лишь поставить в spigot.yml:
и адрес сервера 127.0.0.1 в server.properties, если у вас один сервер в банже. Если несколько, нужно уже слегка напрячься, и использовать iptables+ipset. Если у вас один сервер и сайт авто-доната на другом хостинге, нужно также ставить правило iptables с добавлением всех портов по инструкции ниже и добавлять ip хостинга в ipset.
Ставим пакет ipset под вашу ОС:
Для примера я использую Debian дистрибутив. дальше создаем его:
Добавляем в ipset нужные ip дедиков:
И ставим правило iptables:
Так, надо бы объяснить правило. Используем таблицу raw, потому что она самая первая в обработке соединений, цепочку prerouting поэтому же. Протокол tcp в майне, кроме query. В dports можно до 16 портов добавить и не нужно плодить 16 лишних правил. Дальше, если ip соединения не совпадает в whitelist, выпинываем его. Интерфейс eth0 может быть у вас другой, смотрите через
например. Но закрыть обычные порты мало, нужно еще rcon закрыть, о чем мало кто помнит. А еще порт mysql и любые, торчащие наружу.
Проверить наличие правила можно так:
Если нужно добавить порт, сбрасываем правила:
и ставим обратно. Я лично сохраняю правила своим способом при ребуте, так как у меня их много и они зависят от условий, вам же порекомендую iptables-persistent:
Ubuntu 16.04+ Server:
Дырявые плагины.
Так уж вышло, что многие плагины имеют кучу абсолютно ненужного функционала, лишь бы автору сделать новый коммит в github, либо владельцы серверов не просчитывают риски некоторых плагинов. Кто дырявый, автор плагина или владелец сервера, я не берусь судить и оставлю на выбор читателя. Предлагаю каждому в эту тему дополнять проблемные плагины и вариант лечения.
HolographicDisplays
Уже многие знают про дыру в https://github.com/filoghost/HolographicDisplays до 2.3.0 версии, где через /hd readtext читали файлики паролей дедика и много чего еще интересного. Кстати, в главе "Root-юзер и java несовместимы вместе" я описываю частичную защиту от этого.
Если зайти на популярные сервера и ввести /hd, у многих покажет древнюю версию плагина.
CommandNpc
Данный плагин и ему подобные имеют возможность исполнять команду от имени ConsoleSender, что уже чревато. Достаточно хакеру получить доступ к одному из аккаунтов администраторов и поставить неприметного npc в яму, затем назначить ему команду с выдачей звезды. Либо у вас есть квест-мастера с доступом, взломав их можно сделать эскалацию прав до *.
Essentials
В используемом многими Essentials есть команда /pt, она же /powertool, можно забиндить команду /op ник и выдать другому человеку (сначала взломав опку), опять же если выдача оп другим игрокам у вас запрещена, а OpGuard не стоит, о чем ниже. Также можно биндить другие команды и спамить, залагивая сервер.
AutoMessage
В данном плагине, как и в CommandNPC, есть возможность исполнения команд от лица сервера. Это очень опасно, неправильная настройка прав или доступ к ОПке ничего хорошего не сулит.
Многие плагины.
Во многих плагинах есть команда просмотра конфига, через нее можно спалить пароль от бд, например, само собой, взломав админа. Нужно закрывать /pex, /lp полностью, кроме исполнения от консоли, да и в целом закрывать админские команды. Также плагины типа LuckyPerms имеют возможность миграции на другой сервер базы данных из коробки.
Думаю, я знаю еще дыры, но сразу все припомнить сложно, предлагаю дополнять этот раздел. Что уж тут говорить про банальщину с AuthMe сервером-авторизации и /server, это должно быть на автоматизме.
Что-то менее тривиальное.
Здесь уже можно вспомнить про SQL-инъекции в java или о php-onepage сайте, ведь все юзают пыхъ. Достаточно напомнить, что нужно везде использовать PDO и prepared statement, но ведь во многих скриптах и паблик плагинах этого нет, инпут не валидируется регуляркой - туда летит любая дичь.
Скорее всего рядовому владельцу сервера от такого сложно защититься, да и у меня тоже не везде все идеально в этом плане. Что можно сделать на сайте? Через php.ini, при наличии доступа, можно, например, запретить исполнение system, shell_exec и прочего через disable_functions. Также лучше ограничить директорию исполнения php-скриптов через open_basedir.
Защищаем админки.
У многих серверов есть что-то вроде админ-панели и, как минимум, phpMyAdmin, чаще всего доступные через соотвествующий адрес в строке веб-обозревателя. Вообще, сначала я бы посоветовал обновить pma (phpMyAdmin далее) до последней версии и поставить Google 2FA на юзера, это сможет почти каждый. Также нужно вынести панель на секретный адрес, в идеале вообще все панели защищать секретными куками, доп. паролями, доступом только с вашего статик. ip/vpn. Но тут уже нужны знания, может когда-то и опишу. Туториалы на эту тему легко найти в сети.
Можно обходиться и без pma, но утилитой все же не так удобно через терминал.
Все еще юзаешь plaintext пароли в 2020? Тогда мы идем к вам.
Эх, текстовые пароли, что-то прям навеяло нулевыми.. Давно уже известна наука криптография и система открытый/закрытый ключ. Эти уже не новые принципы я и предлагаю внедрить для начала к нам на дедик. Отказавшись от доступа через пароль, вы сэкономите время на ввод (да-да знаю про программы защищенного хранения паролей, они нужны тоже), а также защитите себя нормальным каким-нибудь RSA 2048
Разве звучит не круто?
Туториалы на этот счет можно найти в сети.
Хватит уже md5 хэши до сих пор использовать в хранении паролей игроков, лучше поставьте bcrypt.
Root-юзер и java несовместимы вместе.
Дай угадаю, все java скрины в дедике запущены под рутом? Ая-яй. А ведь можно было бы создать уже наконец отдельного юзера и запускать java под ним. Зачем? Ну, банально, под root через Runtime.getRuntime().exec() в java можно сделать все что угодно с дедиком одной строкой кода. Да, без root тоже много что можно, но уже меньше.
Наверное, в идеале использовать юзера без bash, если такое возможно в вашем случае, я не тестил.
Но давайте уже создадим хотя бы с башем:
Лучше вообще отказаться от рута, но заходить под юзера можно и под ним через судо:
В идеале вообще использовать docker-контейнеры.
Защита ОП-аккаунтов
Возвращаемся к плагинам и аккаунтам, а тут у нас есть лица, имеющие ОП/звезду, в идеале конечно такое не должно случаться, но мы то знаем,
продажный адмен
Защита - https://github.com/RezzedUp/OpGuard, довольно-таки неплохой плагин. И это не идеальная защита, а вот идеальную уже сложно сделать.
Бекапы - наше все.
Иметь отдельный съемный диск с архивами дедиков - необходимо, вдруг нужно резко все переставить. Скрипт с бекапом бд в облако тоже не лишний.
Вместо заключения.
Я описал достаточно простые и банальные вещи, есть еще масса лазеек, в том числе я не упомянул социальную инженерию, например, недавно многих ютуберов с миллионами подписок ломали через зараженный файл на корпоративную почту, уводили акки и не спасали 2fa. В таких случаях лучше вообще винду выкинуть взамен macos/linux, но это уже имхо. Про то, что не качать с инета ничего - это вообще базовые вещи.
Оставляйте ваши дополнения и замечания, поможем новичкам и друг-другу.
На самом деле, меня также ломали, что уж тут греха таить, да и я вовсе не специалист в защите, также рядовой участник minecraft комьюнити, как и многие.
В данном туториале мы рассмотрим базовые элементы защиты, которые усложнят хацкерам жизнь.
Важно! Если у вас уже лежит на дедике зараженный плагин, то все приведенные ниже действия довольно-таки бесполезны, перед скачиванием необходимо проверить плагин и отключить авто-обновления. Также в подобной ситуации придется переустанавливать ОС и перекачивать плагины.
Ох уж эти открытые порты.
Сколько серверов было взломано через порты, наверное никто не знает. Хотя закрыть их не так уж и сложно. Достаточно лишь поставить в spigot.yml:
Код:
bungeecord: true
Ставим пакет ipset под вашу ОС:
Код:
apt-get install ipset
Код:
ipset -N whitelist iphash
Код:
ipset -A whitelist 8.8.8.8
Код:
iptables -t raw -A PREROUTING -p tcp -i eth0 -m multiport --dports порт1,порт2 -m set ! --match-set whitelist src -j DROP
Код:
ip a
Проверить наличие правила можно так:
Код:
iptables -v -L -n -t raw
Код:
iptables -t raw -F
Код:
apt-get install iptables-persistent
/etc/init.d/iptables-persistent save
/etc/init.d/iptables-persistent reload
Код:
netfilter-persistent save
netfilter-persistent reload
Так уж вышло, что многие плагины имеют кучу абсолютно ненужного функционала, лишь бы автору сделать новый коммит в github, либо владельцы серверов не просчитывают риски некоторых плагинов. Кто дырявый, автор плагина или владелец сервера, я не берусь судить и оставлю на выбор читателя. Предлагаю каждому в эту тему дополнять проблемные плагины и вариант лечения.
HolographicDisplays
Уже многие знают про дыру в https://github.com/filoghost/HolographicDisplays до 2.3.0 версии, где через /hd readtext читали файлики паролей дедика и много чего еще интересного. Кстати, в главе "Root-юзер и java несовместимы вместе" я описываю частичную защиту от этого.
Если зайти на популярные сервера и ввести /hd, у многих покажет древнюю версию плагина.
CommandNpc
Данный плагин и ему подобные имеют возможность исполнять команду от имени ConsoleSender, что уже чревато. Достаточно хакеру получить доступ к одному из аккаунтов администраторов и поставить неприметного npc в яму, затем назначить ему команду с выдачей звезды. Либо у вас есть квест-мастера с доступом, взломав их можно сделать эскалацию прав до *.
Essentials
В используемом многими Essentials есть команда /pt, она же /powertool, можно забиндить команду /op ник и выдать другому человеку (сначала взломав опку), опять же если выдача оп другим игрокам у вас запрещена, а OpGuard не стоит, о чем ниже. Также можно биндить другие команды и спамить, залагивая сервер.
AutoMessage
В данном плагине, как и в CommandNPC, есть возможность исполнения команд от лица сервера. Это очень опасно, неправильная настройка прав или доступ к ОПке ничего хорошего не сулит.
Многие плагины.
Во многих плагинах есть команда просмотра конфига, через нее можно спалить пароль от бд, например, само собой, взломав админа. Нужно закрывать /pex, /lp полностью, кроме исполнения от консоли, да и в целом закрывать админские команды. Также плагины типа LuckyPerms имеют возможность миграции на другой сервер базы данных из коробки.
Думаю, я знаю еще дыры, но сразу все припомнить сложно, предлагаю дополнять этот раздел. Что уж тут говорить про банальщину с AuthMe сервером-авторизации и /server, это должно быть на автоматизме.
Что-то менее тривиальное.
Здесь уже можно вспомнить про SQL-инъекции в java или о php-onepage сайте, ведь все юзают пыхъ. Достаточно напомнить, что нужно везде использовать PDO и prepared statement, но ведь во многих скриптах и паблик плагинах этого нет, инпут не валидируется регуляркой - туда летит любая дичь.
Скорее всего рядовому владельцу сервера от такого сложно защититься, да и у меня тоже не везде все идеально в этом плане. Что можно сделать на сайте? Через php.ini, при наличии доступа, можно, например, запретить исполнение system, shell_exec и прочего через disable_functions. Также лучше ограничить директорию исполнения php-скриптов через open_basedir.
Защищаем админки.
У многих серверов есть что-то вроде админ-панели и, как минимум, phpMyAdmin, чаще всего доступные через соотвествующий адрес в строке веб-обозревателя. Вообще, сначала я бы посоветовал обновить pma (phpMyAdmin далее) до последней версии и поставить Google 2FA на юзера, это сможет почти каждый. Также нужно вынести панель на секретный адрес, в идеале вообще все панели защищать секретными куками, доп. паролями, доступом только с вашего статик. ip/vpn. Но тут уже нужны знания, может когда-то и опишу. Туториалы на эту тему легко найти в сети.
Можно обходиться и без pma, но утилитой все же не так удобно через терминал.
Все еще юзаешь plaintext пароли в 2020? Тогда мы идем к вам.
Эх, текстовые пароли, что-то прям навеяло нулевыми.. Давно уже известна наука криптография и система открытый/закрытый ключ. Эти уже не новые принципы я и предлагаю внедрить для начала к нам на дедик. Отказавшись от доступа через пароль, вы сэкономите время на ввод (да-да знаю про программы защищенного хранения паролей, они нужны тоже), а также защитите себя нормальным каким-нибудь RSA 2048
Разве звучит не круто?Туториалы на этот счет можно найти в сети.
Хватит уже md5 хэши до сих пор использовать в хранении паролей игроков, лучше поставьте bcrypt.
Root-юзер и java несовместимы вместе.
Дай угадаю, все java скрины в дедике запущены под рутом? Ая-яй. А ведь можно было бы создать уже наконец отдельного юзера и запускать java под ним. Зачем? Ну, банально, под root через Runtime.getRuntime().exec() в java можно сделать все что угодно с дедиком одной строкой кода. Да, без root тоже много что можно, но уже меньше.
Наверное, в идеале использовать юзера без bash, если такое возможно в вашем случае, я не тестил.
Но давайте уже создадим хотя бы с башем:
Код:
useradd newuser -s /bin/bash
chown -R newuser:newuser /home/
Код:
apt-get install sudo
sudo -u newuser sh -c 'script /dev/null'
Защита ОП-аккаунтов
Возвращаемся к плагинам и аккаунтам, а тут у нас есть лица, имеющие ОП/звезду, в идеале конечно такое не должно случаться, но мы то знаем,
Бекапы - наше все.
Иметь отдельный съемный диск с архивами дедиков - необходимо, вдруг нужно резко все переставить. Скрипт с бекапом бд в облако тоже не лишний.
Вместо заключения.
Я описал достаточно простые и банальные вещи, есть еще масса лазеек, в том числе я не упомянул социальную инженерию, например, недавно многих ютуберов с миллионами подписок ломали через зараженный файл на корпоративную почту, уводили акки и не спасали 2fa. В таких случаях лучше вообще винду выкинуть взамен macos/linux, но это уже имхо. Про то, что не качать с инета ничего - это вообще базовые вещи.
Оставляйте ваши дополнения и замечания, поможем новичкам и друг-другу.
Последнее редактирование: