ClickFix и смарт-контракты Polygon: многоступенчатая атака доставила RAT через подписанный установщик

remote access Trojan

13 июля 2026 года на WordPress-поддомене new-blog.artlist[.]io была обнаружена цепочка атак, объединившая технологию EtherHiding, имитацию reCAPTCHA в стиле ClickFix и подписанный установщик программного обеспечения StruSoft. Конечным результатом стало внедрение удалённого агента управления (RAT) с широким набором функций. Эта атака показывает, как злоумышленники комбинируют легитимные инструменты, маскировку запросов и многослойную загрузку для обхода классических защит и доставки вредоносного кода на устройства конечных пользователей.

Описание

Первая стадия начинается с внедрения обфусцированного JavaScript в начало HTML-страницы. Скрипт содержит простой декодер: данные в формате base64 преобразуются в массив байтов, каждый байт подвергается операции исключающего ИЛИ (XOR) с константой 0x50, а результат передаётся в конструктор new Function для выполнения. Перед любым сетевым взаимодействием загрузчик проверяет флаг окна и останавливается при повторном запуске. Этот код не содержит адрес следующего этапа напрямую - вместо этого он отправляет eth_call к смарт-контракту платформы Polygon (адрес 0xB6bC9e1D0b2fB96Ab7C47E04Cb0BE477410bC1f2) с селектором 0xb68d1809. Восемь публичных RPC-серверов (Tenderly, dRPC, QuickNode и другие) обеспечивают отказоустойчивость. В ответ контракт возвращает строку домена auth-code-check[.]info, к которому загрузчик добавляет идентификатор кампании и метку времени в минутах.

Этот приём, известный как EtherHiding, позволяет менять хост доставки без правки инфицированной страницы: достаточно обновить данные в смарт-контракте. Далее загружается страница, имитирующая reCAPTCHA, - типичный ClickFix-оверлей. Посетителю предлагается нажать определённые клавиши и вставить команду PowerShell в терминал, при этом инспекция браузера блокируется. Команда имеет вид powershell -w h "iex(irm '...')", где ключ -w h скрывает окно PowerShell. Полученный скрипт через COM-объект WinHttp.WinHttpRequest.5.1 переключается на протокол HTTP (с добавлением параметра ?_=1) и после 20-секундной паузы загружает архиватор 7z.exe и защищённый паролем ZIP-архив размером около 31 МБ (пароль Arsen33).

Как показано в анализе цепочки, извлечённый из архива fdupdate.exe является подписанным обновлением для программы StruSoft FEM-Design. В процессе своей работы он загружает LibBind.dll, которая использует экспорт TBFVSS_DLL_SRV_64.dll для выделения памяти, читает файл Stream.Toolkit.dat (смещение 0x4c26a, длина 0x533a3), снимает XOR-маску 0xe5 и передаёт результат как функцию обратного вызова в API EnumTimeFormatsEx. Таким образом, Windows-функция перечисления форматов времени используется для выполнения раскодированного shell-кода. Далее shell-код ищет в определённых каталогах файлы с расширениями bak, db, bin, dat, raw, pak и отбирает среди них тот, который проходит проверку пользовательского хранилища с ключом 0x1b51b9fd. Таким файлом оказывается Face.dat.

Face.dat содержит 1178 записей с полезной нагрузкой. В двух из них скрыто самое важное: запись №4 (тег 16001) - скрипт/конфигурация в кодировке UTF-16, а запись №1168 (тег 16100) - 7,9 МБ исполняемого файла act.exe (Delphi x64). Скрипт прописывает закрепление в автозагрузку и планировщик задач от имени "FEM Update Model Manager", после чего загружает act.exe через внутренний интерпретатор. act.exe, в свою очередь, содержит зашифрованный AES-256-CBC блок, который декодируется в ZIP-архив с одним - raw x64 загрузчиком. Этот загрузчик снова снимает XOR-маску (0x43 ^ (i & 0xff)) и вручную картирует финальную DLL (экспортное имя bad.dll) в память процесса.

Финальная DLL является полноценным удалённым агентом. Она поддерживает запуск через rundll32, regsvr32, службу или svchost. После инициализации создаётся скрытое окно, которое через сообщения WM_COPYDATA принимает зашифрованные команды. Сетевой коммуникационный модуль использует AES-256 для шифрования и RSA для обмена ключами, формируя защищённый протокол с подписью. Агент умеет собирать данные из браузеров (Chromium и Firefox - логины, cookies, платёжные данные), делать скриншоты, захватывать нажатия клавиш, буфер обмена, выполнять скрипты cmd, передавать файлы с докачкой, управлять процессами, устанавливать SOCKS-прокси и разворачивать Tor-модуль. В статическом анализе обнаружены также пути для экспорта PFX-сертификатов с приватными ключами, хотя команды, активирующие этот код, в текущем сэмпле не найдены.

Обращает на себя внимание состояние серверной части доставки. Экспериментальный повтор запросов показал, что после успешной загрузки архива и запуска файла происходит безусловный запрос к /p/<токен>, который возвращает код 410 Gone и делает токен недействительным. Более того, при неправильном порядке запросов (сначала /p/, потом сам архив) также фиксируется отказ. Это указывает на строгий контроль состояния со стороны бэкенда - каждый сеанс имеет конечную длительность и одноразовый токен. Скорее всего, в уравнении участвуют не только временные метки, но и идентификатор посетителя, история рефереров и IP-адрес.

Операторы вложили значительные усилия в разбиение полезной нагрузки на множество слоёв. Каждый слой (JavaScript, PowerShell, подписанный установщик, динамические библиотеки, shell-код в дампах, Delphi, загрузчик вручную) использует разные методы сокрытия - XOR, смарт-контракты, маскировку под легитимные обновления. Общая длина цепочки составила более шести границ декодирования. Для специалистов по защите ключевыми индикаторами остаются не столько имена файлов (они легко меняются), сколько последовательность операций: вызов eth_call к конкретному контракту Polygon, использование аргумента ?_=1 в HTTP-запросах, пароль "Arsen33", смещение 0x4c26a и ключ 0xe5 для Stream.Toolkit.dat, ключ 0x1b51b9fd для Face.dat, а также семя AES-ключа act.exe и финальная маска 0x43 ^ (i & 0xff). Организациям рекомендуется усилить мониторинг на предмет скрытого запуска PowerShell с ключом -w h, скачивания 7z через HTTP, а также вызовов к подозрительным контрактам Polygon из браузеров на корпоративных машинах.

Индикаторы компрометации

Комментарии: 0