PhantomRaven: як Remote Dynamic Dependencies роблять атаки на npm невидимими

CyberSecureFox 🦊

Дослідники Koi Security повідомили про тривалу кампанію PhantomRaven, у межах якої з серпня 2024 року до реєстру npm було додано 126 шкідливих пакетів із сукупною кількістю завантажень понад 86 000. На момент публікації звіту близько 80 пакетів залишалися активними. Ключовою особливістю операції став підхід Remote Dynamic Dependencies (RDD), що суттєво знижує ефективність звичних методів детекції та статичного аналізу.

Що таке RDD і чому це «сліпа зона» для захисту

У типовому сценарії залежності пакета явно описані у package.json і завантажуються з довіреного реєстру npm. RDD змінює модель загроз: під час інсталяції модуль може автоматично підтягувати та виконувати код з зовнішніх URL (навіть через незашифрований HTTP). Формально при цьому в маніфесті може бути вказано нуль залежностей, що вводить в оману як розробників, так і інструменти перевірки.

Чому lock-файли та статичні сканери безсилі

Коли користувач виконує npm install, шкідливий код ініціює приховане завантаження пейлоада з керованого зловмисниками сервера і одразу його запускає. Оскільки така «динамічна» залежність не фіксується у lock-файлі і не проходить через реєстр npm, статичний аналіз її не бачить. Наслідок — розрив прозорості ланцюга постачання та відсутність відтворюваності збірок.

Таргетування, нереплікованість і ексфільтрація даних

За даними Koi Security, шкідливий пейлоад завантажується щоразу заново й не кешується. Це дає PhantomRaven змогу таргетувати відповіді: перевіряти IP, повертати «чистий» контент дослідникам ІБ і підмінювати пейлоад для корпоративних мереж або хмар. Такий дизайн ускладнює форензіку і реплікацію атаки.

Після первинної компрометації малварь збирає телеметрію хосту та викрадає чутливі дані, зокрема токени доступу. Це відкриває шлях до атак на ланцюг постачання: компрометація репозиторіїв, CI/CD і впровадження шкідливого коду у легітимні артефакти. Ексфільтрація реалізована кількома каналами для підвищення надійності: HTTP GET (дані в URL), HTTP POST (JSON) і WebSocket.

Мімікрія під відомі екосистеми та slopsquatting через LLM

Частина пакетів маскувалася під інструменти із екосистем GitLab та Apache, що підвищувало довіру та CTR під час встановлення. Окрім цього, оператори застосовують slopsquatting — експлуатацію «галюцинацій» LLM-асистентів: ШІ може «вигадати» правдоподібну, але неіснуючу залежність, а зловмисники оперативно реєструють такий пакет у npm.

Ризики для ланцюга постачання ПЗ і DevOps-інфраструктури

Підхід RDD підриває звичні практики керування залежностями: вміст lock-файлу та звіти статичних сканерів не відображають фактичний код, завантажений під час інсталяції. У збірних середовищах це створює високі ризики: від компрометації білд-агентів і секретів до розповсюдження шкідливих артефактів. Історично подібні інциденти (наприклад, event-stream у 2018-му чи ua-parser-js у 2021-му) показали, як швидко локальна проблема переростає у масштабну Supply Chain-атаку.

Практичні кроки захисту для розробників і SOC

Мінімізуйте «сліпі зони» інсталяції. У CI/CD використовуйте режими без виконання скриптів (наприклад, npm ci з ігноруванням скриптів), будьте обережні з постінсталяційними хуками та застосовуйте оточення з обмеженим виходом у мережу, дозволяючи лише HTTPS до довірених доменів реєстру.

Посилюйте мережеві політики. Блокуйте вихідні HTTP-запити, забороняйте завантаження коду з неперевірених URL на етапах збірки, впроваджуйте egress-контроль і TLS-інспекцію для виявлення аномалій.

Керуйте залежностями прозоро. Валідуйте нові пакети: походження, репутацію автора, журнал релізів, наявність вихідних кодів. Відстежуйте typosquatting/slopsquatting, використовуйте внутрішній дзеркальний реєстр або кеш довірених компонентів.

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

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

Кампанія PhantomRaven демонструє, що зловмисники вправно поєднують архітектурні особливості npm з поведінковими помилками користувачів. Впровадьте принцип «мінімально необхідного інтернету» для збірок, вимкніть зайві скрипти, обмежте зовнішні підключення і запровадьте незалежну перевірку нових пакетів. Ці кроки істотно зменшать площу атаки та допоможуть запобігти наступному інциденту у вашому ланцюгу постачання.

Залишити коментар

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються дані ваших коментарів.