В апреле 2025 года наша команда в рамках проведения Compromise Assessment в одном из органов исполнительной власти обнаружила вредоносный файл в каталоге с резервной копией ViPNet:

C:\Users\Администратор\Desktop\*\full_backup\ViPNet Administrator\*\ccc\update_bad\
driv_fsa\driv_fsa.lzh//driv_fs.lzh//msinfo32.exe

Анализ файлов из архива driv_fsa.lzh показал, что пакет обновления ViPNet содержал вредоносный инструментарий, который в процессе выполнения загружал из зашифрованного файла в память атакуемой системы вредоносный бэкдор. Его загрузчик был скомпилирован в ноябре 2021 года. Этот факт вернул нас в 2021 год, когда при расследовании инцидента в инфраструктуре заказчика мы столкнулись с аналогичной картиной. На конференции PHDays-11 в докладе «Как Жуи и Диндин провели прошедший год в России», посвященном инструментарию, а также тактикам и техникам восточно-азиатских APT-группировок за 2021 год, мы уже рассказывали в том числе об этой атаке, где злоумышленники использовали недостаток безопасности в системе обновления ПО ViPNet для доставки и запуска вредоносной полезной нагрузки.

Все новое — хорошо забытое старое. Недавно коллеги из «Лаборатории Касперского» выпустили краткий отчет о бэкдоре, который мимикрировал под обновления ПО ViPNet и использовал аналогичные схему запуска, загрузчик и, возможно, бэкдор.

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

Краткое содержание отчета:

  • Разобрали процесс обновления ViPNet для лучшего понимания механизма запуска бэкдора.
  • Описали и сравнили цепочки запуска ВПО из наших реагирований 2021 и 2025 годов. В реагировании 2025 года подменяется не динамическая библиотека, а exe-файл.
  • Загрузчик из новой цепочки запуска был скомпилирован в 2021 году и представляет собой интерпретатор байт-кода, который хранится в зашифрованном виде во внешнем файле.
  • Вредоносное ПО, доставляемое на ViPNet Client, являлось бэкдором, среди интересных функций которого в том числе есть отключение компонента ViPNet «Контроль приложений», позволяющего следить и регулировать сетевую активность приложений, установленных на системе жертвы.
  • В рамках атрибуции предположили, что за использованием таких редких техник и инструментов могут стоять азиатские APT-группировки.
  • В результате исследования этой активности мы подготовили ряд рекомендаций для обнаружения и противодействия подобным видам заражения.

Цепочка заражения через обновления ViPNet

Процесс обновления ViPNet Client

Для полного понимания процесса доставки вредоносной полезной нагрузки через ViPNet рассмотрим, как работает его служба обновлений.

Обновление происходит с узла центра управления сетью (ЦУС).

Обновление программного обеспечения отправляется на сетевые узлы в виде файлов формата LZH:

Отправка обновления на узел клиента из интерфейса ЦУС
Отправка обновления на узел клиента из интерфейса ЦУС

Пакет обновления должен обязательно содержать следующие файлы:

  • action.inf — содержит команды, выполняемые для установки обновления.

Для запуска исполняемого файла используется команда extra_command с указанием необходимых аргументов командной строки.

При наличии вложенного архива для передачи управления на него используется команда archive_archive.

  • list.data — текстовый файл, содержащий имена всех файлов обновления и соответствующие им контрольные суммы.
  • Исполняемый файл обновления или вложенный lzh-архив.
Содержимое архива легитимного обновления
Содержимое архива легитимного обновления


Перед запуском исполняемого файла проверяется наличие у него валидной цифровой подписи, а также факт подписания вендором InfoTeCS:

Цифровая подпись файлов InfoTeCS
Цифровая подпись файлов InfoTeCS

Расследование из 2021 года

Для того чтобы разобраться в цепочке запуска нового бэкдора, рассмотрим, как выглядел вредоносный пакет обновления в кейсе 2021 года.

В системе обновлений ViPNet Client присутствуют две обнаруженных нами уязвимости. Первая уязвимость BDU:2022-03008 связана с недостаточной проверкой цифровой подписи файлов.

Вторая уязвимость BDU:2022-03009 позволяет атакующим подменить в архиве обновления динамическую библиотеку для запуска атакующими произвольного вредоносного кода.

Обе уязвимости были включены в БДУ ФСТЭК.

