Атака на доверие: злоумышленники взломали старые расширения VSCode, чтобы красть ключи блокчейн-разработчиков

information security

Киберпреступники провели целенаправленную и изощрённую атаку на цепочку поставок программного обеспечения, скомпрометировав три популярных расширения для Visual Studio Code, предназначенных для разработчиков блокчейн-решений. Атака, ориентированная на специалистов по смарт-контрактам Ethereum, демонстрирует новую тактику: злоумышленники не создавали новые вредоносные пакеты, а захватили контроль над учётной записью издателя, которая бездействовала почти восемь лет, чтобы унаследовать его репутацию и тысячи установок. В результате около 27 500 разработчиков по всему миру могли быть заражены бэкдором, предназначенным для кражи приватных ключей, сид-фраз кошельков и другой критически важной информации.

Описание

Инцидент произошёл 25 марта 2026 года, когда в официальном магазине расширений VS Code Marketplace одновременно были обновлены до версии 0.1.8 три плагина от издателя IoliteLabs: "solidity-macos", "solidity-windows" и "solidity-linux". Все они были созданы в 2018 году для поддержки разработки на языке Solidity в экосистеме Iolite, совместимой с Ethereum, и с тех пор не обновлялись. Новые версии, однако, не содержали улучшений функциональности. Вместо этого злоумышленники полностью удалили исходный код языкового сервера Solidity, оставив лишь пять заглушек для команд, и внедрили многоступенчатый бэкдор. Аналитики компании StepSecurity, специализирующейся на безопасности цепочек поставок, обнаружили и детально проанализировали всю цепочку атаки, включая ранее не описанные компоненты.

Ключевой особенностью атаки стало умелое использование доверия, заработанного оригинальным разработчиком. Расширения имели многолетнюю историю публикации и в сумме около 27 500 установок - показатели, которые обычно указывают на легитимность. Злоумышленники, получив контроль над учётной записью издателя IoliteLabs, сохранили эту историю, что резко снизило уровень подозрений у пользователей и автоматических систем проверки. Более того, исходный код в публичном репозитории на GitHub не обновлялся с 2018 года, что означало: версия 0.1.8 была опубликована напрямую в маркетплейс без каких-либо изменений в открытом коде. Это явный признак компрометации учётной записи, а не законного обновления.

Техническая реализация атаки отличалась высокой степенью скрытности и обфускации. Вредоносный код был спрятан не в основном файле расширения ("extension.js"), а внутри поддельной версии легальной библиотеки сжатия "pako", входящей в состав "node_modules". При этом использовалось пять различных техник обфускации для уклонения от статического анализа: escape-последовательности Юникода для строк, доступ к свойствам через квадратные скобки, добавление бессмысленных арифметических операций с XOR, "разворот" строки для проверки платформы (например, "darwin" было записано как "niwrad".reverse()) и, наконец, само размещение кода в зависимости. Каждый раз при запуске VS Code расширение, благодаря событию активации "onStartupFinished", скрытно загружало и исполняло полезную нагрузку, специфичную для операционной системы, с трёх контролируемых атакующими доменов.

На машинах под управлением Windows атака проходила в два этапа. Сначала загружался пакетный файл "calc.bat", который, в свою очередь, скачивал и устанавливал MSI-пакет под названием "7WhiteSmoke.msi". Этот установщик выдавал себя за обновление Chrome (с указанием автора "Chrome" и названия "ChromeUpdate") и размещал в системе DLL-библиотеку с именем "ntuser". Установка происходила с использованием техники Living-off-the-Land (LOLbin) через "regsvr32", что позволяло обойти многие системы защиты, отслеживающие запуск PowerShell или cmd. Экспорты библиотеки, "SetDesktopMonitorHook" и "ClearDesktopMonitorHook", указывают на её возможную функцию - перехват ввода с клавиатуры на уровне всей рабочей сессии Windows, что является классическим методом сбора учётных данных.

На macOS схема была ещё сложнее и включала механизм постоянного закрепления в системе. Скрипт "doc.sh" создавал скрытый файл ".system_updater", регистрировал поддельный LaunchAgent с меткой "com.apple.system.updater" (имитирующий системную службу Apple) для запуска при каждой загрузке, а также обходил защиту Gatekeeper, удаляя атрибут карантина с загруженных исполняемых файлов. Примечательно, что для macOS злоумышленники подготовили две отдельные полезные нагрузки: одну для процессоров Intel, другую - для Apple Silicon. Анализ встроенных в эти бинарники модулей Node.js, таких как "archiver" и "form-data", позволяет предположить, что их задача - рекурсивный поиск, архивация и выгрузка файлов с атакованной машины, что идеально подходит для кражи конфиденциальных данных.

Особую тревогу вызывает целевая аудитория этой атаки - разработчики Solidity и Ethereum. На их рабочих станциях часто хранятся приватные ключи криптокошельков, сид-фразы для восстановления, API-ключи к провайдерам узлов (нод) и учётные данные для автоматического развёртывания смарт-контрактов. Кража даже одного такого ключа, связанного с развёртыванием на основной сети (mainnet), может привести к прямому финансовому ущербу в размере шести или семизначных сумм. Именно это делает их столь привлекательными целями для сложных цепочечных атак.

Данный инцидент высвечивает системные уязвимости в экосистемах открытого ПО. Доверие, основанное на возрасте расширения и количестве установок, оказалось ненадёжным индикатором. Отсутствие в маркетплейсах механизмов повторной аутентификации для давно неактивных издателей или оповещения пользователей о внезапной активности после многолетнего перерыва создаёт значительные риски. Кроме того, как показала атака, проверка безопасности расширений, ограниченная только анализом точки входа, совершенно недостаточна, если злоумышленник может внедрить код в любую из bundled-зависимостей.

Для разработчиков, которые могли установить скомпрометированные расширения, критически важно немедленно их удалить, провести очистку системы по указанным в анализе артефактам и, что самое важное, считать все учётные данные, ключи и сид-фразы, которые находились на потенциально заражённой машине, скомпрометированными. Этот случай служит суровым напоминанием о том, что безопасность цепочки поставок - это не только про зависимости в "package.json", но и про инструменты разработки, которые мы безоговорочно доверяем.

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

Domains

  • cdn.rraghh.com
  • oortt.com
  • rraghh.com

SHA256

  • 38cb0e1209a721a565e71f9dc0593437723dc32c4d2fe2d23de141f4d306ccea
  • 40a6bbc8260bc17faa583dd3c3954a0e3c4b0abb923baaecd2ad7901311d5d82
  • 5886a9b659c05fb3e3077c80bb6a8be6acb1064683db542fae90e3bf9757f95f
  • 5f9c09c2c432a6b94f2200455065bcfd1237f8a01b913a7c9e37f164ff99a84c
  • 8e7213940a2f590af145226d22a96d416bcca4bc6cba3400a8a96fd3e7018080
  • e0f206aac2c3fa733b0c466d2ebb86ba038cf1fe2edeee21e94a4d943a27f63b
  • e7ec4e35d94d01a2e4ee5dca62b8fb08ac7411596edb54b398651f4eb563561d
  • e903ae267bf7ed1d02b218c1dc7cf6d87257e87de9fbda411a13f9154716bfa3
  • fcd398abc51fd16e8bc93ef8d88a23d7dec28081b6dfce4b933020322a610508
Комментарии: 0