В апреле 2025 года Microsoft исправила 121 уязвимость в своих продуктах. Среди них, по данным компании, только одна использовалась в реальных атаках на момент выхода патча — CVE-2025-29824. Эксплойт к этой уязвимости запускало вредоносное ПО PipeMagic, которое мы впервые обнаружили в декабре 2022 года в кампании с применением вымогателя RansomExx. Позже мы увидели его снова в сентябре 2024 года в атаках на организации в Саудовской Аравии. Примечательно, что это была та же версия PipeMagic, что и в 2022 году. Мы продолжаем отслеживать активность зловреда. В частности, в 2025 году наши решения предотвратили заражение организаций в Бразилии и Саудовской Аравии.
Этот отчет стал результатом совместного исследования с руководителем группы исследования уязвимостей BI.ZONE, в рамках которого мы проследили развитие PipeMagic — от первого обнаружения в 2022 году до новых инцидентов в 2025 году — и выявили ключевые изменения в тактиках его операторов. Коллеги из BI.ZONE, в свою очередь, провели технический анализ самой уязвимости CVE-2025-29824.
Предыстория
PipeMagic — это бэкдор, который мы впервые обнаружили в декабре 2022 года при исследовании вредоносной кампании с участием RansomExx. Жертвами атаки стали промышленные компании в Юго-Восточной Азии. Для проникновения в инфраструктуру злоумышленники использовали уязвимость CVE-2017-0144. Загрузчик бэкдора представлял собой троянизированное приложение Rufus для форматирования USB-дисков, а сам PipeMagic поддерживал два режима работы — как полноценный бэкдор, предоставляющий удаленный доступ, и как сетевой шлюз — и обеспечивал исполнение широкого набора команд.
В октябре 2024 года организации в Саудовской Аравии столкнулись с новой волной атак PipeMagic. В этот раз для первоначального проникновения злоумышленники не эксплуатировали уязвимости, а использовали в качестве приманки поддельное приложение-клиент для ChatGPT. Оно было написано на Rust и использовало фреймворки Tauri для отрисовки графических приложений и Tokio для асинхронного выполнения задач. Однако никакой полезной функциональности в нем не оказалось, и при запуске оно просто показывало пользователю пустой экран.
| MD5 | 60988c99fb58d346c9a6492b9f3a67f7 |
| Название файла | chatgpt.exe |
Одновременно с этим приложение извлекало из своего кода зашифрованный по алгоритму AES массив размером 105 615 байт, расшифровывало и выполняло его. Результат представлял собой шелл-код, отвечающий за загрузку исполняемого файла. Для затруднения анализа злоумышленники использовали хэширование API-функций с помощью алгоритма FNV-1a, и шелл-код динамически разрешал их адреса через GetProcAddress. Далее происходило выделение памяти, релокация необходимых смещений в таблице импортов и, наконец, запуск точки входа бэкдора.
Одной из уникальных особенностей PipeMagic является генерация случайного массива длиной 16 байт, который используется для создания именованного канала в формате
\\.\pipe\1.<hex string>. После этого запускается поток, который постоянно создает этот канал, пытается прочитать из него данные и уничтожает. Такой способ коммуникации нужен бэкдору для передачи зашифрованной полезной нагрузки и уведомлений. При этом для взаимодействия с именованным каналом используется стандартный сетевой интерфейс с IP-адресом
127.0.0.1:8082.
Для скачивания модулей (PipeMagic обычно задействует несколько плагинов, скачиваемых с C2-сервера) злоумышленники использовали домен, размещенный у облачного провайдера Microsoft Azure, со следующим именем:
hxxp://aaaaabbbbbbb.eastus.cloudapp.azure[.]com.
PipeMagic в 2025 году
В январе 2025 года мы обнаружили новые заражения в Саудовской Аравии и Бразилии. При дальнейшем исследовании было замечено обращение к домену hxxp://aaaaabbbbbbb.eastus.cloudapp.azure[.]com, который навел нас на мысль о связи этой атаки с PipeMagic. Позже мы нашли и сам бэкдор.
Изначальный загрузчик
| MD5 | 5DF8EE118C7253C3E27B1E427B56212C |
| Название файла | metafile.mshi |
В этой атаке в роли загрузчика выступал файл формата Microsoft Help Index File. Обычно в таких файлах находится код, который читает данные из файлов-контейнеров .mshc, содержащих справочные материалы Microsoft. В случае загрузчика при первом просмотре видно, что он содержит обфусцированный код на C# и очень длинную шестнадцатеричную строку. Пример запуска такой нагрузки:
|
1 |
c:\windows\system32\cmd.exe "/k c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe c:\windows\help\metafile.mshi" |
Код на C# используется для двух целей — расшифровки и исполнения шелл-кода, который зашифрован с помощью поточного алгоритма RC4 с ключом 4829468622e6b82ff056e3c945dd99c94a1f0264d980774828aadda326b775e5 (шестнадцатеричная строка). После расшифровки полученный шелл-код исполняется при помощи WinAPI EnumDeviceMonitor. Первые два параметра функции содержат нули, а в качестве третьего передается указатель на функцию, в который подставляется указатель на расшифрованный шелл-код.
Внедренный шелл-код представляет собой исполняемый код для 32-битных систем Windows. Он загружает незашифрованный исполняемый файл, который находится внутри шелл-кода. Для динамического получения адресов системных API, как и в версии 2024 года, используется парсинг таблицы экспортов и хэширование FNV-1a.
Загрузчик (ChatGPT)
| MD5 | 7E6BF818519BE0A20DBC9BCB9E5728C6 |
| Название файла | chatgpt.exe |
В 2025 году были также обнаружены образцы загрузчика PipeMagic, имитирующие клиент ChatGPT. Это приложение похоже на то, которое злоумышленники применяли в атаках на организации в Саудовской Аравии в 2024 году. В нем тоже используются фреймворки Tokio и Tauri, причем, судя по строкам с информацией об авторских правах и метаданным заголовка PE, исполняемый файл был собран в 2024 году, хотя впервые его обнаружили в кампании 2025 года. Кроме того, в данном случае используется та же версия библиотеки libaes, что и в атаках годом ранее. По поведению и структуре образец также аналогичен приложению, которое мы видели в октябре 2024 года.
Загрузчик с использованием DLL Hijacking
| MD5 | E3C8480749404A45A61C39D9C3152251 |
| Название файла | googleupdate.dll |
Помимо изначального метода исполнения при помощи файла .mshi, который запускается через msbuild, атакующие также использовали более популярный метод с расшифровыванием нагрузки и ее внедрением посредством исполняемого файла, который не нуждается во вспомогательных утилитах для запуска. При этом сам исполняемый файл был легитимным (в рамках данной кампании мы видели вариант с файлом обновления Google Chrome), а вредоносная логика была реализована при помощи библиотеки, которую он подгружает. Для этого на диске рядом с легитимным приложением размещалась вредоносная DLL, содержащая функцию, которую оно экспортирует (метод DLL Hijacking).
Стоит отметить, что в конкретном образце библиотеки экспортируемые функции не были вредоносными. Вредоносный код содержала функция инициализации (DllMain), которая всегда вызывается при загрузке DLL, так как инициализирует внутренние структуры, файловые дескрипторы и т. д.
В первую очередь загрузчик читает данные из зашифрованного файла, путь к которому злоумышленники передают ему через аргументы командной строки.
Далее содержимое файла расшифровывается с помощью симметричного шифра AES в режиме CBC, при этом ключ равен 9C 3B A5 B2 D3 22 2F E5 86 3C 14 D5 13 40 D7 F9, а вектор инициализации (IV) — 22 1B A5 09 15 04 20 98 AF 5F 8E E4 0E 55 59 C8.
Расшифрованный код библиотека внедряет в память и передает ему управление, а исходный файл впоследствии удаляется. В вариантах, обнаруженных во время анализа, полезной нагрузкой был шелл-код, аналогичный тому, что был обнаружен в 2024 году во время анализа вредоносной кампании с клиентом для ChatGPT.
Внедренный PE
| MD5 | 1A119C23E8A71BF70C1E8EDF948D5181 |
| Название файла | — |
Во всех методах загрузки, описанных выше, полезной нагрузкой был исполняемый файл для 32-битных систем Windows. Любопытно, что во всех случаях этот файл поддерживал графический режим, хотя и не имел графического интерфейса. Этот исполняемый файл и есть бэкдор PipeMagic.
Образец первым делом генерирует 16 случайных байт для создания имени для канала (pipe), который он будет впоследствии использовать. Имя создается по тому же принципу, что и в оригинальном PipeMagic, который мы видели в 2024 и 2022 годах.
Сам образец не отличается от тех, что были замечены ранее, однако в нем появилась строка с заранее заданным путем канала \.\pipe\magic3301. При этом в самом бэкдоре она не используется в явном виде (то есть он не взаимодействует с каналом с таким именем).
Кроме того, аналогично образцам, найденным в 2022 и 2024 годах, в этой версии создается канал общения по адресу 127.0.0.1:8082.
Обнаруженные модули
В ходе исследования атак 2025 года мы обнаружили дополнительные плагины, используемые в данной вредоносной кампании. Всего было получено три модуля, реализующих различную функциональность, не присутствующую в основном бэкдоре. Все модули представляют собой исполняемые файлы для 32-битных систем Windows.
Модуль асинхронной коммуникации
Модуль реализует асинхронную модель ввода-вывода. Для этого используется механизм очереди ввода-вывода и портов завершения ввода-вывода (Completion Ports).
Сразу при входе в плагин происходит обработка команд. На данном этапе поддерживается пять команд:
| Идентификатор команды | Описание |
| 0x1 | Инициализация и создание потока, постоянно получающего изменения из очереди ввода-вывода |
| 0x2 | Завершение работы плагина |
| 0x3 | Обработка файлового ввода-вывода |
| 0x4 | Завершение файловой операции по идентификатору |
| 0x5 | Завершение всех файловых операций |
Хотя изменения ввода-вывода через порты завершения обрабатываются в отдельном потоке, основной поток будет дожидаться завершения файловой операции — поэтому данную модель нельзя назвать по-настоящему асинхронной.
Если была выбрана команда с идентификатором 0x3 (обработка файлового ввода-вывода), управление переходит на внутренний обработчик. Для этой команды существует набор подкоманд, который описан ниже. Вместе с подкомандой эта команда имеет длину больше или равную 4 байтам.
| Идентификатор команды | Описание |
| 0x1 | Открытие файла в заданном режиме (чтение, запись, запись в конец файла и т. д.) |
| 0x3 | Запись в файл |
| 0x4, 0x6 | Чтение из файла |
| 0x5 | Изменение состояния флага |
| 0x7 | Запись в файл данных, полученных от другого плагина |
| 0x9 | Закрытие файла |
| 0xB | Дамп всех открытых файлов |
Команда с идентификатором 0x5 предположительно реализована для выставления флага ошибки чтения. Если выставлен этот флаг, операция чтения невозможна. При этом модуль не поддерживает команды, снимающие флаг, то есть по факту эта команда просто блокирует чтение из файла.
Для управления открытыми файлами используемые файловые дескрипторы хранятся в двусвязном списке в глобальной памяти.
Загрузчик
Данный модуль, обнаруженный в одном из заражений, отвечает за внедрение дополнительной нагрузки в память и ее исполнение.
В первую очередь при запуске создается канал с названием \.\pipe\test_pipe20.%d, где в форматную строку подставляется уникальный идентификатор процесса, внутри которого находится внедренный код. Далее данные из этого канала в бесконечном цикле читаются и отправляются на обработчик команд.
Уникальный идентификатор команды содержится в первых четырех байтах данных и имеет следующие возможные значения.
| Идентификатор команды | Описание |
| 0x1 | Чтение данных из канала или отправка данных в канал |
| 0x4 | Инициирование нагрузки |
Загружаемая нагрузка — это исполняемый файл для 64-битных систем Windows. Обработчик команд парсит этот файл и извлекает еще один исполняемый файл из секции ресурсов. В дальнейшем этот файл проходит все процедуры загрузки — получение адресов импортируемых функций, релоцирование и т. д. При этом для получения адресов системных методов используется не хэширование, а простое сравнение имен.
Исполняемый файл обязан экспортировать функцию под названием DllRegisterService. После загрузки вызывается его точка входа (для инициализации внутренних структур), а затем — эта функция. Она предоставляет интерфейс со следующими возможными командами:
| Идентификатор команды | Описание |
| 0x1 | Инициализация |
| 0x2 | Получение данных от модуля |
| 0x3 | Обратный вызов на получение данных от нагрузки |
Инжектор
Данный модуль также представляет собой исполняемый файл для 32-битных систем Windows. Он отвечает за запуск полезной нагрузки — исполняемого файла, изначально написанного на C# (.NET).
Для этого сначала создается канал с именем \.\pipe\0104201.%d, где в форматную строку подставляется уникальный идентификатор процесса, в котором выполняется модуль.
Из канала образец считывает данные, в которых ищет приложение на .NET. Интересной особенностью является то, что, в отличие от других модулей, вычитывание происходит не в отдельном потоке, а однократно.
Перед загрузкой полученного приложения модуль делает еще один важный шаг. Чтобы нагрузка не была обнаружена через интерфейс AMSI, злоумышленники сначала загружают локальную копию библиотеки amsi. Далее они открывают для записи участок памяти, где содержатся функции AmsiScanString и AmsiScanBuffer, и патчат эти функции. Например, вместо изначального кода функции AmsiScanString в памяти оказывается функция-пустышка, которая всегда возвращает 0 (то есть помечает файл как безопасный).
После этого образец подгружает библиотеку mscoree.dll. Поскольку злоумышленники не знают целевой версии библиотеки, они во время исполнения проверяют версию среды выполнения .NET, установленную на машине жертвы. Плагин поддерживает версии v4.0.30319 и v2.0.50727. Если на устройстве установлена одна из них, происходит запуск полезной нагрузки через интерфейc _Assembly, реализуемый в mscoree.dll.
Постэксплуатация
После компрометации выбранной машины перед атакующими открывается широкий спектр возможностей по горизонтальному перемещению и получению данных учетных записей. Например, мы обнаружили в телеметрии запущенную в одном из заражений команду:
|
1 |
dllhost.exe $system32\dllhost.exe -accepteula -r -ma lsass.exe $appdata\FoMJoEqdWg |
Исполняемый файл dllhost является частью операционной системы Windows и не поддерживает флаги командной строки. Хотя на основании телеметрии невозможно однозначно определить способ подмены, набор флагов характерен для утилиты procdump.exe (входит в набор утилит Sysinternals). В данном случае утилита используется для дампа памяти процесса LSASS в файл, указанный в качестве последнего аргумента (в данном случае $appdata\FoMJoEqdWg).
В дальнейшем, имея дамп памяти процесса LSASS, злоумышленники могут получить учетные данные на скомпрометированном устройстве и, как следствие, применить различные векторы горизонтального перемещения по сети.
Стоит заметить, что в статье от Microsoft, посвященной атакам с использованием CVE-2025-29824, упоминается точно такой же метод получения памяти LSASS с использованием утилиты ProcDump.
Выводы
Повторное обнаружение PipeMagic в атаках на организации в Саудовской Аравии и появление его в Бразилии свидетельствуют о том, что вредоносное ПО по-прежнему активно и злоумышленники продолжают развивать его функциональность. В версиях, зафиксированных в 2025 году, наблюдаются усовершенствования относительно версии 2024 года, направленные на устойчивое закрепление в системах жертв и горизонтальное перемещение по внутренним сетям.
В атаках 2025 года злоумышленники использовали утилиту ProcDump для извлечения памяти процесса LSASS — аналогично методике, описанной Microsoft в контексте эксплуатации уязвимости CVE-2025-29824. Особенности этой уязвимости подробно проанализировали Bi.Zone во второй части нашего совместного исследования.
IoC
Домены
aaaaabbbbbbb.eastus.cloudapp.azure[.]com
Хэши
5df8ee118c7253c3e27b1e427b56212c metafile.mshi
60988c99fb58d346c9a6492b9f3a67f7 chatgpt.exe
7e6bf818519be0a20dbc9bcb9e5728c6 chatgpt.exe
e3c8480749404a45a61c39d9c3152251 googleupdate.dll
1a119c23e8a71bf70c1e8edf948d5181
bddaf7fae2a7dac37f5120257c7c11ba
Pipe names
\.\pipe\0104201.%d
\.\pipe\1.<16-байтовая шестнадцатеричная строка>















Эволюция бэкдора PipeMagic: от инцидента с RansomExx до CVE-2025-29824