В целом эксплоит заключается в том, что при запуске исполняемого файла система обновлений проверяет только запускаемый файл и не проверяет остальные файлы в цепочке выполнения, что позволяет атакующим запустить вредоносный код с помощью подписанного InfoTeCS exe-файла, подверженного DLL Hijacking, и подмененной динамической библиотеки, функции которой импортируются подписанным exe-файлом.

Схема запуска вредоносной нагрузки в расследовании 2021 г.
Схема запуска вредоносной нагрузки в расследовании 2021 г.

Таким образом, злоумышленникам оставалось найти такую пару файлов и включить ее в архив обновления:

Содержимое архива вредоносного обновления
Содержимое архива вредоносного обновления
  • Lha.exe — легитимный исполняемый файл, подписанный InfoTeCS и подверженный DLL Hijacking;
  • Unlha32.DLL — подмененная динамическая библиотека без цифровой подписи, содержащая вредоносный код, функции которой импортируются файлом Lha.exe.

В 2021 году мы обнаружили несколько вариантов полезной нагрузки, доставляемой на хосты с ViPNet Client и реализующей следующие функции:

  • Запуск cmd.exe, исполнение команд, предназначенных для разведки, и отправка вывода на сервер злоумышленников.
  • Зачистка файлов журналов VipNet Client.
  • Обход компонента ViPNet «Контроль приложений».
  • Реализация reverse shell.
  • Сбор файлов с основной информацией, связанной с работой ViPNet Client:
    • ключевая информация;
    • файлы конфигурации;
    • файлы баз данных (электронная почта, настройки ViPNet Client Firewall и др.);
    • текстовые файлы и файлы документов в папках InfoTeCS.
  • Передача собранных данных посредством сформированного транспортного конверта по сети ViPNet.

Рассмотрим более подробно последний пункт.

Для эксфильтрации собранных данных с узлов без доступа к интернету на подконтрольные атакующим узлы, имеющие такой доступ, использовался транспортный модуль ViPNet MFTP:

Выдержка из руководства администратора к ViPNet MFTP
Выдержка из руководства администратора к ViPNet MFTP

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

Формирование конверта начинается с копирования жестко закодированных во вредоносный файл имени конверта "m0yi9)$z.ctl" и адресов отправителя/получателя в заголовок конверта.

Жестко закодированное имя mftp-конверта
Жестко закодированное имя mftp-конверта

При наличии журналов MFTP на координаторе имя конверта, закодированное во вредоносный имплант, предоставляет возможность отследить передачу конверта с атакуемого узла на узел подконтрольный злоумышленникам:

Транспортные пакеты в журнале MFTP (веб-интерфейс координатора)
Транспортные пакеты в журнале MFTP (веб-интерфейс координатора)

Следующий этап заключается в генерации ключа шифрования:

Генерация ключа шифрования
Генерация ключа шифрования

Из листинга функции видно, что ключ представляет собой псевдослучайную последовательность чисел, которая создается с использованием комбинации функций srand и rand. Каждому значению инициализатора (seed) соответствует своя уникальная последовательность чисел.

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

Таким образом, структура транспортного конверта злоумышленников имеет следующий вид:

Структура конверта с эксфильтрованными данными
Структура конверта с эксфильтрованными данными

Seed помещается в конверт для восстановления ключа шифрования, которым зашифрованы данные, собранные с системы.

После формирования конверта, он помещается в директорию \InfoTeCS\ViPNet Client\out, которая каждые 3 секунды отслеживается транспортной службой MFTP на предмет появления конвертов, и если конверт найден, то отправляет его на узел назначения через координатор.

Расследование из 2025 года

Вернемся к кейсу с новой цепочкой выполнения.

На этот раз архив с вредоносным обновлением выглядел следующим образом:

Содержимое архива вредоносного обновления
Содержимое архива вредоносного обновления

Команда extra_command из файла action.inf инициирует запуск файла lumpdiag.exe.

Описание утилиты lumpdiag из руководства пользователя ViPNet Client
Описание утилиты lumpdiag из руководства пользователя ViPNet Client

Несмотря на то что утилита lumpdiag является легитимной и подписанной InfoTeCS, она подвержена технике подмены выполнения и при запуске с параметром --msconfig позволяет атакующему загрузить подмененный файл msinfo32.exe c исполнением вредоносного кода:

Схема запуска вредоносной нагрузки в расследовании 2025 г.
Схема запуска вредоносной нагрузки в расследовании 2025 г.

