Новая вредоносная цепочка TryNodeUpdate скрывает командный центр за смарт-контрактами BNB Smart Chain и GitHub

information security

Специалисты по информационной безопасности обнаружили цепочку заражения TryNodeUpdate, которая использует сразу несколько публичных платформ, чтобы скрыть инфраструктуру управления. Злоумышленники задействуют сценарии PowerShell, среду Node.js и смарт-контракты в сети BNB Smart Chain, что делает обнаружение командного сервера нетривиальной задачей. Атака начинается с запуска короткого скрипта, который проверяет доступ к интернету. После этого он создаёт рабочий каталог в папке пользователя и загружает управляющий код.

Описание

Сценарий PowerShell (файл 4.ps1) обращается к сайту http://www.google.com для проверки сети. Затем он формирует каталог %LOCALAPPDATA%\TryNodeUpdate и скачивает Node.js-контроллер из публичного репозитория на GitHub: 1CodeDev-hub/electronAI. Если среда Node.js не установлена, скрипт самостоятельно загружает официальный дистрибутив Node версии v20.11.0. Для закрепления в системе создаётся задача планировщика Windows с именем TryNodeUpdateTask. Эта задача запускает VBS-скрипт nodeupdate.vbs, который, в свою очередь, вызывает Node.js с ключевым аргументом - адресом смарт-контракта в сети BNB Smart Chain.

Указанный контракт (0x75E1eDFA0d0f96D5f8F228358376d6ecdB22d802) не является сервером управления. Он служит лишь индексом для получения настоящего адреса командного центра. Из репозитория на GitHub загружается файл main.js - основной контроллер. Метаданные репозитория показывают, что он создан в ноябре 2025 года и содержит 40 коммитов, каждый из которых соответствует этапу развития цепочки. Последнее изменение датировано апрелем 2026 года. Исследователь Кирк в отчёте подробно описывает этот процесс.

После запуска контроллер main.js разбирает аргументы командной строки, извлекает адрес контракта и отправляет к сети BSC запрос eth_call (метод вызова функции смарт-контракта). Для этого он использует один из публичных RPC-узлов, например bsc.blockrazor.xyz. В ответ блокчейн возвращает JSON-строку, в которой содержится поле TUNNEL_URL. Например, на момент анализа три разных контракта отдавали одинаковый URL: tcp://206.206.127[.]94:8446. Контроллер отбрасывает префикс tcp://, разбирает хост и порт и устанавливает прямое TCP-соединение без использования HTTP. Протокол управления представляет собой поток JSON-сообщений, разделённых символами новой строки.

Через это соединение Node-контроллер регистрирует систему и получает команду загрузить вспомогательный исполняемый файл rpc.exe. Этот файл не является простым загрузчиком. Он написан на C++ и повторяет ту же процедуру разрешения адреса через блокчейн: снова отправляет eth_call к одному из контрактов, декодирует ответ и подключается к полученному адресу. После запуска rpc.exe регистрируется уже как "cpp-tcp-client" и передаёт на бэкенд подробные сведения: имя компьютера, имя пользователя, уровень привилегий, тип платформы, объём памяти, публичный IP-адрес (полученный через api.ipify.org) и адрес смарт-контракта. Кроме того, вспомогательный модуль умеет принимать файлы: команды file-upload-start, file-upload-chunk и file-upload-end позволяют загружать на заражённую машину произвольные скрипты.

В одном из испытаний злоумышленники загрузили исполняемый файл new_write.js размером около 1,5 МБ. Этот скрипт функционально повторяет контроллер blockchain.js, но дополнительно содержит функции упаковки и распаковки файлов. Интересно, что адрес бэкенда менялся со временем: первоначально использовался IP 206.206.127.94, связанный с хостинг-провайдером Latitude.sh, а в более поздних тестах контракты отдавали адрес 84.200.87[.]236 из сети Ultahost, Inc. в Германии. Оба адреса работают на одном порту 8446 и используют тот же протокол.

Пакетный захват, сохранивший все сетевые взаимодействия, подтверждает эту цепочку. Байты, переданные через TCP-поток, полностью совпадают с файлом rpc.exe, извлечённым из песочницы. Это доказывает, что атака происходит именно так, как описано, и что злоумышленники не подменили данные во время анализа.

Ключевые индикаторы для обнаружения включают каталог %LOCALAPPDATA%\TryNodeUpdate, запуск VBS-скрипта через wscript.exe, сетевые обращения к raw.githubusercontent.com за main.js, вызовы eth_call к публичным RPC-узлам BSC (например, bsc.blockrazor.xyz) и TCP-соединения на порт 8446 к адресу, полученному из блокчейна. По отдельности каждый из этих признаков может быть легитимным, но их сочетание с высокой вероятностью свидетельствует о заражении. Закрепление через задачу планировщика делает вредоносное ПО устойчивым к перезагрузке, а использование блокчейна позволяет злоумышленникам динамически менять сервер управления без изменения кода на заражённых машинах.

Для защиты специалистам по безопасности стоит внедрить мониторинг создания новых задач планировщика, особенно тех, которые запускают wscript.exe из нестандартных каталогов на уровне пользователя. Контроль DNS-запросов к RPC-эндпоинтам BSC и фильтрация исходящего трафика на порт 8446 по модели нулевого доверия могут снизить риск заражения. Важно понимать, что бэкенд может мигрировать между разными хостинг-провайдерами, при этом сам протокол и порт остаются неизменными. Поэтому блокировка по IP-адресу без анализа поведения тракта недостаточно эффективна. TryNodeUpdate демонстрирует, как современные методы скрытия инфраструктуры становятся всё более изощрёнными, сочетая общедоступные облачные сервисы с децентрализованными контрактами.

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

IPv4

  • 84.200.87.236

IPv4 Port Combinations

  • 206.206.127.94:844

URLs

  • https://nodejs.org/download/release/v20.11.0/node-v20.11.0-win-x64.zip
  • https://raw.githubusercontent.com/1CodeDev-hub/electronAI/refs/heads/main/blockchain.js

SHA256

  • 32cce13ce1d029abfd14df74a755f74a88025c497d122b5aaa53a0c35e54024a
  • 42f469992efb5e80e4ddedf21be8504b5d7e0b4ec78f72511f94170f567bdad5
  • 5e80a76a758262a1eab6c9d0371e9921f30bc744de55cf01e4c16051be2e8a12
  • 897a8df220b0813794d465d2b44adfd5a7b253660b77b75115a905675f0f80bc
  • 89a6ad4f88bf731b59b690aac4f0082bb25b22309478a7d5d04b702f07b68287
  • b5b771bd9796284faa24f4f9c45d1e77567432049b1e897416bf6f6534b659e9

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