Александр Бадаев
Специалист группы киберразведки TI-департамента, Positive Technologies
Максим Шаманов
Младший специалист группы исследования сложных угроз TI-департамента, Positive Technologies
Александр Бадаев
Специалист группы киберразведки TI-департамента, Positive Technologies
Максим Шаманов
Младший специалист группы исследования сложных угроз TI-департамента, Positive Technologies
Осенью 2025 года специалисты PT ESC обнаружили уникальные атаки на киргизские телекоммуникационные компании. Атаки привлекли внимание необычными документами, которые использовали сразу два редких инструмента китайского происхождения и уникальное ПО.
В процессе исследования мы обнаружили, что в атаках использовался бэкдор MarsSnake, который ранее был обнаружен исследователями ESET и упомянут в их квартальном отчете. Мы разобрали его функциональность и нашли дополнительные атаки, которые фокусировались на странах СНГ, а также на китайских компаниях.
В конце сентября злоумышленники разослали письма в киргизские организации.

Все письма были отправлены якобы с целью узнать тарифные планы для мобильной связи. Единственное, что менялось, — это имена потенциальных «клиентов». Для писем злоумышленники использовали почтовые сервисы Microsoft: Hotmail и Outlook.
Ко всем обнаруженным письмам прикреплялся документ. Например, такой: «Тарифные пакеты SIM-карт мобильных телефонов.doc» (SHA-256: e6a28b3 833 384 018bad60 043c82bb4cfcce86a3418ece86ea0d71c7aac9ca22b).
При открытии документа показывалась картинка, которая побуждала жертву «включить содержимое». Интересно, что эта картинка уникальна в некоторых аспектах. Ниже мы расскажем, в каких именно.

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

Внутри документа есть OLE-объект NewMacros. Сам макрос сильно обфусцирован, но его основная функциональность довольно проста: он собирает полезную нагрузку из большого количества строк, хранящихся в hex-виде, после приводит ее к байтам, сохраняет в C:\ProgramData с именем Perfrom.exe и запускает. У самого файла .exe иконка OneDrive.

Perfrom.exe — это лоадер, который мы назвали LuciLoad из-за его связи со следующим стейджем — бэкдором LuciDoor.
При запуске лоадер:
1. Создает скрытое окно с заголовком OneDriveLauncher.
2. Расшифровывает RC4-алгоритмом конфигурацию.

Таблица 1. Структура конфигурации
| Смещение | Назначение |
|---|---|
| 0x00 | Флаг, определяющий необходимость создания задачи, запускающей LuciLoad при входе в систему |
| 0x01 | Параметр для вычисления времени сна |
| 0x05 | Временная метка (0926, 26 сентября), которая отправляется на C2-сервер и является идентификатором кампании |
| 0x15 | Magic-значение, которое сравнивается с ответом С2-сервера (123, если совпадает, идет дальше) |
| 0x35 | Адрес C2 (button.gdakdbysw.xyz: 443) |
3. Извлекает из собственных ресурсов изображение, получает байты, которые впоследствии расшифровывает на ключе «microsoft», используя тот же алгоритм RC4.
4. Распаковывает данные алгоритмом LZNT1, используя функцию RtlDecompressBuffer.
5. Рефлективно загружает получившийся PE-модуль.
6. Вызывает у загруженного модуля экспортируемую им функцию, передавая в качестве аргумента расшифрованную конфигурацию.
Следующий стейдж (бэкдор), как и лоадер, написан на C++. Подробно рассмотрим его ниже.
В конце ноября атаки на Киргизию повторились. В этот раз атакующие также использовали документ с картинкой, которая побуждала жертву включить макрос и после запуска макроса показывала следующий документ.

Стоит отметить, что, как и в случае с предыдущими документами, атакующие хоть и подготавливали атаку, но сам текст фишинга не совпадал с атакуемыми компаниями и просто подходил под тему телекоммуникаций: атаковали компанию А, а фишинговый документ сделан под компанию Б.
Макрос, как и в предыдущих атаках, сильно обфусцирован. Он перемещал два файла в папку C:\Users\admin\AppData\Local\Microsoft\PlayReady\:
В отличие от предыдущих атак здесь использовался бэкдор MarsSnake. О нем мы расскажем в соответствующей главе.
В январе 2026 года группировка активизировалась. Как и в предыдущих случаях, злоумышленники использовали фишинговые документы, связанные с темой телекоммуникаций.
В атаках 2025 года злоумышленники прикрепляли вредоносные документы к письмам. В 2026-м вместо этого они использовали ссылки в теле письма, например:
mail.ru.cdhgwnjjcw.xyz/downloadFile/54/66f4ef1f67499bfef117afa5380eced1
Помимо этого, в 2026 году злоумышленники изменили картинку, побуждающую пользователей включить вредоносный макрос.