Таким образом, цепочка выполнения из кейса с реагированием 2025 года практически полностью аналогична цепочке из реагирования 2021-го с той лишь разницей, что подменяется не динамическая библиотека, а exe-файл.

MD5

12d1f26a5e0b691766fe008dfc30dc58

SHA1

e34cd687862295f6c930cabf07b69e82981bca5a

SHA256

e08cd152f069c3f5d3a52a06ee8a786c6bbf7f39500efc7412843767a898c9e7

File name

msinfo32.exe

File type

PE32 executable for MS Windows 5.01 (GUI), Intel i386, 4 sections

File size

6144 bytes (6KB)

Comp. timestamp

2021-11-30 15:30:02 UTC

Судя по SI-меткам файлов загрузчика и полезной нагрузки, вредоносное обновление было доставлено на систему летом 2022 года, поэтому приведенная выше дата компиляции загрузчика достоверна.

Файл msinfo32.exe является загрузчиком уже финальной полезной нагрузки, которая хранится в файле settings.log. По своей сути файл msinfo32.exe является интерпретатором некоторого байт-кода, который хранится во внешнем файле. Это специально сделано для усложнения анализа функциональности импланта. Всего предусмотрено 12 команд и 1024 ячейки памяти по четыре байта в качестве хранения данных. Среди инструкций можно выделить следующие группы: работа с памятью, подгрузка библиотек и функций, вызов функции и одна арифметическая операция сложения. Этого набора достаточно, чтобы загрузить в память полезную нагрузку и передать на нее управление.

Нагрузка же хранится в виде инструкций, которые исполняет msinfo32.exe. Первой командой всегда идет расшифровка всех данных в этом файле. После этого управление передается уже расшифрованным инструкциям. Если внимательно присмотреться к ходу работы байт-кода, то можно увидеть знакомые шаблоны загрузки и разбора данных. Этот подход очень похож на загрузку в память PE-файла. Здесь есть таблица импортов и релокации, присутствует разделение на разные секции кода и данных. Из этого можно сделать вывод, что у злоумышленников есть протектор, который упаковывает исполняемый PE-файл в виде байт-кода, удаляя все заголовки. Это делает анализ исполняемого файла более затруднительным, чем если бы это был полноценный исполняемый файл для Windows.

Содержимое файла settings.log
Содержимое файла settings.log

После расшифровки содержимого settings.log и подготовки всего необходимого для работы бэкдор в виде шелл-кода загружается в память.

Бэкдор может работать как в пассивном режиме, используя bind для прослушивания жестко закодированного в имплант порта, так и в активном режиме, подключаясь к серверу управления, который также закодирован в образец. В нашем случае адрес был приватным.

Приведем некоторые функции бэкдора:

  • Сбор информации о системе жертвы.
  • Дамп реестра с системы жертвы.
  • Загрузка файлов с системы жертвы на сервер злоумышленников.
  • Рекурсивный сбор информации об атрибутах файлов в директории:
    • Filename
    • FileSizeHigh
    • FileSizeLow
    • CreationTime
    • LastAccessTime
    • LastWriteTime
  • Запуск произвольного процесса (командная строка запускаемого процесса передается с сервера управления).
  • Запуск вредоносных компонентов, переданных с сервера управления (шелл-код передается с сервера управления).

Кроме того, для обхода Reverse Firewall (ViPNet «Контроль приложений»), встроенного в ViPNet, бэкдор посылает на связанный с модулем драйвер ITCSRF.sys код управления, который соответствует API для отключения ViPNet Reverse Firewall.

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

Атрибуция

С высокой степенью уверенности мы связываем атаки 2021–2022 годов, упомянутые в статье, с активностью восточно-азиатских APT-группировок BlueTraveller (aka TaskMasters) и TA428. Наши выводы основаны на результатах расследования, проведенного в 2021 году в инфраструктуре заказчика. Тогда мы обнаружили не только вредоносные программы, связанные с ViPNet, но и образцы, которые мы и наши коллеги по отрасли относим к вышеупомянутым группировкам.

Эти образцы включают в себя:

  • Webdav-O;
  • Dropbox-O;
  • Mail-O.

С другой стороны, атаки 2025 года, о которых сообщили на минувшей неделе коллеги по индустрии, мы не можем атрибутировать к конкретным APT-группировкам — для этого слишком мало данных. Но с высокой степенью уверенности считаем, что они также связаны с деятельностью восточно-азиатских APT-групп или группы по следующим причинам:

  • Использование непопулярной уязвимости в механизме обновления ViPNet.
  • Использование схемы запуска бэкдора вместе с аналогичными загрузчиками (судя по размерам файлов), которые, скорее всего, создаются кастомными протекторами.
  • Использование специфического способа хранения и доставки нагрузки (описан ниже).

