SOC Prime Bias: Критично

12 Jun 2026 18:43 UTC

Масштабна атака на ланцюг постачання PyPI збирає хмарні облікові дані через Python Startup Hooks

Author Photo
SOC Prime Team linkedin icon Стежити
Масштабна атака на ланцюг постачання PyPI збирає хмарні облікові дані через Python Startup Hooks
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Координована операція в ланцюгу поставок під назвою Hades Campaign скомпрометувала 26 пакетів PyPI для викрадення хмарних облікових даних. Атака зловживає Python .pth файлами, щоб ініціювати шкідливий код під час запуску інтерпретатора, використовуючи середовище виконання Bun JavaScript для виконання корисного навантаження. Вона призначена для збирання секретів, пов’язаних з AWS, GCP, Azure, Kubernetes і GitHub на різних операційних системах.

Розслідування

Orca Security виявила 37 шкідливих wheel файлів, розповсюджених в екосистемах біоінформатики та розробки інструментів. Їх аналіз показав техніку міжплатформного виконання, в якій шкідливе програмне забезпечення завантажує Bun для запуску маскованих JavaScript-скриптів. Кампанія також генерує оманливий трафік до сервісів Anthropic AI та використовує техніки ін’єкції для зменшення ефективності безпеки на основі обробки природної мови (LLM).

Пом’якшення

Організації повинні негайно вилучити уражені пакети або зафіксуватися на безпечних версіях і змінити всі ймовірно скомпрометовані облікові дані. Це включає токени доступу до хмари, персональні токени доступу GitHub, ключі SSH і облікові дані реєстру Docker. Команди безпеки також повинні шукати відомі артефакти стійкості на хостах Linux, macOS та Windows.

Відповідь

Коли є підозра на компрометацію, ізолюйте уражену систему перед зміною облікових даних, щоб зменшити ризик здирства через демон gh-token-monitor . Відновіть будь-які розробницькі робочі станції та CI/CD-агенти, які виконували заражені пакети. Перевірте сховища GitHub на несанкціоновані зміни та новостворені сховища, що відповідають шаблонам назв атакуючих.

"graph TB %% Розділ визначення класів classDef technique fill:#99ccff %% Синій для технік MITRE ATT&CK classDef tool fill:#cccccc %% Сірий для інструментів і програмного забезпечення classDef action fill:#ff99cc %% Рожевий для конкретних дій або поведінки classDef persistence fill:#ccffcc %% Зелений для механізмів стійкості %% Визначення вузлів %% Початкова фаза доступу та виконання tech_supply_chain["<b>Техніка</b> – <b>T1195.001 Компрометація ланцюга поставок: Компрометація залежностей програмного забезпечення та інструментів розробки</b><br/>Шкідливі wheel файли, розповсюджені через PyPI."] class tech_supply_chain technique tech_user_exec["<b>Техніка</b> – <b>T1204.005 Виконання користувачем: Зловмисна бібліотека</b><br/>Збуджена під час ініціалізації інтерпретатора Python через файли *-setup.pth."] class tech_user_exec technique tech_poison_pipeline["<b>Техніка</b> – <b>T1677 Виконання зараженого конвеєра</b><br/>Код виконується автоматично в середовищах розробки та CI."] class tech_poison_pipeline technique %% Фаза корисного навантаження та виконання tool_bun["<b>Інструмент</b> – <b>Назва</b>: Bun JavaScript Runtime<br/>Завантажено для виконання обфускованого корисного навантаження."] class tool_bun tool tech_ipc["<b>Техніка</b> – <b>T1559.003 Міжпроцесорне спілкування: XPC Сервіси</b><br/>Використовується для запуску обфускованого payload _index.js."] class tech_ipc technique payload_js["<b>Файл</b> – <b>Назва</b>: _index.js<br/>Обфусковане JavaScript-корисне навантаження."] class payload_js tool %% Фаза стійкості tech_persistence["<b>Техніка</b> – <b>Стійкість</b><br/>Підтримка доступу в компрометованій системі."] class tech_persistence technique tech_launch_daemon["<b>Техніка</b> – <b>T1543.004 Створення або зміна системного процесу: Запуск демона</b><br/>Використовує служби systemd у Linux та LaunchAgents у macOS."] class tech_launch_daemon technique svc_monitor["<b>Процес/служба</b> – <b>Назва</b>: gh-token-monitor.service<br/>Приклад механізму стійкості."] class svc_monitor persistence %% Фаза доступу до облікових даних та їх ексфільтрації tech_cred_access["<b>Техніка</b> – <b>T1212 Використання вразливостей для доступу до облікових даних</b><br/>Читання пам’яті процесу для збору токенів AWS, GCP, Azure і GitHub."] class tech_cred_access technique tech_archive["<b>Техніка</b> – <b>T1560 Архівування зібраних даних</b><br/>Стиснення викрадених секретів із використанням gzip."] class tech_archive technique tech_exfil["<b>Техніка</b> – <b>T1567.001 Ексфільтрація через веб-сервіс: Ексфільтрація до сховища коду</b><br/>Відправка зашифрованих даних до репозиторіїв GitHub, контрольованих атакуючим."] class tech_exfil technique %% Сполучення %% Ланцюг поставок веде до виконання користувачем tech_supply_chain –>|веде до| tech_user_exec %% Виконання користувачем веде до зараженого конвеєра tech_user_exec –>|ініціює| tech_poison_pipeline %% Заражений конвеєр ініціює виконання корисного навантаження tech_poison_pipeline –>|виконує| tool_bun %% Використання інструментів для запуску JS-корисного навантаження через IPC tool_bun –>|використовує| tech_ipc tech_ipc –>|запускає| payload_js %% Корисне навантаження веде до стійкості payload_js –>|встановлює| tech_persistence tech_persistence –>|впроваджує| tech_launch_daemon tech_launch_daemon –>|створює| svc_monitor %% Стійкість дозволяє доступ до облікових даних svc_monitor –>|дозволяє| tech_cred_access %% Доступ до облікових даних веде до архівування tech_cred_access –>|призводить до| tech_archive %% Архівування веде до остаточної ексфільтрації tech_archive –>|готувати дані для| tech_exfil "

Потік атаки

Виявлення

Підозріла створення Plist файлу в LaunchAgents чи LaunchDaemons (через file_event)

Команда SOC Prime
12 червня 2026

Підозрілі дочірні процеси NodeJS [Linux] (через cmdline)

Команда SOC Prime
12 червня 2026

Створення файлу служби в папці systemd (через file_event)

Команда SOC Prime
12 червня 2026

Було створено можливий файл індивідуального конфігураційного гачка (через file_event)

Команда SOC Prime
12 червня 2026

Скрипт Linux був створений у тимчасових папках (через file_event)

Команда SOC Prime
12 червня 2026

Індикатори компрометації шкідливих пакетів Python (через cmdline)

Команда SOC Prime
12 червня 2026

Виявлення зняття GCP-токену аутентифікації кампанією Hades [Google Cloud Platform]

Правила ШІ від SOC Prime
12 червня 2026

Кампанія Hades – Викрадення токенів аутентифікації Azure [Журнали активності Azure]

Правила ШІ від SOC Prime
12 червня 2026

Збір облікових даних AWS через атаку ланцюга поставок PyPI [AWS Cloudtrail]

Правила ШІ від SOC Prime
12 червня 2026

Імітація виконання

Передумови: Тест телеметрії та базового рівня повинен бути успішний.

Обґрунтування: Цей розділ детально описує точне виконання технік супротивника (TTP), призначених для спрацювання правила виявлення. Команди та наративи МУСЯТЬ безпосередньо відображати ідентифіковані TTP і спрямовані на генерування точно тієї телеметрії, яку очікують правила виявлення. Абстрактні чи не пов’язані приклади можуть призвести до діагностичних помилок.

  • Опис атаки та команди: Супротивник успішно зламав робоче місце розробника через шкідливий пакет PyPI (кампанія Hades). Запустився Python-гачок при запуску, успішно зчитаний токен аутентифікації Azure з локальної пам’яті/кешу. Щоб імітувати виявлення цієї активності у журналах аудиту Azure, ми зімітуємо створення записи журналу аудиту, що містить певний рядок “токени аутентифікації Azure” у полі опису, імітуючи телеметрію події, яку може повідомити автоматизована система, коли вона виявить таку ексфільтрацію.

  • Скрипт регресійного тестування: Оскільки ми не можемо легко примусити реальний бекенд Azure згенерувати певний зловмисний рядок опису без реального порушення, ми імітуємо наявність журналу в потоці телеметрії (зазвичай в BAS шляхом введення синтетичного журналу в простір робочої області).

    # Введення синтетичного журналу для імітації виявлення ексфільтрації токену
    # Це імітує поле 'Опис', заповнене цільовим рядком.
    $LogEntry = @{
        TimeGenerated = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ")
        OperationName = "TokenExfiltrationDetected"
        Result = "Success"
        Description = "Виявлено активність шкідливого ПЗ: токени аутентифікації Azure були вивантажені з локального процесу."
        Identity = "malicious-python-hook@attacker.com"
    }
    
    Write-Host "Впровадження синтетичної телеметрії для перевірки правила виявлення..."
    # У реальному BAS це викликало б API збирання даних аналітики журналів.
    # Для цілей симуляції ми представляємо результат запису журналу:
    $LogEntry | ConvertTo-Json
  • Команди для очищення:

    # Якщо синтетичні журнали були впроваджені через API, видаліть конкретний ID кореляції
    # Для цієї симуляції ніяких постійних змін в клієнті Azure не було зроблено.
    Write-Host "Очищення завершено. Ніяких постійних артефактів противника не залишилося."