- sha1: 34a4c5f28c7df23662962c3eaa0a15b7ae48b488
Описание
Вредоносная программа-дроппер для ОС Windows, написанная на языке С++. Исполняемый файл обфусцирован шифром XOR и запакован самописным упаковщиком. Применяется для доставки на скомпрометированные ПК трояна Trojan.Siggen28.53599.
Структура упаковщика и распаковка
Для упаковки трояна используется неизвестный упаковщик, характерной особенностью которого являются нулевые физические размеры секций с «традиционными» названиями: .text, .rdata и др.
При этом внутри одной из следующих секций с названием .(>@ содержится код. Там же находится точка входа.
Исходный код с оригинальной точкой входа распаковывается в пустые секции.
Выполняемые действия
Инициализация
Троян читает структуру KUSER_SHARED_DATA, содержащую различную системную информацию. В самом начале в этой структуре проверяется значение поля NtMajorVersion, которое должно быть равно 10.
Далее загружаются библиотеки ntdll.dll, kernel32.dll, user32.dll, ole32.dll, wevtapi.dll и инициализируется структура с указателями на них. В будущем данную структуру троян использует для вызова WinAPI-функций, необходимых ему для работы. После происходит инициализация 3 потоков, отвечающих за антиотладку.
Работа с WinAPI
Троян опосредованно работает с системными функциями WinAPI через структуру-обертку, содержащую таблицу с функциями, указатели на библиотеки, адреса загрузки библиотек и флаг, отвечающий за противодействие отладке.
Таблица функций содержит:
- функции для работы с WinAPI — нахождение указателя на функцию и ее вызова,
- вспомогательные функции — собственная реализация LoadLibrary и GetProcAddress,
- конфигурацию входных параметров для ряда функций.
В самом начале выполнения троян инициализирует основную структуру приложения. Для этого он с помощью модифицированного алгоритма CRC32 находит в структуре PEB_LDR_DATA адреса загрузки библиотек. Для получения функций из библиотек троян использует два способа:
- Собственная реализация вызовов LoadLibrary и GetProcAddress
Троян имеет две функции, которые повторяют реализацию LoadLibrary и GetProcAddress. Данный способ применяется в тех случаях, когда требуется доступ к API, содержащемуся в ещё не загруженной в память процесса библиотеке. - Поиск библиотек по хешам в PEB_LDR_DATA
Троян ищет нужную библиотеку в структуре PEB_LDR_DATA посредством списка InMemoryOrderModuleList, который содержит в том числе указатели на все загруженные в память процесса библиотеки и их имена. При этом совпадение имени библиотеки вычисляется по совпадению значения хеша модифицированного алгоритма CRC32 с искомым. Далее через таблицу экспортируемых функций библиотеки находится нужная, при этом имена функций хешируются аналогичным способом.
Имена библиотеки и функции считываются с помощью модифицированного алгоритма CRC32.
Защита от отладки
Проверка отладочных регистров
Троян получает контекст родительского потока и проверяет, чтобы значение отладочных регистров Dr0–Dr7 было равно 0.
Проверка подключенного отладчика
В структуре KUSER_SHARED_DATA троян проверяет первые два бита в поле KdDebuggerEnabled, их значение должно быть равно 0.
С помощью функции NtQueryInformationProcess проверяет наличие отладчика, запрашивая следующие параметры из структуры PROCESSINFOCLASS: ProcessDebugFlags, ProcessDebugPort, ProcessDebugObjectHandle, ProcessTlsInformation.
Поиск драйверов отладчиков
Выполняет в директории %WINDIR%\System32\drivers поиск на предмет выявления файлов отладочного ПО. Считает хеши имен файлов с помощью модифицированного алгоритма CRC32 и сравнивает результат с хешами из черного списка.
Каждая проверка осуществляется по таймеру, при неуспешной проверкев глобальной переменной выставляется флаг, который проверяется на различных этапах исполнения. При неудачной проверке флага троян завершает свою работу.
Проверка окружения
Для защиты от запуска в виртуальной среде троян просматривает ряд журналов ОС, используя библиотеку wevtapi.dll.
- Поиск следующих строк в журналах Microsoft-Windows-Shell-Core/Operational, System, Application:
\npcap.sys Wireshark API_Monitor apimonitor API Monitor rohitab.com hex-rays.com processhacker.sys ProcessHacker PROCMON2 ida64.exe
- В журналах Microsoft-Windows-Storage-Storport/Operational, System, Microsoft-Windows-Storsvc/Diagnostic, Microsoft-Windows-StorageSpaces-Driver/Operational, Microsoft-Windows-Partition/Diagnostic, Microsoft-Windows-Kernel-PnP/Configuration, Application производится поиск следующих строк:
VMTools VMUpgradeHelper VirtualBox Guest VBoxService.exe VBOX HARDDISK _FLOPPY_ \VMWVM _VBOX& NECVMWar prl_ VMware
- Дополнительно в журнале Application троян ищет следующие строки:
VMware Player VMware NAT Service \Device\VBoxNet Oracle VM VirtualBox
После описанных проверок выполняется распаковка содержащейся в ресурсах полезной нагрузки — Trojan.Siggen28.53599. Для этого используется модифицированный алгоритм RC4, ключ для шифра имеет длину 8 байт. Затем происходит расшифровка конфигурации, зашифрованной шифром XOR. Полученная конфигурация сохраняется в строку, помеченную символами DANTEMARKER, которые перезаписываются.
Завершив все подготовительные операции, дроппер загружает в память полезную нагрузку и передает ей управление.