PhantomRShell: новый бэкдор использует дизассемблер для сокрытия файлов - под угрозой компании России и Беларуси

information security

Вирусные аналитики давно привыкли к однообразию: за яркими названиями вредоносов чаще всего скрывается привычный набор методов - загрузчик, закрепление в системе, канал связи с командным центром и небольшая обфускация. Но иногда появляются образцы, которые действительно удивляют. Именно таким оказался PhantomRShell - бэкдор группировки PhantomCore (также известной как Head Mare), нацеленной на компании из России и Беларуси. Главная особенность этого инструмента - использование встроенного дизассемблера для перехвата системных вызовов. Это позволяет скрывать вредоносные файлы на диске так, что их не видят ни пользователь, ни защитные средства. Фактически файл присутствует, но для средств анализа его не существует.

Описание

Цепочка заражения начинается с фишингового вложения, замаскированного под архив с заданием на оценку. На первый взгляд это обычный ZIP-файл, но при открытии в HEX-редакторе обнаруживается иная сигнатура - MZ/PE-заголовок. Перед нами архив-полиглот, содержащий два дополнительных заголовка: DLL и PDF. При распаковке извлекается третий компонент - ярлык LNK, который и запускает всю последовательность.

Ярлык, маскирующийся под PDF-документ, при открытии инициирует выполнение PowerShell-скрипта. Этот скрипт сначала закрепляется в системе через технику COM-Hijacking - перехват COM-объектов. Он создаёт ключ в реестре по пути HKCU…, подменяя легитимную библиотеку Windows.StateRepositoryPS.dll на вредоносную библиотеку, которая будет загружаться в контексте доверенных процессов, например, explorer.exe. Такой подход не только обеспечивает закрепление, но и частично обходит механизмы защиты вроде UAC и AppLocker.

Затем скрипт извлекает основную вредоносную DLL из исходного архива, пропуская первые 16 байт, чтобы обойти сигнатурный анализ YARA. Извлечённый файл winnt64_.dll сохраняется в каталог ProgramData. После этого пользователю открывается PDF-приманка - безобидный документ приложения к договору. Это классический приём отвлечения внимания: жертва получает ожидаемый файл и не подозревает, что основная нагрузка уже внедрена.

Вирусный аналитик Александр из компании Bastion опубликовал подробный разбор внутренней механики PhantomRShell. Главный компонент - модуль Mhook, реализующий перехват системных API-функций (интерфейсов прикладного программирования). Вместо простой замены первых байт функции Mhook выполняет полноценный inline-hook: с помощью дизассемблера (disasm-lib) разбирает машинный код, находит реальное начало функции, корректно копирует инструкции, выделяет trampoline-блок в памяти рядом с целевой функцией, а затем устанавливает переход на собственную функцию-обработчик. Важно, что во время записи патча временно приостанавливаются все остальные потоки процесса, чтобы избежать состояния гонки.

Конкретно в PhantomRShell перехватывается функция NtQueryDirectoryFile - она возвращает список содержимого каталога. Если в имени файла встречается строка "winnt64_.dll", то соответствующая запись удаляется из возвращаемого списка (по аналогии с методом pop() в связном списке). Таким образом, вредоносная библиотека, находящаяся в папке ProgramData, становится невидимой для проводника и команд DIR - её нельзя обнаружить стандартными средствами. Лишь при прямом обращении к файлу по полному пути (например, через cmd.exe, куда библиотека не внедрена) файл отображается.

Отдельного внимания заслуживает механизм скрытого хранения и расшифровки конфигурации. Ключевые данные (IP-адрес командного сервера, строка запуска cmd.exe и другие параметры) хранятся не в глобальных переменных, а в TLS - локальном хранилище потока, доступном через структуру TEB (блок окружения потока). Расшифровка происходит неявно: функция дешифровки помещена в секцию .CRT$XCU, которая вызывается рантаймом Visual C++ ещё до передачи управления основной логике DLL. То есть строки становятся доступны до того, как разработчик вообще увидит код, что серьёзно усложняет статический анализ.

После подготовки конфигурации вредонос генерирует уникальный GUID для идентификации узла, собирает имя компьютера и домена, создаёт рабочую директорию %ProgramData%\IntelHVD и запускает отдельный поток для связи с C2 (командным центром). Сетевое взаимодействие построено по pull-модели: заражённая машина регулярно отправляет GET-запрос на адрес http://31.56.206[.]116/poll с параметрами id, hostname и domain, замаскированными под обычную веб-форму. В ответ сервер возвращает команды, разделённые символом |. Поддерживаются две основные команды: выполнение произвольных команд через cmd.exe (создаётся процесс cmd.exe /c) и скачивание файлов на узел жертвы. Результат выполнения отправляется отдельным POST-запросом на эндпоинт /result с телом в формате application/x-www-form-urlencoded.

Хотя команды стандартны для бэкдоров, реализация PhantomRShell выделяется необычной комбинацией методов. Около 90% кода функции взаимодействия с сервером составляет "мусорная" обфускация, а также вызовы через RUNTIME, что затрудняет декомпиляцию даже в новых версиях IDA Pro. После ручного восстановления логики становится видна классическая схема, но сам факт такой маскировки говорит о высоком уровне подготовки разработчиков.

Подводя итоги, можно сказать, что PhantomRShell - продуманный инструмент, который превращает техники, обычно используемые исследователями для анализа, в оружие скрытности. Использование встроенного дизассемблера и перехвата системных вызовов позволяет злоумышленникам долгое время оставаться незамеченными. Компании из России и Беларуси, особенно те, кто является целью группировки PhantomCore, должны обратить внимание на нестандартные методы сокрытия и усилить контроль целостности системных вызовов и процессов, а также внедрить мониторинг поведения, а не только сигнатурный анализ.

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

IPv4 Port Combinations

  • 31.56.206.116:80

URLs

  • http://31.56.206.116/poll

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