Перехват управления через легитимное ПО: кампания HijackLoader доставляет Vidar и SnappyClient в одном развертывании

security

Исследователи информационной безопасности обнаружили сложную многоступенчатую атаку, в рамках которой злоумышленники одновременно развертывают два различных вредоносных компонента: инфостилер Vidar 2.1 и полнофункциональный RAT (троян удаленного доступа) SnappyClient. Атака использует технику DLL- sideloading через легитимное программное обеспечение, включая Radmin VPN и браузер Opera, что позволяет обойти многие традиционные средства защиты.

Описание

В основе кампании лежит загрузчик HijackLoader, который работает в две независимые цепочки. Первая цепочка, как описывалось ранее, загружает, расшифровывает и внедряет Vidar в легитимный подписанный процесс NeuroManag.exe для кражи сессионных данных и паролей. Вторая цепочка, запускаемая тем же родительским процессом WizardDa42.exe (легитимный Radmin VPN), осуществляет доставку SnappyClient. Между собой цепочки не имеют общих компонентов, за исключением общего родителя - у каждой свой хост для sideloading, свой экземпляр HijackLoader, свой набор ресурсов и конечная полезная нагрузка.

Схема второй цепочки выглядит следующим образом: WizardDa42.exe запускает AlphVector.exe (легитимный бинарник Opera). Opera, в свою очередь, загружает подмененную библиотеку opera_elf.dll, в которую злоумышленники внедрили патч размером около 150 байт. Патч заменяет один вызов внутри статического инициализатора libc++, который срабатывает автоматически при загрузке DLL до вызова DllMain. В результате opera_elf.dll загружает библиотеку WebView2Loader.dll (на самом деле - модифицированную сборку объемом 165 КБ вместо 141 КБ у оригинальной Microsoft), а та, в свою очередь, извлекает из ресурсного файла audio.lib зашифрованный PE-файл SnappyClient.

Предоставленный анализ показывает, что для извлечения конечной полезной нагрузки требуется преодоление нескольких слоев защиты. Сама audio.lib представляет собой ресурсный пакет HijackLoader. Внутри него SnappyClient хранится в сжатом LZMA-формате в секции .xyz. Распаковка дает исполняемый файл размером 3,7 МБ.

SnappyClient - это коммерческого уровня RAT с широким набором функций. В отличие от Vidar, который крадет данные однократно и завершает работу, SnappyClient предназначен для закрепления в системе и предоставления оператору интерактивного управления. Его возможности включают: удаленный рабочий стол (VNC и скрытый рабочий стол HVNC), FTP-сервер, обратный прокси SOCKS5, удаленную командную оболочку, кейлоггер, кражу паролей браузеров, cookies и криптовалютных кошельков. Управление и контроль (C2) осуществляется по собственному зашифрованному протоколу поверх TCP, а не через HTTPS.

Динамический анализ подтвердил, что после запуска цепочка операций занимает чуть более двух минут до установления активного C2-соединения. Процесс разворачивается так: AlphVector.exe копирует всю цепочку загрузки в C:\ProgramData\service и перезапускается оттуда. Затем opera_elf.dll загружает WebView2Loader.dll, который извлекает SnappyClient и записывает его во временный файл со случайным именем в %Temp%. После этого создается процесс VirtualAr.exe (подписанный бинарник Qihoo 360) в приостановленном состоянии, в его адресное пространство методом process hollowing отображается SnappyClient, после чего основной поток возобновляется. Параллельно Crisp.exe устанавливает постоянство: создает ярлык автозапуска в папке Startup и задачу в планировщике Windows (формат .job, Task Scheduler 1.0), избегая стандартных ключей реестра Run и XML-задач.

Обнаружение дополнительных компонентов показало, что SnappyClient использует при старте тайминг-петлю на 1,7 миллиарда итераций для обхода песочниц, а затем сканирует среду на наличие VMware Tools. Полезная нагрузка выполняет сбор данных: перечисление профилей Chrome и Edge, извлечение зашифрованных ключей App-Bound через вызов COM-интерфейса IElevator, что приводит к запуску elevation_service.exe от имени services.exe. Атака также проверяет наличие криптовалютных кошельков (Bitcoin, Coinomi, Electrum, Exodus) и собирает файлы Telegram.

Конфигурация C2 восстанавливается через сложную цепочку: внутри SnappyClient обнаружен JSON-объект с тегом "TIGRAN" и директорией хранения "Mayanex". Далее зашифрованный сетевой конфигурационный блок проходил через Snappy-сжатие, Base58-кодирование, шифрование ChaCha20-Poly1305, модифицированный RIPEMD-160 и защищенный паролем 7z-архив. В итоге были получены шесть адресов C2-серверов: основной IP 66.163.113.238 и пять доменов вида yoda-*.sbs/.site/.online, порты управления 3333 и передачи данных 3334.

Сам протокол C2 уникален: сервер при подключении отправляет 48 байт (32-байтный ключ ChaCha20, 12-байтный nonce и 4-байтный ID сессии). Клиент отвечает подтверждением, зашифровав полученный ключ тем же алгоритмом. После этого все сообщения имеют формат: зашифрованный заголовок (2 байта команды, 4 байта ID сообщения, длина тела, флаги) плюс Snappy-сжатый и зашифрованный JSON. Каждая сессия данных получает свой ключ и nonce, при этом управляющее соединение (порт 3333) используется только для команд, а три параллельных канала данных (порт 3334) - для массовой передачи похищенной информации.

В ходе динамического анализа наблюдалась команда на сбор браузерных данных, охватывающая более десятка браузеров на Chromium и Mozilla, а также команда exSeeds для поиска файлов с сид-фразами криптокошельков (BIP-39) и команда на кражу программных кошельков и Telegram. При этом другие возможности - HVNC, SOCKS-прокси, обратная оболочка - в данном запуске не использовались, хотя статически присутствуют в коде.

Данная кампания показательна тем, что объединяет в одной атаке два этапа, которые обычно разделены во времени: кражу данных (через Vidar) и обеспечение долговременного доступа (через SnappyClient). В модели access economy инфостилеры часто служат начальным вектором, после чего доступ продается брокерам, которые затем развертывают вымогательское ПО. Здесь оба этапа выполняются одновременно, что резко сокращает время между компрометацией и возможным нападением. Для защиты это означает, что обнаружение инфостилера не должно рассматриваться как изолированный инцидент - та же загрузочная цепочка могла доставить и постоянную RAT-нагрузку, и хост следует считать полностью скомпрометированным, пока не доказано обратное.

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

IPv4 Port Combination

  • 66.163.113.238:3333
  • 193.24.123.38:3333
  • 193.24.123.38:3334

SHA256

  • 725344564a8c9b0a033e9a5d41369fae5b8503d36e87002e7c064eface927e7b
  • 8e04821fa87512991cb562a6aa4c3df695a63cb1261c5b5c7e9b9af37a3a50a9
  • debbb3b4fdd9107deec64c46b453b988c5b51a99e006f2c6d1c804b5e2a33991

YARA

Комментарии: 0