Эта атака была аналогична сентябрьской. В ней злоумышленники снова использовали бэкдор LuciDoor, загружаемый LuciLoad. Отличия заключались в том, что LuciLoad сохранялся под другим именем (explorer.exe) и имел измененную конфигурацию. Конечная полезная нагрузка была полностью идентична сентябрьской.
Как отмечалось ранее, расшифрованная конфигурация LuciLoad, помимо управляющего сервера и порта, содержит временную метку кампании.

В качестве С2-сервера LuciDoor использовал IP 93.157.106.75, который использовался MarsSnake в ноябрьской атаке.
В первой атаке злоумышленники использовали бэкдор LuciDoor, получивший свое название из-за уникальной особенности настройки шрифта Lucida Console 11×18 для корректного отображения текста в терминале. Этот бэкдор отличается исключительной «настойчивостью» при установлении соединения с управляющим сервером. Сначала он пытается подключиться к C2-серверу напрямую, затем — через системный прокси с последовательным перебором различных механизмов проксирования. Если ни один из перечисленных способов не срабатывает, то в качестве прокси используются активные прокси-узлы пользователя. Обо всем этом, а также о функциях бэкдора мы расскажем дальше.
LuciDoor рефлективно загружается с помощью LuciLoad и имеет следующий алгоритм работы:
1. Если в переданной лоадером конфигурации установлен флаг для закрепления в системе, то тогда бэкдор:

