Скануйте, щоб завантажити додаток Gate
qrCode
Більше варіантів завантаження
Не нагадувати сьогодні

Аналіз отруєння NPM — Відтворення атаки Shai-Hulud

Автор: Joker & Ccj

Фон

Нещодавно в спільноті NPM знову спалахнула масова атака на пакети NPM, яка має високу кореляцію з атакою Shai-Hulud у вересні 2025 року. Зловмисний код у цьому пакеті NPM викрадає ключі розробників, API-ключі та інші чутливі дані, такі як змінні середовища, використовуючи ключі для створення публічних репозиторіїв і завантаження цих викрадених чутливих даних.

Медленний туман ( SlowMist ) — самостійно розроблений інструмент для моніторингу загроз у Web3 та динамічного забезпечення безпеки MistEye, який миттєво реагує та швидко надає відповідну інформацію про загрози, забезпечуючи клієнтів ключовими заходами безпеки.

!

!

Одночасно, бекенд збережеться зловмисний зразок у перший момент і обчислить його відповідні значення характеристик, такі як SHA-256.

!

Процес аналізу

В якості прикладу пакета @asyncapi/php-template@0.1.1, порівнюючи з попередньою версією @asyncapi/php-template@0.1.0, можна помітити, що версія 0.1.1 додала два нові js файли: setup_bun.js та обфускований bun_environment.js.

!

У файл package.json додано скрипт preinstall, що дозволяє автоматично виконувати setup_bun.js перед встановленням залежностей.

!

У файлі setup_bun.js спочатку перевіряється, чи встановлений Bun в системі. Якщо не встановлений, Bun буде автоматично завантажено з офіційного сайту та встановлено, а також правильно налаштовано змінні середовища для знаходження виконуваного файлу Bun.

Нарешті використовуйте bun для виконання файлу bun_environment.js, який є сильно заплутаним шкідливим файлом.

!

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

Крадіжка свідоцтв

AWS: Цей шкідливий сценарій реалізує методи runSecrets() та listAndRetrieveAllSecrets(). Метод runSecrets() перебирає всі доступні облікові дані для доступу до хмари та всі можливі регіони, максимізуючи діапазон сканування; тоді як listAndRetrieveAllSecrets() виконує “глибоке копання” в межах вказаних облікових даних та регіону, перебираючи всі Secret та отримуючи їх останній відкритий вміст. У поєднанні обидва методи дозволяють зловмисникові експортувати всі доступні SecretString та SecretBinary з облікового запису AWS жертви за один раз.

!

Метод enumerateValidCredentials() призначений для всебічного збору всіх доступних ключів хмарних сервісів. Він поетапно перевіряє різні джерела, такі як змінні середовища, конфігураційні файли, CLI-авторизацію тощо, і всі успішно перевірені облікові дані будуть зафіксовані для подальшого використання при крадіжці хмарних секретів.

!

GCP: Інший метод listAndRetrieveAllSecrets(), реалізований у цьому шкідливому скрипті, призначений для модуля GCP. Він спочатку перераховує всі секрети під зазначеним Project ID для цього GCP проекту, а потім безпосередньо знаходить останню версію кожного секрету і викликає accessSecretVersion для читання його відкритого вмісту. Врешті-решт, всі отримані секрети (такі як API Key, паролі бази даних тощо) збираються по одному.

!

Azure: Інший метод listAndRetrieveAllSecrets(), реалізований у цьому зловмисному сценарії, спеціально націлений на модуль Azure. Спочатку він сканує всю підписку через Azure Resource Manager, щоб знайти всі Key Vault; потім, використовуючи отримані облікові дані, підключається до кожного Vault по черзі; нарешті, перераховує всі Secrets і викликає getSecret, щоб отримати відкриті значення кожного секрету.

!

У реалізації крадіжки чутливої інформації також використовуються легітимні засоби безпеки для атаки на жертву. У методі extractAndInstall() розпаковується та витягується бінарний файл TruffleHog, який спочатку призначався для виявлення та перевірки витоків конфіденційної інформації в кодових базах, таких як API ключі та облікові дані, але використовується зловмисниками для сканування всієї файлової системи жертви.

!

NPM постачання ланцюга

Цей шкідливий скрипт реалізує функцію updatePackage() для поширення через постачання NPM. Спочатку, використовуючи вкрадений NPM Token, завантажується вихідний код легального пакету NPM, на який жертва має права публікації, після чого модифікується файл package.json, в який в поле scripts вставляється шкідлива команда скрипту preinstall. Одночасно шкідливий скрипт поміщається в пакет, автоматично збільшуючи номер версії пакета на 1, щоб спровокувати автоматичне оновлення користувача, і шкідливий пакет NPM надсилається до офіційного репозиторію NPM.

!

Задні двері та C2

Після викрадення інформації зловмисник використає вкрадений GitHub Token для створення репозиторію з випадковою назвою під своїм обліковим записом і отримає токен реєстрації, замаскувавши комп'ютер жертви під самостійно хостований GitHub Actions Runner цього репозиторію. Після цього зловмисник впровадить шкідливий робочий процес у репозиторій, так що будь-яке завдання Actions, яке буде запущене, виконається на машині жертви, що дозволить здійснити віддалене виконання коду.

!

І завантажте цю викрадену інформацію, зашифровану подвійним base64, до створеного сховища, опис яких є “Sha1-Hulud: The Second Coming.”.

!

Після розшифровки можна побачити чутливі дані, які були витічені користувачем.

!

!

!

Підсумок

Ця атака на NPM-репозиторій поєднує в собі черв'яка та довготривалу автономну програму, використовуючи TruffleHog для атаки. Команда безпеки SlowMist рекомендує розробникам під час створення та випуску нових ітерацій використовувати стратегію блокування версій пакетів. Якщо в пакеті є необхідні оновлення безпеки або функціональності, їх слід оновити через суворий внутрішній процес аудиту безпеки, а також одночасно оновити заблоковану версію, щоб уникнути сліпого оновлення, яке може призвести до нових ризиків.

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Репост
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити