Атаки на ланцюги поставок програмного забезпечення 2025 - шкідливі пакети - шкідливі пакети python - шкідливі пакети npm

Більш детальний огляд атак на ланцюги поставок програмного забезпечення у 2025 році: порівняння кампаній PyPI та npm

Нещодавно Xygeni спостерігала тривожну тенденцію в ландшафті атак на ланцюги поставок програмного забезпечення у 2025 році., що з'являється у двох популярних менеджерах пакетів: PyPI та нммВ рамках наших постійних зусиль з розвідки загроз,Раннє попередження про шкідливе програмне забезпечення (MEW) від Xygeni Інструмент виявив окремий, але методологічно схожий екземпляр шкідливого пакета, раніше завантаженого до іншого реєстру. Цей випадок демонструє, як зловмисники розвивають та повторно використовують методи атак в різних екосистемах, особливо через шкідливі пакети Python та шкідливі npm-пакети, що збільшує ризик проникнення шкідливих пакетів у ланцюги поставок програмного забезпечення з відкритим кодом.

MEW від Xygeni: Виявлення подібностей

Інструмент MEW від Xygeni створений для виявлення та позначення шкідливих пакетів, особливо тих, що пов'язані з атаками на ланцюги поставок програмного забезпечення у 2025 році, щойно вони публікуються в реєстрах програмного забезпечення з відкритим кодом. Він працює, аналізуючи нові пакети на предмет підозрілої поведінки.

У цьому випадку було визначено два шкідливі пакети Python (graphalgo на PyPI) та шкідливі npm-пакети (express-cookie-parser на npm).

Шкідливі пакети Python та npm в атаках на ланцюги поставок програмного забезпечення (2025)

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

Типоскватінг

Вони обидва намагалися видавати себе за популярні існуючі пакети.

  • графалго (PyPI): «Пакет Python для створення та маніпулювання графами та мережами.«Завантажено користувачем з іменем «Ларрітек» 13 червня 2025 року цей пакет представив себе як альтернативу PyPi оригінальному нешкідливому проекту graphalgo, який пізніше був перейменований на graphdict.
  • експрес-парсер-кукі (npm)Цей пакет імітував відомий пакет cookie-parser, навіть відображаючи його README.md. Така імперсонація є класичною тактикою використання існуючої довіри.

Заплутування як перша лінія захисту

Обидва пакети маскували свій шкідливий код у вихідних файлах. Для графалго, зашифрований код було знайдено всередині /utils/load_libraries.py. У разі експрес-парсер-кукі, cookie-loader.min.js містила завуальоване корисне навантаження.

Цей початковий рівень обфускації зазвичай використовується для перешкоджання звичайному огляду та статичного аналізу. Обфускація була досить простою: багаторазове стиснення ZLib плюс кодування Base64. Такий тип обфускації чітко вказує на те, що програмне забезпечення намагається приховати свою поведінку. Поряд з іншими доказами, це дозволило Xygeni MEW класифікувати пакети як потенційно шкідливі програми. Під час етапу підтвердження наші експерти оперативно підготували сценарій деобфускації, який виявив очевидно шкідливий етап дроппера.

Багатоетапна доставка корисного навантаження та спільна точка відправлення

Обидва пакети функціонували як початкові «крапельниці», що створює умови для реального корисного навантаження. Вони мали спільний зовнішній «насінняURL-адреса файлу:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

Цей ідентичний зовнішній файл початкового значення є вагомим показником спільного зловмисника. Цікаво, що вміст цього файлу початкового значення, схоже, є простими змінними середовища (наприклад, JWT_SECRET, PORT), що потенційно може ввести в оману щодо його фактичної функції.

Динамічне розділення C2 з DGA

Складна тактика, що спостерігається в цих шкідливих пакетах, полягає в використанні алгоритму генерації домену (DGA) для динамічного розпізнавання сервера командування та управління (C2). Ця техніка, яку часто можна побачити в розширених атаках на ланцюги постачання програмного забезпечення у 2025 році, спирається на хеш SHA256, отриманий з вмісту seed-файлу, у поєднанні з іншими жорстко закодованими значеннями. Таким чином, інфраструктура C2 часто змінюється, що робить традиційне чорне спискування набагато менш ефективним. У цьому випадку варіант npm використовував фіксоване значення 496AAC7E як частину своєї логіки DGA.