2. Предпринимает попытку установить соединение с C2-сервером посредством прямого TCP-подключения. При неудаче извлекает адрес прокси из параметра Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer и пробует установить соединение с использованием HTTP CONNECT, затем — SOCKS5 и, в случае неудачи, SOCKS4. Если прокси не был задан или ни один из способов не привел к успешному соединению, бэкдор извлекает информацию о текущих активных TCP-соединениях, выявляя среди них узлы, использующие типичные прокси-порты. Эти узлы рассматриваются как потенциальные прокси и последовательно используются для повторных попыток подключения теми же методами до установления соединения.
3. Собирает базовую информацию о системе, формируя отчет, передаваемый на управляющий сервер:
4. Формирует HTTP-заголовок для POST-запроса:
POST http://<hostname>/sys/index.jsp HTTP/1.1\r\n
Host: <hostname>\r\n
User-Agent: Mozilla/5.0 (compatible; Windows NT; rv:72.0) Gecko/20100101 Firefox\r\n
Cache-Control: no-cache, no-store, must-revalidate\r\n
Content-Type: application/octet-stream\r\n
Content-Length: <body_length_bytes>\r\n
Accept: */*\r\n
\r\n
<binary_body>
5. Выполняет побайтовое XOR-шифрование сформированного сообщения:
первые три байта заголовка (случайный байт, идентификатор команды и значение MsgMarker, см. ниже) преобразуются операцией XOR с обратной связью (каждый следующий байт комбинируется с предыдущим). Затем вычисляется их однобайтовая сумма, которая будет использована как начальный ключ. Оставшаяся часть сообщения обрабатывается последовательно: первый байт полезной нагрузки шифруется с использованием операции XOR и вычисленного ключа, а каждый последующий — с зашифрованным значением предыдущего.

6. Считывает и расшифровывает ответ. Структура полученного пакета имеет следующий вид и идентична как при шифровании, так и при расшифровании.
Таблица 2. Структура формируемого сообщения
| Смещение | Размер | Описание | Примечание |
|---|---|---|---|
| 0x00 | 1 байт | RandomSeed | Случайный байт |
| 0x01 | 1 байт | MsgType | Управляющая команда |
| 0x02 | 1 байт | MsgMarker | Этап выполнения |
| 0x03 | N байт | Payload | — |
Клиент и сервер всегда используют одинаковое значение MsgType в рамках выполнения одной команды для подтверждения этапов, а поле MsgMarker используется для обозначения текущего этапа выполнения команды.
При корректной обработке сообщения поле MsgMarker принимает значение 0. Значение 1 используется для обозначения промежуточного этапа обработки (например, при поэтапной передаче или приеме данных, когда ожидается отправка или получение дополнительных блоков). В случае ошибки в MsgMarker устанавливается значение 2, а в полезной нагрузке передается соответствующий код ошибки.
Важно отметить, что при формировании исходящего сообщения клиент указывает временную метку кампании, тогда как сервер в ответе помещает специальное magic-значение, которое при получении сообщения сравнивается клиентом с эталонным значением, заданным в конфигурации.
Бэкдор имеет разнообразные функции, такие как: подготовка интерпретатора, выполнение удаленных команд, загрузка файлов, а также их эксфильтрация. Подробное описание представлено в таблице.
Таблица 3. Список команд LuciDoor
| Управляющая команда | Назначение | Параметры |
|---|---|---|
| 12 | Запуск командной оболочки (cmd.exe) | Отсутствуют |
| 13 | Передача строки в стандартный ввод уже запущенной командной оболочки (эмуляция ввода с клавиатуры с автоматическим добавлением Enter) | Строка команды для cmd.exe |
| 14 | Завершение сеанса командной оболочки и очистка ресурсов | Отсутствуют |
| 15 | Инициализация эксфильтрации файла | Путь к файлу |
| 16 | Запрос следующей части файла (при эксфильтрации больших файлов в несколько частей) | Отсутствуют |
| 17 | Инициализация приема и записи файла на стороне жертвы | Путь к файлу |
| 18 | Запись блока данных в файл, созданный командой 17 | Бинарный фрагмент файла |
| 61 | Проверка и настройка консольного окружения (настраивает параметры консоли для корректного отображения текста: устанавливает шрифт Lucida Console с размером 11×18 и переключает кодовую страницу вывода на UTF-8) | Отсутствуют |
В ноябрьской атаке злоумышленники использовали второй, не менее примечательный бэкдор, который ранее лишь упоминался в квартальном отчете. Как и в случае с LuciDoor, используемый группировкой бэкдор MarsSnake обладает характерной особенностью: его конфигурация может изменяться без пересборки исполняемого файла и имеет характерную метку. Для обновления параметров конфигурации злоумышленникам достаточно изменить встроенный блок, зашифрованный XOR.
В начале 2026 года в публичную песочницу был загружен файл, явно связанный с инфраструктурой сентябрьской атаки, — 5.181.1.153.

После детального сравнения полезной нагрузки из обеих кампаний мы пришли к выводу, что образцы, использованные в ноябрьской атаке, являются бэкдором MarsSnake.
В частности, в семплах 2026 года появился характерный PDB-путь, который полностью отсутствовал во всех ноябрьских образцах:
D:\project\MarsSnake\bin_shellcode\load_http_64.pdb
Про похожий путь писали исследователи ESET в квартальном отчете:
D:\yu_project\MarsSnake\bin_shellcode\load_http_64.pdb
Как и в случае с LuciLoad и LuciDoor, MarsSnake — это конечная полезная нагрузка, которую загружает лоадер, названный нами MarsSnakeLoader.
При запуске лоадера бинарные данные сначала расшифровываются алгоритмом RC4 с жестко заданным ключом «qio1239djk123sd.a; 13,», а после распаковываются алгоритмом DEFLATE. Затем в адресном пространстве процесса выделяется исполняемая область памяти, в которую копируется получившаяся полезная нагрузка.
Перед тем как управление будет передано на точку входа бэкдора, MarsSnakeLoader проверяет наличие в нем строки «OOkupFunction*71N». Обнаружив ее, MarsSnakeLoader записывает по соответствующему адресу подготовленную конфигурацию, представляющую собой многократно повторяющуюся строку «OOkupFunction*71» и зашифрованную на ней c помощью XOR C2-конфигурацию, содержащую информацию о подключении (до трех записей).
Примечательно, что изначально в конфигурации бэкдора указаны локальные адреса. Вероятно, это артефакт, оставленный злоумышленниками при проведении локального тестирования.
Таким образом, при статическом извлечении полезной нагрузки конфигурация может быть утрачена. Такой подход обеспечивает модульность инструмента: для смены C2-сервера достаточно изменить конфигурацию в лоадере, чем и пользовались злоумышленники.
Загруженный в результате бэкдор MarsSnake расшифровывает полученную конфигурацию и собирает следующую информацию о системе:
Дополнительно, используя полученные данные, бэкдор вычисляет уникальный идентификатор системы. Для его расчета:
1. Формируется строка формата <comuter_name><local_ip><userame>, которая сначала искусственно «раздувается» — каждый байт дублируется парой:
2. По получившейся последовательности вычисляется хеш по формуле: hash = hash × 31 + byte.
3. Вычисленное значение используется при формировании строкового идентификатора системы, который записывается в GUID-подобном формате %08llx-%04llx-%04llx-%04llx-%012llx, где:
Перед тем как собранная информация будет передана на управляющий сервер, бэкдор устанавливает соединение с одним из указанных в конфигурации C2-серверов и передает ему с помощью HTTP-POST-запроса magic-значение «dsalsjd89w21dcx9cwad@». Полученный ответ также должен содержать magic-значение «asdas290e/cz/x213/.14», получив которое бэкдор отправляет данные о системе, ожидая получить в ответе команду для выполнения. Полный список поддерживаемых команд представлен в таблице.
Таблица 4. Перечень команд, поддерживаемых MarsSnake
| Номер команды | Назначение |
|---|---|
| 1 | Выполнить одиночную команду в cmd.exe |
| 2 | Запустить реверс-шелл (запускает cmd.exe с перенаправленными stdin/stdout) |
| 3 | Получить от С2-сервера имя файла, создать или открыть его и записать переданные данные |
| 4 | Получить от С2-сервера имя файла для выгрузки и передать его на С2-сервер |
| 8 | Собрать список всех логических дисков системы с указанием их типа и передать его на C2-сервер |
| 11 | Завершить соединение |
| 12 | Передать на С2-сервер листинг запрошенной директории |
| 13 | Heartbeat |
Важной деталью сетевого взаимодействия является наличие специального magic-маркера «&@&DWJ@*&! @(@#&*(@$&^», который служит идентификатором завершения или прерывания выполнения команды и может быть использован как клиентом, так и сервером.
Все сообщения, отправляемые бэкдором, имеют фиксированную структуру. В качестве передаваемого параметра используется текущее время. Структура формируемых сообщений следующая:
POST /eg.js?t=<unix_time> HTTP/1.1\r\n
Accept: */*\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; ) AppleWebKit/537.36 (KHTML, Gecko) Chrome/137.0.0.0 Edg/137.0.0.0\r\n
Connection: Keep-Alive\r\n
Content-Type: application/octet-stream\r\n
Content-Length: %d\r\n
\r\n
data=<ENCRYPTED_BODY>
Тело запроса начинается с двух байт длины, за которыми следуют сами передаваемые данные. Сначала оба этих значения по отдельности обфусцируются операцией XOR с ключом rYB1oDHVMViTRnaGsFw1TbHJ1z1aZ. Затем получившийся буфер целиком шифруется алгоритмом AES-128 в режиме ECB без использования вектора инициализации с применением того же ключа.
В процессе исследования мы нашли еще несколько семплов MarsSnake, которые назывались так же, как в атаках на Киргизию, — PDH.DLL.
Как и во всех предыдущих случаях, найденные библиотеки мимикрировали под легитимный Windows Performance Data Helper.

