Описание вредоносного ПО

Осторожный троянец Gootkit

Троянец Gootkit – это сложный многоступенчатый банковский зловред, впервые обнаруженный в 2014 году аналитиками компании «Доктор Веб». Изначально он распространялся посредством спама и с помощью наборов эксплойтов, таких как Spelevo и RIG. Позднее, в дополнение к спамерским атакам, злоумышленники переключились на атаки через скомпрометированные веб-сайты, с которых пользователей обманом убеждают загружать вредоносное ПО.

Gootkit способен красть информацию из браузеров, осуществлять атаки «человек в браузере» (MitB), перехватывать данные, вводимые с клавиатуры, делать скриншоты и осуществлять множество других вредоносных действий. Загрузчик этого троянца выполняет различные проверки на наличие виртуальных машин и песочниц и использует сложные алгоритмы закрепления. Активность Gootkit была приостановлена в 2019 году, после того как его операторы пострадали от утечки данных, но с ноября 2020 года он снова активен.

Жертвы Gootkit в основном находятся в странах Евросоюза, в частности в Германии и Италии. В этой статье мы проанализировали один из недавних образцов Gootkit.

Техническая информация

Gootkit состоит из загрузчика, написанного на C++, и основного компонента, написанного на JavaScript (JS) и использующего интерпретатор Node.js. Основной компонент программы представляет собой модульный фреймворк, включающий модули для регистрации, шпионажа, обнаружения виртуальных машин и для других целей.

Загрузчик

Образец (MD5 97713132e4ea03422d3915bab1c42074) упакован оригинальным многоступенчатым упаковщиком, который поэтапно расшифровывает полезную нагрузку. На последнем этапе шелл-код расшифровывает исходный исполняемый файл загрузчика и внедряет его в память. После внедрения вызывается начальная точка входа. Следовательно, мы можем легко распаковать исходный исполняемый файл и проанализировать его. Наше ПО определяет загрузчик Gootkit с разными вердиктами, как в таблице ниже.

MD5 SHA-1 Вердикт
97713132e4ea03422d3915bab1c42074 a90c6e7c5650e73ceb0b329fa8c78045632100ee Trojan-Downloader.Win32.Injecter
27626f2c3667fab9e103f32e2af11e84 6e9e30c699c7111089fe364ce47f1dc05c8bc703 HEUR:Trojan.Win32.Generic

Большинство строк зашифрованы операцией XOR и расшифровываются в процессе выполнения. Другие приемы защиты от статического анализа не используются.

Расшифровка строк

Однако для затруднения динамического анализа загрузчик Gootkit различными методами проверяет, не выполняется ли он в виртуальной или отладочной среде. Если хотя бы одна из проверок сработает, загрузчик входит в бесконечный цикл.

Проверка имени образца

Полный список методов обнаружения виртуальных машин, используемых вредоносной программой

Проверка Запрещенное значение
CRC32 имени образца 0xBC136B46, 0xD84A20AC, 0xEED889C4, 0x58636143, 0xC0F26006, 0x8606BEDD, 0xE8CBAB78, 0x2AB6E04A, 0x31E6D1EA
GetModuleHandle dbghelp.dll, sbiedll.dll
GetUserName CurrentUser, Sandbox
GetComputerName SANDBOX, 7SILVIA
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\SystemBiosVersion FTNT1, INTEL-604000, SMCI, QEMU, VBOX, BOCHS, AMI, SONI
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\VideoBiosVersion VirtualBox
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SystemBiosVersion 55274-640-2673064-23950 (Joe Sandbox), 76487-644-3177037-23510 (CWSandbox), 76487-337-8429955-22614 (Anubis Sandbox)
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcess\0\ProcessorNameString Xeon
_MEMORYSTATUSEX. ullTotalPhys Менее 2 100 000 000
UuidCreateSequential (результат этой функции зависит от MAC-адреса компьютера, и возвращаемое ей значение используется, чтобы определить, выполняется ли троянец в песочнице) 0xF01FAF00 (Dell Inc.), 0x505600 (VMWare, Inc.), 0x8002700 (PCS System Technology GmbH), 0xC2900 VMWare, Inc.), 0x56900 (VMWare, Inc.), 0x3FF00 (Microsoft), 0x1C4200 (Parallels), 0x163E00 (XenSource)
CRC32 имен запущенных процессов 0xAEA3ED09, 0x2993125A, 0x3D75A3FF, 0x662D9D39,

0x922DF04, 0xC84F40F0, 0xDCFC6E80

Процесс выполнения

При запуске образец проверяет аргументы командной строки. Доступные аргументы перечислены ниже:

