Атакующие используют LinkedIn и подставные репозитории для заражения разработчиков Web3

information security

Специалисты по кибербезопасности из SlowMist выявили новую кампанию по доставке вредоносного кода, нацеленную на разработчиков в сфере Web3. Злоумышленники маскируются под рекрутеров и предлагают жертвам запустить якобы тестовый проект перед собеседованием. Этот сценарий использует доверие, характерное для технических процессов найма, и приводит к компрометации рабочих станций.

Описание

Атака начинается в социальной сети LinkedIn. Исследователи обнаружили, что злоумышленник создаёт профиль, имитирующий представителя инвестиционной или бизнес-среды Web3. Аккаунт содержит публикации о проектных инвестициях и разработке продуктов, что делает его убедительным. После обсуждения опыта кандидата и договорённости о собеседовании атакующий отправляет ссылку на репозиторий в GitHub. Репозиторий позиционируется как MVP (минимально жизнеспособный продукт), который необходимо запустить до интервью для обсуждения деталей.

Разработчики привыкли клонировать репозитории, устанавливать зависимости и запускать проекты. Поэтому предложение выполнить стандартные команды не вызывает подозрений. Однако в репозитории содержится вредоносный файл, замаскированный под плагин Tailwind. Файл theme/js/auron-core.min.js имеет объём более 4 МБ, что намного превышает размер обычного плагина. Тем не менее только запуск проекта активирует вредоносный код.

Файл зарегистрирован в конфигурации Tailwind как плагин через команду require. Это означает, что код выполняется не в браузере, а в среде Node.js при сборке проекта. Условием активации служит переменная окружения NODE_ENV, установленная в значение development. Разработчик, следуя инструкциям, запускает проект в режиме разработки, и обфусцированная вредоносная логика начинает работу.

Первый этап (Stage 0) представляет собой загрузчик, который не выполняет все вредоносные операции самостоятельно. Вместо этого он порождает три скрытых дочерних процесса Node.js и передаёт в них второй этап (Stage 1). Анализ в контролируемой среде показал, что загрузчик связывается с командно-контрольным сервером (C2, сервер управления и контроля) по адресу 172.86.126.76:8087, отправляет логи запуска и записывает файлы блокировки /tmp/pid.1.1.lock, /tmp/pid.1.2.lock и /tmp/pid.1.3.lock. Наличие этих файлов на хосте свидетельствует о возможном выполнении вредоносного кода.

Каждый из трёх скриптов второго этапа выполняет свою функцию. Первый скрипт (payload-1.js) нацелен на кражу данных из браузера и криптовалютных кошельков. Он считывает базы данных входа Chromium-браузеров (Login Data, Login Data For Account, Web Data), обходит каталог Local Extension Settings для извлечения данных расширений кошельков (например, bravewallet) и пытается получить доступ к системной связке ключей macOS (~/Library/Keychains/login.keychain-db). Собранные данные загружаются на сервер 172.86.126.76:8085/upload с использованием фиксированного ключа проверки SuperStr0ngSecret@)@^ и идентификатора пользователя 103.

Второй скрипт (payload-2.js) отвечает за сканирование локальной файловой системы и поиск файлов, содержащих чувствительную информацию. Он использует набор ключевых слов: .env, wallet, seed, mnemonic, id_rsa, pem, p12, api_key, credentials, password, а также расширения документов .docx, .pdf, .xlsx. При сканировании приоритетных каталогов (Рабочий стол, Документы, Загрузки) скрипт загружает все читаемые файлы размером менее 5 МБ без фильтрации по ключевым словам. Затем он отправляет их на адрес 172.86.126.76:8086/upload.

Третий скрипт (payload-3.js) предоставляет злоумышленнику полный удалённый доступ к заражённой системе. Он подключается к C2-серверу через Socket.IO и поддерживает постоянный канал управления. Скрипт регистрирует хост на сервере, отправляет информацию о системе (имя хоста, тип ОС, имя пользователя). После установки соединения атакующий может выполнять команды: список каталогов (код 102), чтение файлов (код 107), загрузка файлов из указанного каталога (код 108) и произвольное выполнение системных команд через exec(). Дополнительно реализована функция интерактивной оболочки (shell): события shellOpen, shellInput, shellResize, shellClose позволяют управлять удалённым терминалом. Также скрипт непрерывно отслеживает буфер обмена пользователя, используя инструменты pbpaste, xclip или xsel. Это даёт возможность перехватывать скопированные пароли, токены или приватные ключи.

Вся кампания представляет собой не просто сбор информации, а полноценный удалённый троян (RAT - remote access trojan). Заражённая машина разработчика может быть полностью скомпрометирована. Под угрозой оказываются SSH-ключи, учётные данные облачных провайдеров, токены CI/CD, сессии браузеров и данные криптовалютных кошельков. Если на хосте хранятся seed-фразы или приватные ключи, злоумышленники могут вывести цифровые активы.

Специалисты SlowMist подчёркивают, что данная атака не единична. В последнее время участились случаи, когда злоумышленники используют сценарии найма, code review и проектного сотрудничества для убеждения разработчиков запускать вредоносные репозитории. Определить безопасность репозитория только по его веб-странице или истории коммитов невозможно. Необходимо вручную проверять, какие скрипты и конфигурации выполняются при установке зависимостей и запуске проекта. Особое внимание следует уделять файлам необычно большого размера, скриптам preinstall/postinstall, плагинам сборки и любым JavaScript-файлам, подключаемым через require.

Если проект уже запущен, требуется немедленно изолировать хост и сохранить данные о работающих процессах, сетевых соединениях и файлах, созданных в /tmp. После этого необходимо сменить SSH-ключи, облачные учётные данные и токены CI/CD, а также деактивировать сессии браузеров и бирж. При возможном раскрытии приватных ключей или seed-фраз кошельков следует переместить активы на новый защищённый кошелёк и отозвать все утверждения со старых адресов.

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

IPv4

  • 172.86.126.76

URL

  • http://172.86.126.76:8085/api/upload-file
  • http://172.86.126.76:8085/upload
  • http://172.86.126.76:8086/upload
  • http://172.86.126.76:8087/api/log
  • http://172.86.126.76:8087/api/notify
  • https://github.com/borismelnik1982-netizen/governance-staking-build

WebSocket

  • ws://172.86.126.76:8087

SHA256

  • 78315f36bfe3ac62ec1a69a281be64c0db3614250a7851708813b0739a07842f

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