Встановлення наполегливості

Обидва зловмисники прагнули встановити тривалу присутність на уражених системах. Їхня стратегія полягала у видаленні файлу, startup.py (для PyPi) або startup.js (для npm), у поширені каталоги даних користувачів Google Chrome у різних операційних системах (Windows, Linux, macOS).

Очищення після виконання

Щоб мінімізувати сліди, обидва шкідливі скрипти виконали операції очищення. Це включало видалення їхніх початкових файлів-дропперів (load_libraries.py, cookie-loader.min.js) та модифікація легітимних файлів пакетів (__init__.py, index.js), щоб видалити посилання на вже видалені компоненти.

Індикатори компрометації у шкідливих пакетах Python та npm

  • Пакет PyPIgraphalgo (опубліковано larrytech, 13 червня 2025 р.)
  • npm-пакетexpress-cookie-parser (зокрема, версія 1.4.12)
  • Доступ до спільної URL-адреси початкового значення

https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

  • Постійні імена файлів: startup.py (Python), startup.js (JavaScript)
  • Поширені постійні шляхи (залежно від ОС)У каталогах даних користувачів Google Chrome (наприклад, AppData\Local\Google\Chrome\UserData\Scripts\ в Windows, ~/.config/google-chrome/Scripts/ на Linux тощо).

Як захиститися від шкідливих пакетів під час атак на ланцюг поставок програмного забезпечення у 2025 році

Рекомендований підхід для розробників

Цей інцидент слугує цінним прикладом розвитку ландшафту загроз атак на ланцюги поставок програмного забезпечення у 2025 році. Він показує, як шкідливі пакети Python та шкідливі пакети npm можуть просочуватися в довірені екосистеми, часто уникаючи виявлення, поки не стає надто пізно. Саме тому раннє виявлення, розумні інструменти та проактивна гігієна системи тепер є невід'ємними частинами будь-якого безпечного робочого процесу DevOps. Розробникам рекомендується враховувати наступне:

Огляд залежностей

Якщо ваші проекти включали графалго or експрес-парсер-кукі, було б доцільно продовжити їх видалення.

  • Для PyPI: pip uninstall graphalgo
  • Для npm: npm uninstall express-cookie-parser

Гігієна системи

Розгляньте можливість проведення комплексного сканування системи. Також бажано вручну перевірити поширені шляхи до каталогів даних користувачів Chrome на наявність будь-яких неочікуваних startup.py or startup.js файли.

Проактивні заходи безпеки

  • Оцінка нових залежностейВстановіть процедуру ретельної оцінки нових пакетів перед інтеграцією, зосереджуючись на пакетах від незнайомих видавців.
  • Інтеграція інструментів безпекиІнструменти, такі як MEW від Xygeni, а також інші засоби аналізу складу програмного забезпечення (SCA) рішення, можуть забезпечити критично важливий рівень захисту, виявляючи підозрілу поведінку та вразливості.
  • Найменший привілейРобота середовищ розробки з принципом найменших привілеїв може допомогти обмежити потенційний вплив компрометації.
  • Обізнаність у мережіМоніторинг вихідного мережевого трафіку на наявність незвичайних з’єднань іноді може виявити згенеровані DGA комунікації C2.

Ключові компоненти load_libraries.py (від графалго)

  • download_remote_content(): Обробляє отримання файлів із зазначених URL-адрес.
  • run_process()Виконує зовнішні скрипти Python окремо, пригнічуючи вивід, щоб залишатися непомітним.
  • get_output_file_path()Визначає ідеальне розташування в системі для постійного файлу startup.py.
  • remove_self()Організує очищення після виконання від початкових шкідливих файлів та модифікацій пакетів.
  • simple_shift_encrypt() / simple_shift_decrypt()Користувацькі криптографічні функції для маскування каналів зв'язку, що є критично важливим для реалізації DGA.
  • load_libraries()Центральна функція, яка координує весь багатоетапний процес, від початкового завантаження до остаточного виконання корисного навантаження та очищення.

Наслідки

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

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

Забезпечте розробку та доставку програмного забезпечення

з пакетом продуктів Xygeni