Аргумент Описание
—client Нет обработчика
—server Нет обработчика
—reinstall Проверяет все выполняемые процессы (номер процесса является переменной цикла) и завершает все процессы, где process.pid не совпадает с PID текущего процесса, а process.name совпадает с именем текущего файла; затем зловред копирует и запускает сам себя посредством CreateProcessW
—service Задает переменную окружения USERNAME_REQUIRED=TRUE
—test Останавливает выполнение
—vwxyz Загружает с командного сервера основной компонент

После обработки аргументов командной строки образец проверяет, не выполняется ли он внутри виртуальной машины или в отладочной среде. Если проверка пройдена успешно (ни виртуальная машина, ни отладочная среда не обнаружены), он расшифровывает конфигурацию и запускает четыре потока.

Процедура запуска потоков

  • Update_from_c2
    Это первый из запускаемых потоков. Он пытается загрузить обновление для загрузчика из расположения <CnC host>/rpersist4/<crc>, где <CnC host> — это адрес командного сервера, а <crc> — это CRC32 первых 0x200 байт текущего файла в десятичном формате.
  • Browser_inj
    Расшифровывает два встроенных исполняемых MZPE-файла (DLL-библиотеки для архитектур x64 и x86), перебирает запущенные процессы и пытается внедрить расшифрованные библиотеки в память определенных процессов посредством API NtCreateSection/NtMapViewOfSection. Сопоставление имен процессов выполняется путем вычисления CRC32 имени процесса. Список поддерживаемых браузеров приведен в таблице ниже.

    CRC32 Браузер
    0xC84F40F0 Chrome
    0x662D9D39 Firefox
    0x922DF04 Internet Explorer
    0x2993125A Microsoft Edge (процесс MicrosoftEdgeCP.exe)
    0x3D75A3FF Opera
    0xDCFC6E80 Safari
    0xEB71057E неизвестно

    Внедренный код вызывается из процедур веб-инжекта и перехвата трафика в основном компоненте зловреда для осуществления атаки типа «человек в браузере» (MitB). С этой целью код подменяет стандартные функции браузера, отвечающие за проверку сертификатов, чтобы они разрешали использование самоподписанных сертификатов. Это позволяет злоумышленникам внедрять свой JavaScript-код и модифицировать или перенаправлять трафик.

  • Persistence_service
    Если поток выполняется под учетной записью LOCAL_SYSTEM, механизм закрепления Gootkit эксплуатирует объекты групповых политик (GPO) Windows, ожидающие выполнения. Когда пользователь модифицирует значения реестра для таких объектов, он должен указать следующие параметры:

    • count — счетчик ожидающих GPO;
    • path1, path2, … — пути к специальным INF-файлам, содержащим инструкции по загрузке GPO;
    • Section1, Section2, … — имена разделов в INF-файлах.

    Gootkit создает INF-файл в каталоге, где находится образец, и записывает в раздел реестра Software\Microsoft\IEAK\GroupPolicy\PendingGPOs следующие значения:

    • count — 0x1
    • path1 — расположение INF-файла
    • Section1 — DefaultInstall

    Содержимое INF-файла

    Теперь explorer.exe будет загружать объекты групповых политик при каждом запуске. Gootkit создает ожидающий GPO для пакета администрирования Internet Explorer (IEAK), указывающий непосредственно на INF-файл. Когда explorer.exe загружается, он выполняет инструкции раздела [DefaultInstall] в созданном файле, запуская исполняемый файл Gootkit.

    Если образец выполняется под другой учетной записью, он создает службу со случайным именем, выбранным из %SystemRoot%, копирует себя в папку %SystemRoot% с выбранным именем и удаляется с диска.

  • Stop_switch
    Этот поток ищет файл с именем uqjckeguhl.tmp в папках \AppData\Local\Temp и \Local Settings\Temp. Найдя файл, зловред прекращает выполнение.

Загрузка основного компонента

Перед загрузкой основного компонента с командного сервера загрузчик пытается найти разделы реестра с именами и путем следующего формата: HKCU\Software\AppDataLow\<pr_string>_<i>, где i — номер блока данных, начиная с 0, а pr_string — псевдослучайная строка, сгенерированная при запуске бота. Она создается на основе параметров компьютера жертвы, поэтому для одного ПК каждый раз будет генерироваться одно и то же значение.

Каждый раздел содержит блок зашифрованных данных объемом максимум 512 000 байт. Если вышеупомянутые разделы были найдены, их содержимое будет сохранено в специально выделенном буфере, используемом для расшифровки и распаковки. Затем содержимое буфера расшифровывается с помощью той же функции, что и конфигурация, после чего распаковывается.

