Дослідники з кібербезпеки виявили нову витончену кампанію з атаки на ланцюжки постачання (supply chain attacks), у межах якої зловмисники скомпрометували кілька пакетів у реєстрах npm та Go. Замість використання класичних методів автоматичного запуску шкідливого коду, з якими навчилися боротися сучасні інструменти захисту, автори атаки застосували хитру тактику. Вони впровадили шкідливі команди у конфігураційні файли завдань популярного редактора VS Code (так звані VS Code Tasks), щоб завантажити та запустити кросплатформний інфостілер, написаний на Python, на машинах розробників під управлінням Windows, Linux та macOS.

Традиційно зловмисники, що атакують розробників через реєстри залежностей (такі як npm), покладаються на життєві цикли пакетів (lifecycle scripts) у файлі package.json. Скрипти типу preinstall або postinstall автоматично запускають шелл-команди одразу після встановлення пакета за допомогою утиліти npm install. Проте, через високу активність шкідливого ПЗ у цьому векторі, розробники npm, починаючи з версії 12, впровадили жорсткі обмеження та попередження для таких скриптів. Ба більше, сучасні антивіруси та сканери безпеки автоматично аналізують файли конфігурації пакетів на наявність підозрілих команд інсталяції, що робить цей шлях дедалі менш ефективним для атакуючих.

Щоб обійти ці механізми захисту, організатори нової кампанії відмовилися від використання скриптів інсталяції в npm. Натомість вони інтегрували свої інструкції у конфігураційний каталог .vscode, що часто постачається разом із кодом репозиторію. У файлі .vscode/tasks.json описуються завдання для автоматизації рутинних процесів, наприклад, компіляції проекту чи запуску тестів. Атакуючі налаштували завдання, які виконують приховані шелл-команди для завантаження шкідливого Python-скрипту з віддаленого сервера. Оскільки запуск завдань є легітимною функцією середовища розробки, багато засобів статичного аналізу коду ігнорують вміст папки .vscode, вважаючи її локальними налаштуваннями проекту.

Колі розробник завантажує компрометований npm-пакет або клонує відповідний Go-репозиторій і відкриває його у середовищі VS Code, редактор пропонує увімкнути режим довіри до робочої області (Workspace Trust). Якщо користувач погоджується та надає довіру, налаштовані таски отримують право на виконання. При першій же спробі збірки проекту, запуску відлагодження або навіть автоматично (якщо таски налаштовані на запуск при відкритті робочої області), у фоновому режимі виконується завантажувач. Він звертається до інфраструктури зловмисників, стягує Python-агент і запускає його в системі користувача.

Сам шкідливий агент є класичним інструментом для викрадення конфіденційної інформації (infostealer). Програма написана на мові Python, що дозволяє їй успішно виконуватися на будь-якій операційній системі, де встановлений інтерпретатор. Стілер фокусується на зборі конфіденційних даних розробника: збережених паролів та сесійних файлів cookie з браузерів, ключів доступу до хмарних сервісів AWS, Azure та Google Cloud, конфігурацій систем контролю версій Git, а також токенів авторизації у месенджерах та криптогаманцях. Усі зібрані дані архівуються та відправляються на сервер управління зловмисників.

Що це означає на практиці

Для захисту робочих станцій ваших розробників від подібних прихованих загроз у середовищах розробки, ми радимо впровадити такі заходи безпеки:

  • Ніколи бездумно не погоджуйтеся на Workspace Trust у VS Code. Якщо ви клонували репозиторій з публічного джерела або завантажили сторонній пакет, завжди відкривайте його в безпечному режимі (Restricted Mode). Не надавайте статус довіреного (Trusted Workspace) проектам, походження яких викликає сумніви або код яких ви ще не встигли проаналізувати.
  • Перевіряйте приховані папки конфігурації. Перед запуском будь-яких команд або наданням довіри робочій області перевіряйте вміст каталогу .vscode (зокрема файли tasks.json, launch.json та settings.json). Шукайте нетипові команди завантаження файлів (наприклад, використання curl, wget, certutil чи powershell) або виклики зовнішніх скриптів.
  • Контролюйте та обмежуйте права інтерпретаторів. Налаштуйте системи захисту кінцевих точок (EDR) на моніторинг поведінки процесів, які запускаються середовищем розробки. Звертайте увагу на випадки, коли процес VS Code або розширення редактора породжують процеси командного інтерпретатора, які намагаються з'єднатися із зовнішніми невідомими IP-адресами.
  • Використовуйте інструменти аналізу залежностей (SCA). Інтегруйте у робочі процеси розробки та CI/CD-пайплайни автоматичні засоби перевірки сторонніх бібліотек на наявність відомих вразливостей або ознак шкідливого ПЗ (наприклад, Snyk, Dependabot або OWASP Dependency-Check).
  • Ізолюйте середовище розробки. За можливості виконуйте збірку та тестування неперевірених сторонніх проектів у ізольованих контейнерах, віртуальних машинах (наприклад, за допомогою Dev Containers) або спеціальних хмарних середовищах розробки, щоб локальна операційна система розробника із конфіденційними даними залишалася захищеною.