Когда-то я был одним из участников проекта BukkitDev и занимался проверкой плагинов, которые туда заливались.

Каждый новый плагин и каждое обновление декомпилировались, чтобы найти в программном коде критичные ошибки (например такие, которые могут значительно ухудшить производительность сервера) или какой-то вредоносный код.

Ошибки встречались довольно часто, ещё чаще попадались бесполезные плагины, их мы тоже отклоняли, а нечто похожее на вредоносный код мне попалось лишь однажды.

В тот плагин была встроена «секретная» команда, которая давала тому, кто её набрал, определённые преимущества. Автор сказал, что забыл убрать «тестовую функцию», и позднее перезалил плагин без каких-то хитростей.

Плагины с бэкдорами я встречал уже потом. Такие плагины периодически пытались распространять через rubukkit (там это быстро отлавливалось — желающих заглянуть в чужой программный код было довольном много), а ещё несколько раз я видел слитые платные плагины на форумах и в пабликах ВК, которые были дополнены не очень приятными возможностями.

Мне всегда казалось, что это явление не массовое, но недавно мне написал человек, который на условиях анонимности рассказал о том, как он с приятелями на протяжении продолжительного времени занимался получением доступа к серверам Minecraft.

Привожу его рассказ с небольшими изменениями и сокращениями.


Детская шалость

Приблизительно 5 лет назад я и мои знакомые занимались «нехорошими делами» (точнее, не совсем легальными) — мы разными способами получали несанкционированный доступ к серверам Minecraft Java Edition.

Это была затянувшаяся детская шалость, которая лично мне приносила некоторое удовольствие. Было интересно найти уязвимость на сервере, чтобы проникнуть «в тыл», натворить что-нибудь — разрушить спаун, испортить базу данных или полностью удалить сервер вместе с резервными копиями.

У нас не было каких-то коммерческих целей, тем не менее, мы совершенствовали наши методы работы и в итоге написали плагин, позволяющий нам не просто выдать себе права оператора на сервере, а получить полноценный доступ к хостингу. Мы могли выполнять системные команды (поддерживались как Windows, так и Linux), могли скачивать любые файлы с сервера и загружать на сервер свои.

Практически сразу же функционал этого  плагина был внедрён в разные популярные плагины вроде CustomJoinItems.

Плагины с нашим вредоносным кодом мы публиковали в группах ВК, посвящённых «сливам». Там публиковались сборки серверов и просто редкие полезные плагины. Публикации с нашим «сюрпризом» делались по знакомству с одним из администраторов подобной группы. Эта услуга стоила нам ровно 0 рублей, но принесла нам множество серверов, с которыми мы могли делать всё, что хотели.

Вся эта история продолжалась недолго, через пару месяцев мы потеряли интерес, остановили сервер, с помощью которого производилось управление заражёнными серверами, и перестали заниматься подобными вещами.

После этого мы создали инфоповод — опубликовали на форумах статью, которая рассказывала о том, как уязвимы серверы Minecraft. Благодаря ней многие администраторы серверов стали серьёзнее относиться к вопросам безопасности.

Плагин, который спал 5 лет

Правда, у этой публикации был и другой эффект. Мне до сих периодически пишут люди с просьбой поделиться нашим средством управления — исходным кодом плагина, который содержит вредоносный код и серверной частью для управления уязвимыми серверами.

Недавно мне написал человек и попросил «оживить» наш сервер, который использовался 5 лет назад. Он рассказал, что занимался распространением нашего плагина. Его интересовала статистика по количеству зараженных серверов и конкретные IP-адреса. Думаю, хотел шантажировать администраторов серверов или заняться саботажем ради удовольствия.

Делиться с ним такой информацией я не планировал, но мне стало интересно собрать статистику — сколько серверов может быть заражено спустя пять лет?

У меня не осталось конкретных наработок, поэтому я написал простенький сервер, выполнявший лишь одну функцию — логирование IP-адресов, с которых производились подключения.

К моему удивлению за двое суток было выполнено порядка 180 подключений с 60 различных адресов. Это больше, чем было в 2015 году, когда мы активно распространяли наши плагины. Наш код не только не умер вместе со старыми серверами, а наоборот распространился.

Я связался с несколькими администраторами серверов из полученного списка и рассказал о том, что на их сервере установлен вредоносный плагин — один из тех, что использовался нами 5 лет назад.

Один из администраторов сообщил, что приобрёл сборку своего сервера у одной известной студии, которая занимается созданием серверов  «под ключ». Другой администратор получил наш плагин в бесплатной сборке, распространяемой в группе этой же студии.

О чём это может говорить, о том, что при создании сборки плагины в неё включаются без проверки, или о том, что это делается намеренно — я не знаю. Но они существуют уже давно, в группе ВК у них 2,5 тыс. подписчиков, а значит, через неё могут распространять всё что угодно.

Мойте руки перед едой и не загружайте плагины из непроверенных мест

Мораль истории можно выразить в виде советов администраторам серверов:

  1. Плагины, моды и прочие ресурсы стоит скачивать лишь с оригинальных источников — spigotmc.org, bukkit.org, sourceforge.net.
  2. Никогда не качайте плагины с ресурсов вроде BlackSpigot, тематических групп ВК и прочих неоригинальных мест.
  3. Заказывая и приобретая какие-то ресурсы у студий и отдельных лиц (сборки, плагины, сайты и т.д.), проявляйте бдительность. Убедитесь в компетентности исполнителей, почитайте отзывы о них на независимых ресурсах (например, rubukkit.org).

Примечание от fromgate: Я сталкивался с тем, что даже известные и уважаемые авторы включали вредоносный код в плагины «на всякий случай» —  в качестве защиты от недобросовестных заказчиков.

  1. Предотвращайте все неизвестные входящие и исходящие подключения на сервере при помощи файрвола.

Заключение

Рассказчик привёл мне несколько фактов, которые я не могу привести, чтобы не нарушить его анонимность. Также он предоставил мне один из плагинов, которые они распространяли.

Если говорить о фактах — я их проверил, мне они кажутся достаточно правдоподобными. Следы упомянутых событий остались в сети. И при наличии желания и времени можно было бы воссоздать достаточно полную картину.

Я изучил предоставленный плагин. Он действительно содержит код, который однозначно стал бы препятствием для публикации его на BukkitDev. Сомнительный код замаскирован под библиотеку com.google.gson и действительно умеет выполнять различные команды. Я не запускал плагин и не пытался как-то проверить работу вредоносного кода — мне увиденного достаточно, чтобы не доверять этому плагину.