Старый boot лучше новых двух

Буткит Rovnix снова в деле

В середине апреля наши системы мониторинга угроз обнаружили вредоносные файлы, распространявшиеся с такими именами: «о новой инициативе Всемирного банка в связи с эпидемией коронавируса.exe» или «о новой инициативе Всемирного банка в связи с эпидемией коронавируса.rar». Внутри них находился знакомый нам буткит Rovnix. Использование темы пандемии злоумышленниками само по себе не ново — в новинку то, что Rovnix оброс средством обхода UAC и используется для доставки необычного для себя загрузчика. Итак, приступим к анализу зловреда по всем правилам драматургии.

Экспозиция: в комнату входит SFX-архив

Сам файл «о новой инициативе Всемирного банка в связи с эпидемией коронавируса.exe» представляет собой самораспаковывающийся архив, из которого «выпадают» easymule.exe и 1211.doc.

SFX-скрипт

Документ действительно содержит информацию о новой инициативе Всемирного банка, а в качестве его авторов в метаданных указаны реальные люди, имеющие отношение к организации.

Содержимое документа 1211.doc

Что касается easymule.exe, то в его ресурсах содержится bitmap-изображение, которое на самом деле является исполняемым файлом. Скрипт распаковывает его и загружает в память.

Загрузка «изображения» из ресурсов

Завязка: UAC-bypass

В коде загруженного в память PE заметны части, схожие с известным буткитом Rovnix и его модулями, чей исходный код «утек» в 2013 году.

Слева — исходный код вредоноса, справа — утекший исходный код Rovnix (bksetup.c)

Однако анализируемый файл содержит новшества, которые, очевидно, добавили авторы, основываясь на оригинальном исходном коде Rovnix. Одно из них — механизм обхода UAC с помощью техники, известной как mocking trusted directory.

Ее суть в следующем: с помощью Windows API зловред создает директорию C:\Windows \System32 (именно так, с пробелом после Windows). Затем копирует в нее легитимный подписанный исполняемый файл из C:\Windows\System32, который имеет право на автоматическое поднятие привилегий без отображения UAC-запроса (в данном случае — wusa.exe).

Помимо этого, используется DLL hijacking: в фейковую директорию помещается вредоносная библиотека c именем одной из импортируемых легитимным файлом библиотек (в данном случае — wtsapi32.dll). В результате при запуске из фейковой директории легитимный файл wusa.exe (а точнее, путь до него) пройдет проверку на доверенность из-за API GetLongPathNameW, который уберет символ пробела из пути. Тем не менее легитимный файл будет запущен из фейковой директории без UAC-запроса и загрузит вредоносную библиотеку с именем wtsapi.dll.

Кроме копирования в фейковую директорию легитимного системного файла и создания там вредоносной библиотеки, дроппер создает еще один файл с именем uninstall.pdg. После этого зловред создает и запускает bat-файлы, которые сначала запустят wusa.exe из фейковой директории, а затем «подчистят следы», удалив директорию и сам дроппер easymule.exe.

Развитие: те же и Rovnix

Файл uninstall.pdg явно содержит в себе упакованный исполняемый файл. Он предназначен для распаковки той самой вредоносной библиотекой, которая ранее была загружена с помощью wusa.exe и DLL hijacking.

Uninstall.pdg

Код вредоносной библиотеки минимален: экспортируемая функция WTSQueryUserToken, очевидно, не имеет функций, требуемых оригинальному wusa.exe, который импортирует ее. Вместо этого она читает файл uninstall.pdg, распаковывает и запускает оттуда исполняемый файл.

Код экспортируемой функции вредоносной библиотеки

Распакованный uninstall.pdg оказывается DLL с экспортируемой функцией BkInstall, что еще раз указывает на то, что в основе зловреда — утекший код Rovnix. Дальнейший анализ файла подтверждает это.

Uninstall.pdg содержит «приклеенные» исполняемые файлы, упакованные aPLib. При этом «склейка» шла при помощи утилиты FJ (также из набора Rovnix), о чем говорит алгоритм распаковки файлов и сигнатуры FJ, описывающие местоположение склейки в файле.