Один из найденных семплов использовал IP-адрес 5.181.1.153. Этот IP-адрес ранее разрешался на домен button.gdakdbysw.xyz — управляющий сервер LuciDoor в сентябрьской атаке на Киргизию.
Кроме того, были обнаружены семплы MarsSnake, использованные в атаке на Китай. Подробнее об этом ниже.
Исследователи из ESET отнесли атаки, связанные с MarsSnake, к группировке, которую назвали UnsolicitedBooker. По мнению ESET, эта группировка пересекается с группой Space Pirates и была замечена в атаках на Саудовскую Аравию.
Интересно, что текст документов содержал русский язык, но при этом в полях Declared Languages и Language Guesses были указаны три другие: арабский (Саудовская Аравия), английский и китайский.

В самих документах (word/settings.xml) присутствует поле eastAsia="zh-CN", хотя китайский язык нигде не используется.

Учитывая, что документ полностью на русском языке, то, вероятно, у пользователя стоит Office на китайском языке или же использовался шаблон китайского документа без очистки themeFontLang.
Злоумышленники использовали картинки, которые побуждали пользователя включить макрос. Для создания этих картинок использовался китайский инструмент Snipaste. В строках всех документов из-за этого есть уникальная строка Generated by Snipaste.


Это довольно редкая часть метаданных, которая встречается в основном на китайский сайтах. Например, в публичных песочницах таких документов единицы и все они китайского происхождения.
Важно отметить, что такие метаданные присутствовали только в атаках 2025 года. В 2026-м злоумышленники использовали уже другую картинку (Рис. 7). Интересно, что эта картинка использовалась во вредоносном документе группировкой Vicious Panda в атаке на Израиль в 2023 году. Злоумышленники тогда применяли бэкдор Chinoxy. При этом других пересечений между группировками UnsolicitedBooker и Vicious Panda мы не заметили.
По крайней мере в одном случае мы заметили, что группировка использовала TLS-стек с характерным отпечатком устаревшей библиотеки PolarSSL. Это показалось странным, и мы начали дальнейшее изучение.
В 2015 году PolarSSL был переименован и развит в Mbed TLS. В MikroTik RouterOS при включении www-ssl по умолчанию генерируется сертификат, подписанный встроенным тестовым CA из библиотеки Mbed TLS (ex-PolarSSL). На данный момент самостоятельно использовать именно PolarSSL нет смысла: это устаревший проект и его кодовая база развивается под новым именем. Более того, в исследуемом C2-сервере этот TLS-стек работал на стандартном порту 443, а не на каком-то нестандартном.
В ходе дальнейшего исследования мы убедились, что характерный отпечаток PolarSSL появляется именно по этой причине: хакеры взломали роутер MikroTik и использовали его в качестве C2-сервера для своих атак.
В процессе поиска дополнительных индикаторов, связанных с атаками, мы обнаружили идентичные семплы MarsSnake, загруженные из Китая. Одним из таких семплов был PDH.DLL (SHA-256: a3f223 350e03fb7ae6ac4ddf170a94d40da0a525 375b764d361a033af5ea15e8), находящийся внутри архива (SHA-256: 3c9e76eee8c813e2de16 640 504 118 550b18b21e4f951df47ef8914bb5b7a031b).
Структура архива была такой.