Загрузчик считывает файл settings.log и расшифровывает его содержимое. Файл начинается с байта 0xFF, за которым следует 16-байтовый ключ. Такой формат хранения зашифрованной нагрузки в отдельном файле мы наблюдаем в последних атаках с применением ShadowPad Light (aka DEED RAT), который традиционно связывают с деятельностью APT-группировок из Азии. В последних версиях ShadowPad Light используется dbindex.dat, в котором первые 16 байтов — ключ для расшифровки. Впрочем, сами алгоритмы шифрования у ShadowPad Light и атак, связанных с VipNet-бэкдором, различаются.

Все это в совокупности позволяет сравнительно уверенно предполагать, что за атаками, которые маскируются под обновления ViPNet, как в 2021-м, так и в 2025-м стоят восточно-азиатские APT-группы или группа.

Заключение

В результате исследования мы описали два кейса заражения через обновления ПО ViPNet и связали эти атаки с деятельностью кластера восточно-азиатских APT-групп. Рассмотренная схема запуска бэкдора показывает нам, что атакующие продолжают использовать особенности работы ПО ViPNet, о которых известно с 2021 года.

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

В свою очередь, возможность отправки кодов управления произвольным драйверам ПО ViPNet позволяет атакующим не только изменять настройки Reverse Firewall, но и конфигурировать по своему усмотрению другие механизмы защиты ViPNet.

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

Кроме этого (на случай, если атакующие все же обнаружат альтернативный способ использования системы обновления ViPNet), для предотвращения запуска вредоносного обновления можно отключить настройку «Устанавливать обновления автоматически» в системе обновлений ViPNet Client. Это затруднит реализацию атаки.

IOCs

File hashes

md5

228266c8badb851579479b33b5cf3d2e
12d1f26a5e0b691766fe008dfc30dc58
2795108e6e1ca8a2d811c1b978b30020
93c3f44afd4d1d076d44ae3f67d412b2
53bab1645294777034358981aaaa7265
5bf6bc3df619baf2a741dc6d6e00eaae
377ce27fcda6f91647d41d5281f94539
3d16413fb33f7a40fc14ea5df0fcb9be
5109455c200344200a7c22ad6826b787
0abdbb52cf46dc4395008a760a93c542

sha1

3f398a34e2f8be89e974356cec0870d4437c8f53
e34cd687862295f6c930cabf07b69e82981bca5a
e65ab742a4b6ca9f122ab804203c276bfcf81584
21004c62e08082570081c7b5bcbe352269328fa8
37e825d8a8c764946d1e4321cc8293b7be7e784e
b2ade74c9293fe3675b1d6394588f11a2339f5a4
6cf6221c55f4fb9f2de07c075a001490f8b80377
573f604c0f3d7e6e85c74953545e8a298ddbe95b
a72230d9daffa77ab1cd0d0a028d9f2588c35c72
74ad2d8e233ffc5a69b8adaf89b0791e165f78f6

sha256

5a4f2f3b842c89c57cccd2b4ec9113eb60c07c9c8e49606913d67435e8400119
e08cd152f069c3f5d3a52a06ee8a786c6bbf7f39500efc7412843767a898c9e7
f8b37b62242b3dc2a2ed7d7dc6c8b6720f39a46065fbf4833abf5193ddcc8f03
3041cc14c2205402b4e29545d884377df52bebcf4707e3dcf4fc54d918be1736
55c124442ae46da20efd8f9d2896f1b2fb27524df5253069205cd4975de52212
e18da2edfd64ca04da8bc1a5dd34b8eb28f40cfabc9ed6cbaf2cbe39f1c6c2b1
df2fac7b998cd57c193ca7775b108aca39b44c39d621367c0e07bbf3324eb203
a33330d8792fa5fbe14e74ab7e5907d0b38c821fd94cd69ccff38605a14d61ce
da0db47ad6a3c2b00db36b20c6c94612ca7edd61a0f57b7f871fef6c561aa88c
36e6a9224c80126bed06a39cbf2d83bf90a72b6a5b719de216dba3131e105f9d

Приложение 1. Расширенная информация по файловым IOCs

Имя файла

Хэш-сумма MD5

Хэш-сумма SHA1

Хэш-сумма SHA256