Сигнатура утилиты FJ

Приклеенные файлы — драйвер KLoader из утекшего набора Rovnix и бутлоадер. Uninstall.pdg распаковывает их, перезаписывает VBR бутлоадером и кладет рядом упакованный оригинальный VBR. Кроме того, на диск записывается драйвер-инжектор KLoader, цель которого — внедрить полезную нагрузку в запускаемые процессы.

Слева — исходный код вредоноса, справа — утекший исходный код Rovnix (kloader.c)

Как видно на скриншоте, исходный код зловреда не сильно отличается от оригинального. Видимо, оригинальный код компилировался для использования без VFS и стека протоколов для работы драйвера с сетью.

В исследуемом экземпляре драйвер инжектирует в процессы DLL, которая является тем самым загрузчиком, несвойственным Rovnix, о котором мы говорили в самом начале.

Таким образом, общая схема выполнения выглядит так.

Схема выполнения

Кульминация: загрузчик

Рассмотрим новый загрузчик подробнее. Первое, что бросается в глаза — pdb-путь в файле.

PDB-путь

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

Структура с функциями

После этого процесс получает доступ к объектам «Winsta0» и desktop «Default» для себя и всех процессов, созданных этим процессом, и создает поток с циклом коммуникации с C&C.

Создание потока коммуникации с C&C

Коммуникация с C&C

После создания потока зловред проверяет свое присутствие в системе с помощью OpenMutexA. Затем запускает цикл коммуникации с C&C, в рамках которого формируется пакет данных о зараженном устройстве. Он шифруется XOR с однобайтным ключом 0xF7 и отправляется на C&C.

Структура отправляемых данных

В ответ зловред получает исполняемый файл, который загружается в память. Управление передается на точку входа этого PE-файла.

Отображение загруженного PE-файла в памяти

Развязка: тестирование в самом разгаре

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

Пример другой версии загрузчика

Другие экземпляры загрузчика не используют буткит, однако применяют тот же метод обхода UAC. Судя по всему, в настоящее время загрузчик активно тестируют и оснащают различными средствами обхода защиты.

Также мы обнаружили экземпляры, которые могли служить полезной нагрузкой для загрузчика. Они содержат похожие pdb-пути и те же C&C, что и загрузчики. Интересно, что получение необходимых API адресов происходит по имени функции, которое получается по индексу из конфигурационной строки.

Получение адресов API

Эти зловреды могут по команде C&C запустить exe-файл с указанными параметрами, записать звук с микрофона и отправить аудиофайл владельцу, выключить или перезагрузить компьютер и т. д.

Обработка полученной команды

Название модуля (E:\LtdProducts\Project\newproject\64bits\64AllSolutions\Release\PcConnect.pdb) говорит о том, что разработчики позиционируют его как бэкдор, который к тому же может обладать элементами Trojan-Spy, судя по строкам из конфигурации.

Фрагмент конфигурации, строки на китайском означают «Текущий пользователь:», «пользовательский пароль:», «***Ниже приведены учетная запись системы и пароль [%04d-%02d-%02d %02d:%02d:%02d]***»

Эпилог

Проведенный анализ вредоносного ПО, маскирующегося под «новую инициативу Всемирного банка», показал, что даже хорошо известные угрозы вроде Rovnix могут преподнести пару сюрпризов, когда их исходный код попадает в открытый доступ. Готовые  средства обхода защиты системы позволяют злоумышленникам уделять больше внимания возможностям собственного зловреда и добавлять «плюшки» к исходному коду — например, обход UAC.

Продукты «Лаборатории Касперского» детектируют эту угрозу и связанные с ней модули как Trojan.Win32.Cidox, Trojan.Win32.Generic, Trojan.Win32.Hesv, Trojan.Win32.Inject.

IOC

7CFC801458D64EF92E210A41B97993B0
E2A88836459088A1D5293EF9CB4B31B7
bamo.ocry[.]com:8433
45.77.244[.]191:8090
45.77.244[.]191:9090
45.77.244[.]191:5050
45.76.145[.]22:8080
149.28.30[.]158:443

Публикации на схожие темы

Добавить комментарий

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