Когда-то я был одним из участников проекта BukkitDev и занимался проверкой плагинов, которые туда заливались.
Каждый новый плагин и каждое обновление декомпилировались, чтобы найти в программном коде критичные ошибки (например такие, которые могут значительно ухудшить производительность сервера) или какой-то вредоносный код.
Ошибки встречались довольно часто, ещё чаще попадались бесполезные плагины, их мы тоже отклоняли, а нечто похожее на вредоносный код мне попалось лишь однажды.
В тот плагин была встроена «секретная» команда, которая давала тому, кто её набрал, определённые преимущества. Автор сказал, что забыл убрать «тестовую функцию», и позднее перезалил плагин без каких-то хитростей.
Плагины с бэкдорами я встречал уже потом. Такие плагины периодически пытались распространять через rubukkit (там это быстро отлавливалось — желающих заглянуть в чужой программный код было довольном много), а ещё несколько раз я видел слитые платные плагины на форумах и в пабликах ВК, которые были дополнены не очень приятными возможностями.
Мне всегда казалось, что это явление не массовое, но недавно мне написал человек, который на условиях анонимности рассказал о том, как он с приятелями на протяжении продолжительного времени занимался получением доступа к серверам Minecraft.
Привожу его рассказ с небольшими изменениями и сокращениями.
Детская шалость
Приблизительно 5 лет назад я и мои знакомые занимались «нехорошими делами» (точнее, не совсем легальными) — мы разными способами получали несанкционированный доступ к серверам Minecraft Java Edition.
Это была затянувшаяся детская шалость, которая лично мне приносила некоторое удовольствие. Было интересно найти уязвимость на сервере, чтобы проникнуть «в тыл», натворить что-нибудь — разрушить спаун, испортить базу данных или полностью удалить сервер вместе с резервными копиями.
У нас не было каких-то коммерческих целей, тем не менее, мы совершенствовали наши методы работы и в итоге написали плагин, позволяющий нам не просто выдать себе права оператора на сервере, а получить полноценный доступ к хостингу. Мы могли выполнять системные команды (поддерживались как Windows, так и Linux), могли скачивать любые файлы с сервера и загружать на сервер свои.
Практически сразу же функционал этого плагина был внедрён в разные популярные плагины вроде CustomJoinItems.
Плагины с нашим вредоносным кодом мы публиковали в группах ВК, посвящённых «сливам». Там публиковались сборки серверов и просто редкие полезные плагины. Публикации с нашим «сюрпризом» делались по знакомству с одним из администраторов подобной группы. Эта услуга стоила нам ровно 0 рублей, но принесла нам множество серверов, с которыми мы могли делать всё, что хотели.
Вся эта история продолжалась недолго, через пару месяцев мы потеряли интерес, остановили сервер, с помощью которого производилось управление заражёнными серверами, и перестали заниматься подобными вещами.
После этого мы создали инфоповод — опубликовали на форумах статью, которая рассказывала о том, как уязвимы серверы Minecraft. Благодаря ней многие администраторы серверов стали серьёзнее относиться к вопросам безопасности.
Плагин, который спал 5 лет
Правда, у этой публикации был и другой эффект. Мне до сих периодически пишут люди с просьбой поделиться нашим средством управления — исходным кодом плагина, который содержит вредоносный код и серверной частью для управления уязвимыми серверами.
Недавно мне написал человек и попросил «оживить» наш сервер, который использовался 5 лет назад. Он рассказал, что занимался распространением нашего плагина. Его интересовала статистика по количеству зараженных серверов и конкретные IP-адреса. Думаю, хотел шантажировать администраторов серверов или заняться саботажем ради удовольствия.
Делиться с ним такой информацией я не планировал, но мне стало интересно собрать статистику — сколько серверов может быть заражено спустя пять лет?
У меня не осталось конкретных наработок, поэтому я написал простенький сервер, выполнявший лишь одну функцию — логирование IP-адресов, с которых производились подключения.
К моему удивлению за двое суток было выполнено порядка 180 подключений с 60 различных адресов. Это больше, чем было в 2015 году, когда мы активно распространяли наши плагины. Наш код не только не умер вместе со старыми серверами, а наоборот распространился.
Я связался с несколькими администраторами серверов из полученного списка и рассказал о том, что на их сервере установлен вредоносный плагин — один из тех, что использовался нами 5 лет назад.
Один из администраторов сообщил, что приобрёл сборку своего сервера у одной известной студии, которая занимается созданием серверов «под ключ». Другой администратор получил наш плагин в бесплатной сборке, распространяемой в группе этой же студии.
О чём это может говорить, о том, что при создании сборки плагины в неё включаются без проверки, или о том, что это делается намеренно — я не знаю. Но они существуют уже давно, в группе ВК у них 2,5 тыс. подписчиков, а значит, через неё могут распространять всё что угодно.
Мойте руки перед едой и не загружайте плагины из непроверенных мест
Мораль истории можно выразить в виде советов администраторам серверов:
- Плагины, моды и прочие ресурсы стоит скачивать лишь с оригинальных источников — spigotmc.org, bukkit.org, sourceforge.net.
- Никогда не качайте плагины с ресурсов вроде BlackSpigot, тематических групп ВК и прочих неоригинальных мест.
- Заказывая и приобретая какие-то ресурсы у студий и отдельных лиц (сборки, плагины, сайты и т.д.), проявляйте бдительность. Убедитесь в компетентности исполнителей, почитайте отзывы о них на независимых ресурсах (например, rubukkit.org).
Примечание от fromgate: Я сталкивался с тем, что даже известные и уважаемые авторы включали вредоносный код в плагины «на всякий случай» — в качестве защиты от недобросовестных заказчиков.
- Предотвращайте все неизвестные входящие и исходящие подключения на сервере при помощи файрвола.
Заключение
Рассказчик привёл мне несколько фактов, которые я не могу привести, чтобы не нарушить его анонимность. Также он предоставил мне один из плагинов, которые они распространяли.
Если говорить о фактах — я их проверил, мне они кажутся достаточно правдоподобными. Следы упомянутых событий остались в сети. И при наличии желания и времени можно было бы воссоздать достаточно полную картину.
Я изучил предоставленный плагин. Он действительно содержит код, который однозначно стал бы препятствием для публикации его на BukkitDev. Сомнительный код замаскирован под библиотеку com.google.gson и действительно умеет выполнять различные команды. Я не запускал плагин и не пытался как-то проверить работу вредоносного кода — мне увиденного достаточно, чтобы не доверять этому плагину.
Что такое код
В контексте статьи — это программный код.
Я хочу рассказать свою историю того, как мой сервер «взломали».
Значит, это было где-то в 2016-2017 годах. Тогда после аренды сервера прошло довольно много времени и по этому я особо не играл на сервере, ибо уже надоело. И вот, в один прекрасный вечер, когда меня не было на сервере, мне позвонил друг и сказал, чтобы я срочно зашёл на сервер. Я зашёл и увидел, что спавн разгромили + при помощи читов построили огромные… ну вы знаете, что обычно строят в майнкрафте :).
Сначала я думал, что это какой-то вредоносный плагин. В логах было сказано, что игрок, который «взломал» мой сервер, удалил основные регионы спавна. Игрока я конечно же забанил по IP навсегда за нанесение вреда серверу + читы. (Но я думаю, ему все равно.)
И вот, при чтении этого комментария, наверное, вы задались вопросом: почему слово «взломал» я пишу в кавычках? А на самом деле, все это было из-за неправильно указанного права в permissions.yml. В правах я указал, что любой игрок может удалять регионы, не зависимо от того, созданы ли они были им или нет. (Помню, как искал это право на различных сайтах. Тогда мне казалось, что все нормально.) Ну и после этого, я это право благополучно изменил и стало все нормально.
а что не так с blackspigot?
Статья просто скопирована, оставили бы ссылка на оригинальную…
Эта статью мне прислали. Автор решил остаться неизвестным — это его право. Присланный им текст я довольно злостно отредактировал, и поэтому наличие «оригинальной статьи» может говорить лишь о том, что её скопировали отсюда.
Ссылку дайте, пожалуйста.
hello world