Фальшивое расширение VS Code на npm распространяет многоступенчатое вредоносное ПО

Команда Mend.io обнаружила фальшивое расширение для VS Code – truffelvscode, которое осуществляет тайпсквоттинг популярного расширения truffle для VS Code. Это расширение выступает в качестве троянского коня для многоступенчатого вредоносного программного обеспечения. В этом блоге подробно рассматривается, как работает вредоносное расширение, его методы обфускации и IOC, связанные с этим инцидентом.

Fake-VS-graphic-1
Рисунок 1. Цепочка атаки

Расширения VS Code

Расширения VS Code – это дополнения, которые улучшают Visual Studio Code, добавляя новые функции, темы, дебаггеры и другие интеграции. Это помогает разработчикам настраивать рабочий процесс, улучшать качество кода и интегрироваться с такими инструментами, как Git, Docker и даже вспомогательными приложениями для кодирования на основе искусственного интеллекта. Расширения устанавливаются из VS Code Marketplace.

Анализ пакета

Пакет был опубликован 1 февраля 2025 года. Изучив код, было обнаружено, что пакет состоит только из двух файлов: package.json и index.js. Файл package.json выглядит нормальным, без неправильных установочных скриптов. Но он имеет такое же описание, как и оригинальное расширение truffle: “Создание, дебаг и развертывание смартконтрактов на EVM-совместимых блокчейнах”.

Fake-VS-graphic-2
Рисунок 2. Оригинальный файл package.json с оригинальным описанием расширения

Рассматривая файл index.js, было обнаружено сильно обфусцированный код. Изучив этот файл немного глубже, с помощью инструмента деобфускатор, получилось обнаружить в конце файла команду “exec”. Эта команда соединяется с внешним хостом для загрузки и выполнения первой стадии вредоносного программного обеспечения.

Fake-VS-graphic-3
Рисунок 3. Обфусцированный файл index.js с вредоносной командой exec

Многоэтапная цепочка атаки

Атака состоит из нескольких этапов, каждый из которых основывается на предыдущем. Все сделано таким образом, чтобы в конечном итоге обеспечить злоумышленнику удаленный контроль над скомпрометированной системой.

Этап 1: Загрузка обфусцированного пакетного файла

После выполнения обфусцированный файл index.js инициирует загрузку пакетного файла. Примечательно, что этот пакетный файл сам является обфусцированным с помощью Abobus-obfuscator – инструмента, который значительно усложняет статический анализ. Обфускация не только скрывает истинную цель скрипта, но и затрудняет обнаружение и реинжиниринг для автоматизированных инструментов анализа.

Fake-VS-graphic-4
Рисунок 4. Обфусцированный пакетный файл

Этап 2: Выполнение вредоносной DLL

Чтобы понять поведение этого пакетного файла, он был запущен в изолированной среде. После выполнения было установлено, что пакетный файл был запрограммирован на загрузку файла библиотеки динамических ссылок (dynamic-link library, DLL) с помощью тихого вызова powershell WebRequest – второго этапа работы вредоносного программного обеспечения. После загрузки пакетный файл немедленно запускает эту DLL, которая служит критически важным компонентом в цепочке атаки и является пусковым механизмом для следующего этапа.

Fake-VS-graphic-5
Рисунок 5. Скрытое выполнение PowerShell, загрузка DLL второго этапа

Этап 3: Установка предварительно настроенного клиента ScreenConnect и получение удаленного доступа к скомпрометированному компьютеру

Чтобы исследовать подозрительную DLL, она была запущена через сервис any.run. Это онлайн-песочница для автоматического и динамического анализа поведения вредоносного ПО. После просмотра экспортированного отчета, цель выполнения этой DLL стала сразу очевидна: загрузить и запустить третью, завершающую стадию вредоносного ПО.

Fake-VS-graphic-6
Рисунок 6. Отчет Any.run, обнаруживающий третью стадию вредоносного программного обеспечения

Этот этап предусматривает загрузку и запуск инсталлятора ScreenConnect, который обычно известен как легитимная программа удаленного рабочего стола. В этом случае, распаковав инсталлятор, был обнаружен файл system.config, который содержал предварительно настроенный удаленный хост, порт и ключ шифрования. Это дает возможность настроить ScreenConnect для немедленного создания соединения между скомпрометированным компьютером и компьютером злоумышленника.

Fake-VS-graphic-7
Рисунок 7. Конфигурационный файл ScreenConnect, предварительная настройка удаленного хоста и порта

Наконец, чтобы доказать, что соединение действительно было установлено, была выполнена команда “netstat -ano | findstr 8041” после чего стало подтверждено, что анализ прошел успешно.

Fake-VS-graphic-8
Рисунок 8. Ответ Netstat, подтверждающий результаты проведенного анализа

Вывод

Обнаружение расширения truffelvscode указывает на тревожную тенденцию атак на цепочки поставок программного обеспечения, которые все чаще нацелены на разработчиков. Путем тайпсквоттинга злоумышленники могут распространять многоступенчатое вредоносное ПО, что позволяет им получить удаленный доступ к скомпрометированным системам. Этот инцидент служит напоминанием о необходимости быть осторожными при установке расширений VS Code, особенно тех, которые получены из публичных реестров пакетов, таких как npm.

Чтобы уменьшить эти типы угроз, разработчики и команды безопасности должны учитывать следующее.

  • Проверять подлинность пакетов, проверяя данные об издателе, количество загрузок и отзывы пользователей.
  • Анализировать содержимое пакетов перед установкой, особенно для расширений с минимальным количеством файлов и обфусцированных скриптов.
  • Отслеживать сетевую активность на предмет подозрительных исходящих соединений, которые могут свидетельствовать о выполнении вредоносного программного обеспечения.
  • Использовать автоматизированные инструменты сканирования безопасности для выявления тайпсквоттинга, запутанных скриптов и вредоносных зависимостей.

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

Подписаться на новости