Комментарий

driv_fsa.lzh

228266c8badb851579479b33b5cf3d2e

3f398a34e2f8be89e974356cec0870d4437c8f53

5a4f2f3b842c89c57cccd2b4ec9113eb60c07c9c8e49606913d67435e8400119

Архив обновления с вредоносной нагрузкой 2022 года

msinfo32.exe

12d1f26a5e0b691766fe008dfc30dc58

e34cd687862295f6c930cabf07b69e82981bca5a

e08cd152f069c3f5d3a52a06ee8a786c6bbf7f39500efc7412843767a898c9e7

Загрузчик шелл-кода 2022 года

settings.log

2795108e6e1ca8a2d811c1b978b30020

e65ab742a4b6ca9f122ab804203c276bfcf81584

f8b37b62242b3dc2a2ed7d7dc6c8b6720f39a46065fbf4833abf5193ddcc8f03

Зашифрованный шелл-код 2022 года

action.inf

93c3f44afd4d1d076d44ae3f67d412b2

21004c62e08082570081c7b5bcbe352269328fa8

3041cc14c2205402b4e29545d884377df52bebcf4707e3dcf4fc54d918be1736

Файл с командами запуска вредоносной цепочки (одинаковый в 2022 и в 2025 гг.)

driv_fsa.lzh

53bab1645294777034358981aaaa7265

37e825d8a8c764946d1e4321cc8293b7be7e784e

55c124442ae46da20efd8f9d2896f1b2fb27524df5253069205cd4975de52212

Архив обновления с вредоносной нагрузкой 2021 года

Unlha32.Dll

5bf6bc3df619baf2a741dc6d6e00eaae

b2ade74c9293fe3675b1d6394588f11a2339f5a4

e18da2edfd64ca04da8bc1a5dd34b8eb28f40cfabc9ed6cbaf2cbe39f1c6c2b1

Динамическая библиотека с вредоносным кодом 2021 года

action.inf

377ce27fcda6f91647d41d5281f94539

6cf6221c55f4fb9f2de07c075a001490f8b80377

df2fac7b998cd57c193ca7775b108aca39b44c39d621367c0e07bbf3324eb203

Файл с командами запуска вредоносной цепочки 2021 года

driv_repair.exe

3d16413fb33f7a40fc14ea5df0fcb9be

573f604c0f3d7e6e85c74953545e8a298ddbe95b

a33330d8792fa5fbe14e74ab7e5907d0b38c821fd94cd69ccff38605a14d61ce

Вредоносный файл для кражи и эксфильтрации данных из вредоносного архива обновлений 2021 года

driv_api.exe

5109455c200344200a7c22ad6826b787

a72230d9daffa77ab1cd0d0a028d9f2588c35c72

da0db47ad6a3c2b00db36b20c6c94612ca7edd61a0f57b7f871fef6c561aa88c

Интерактивный шелл из вредоносного архива обновлений 2021 года

driv_config.exe

0abdbb52cf46dc4395008a760a93c542

74ad2d8e233ffc5a69b8adaf89b0791e165f78f6

36e6a9224c80126bed06a39cbf2d83bf90a72b6a5b719de216dba3131e105f9d

Интерактивный шелл из вредоносного архива обновлений 2021 года

Приложение 2. Правило Sigma

Для обнаружения описанной вредоносной активности можно использовать следующее Sigma-правило:

    
title: 4RAYS_WIN_MaliciousVipNetUpdate_rule
id: 65cd0e12-a0ed-4428-89b8-42ac18dec130
status: experimental
description: Malicious VipNet update package contains malware sample disguised as msinfo32.exe sample so that attacker can execute search order exe hijack and run arbitrary code
author: SOLAR 4RAYS
date: 2025-04-14
modified: 2025-04-14
logsource:
   category: process_creation
   product: windows
detection:
   MSInfoPath:
       Image|startswith:
           - c:\windows\system32
           - c:\windows\syswow64
           - c:\windows\winsxs
   ProcessChain:
       EventID:
           - 1
           - 4688
       ParentImage|endswith: lumpdiag.exe
       Image|endswith: msinfo32.exe
   condition: ProcessChain and not MSInfoPath
tags:
   - attack.initial-access
   - attack.t1195.002
level: high
falsepositives:
   - no known false-positives
   

Суть правила: мы ищем события запуска процесса msinfo32.exe от процесса lumpdiag.exe при условии, что msinfo32.exe расположен не в системных директориях.