Как правило, злоумышленники пытаются выдать вредоносное ПО за полезные приложения или же за нежелательные программы, которые пользователи ищут и скачивают добровольно, например читы или активаторы пиратского ПО. Нередко атакующие используют рекламные и партнерские сети для доставки своих разработок на устройства жертв. В этой статье мы разберем не совсем стандартный случай: известный бэкдор распространялся под видом рекламного ПО. Мы предполагаем, что злоумышленники выбрали такой метод распространения, поскольку рекламное приложение было подписано разработчиком. Кроме того, пользователи могут самостоятельно добавлять такие программы в исключения, чтобы воспользоваться их полезной функциональностью.
Некоторое время назад к нам обратился клиент с просьбой проанализировать и добавить в базу детектируемых объектов файл с MD5-хэшем c24e99f9437feacaa63766a3cde3fe3d. Изначально мы определили его как рекламное ПО, однако поверхностный анализ выявил подозрительную сетевую активность образца, и мы решили изучить его глубже. Оказалось, что рекламой дело не ограничивается. Более того, рекламная функциональность в образце нерабочая, зато он запускает цепочку заражения, которая доставляет в систему бэкдор ValleyRAT.
Вредоносный инсталлятор
Файл, которым с нами поделился клиент, оказался инсталлятором, выполняющим различные действия в зависимости от того, какой суффикс используется в его имени. Под суффиксом мы понимаем сочетание из двух букв, которое расположено перед цифрами:
| Имя установщика | Что делает |
| FS_SETUP_DD_173.exe | Устанавливает DingTalk (цифровая платформа для командной работы) |
| FS_SETUP_GG_173.exe | Устанавливает Google Chrome |
| FS_SETUP_HY_173.exe | Открывает сайт hxxps://meeting[.]tencent[.]com/download/ |
Вероятнее всего, эти действия направлены на то, чтобы отвлечь внимание пользователя от вредоносной функциональности образца. Вне зависимости от имени файла инсталлятор устанавливает в систему модифицированное китайское программное обеспечение для управления обоями рабочего стола под названием QN Wallpaper (hxxps://qnwallpaper[.]keansoft[.]cn/) и добавляет в автозагрузку в реестре.
В оригинальной версии QN Wallpaper — действительно рекламное ПО, которое при установке доставляет на устройство партнерские приложения, а затем показывает пользователю рекламные баннеры. Однако в данном случае злоумышленники используют его для реализации техники DLL sideloading. Эта техника позволяет выполнить вредоносный код от имени подписанного процесса с помощью вредоносной DLL-библиотеки.
Модули QN Wallpaper вместе с вредоносными компонентами распаковываются по пути C:\Program Files\QNWallpaper\5.4.0.1662\<случайная последовательность букв и цифр>. В директории сохраняются следующие файлы:
| Имя файла | MD5 | Назначение |
| 1.zip | 7ad1e3ef4e6d9d636c9e7e967733850e | Архив с рекламным ПО: файлами QnWallpeper.exe, QnwPlayer.exe и модулями, необходимыми для их работы |
| 7z.dll | 96b4c1d0683dce22bd3223e1e40689c1 | Библиотека архиватора 7z |
| 7z.exe | 9b86d3ab6cef15c633933fbbeab39c0a | Архиватор |
| chrome_elf.dll | edfdc30cbd85879776b8f735ea7de1f1 | Библиотека для запуска приложений на базе фреймворка Electron |
| libcef.dll | 07ddbbe2c71c45577a7a4fbcdba0df91 | Вредоносная библиотека |
| PeLoader | 48826d5ca845979d2e6ebd66dc1aae90 | Файл с зашифрованным бэкдором |
| QnWallpaper.exe | 6c158c0f8e029342192d4f0d72e102b7 | Рекламный модуль |
| QnwPlayer.exe | 9a71d6a41cd258b9e89cdc5fc224de73 | Рекламный модуль |
| <случайная последовательность букв и цифр>Nedca.exe | c24e99f9437feacaa63766a3cde3fe3d | Копия вредоносного инсталлятора |
После распаковки инсталлятор отключает Windows Defender, используя ключ реестра DisableAntiSpyware, и запускает программу QnWallpaper.exe.
DLL sideloading в libcef.dll
QnWallpaper.exe имеет зависимости от libcef.dll, поэтому эта библиотека будет загружена при старте процесса. Также QnWallpaper.exe запускает QnwPlayer.exe, который также вызывает libcef.dll.
QnWallpaper и QnwPlayer не будут корректно работать, потому что экспортируемые из библиотеки libcef.dll функции уходят в бесконечный сон, но, на случай если сон вдруг прекратится, злоумышленники реализовали функцию, которая загрузит в память все необходимые функции из оригинальной библиотеки, если сможет найти ее в системе.
Вредоносная функциональность libcef.dll запускается при вызове DllMain, которая вызывается при загрузке библиотеки. Тем не менее, помимо оригинальных экспортов, в библиотеке присутствует функция с именем RunDLL, которая также инициирует выполнение вредоносного кода. Эту функцию QnWallpaper не вызывает. Мы подозреваем, что злоумышленники планировали вызывать ее вручную с помощью rundll32 либо использовали для этого другой исполняемый файл, которого не было в загружаемом образцом пакете.
Начало работы вредоносного кода
При загрузке библиотеки выполняется код, который обеспечивает автозагрузку QnWallpaper.exe путем добавления ассоциации расширения и создания файла с соответствующим расширением в C:\Documents and Settings\<username>\Start Menu\Programs\Startup\.
После этого выполняется набор функций-оберток, основная задача которых — вызывать следующую функцию. В конце концов управление попадает в функцию, содержащую непосредственно вредоносный код. Для удобства переименуем ее в mw_entry.
Внутри mw_entry зловред проверяет два интересующих его момента:
- состоит ли пользователь в группе администраторов;
- внутри какого процесса работает DLL.
В случае если пользователь не состоит в группе администраторов, то программа попытается получить права администратора при помощи утилиты runas.
После получения прав администратора вредоносный код определяет, внутри какого процесса загружена DLL. В зависимости от этого будет выбрана полезная нагрузка:
- Если библиотека работает в процессе QnWallpaper.exe, то нагрузка загружается из файла PeLoader.
- Если библиотека работает в процессе QnwPlayer.exe, то нагрузка загружается из ресурсов libcef.dll.
Обе полезные нагрузки зашифрованы при помощи алгоритма AES и представляют собой DLL-библиотеку, в которой и содержится бэкдор ValleyRAT. Они различаются только конфигурацией, а именно — адресами C2-серверов. После расшифровки libcef.dll проверяет магические сигнатуры в заголовках полученного PE-файла, чтобы убедиться, что образец правильный. Если проверка не пройдена, библиотека высвобождает ресурсы и более ничего не делает.
Если заголовки верные, libcef.dll загружает полезную нагрузку в пространство процесса и передает управление бэкдору путем вызова DllMain.
ValleyRAT
ValleyRAT начинает свою работу с парсинга конфигурации, которая представляет собой данные вида «ключ:значение», объединенные в одну строку. Чтобы обфусцировать конфигурацию, злоумышленники записали эту строку задом наперед.
При парсинге бэкдор восстанавливает порядок символов в строке и по очереди считывает значения ключей. Набор ключей не зависит от того, в каком процессе запущен бэкдор.
Ниже приведем некоторые поля конфигурации:
| Ключ | Описание |
| p? | IP-адрес C2-сервера |
| o? | Порт C2-сервера |
| t? | Протокол (1 — TCP, 0 — UDP) |
| dd | Продолжительность сна перед выполнением основного кода |
| cl | Продолжительность сна при получении соответствующей команды с сервера |
| bz | Дата создания конфигурации |
| bh | Является ли текущий процесс критическим (то есть приводит ли его завершение к синему экрану смерти). Возможные значения: 1 — процесс критический, 0 — нет |
| ll | Проверка наличия запущенных средств защиты/анализа трафика/процессов (1 — проверять, 0 — не проверять) |
| sh | Внедрение в svchost кода, который будет перезапускать вредоносный процесс (1 — внедрять, 0 — не внедрять) |
Бэкдор использует несколько техник для защиты своего процесса. Некоторые из них задаются в конфигурации, другие применяются всегда.
- Инъекция кода в svchost для перезапуска процесса — настраиваемая опция. Бэкдор выделяет память внутри процесса svchost, внедряет в нее код и устанавливает на странице памяти с внедренными данными права PAGE_NOACCESS. Затем он создает приостановленный поток, ждет 60 секунд, разрешает чтение, запись и выполнение на странице памяти с внедренными данными и возобновляет поток.
Функция, внедренная в процесс, выполняет единственную задачу: перезапускать бэкдор, если его выполнение по той или иной причине прервется.
- Присвоение своему процессу статуса критического (его завершение вызовет синий экран смерти) — настраиваемая опция.
- Перезапуск при возникновении необработанного исключения. Этот защитный механизм срабатывает всегда, вне зависимости от конфигурации бэкдора.
Бэкдор обладает функциональностью троянца-шпиона. Во время работы он отслеживает нажатия клавиш и окно, находящееся в фокусе. Для этого используются функции из библиотеки DirectInput8. Также бэкдор перехватывает содержимое буфера обмена. Все данные сохраняются в файл на диске.
Если ключ ll в конфигурации имеет значение 1, ValleyRAT периодически проверяет наличие активных окон приложений, с помощью которых можно анализировать процессы или трафик. Перечисление окон происходит при помощи функции EnumWindows со следующей функцией обратного вызова:
После всех проверок бэкдор собирает данные о системе:
- имя хоста;
- IP-адреса хоста;
- время бездействия пользователя;
- подробная информация о версии Windows (ProductName, EditionId, DisplayVersion);
- количество ядер процессора;
- количество свободного места;
- графический адаптер;
- окно в фокусе и его заголовок;
- битность системы;
- информация о языковых настройках;
- путь до системной директории.
Бэкдор может выполнять по команде базовые для такого класса вредоносных программ функции:
- перезагрузка компьютера;
- выключение компьютера;
- создание скриншота;
- очистка логов;
- обновление своих C2-адресов;
- загрузка дополнительных модулей;
- отправка лога кейлоггера вместе с содержимым буфера обмена.
Остановимся подробнее на загрузке дополнительных модулей. Получив от оператора соответствующую команду со ссылкой, бэкдор скачивает файл по ссылке и выполняет его. Скачивание может происходить как с C2, так и со стороннего ресурса.
Дополнительные модули могут быть в виде специально созданных динамических библиотек либо в виде шеллкода. Если полезная нагрузка — шеллкод, то бэкдор для запуска модуля будет использовать технику Process Hollowing, а целевым процессом станет svchost.
Если модуль является динамической библиотекой, то бэкдор загрузит PE-файл в свой процесс, вызовет DllMain и будет искать функцию Main среди экспортируемых функций. После вызова функции Main библиотека будет выгружена из памяти.
Цели и атрибуция
За 2026 год мы обнаружили бэкдор ValleyRAT, а также связанные с ним вредоносные программы более 100 тысяч раз, у более чем 1500 уникальных пользователей, преимущественно из Китая и Индии.
Такая география атак, а также тот факт, что в них применяется бэкдор ValleyRAT, может указывать на то, что за кампанией стоит группа Silver Fox — известный оператор этого семейства вредоносного ПО.
Заключение
Этот кейс — яркий пример того, что рекламные приложения и партнерские сети могут оказаться куда опаснее, чем кажется. ValleyRAT — сложный бэкдор, способный собирать чувствительные данные, такие как нажатия клавиш и содержимое буфера обмена, делать скриншоты и доставлять на устройство дополнительные вредоносные модули. Злоумышленники воспользовались известным рекламным приложением, чтобы выполнить бэкдор от имени подписанного процесса, усложняя таким образом обнаружение атаки.
Группа Silver Fox атакует организации в разных странах как с целью кибершпионажа, так и с целью обогащения. Чтобы оставаться в безопасности, следует поддерживать осведомленность сотрудников о кибербезопасности на актуальном уровне, а также регламентировать использование стороннего ПО на рабочих устройствах.
Частным пользователям мы рекомендуем не устанавливать на устройства программы с сомнительной репутацией и тем более не добавлять их в исключения защитных решений.
IoC
MD5
07ddbbe2c71c45577a7a4fbcdba0df91
c24e99f9437feacaa63766a3cde3fe3d
8a626d844943da3456b044f38deae3a2
Network
103.45.66.18:441
103.45.66.18:442
103.45.66.18:443
192.253.225.173:6666
192.253.225.173:8888



























ValleyRAT маскируется под рекламное ПО