Папка .init скрытая. По умолчанию при открытии доступен .lnk-файл c китайским названием, связанным со стоимостью счетчиков воды в Чунцине.
Техника с .lnk-файлом и множеством скрытых подпапок часто встречалась у группировки Mustang Panda (например, см. исследование BlackBerry), но сама полезная нагрузка существенно отличается.
LNK-файл содержит команду, которая запускает version.txt, являющийся BAT-скриптом.

Этот скрипт переносит файл help.log в c:\programdata с именем help.vbs и запускает его.

Скрипт help.vbs создает папку C:\ProgramData\Oracle\Java\installcache\ и переносит туда файл plasrv.log, который переименовывает в plasrv.exe и запускает. Попутно скрипт удаляет оригинальный LNK, скрытую папку и в конце удаляет сам себя.

Файл plasrv.log/plasrv.exe идентичен MarsSnake, который мы видели в атаках на Киргизию с С2-сервером 81.70.28.71. Единственное отличие заключалось в том, что он поставлялся без MarsSnakeLoader.
Как мы уже говорили, MarsSnake — это довольно уникальный инструмент. Раньше мы не видели его упоминаний нигде, кроме квартального отчета ESET, поэтому на данный момент мы считаем его уникальным для этой группировки. Мы считаем, что это или пентест, или же UnsolicitedBooker —это киберпреступная группировка, которая также атакует Китай.
В ходе исследования мы обратили внимание на уникальную дату создания LNK: 2019:12:07 09:09:51+00:00, а также на Machine ID: desktop-s2c6iad. Про этот Machine ID писали StrikeReady Labs в 2024 году в контексте атаки на таможню Китая.

Исследуя файлы с таким же временем создания и Machine ID, мы обнаружили около 40 разных вредоносных файлов. Большая часть была на китайском, многие файлы были из таких регионов и стран, как Гонконг, КНР, Тайвань, Южная Корея.
Одним из таких файлов был «ด่วนมาก เชิญเข้าร่วมโครงการความร่วมมือฝึกอบรมหลักสูตร FBI.docx.lnk» (SHA-256: 2f52aa02ccc45e5a4f5a8045aeb42f8428b48a5 814 435ffb8d75d41a7 735 811c), использованный Mustang Panda в атаке на полицию Таиланда. В этом LNK был другой Machine ID, но дата создания была такая же: 2019:12:07 09:09:51.
Далее было обнаружено, что время и Machine ID идентичны LNK из репозитория https://github.com/Pizz33/FTPlnk_phishing, который является китайским инструментом для пентеста с предупреждением о легальном использовании.


Таким образом, можно сказать, что как минимум две группировки, Mustang Panda и UnsolicitedBooker, использовали FTPlnk_phishing в своих атаках.
Ранее группировка UnsolicitedBooker, по заявлению исследователей ESET, атаковала Саудовскую Аравию. Следы этого можно до сих пор наблюдать в их фишинговых документах, как было показано в нашем исследовании. При этом осенью 2025-го группировка активно переключилась на телекоммуникационные компании СНГ и продолжила свои атаки в 2026 году.
В своих атаках группировка использовала редкие инструменты китайского происхождения. Интересно, что в самом начале группа использовала бэкдор, который мы назвали LuciDoor, но впоследствии переключилась на бэкдор MarsSnake. При этом в 2026 году группа сделала разворот и снова начала использовать LuciDoor.
Помимо этого, как минимум в одном случае мы видели, что злоумышленники использовали взломанный роутер в качестве С2-сервера, а также что их инфраструктура в части атак мимикрировала под российскую.