Буткит 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
Старый boot лучше новых двух