Фальшиве розширення 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.

Щоб зменшити ці типи загроз, розробники та команди безпеки повинні врахувати наступне.

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

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

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