После распаковки загрузчик загружает с командного сервера основной компонент, вычисляет его контрольную сумму CRC32 и сравнивает полученное значение с CRC полезной нагрузки в реестре (если это значение присутствует). При несовпадении контрольных сумм загрузчик выполняет более новую версию, загруженную с командного сервера. Командный сервер не отправляет DLL-модуль без соответствующего заголовка UserAgent, который жестко задан в образце. Текущее значение UserAgent таково: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/21006101 Firefox/25.0.

Функция расшифровки

Основной компонент

Основной компонент (MD5 20279d99ee402186d1e3a16d6ab9398a, вердикт: HEUR:Trojan.Win32.Generic) представляет собой интерпретатор Node.js со встроенными зашифрованными JS-файлами. При запуске он расшифровывает файлы JavaScript, используя RC4-подобный алгоритм с жестко заданным ключевым потоком.

Информация о встроенных модулях хранится в массиве специальных структур, имеющих следующий формат: BYTE* name_pointer, BYTE* encrypted_data, DWORD data_size, DWORD encr_flag. Эти структуры используются внутри процедуры расшифровки, которая считывает data_size байтов, начиная с позиции encrypted_data. Процедура расшифровывает структуру encrypted_data, если задано значение encr_flag, и записывает результат в файл с именем *name_pointer. Процедура расшифровки перебирает все записи в массиве информации о файлах. После этого выполнение расшифровки передается интерпретатору Node.js.

Массив информации о файлах

Массив содержит 124 зашифрованных файла – как системные библиотеки и пакеты с открытым исходным кодом Node.js, так и вредоносные модули. Интересно, что точкой входа JavaScript является файл с именем malware.js.

Malware.js инициализирует глобальные переменные бота, собирает сохраненные файлы cookie (из IE, Firefox и Chromium) и перебирает список командных серверов в поисках доступного.

Когда вредоносная программа находит командный сервер, она запускает бесконечный цикл прослушки различных внутренних событий, связанных с работой модулей (некоторые процедуры, такие как сбор файлов cookie, запускаются без запроса к командному серверу при старте бота), и отправляет собранные данные на командный сервер в пакетах специального формата. Зловред также получает команды с командного сервера, вызывая соответствующий обработчик для каждой из них. Чтобы взаимодействовать с модулями, вредоносное ПО использует следующие типы пакетов:

Внутреннее имя Описание
SLAVE_PACKET_API_TAKESCREEN Отправка скриншота на командный сервер
SLAVE_PACKET_MAIL Отправка информации о полученных электронных письмах
SLAVE_PACKET_LOGLINE Отправка лога
SLAVE_PACKET_LSAAUTH Отправка учетных данных
SLAVE_PACKET_PAGE_FRAGMENT Отправка данных веб-инжектов
SLAVE_PACKET_FORM Отправка данных перехваченной формы
SLAVE_PACKET_LOCAL_VARS Отправка локальных переменных бота
SLAVE_PACKET_SECDEVICELOG Отправка лога событий безопасности устройства
SLAVE_PACKET_KEYLOG Отправка данных кейлоггера
SLAVE_PACKET_WINSPYLOG Отправка текущего активного окна

Существует шесть типов обработчиков внутренних событий и соответствующих форматов пакетов.

Обработчики событий

Общая структура пакета выглядит так:

  • Длина+8 (4 байта)
  • Магическое значение пакета (0xEDB88320 XOR (длина+8))
  • Данные пакета (различаются для пакетов разных типов, для сериализации используется protobuf)
  • Магическое значение пакета

Процедура генерации пакетов

Наши продукты детектируют угрозу со следующими вердиктами: Trojan-Downloader.Win32.Injecter, HEUR:Trojan.Win32.Generic, Trojan-Downloader.Win32.Gootkit, Trojan-Banker.Win32.Gootkit. Все детали, индикаторы компрометации, данные фреймворка MITRE ATT&CK, правила YARA и хэши, относящиеся к данной угрозе, доступны пользователям нашего сервиса Financial Threat Intelligence. Узнать больше про анализ вредоносного ПО и исследование угроз можно на тренингах, которые проводят эксперты GReAT.

Индикаторы компрометации

Основной компонент (не изменялся с 2019 г.)
20279d99ee402186d1e3a16d6ab9398

Загрузчик
5249c568fb2746786504b049bbd5d9c8
97713132e4ea03422d3915bab1c42074
174A0FED20987D1E2ED5DB9B1019E49B
27626f2c3667fab9e103f32e2af11e84

Домены и IP-адреса
kvaladrigrosdrom[.]top
scellapreambulus[.]top
lbegardingstorque[.]com
kerymarynicegross[.]top
pillygreamstronh[.]com

Осторожный троянец Gootkit

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике