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

08 Jun 2026 19:43 UTC

Від попереднього встановлення до стійкості: всередині кампанії з крадіжки облікових даних Red Hat npm Miasma

Author Photo
SOC Prime Team linkedin icon Стежити
Від попереднього встановлення до стійкості: всередині кампанії з крадіжки облікових даних Red Hat npm Miasma
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Microsoft Defender виявила компрометацію ланцюга поставок, що вплинула на 32 пакети npm, опубліковані під простором назв @redhat-cloud-services . Атаки реалізували попередній гачок установки, який розгортає сильно обфускаторований завантажувач JavaScript, що потім отримує середовище виконання Bun і крадія облікових даних другого етапу. Шкідливе ПЗ збирає токени з GitHub, npm, основних хмарних постачальників, HashiCorp Vault і Kubernetes, потім знову публікує інфіковані пакети, щоб продовжити поширення. Кампанія також включає деструктивний засіб захисту, що стирає домашній каталог жертви, якщо виявляється фальшивий токен.

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

Розслідування простежило початковий злам до скомпрометованого конвеєра CI/CD для RedHatInsights/javascript-clients, де нападники зловживали законним робочим процесом OpenID Connect GitHub Actions для публікації троянізованих пакетів з дійсними підписами походження. Аналіз дроппера виявив кілька шарів обфускації, включаючи кодування на базі ROT, шифрування AES-128-GCM і власний шифр, перш ніж Bun був виконаний для запуску вантажу другого етапу. Актори загрози також знімали пам’ять з виконавців GitHub Actions, щоб отримати секрети безпосередньо з активних процесів.

Захист

Microsoft рекомендує перевірити дерева залежностей для постраждалих @redhat-cloud-services пакетів, закріпити перевірені версії та вимкнути виконання сценаріїв npm з прапором --ignore-scripts , де це можливо. Всі скомпрометовані токени npm повинні бути відкликані та перевидані, а облікові записи GitHub повинні бути переглянуті щодо несанкціонованого створення репозиторіїв або підозрілої активності. Додаткові заходи захисту відтоді були реалізовані у просторі назв @redhat-cloud-services , щоб запобігти несанкціонованій публікації.

Безпека

Захисники повинні виявляти підозріле виконання npm до встановлення і несподіваний запуск Bun з тимчасових каталогів. Моніторинг також має охоплювати створення невідомих публічних репозиторіїв GitHub і незвичайні шаблони використання токенів. Мережеві захисти повинні блокувати або попереджати про підключення до відомих Bun URL для завантаження і домену api.anthropic.com . Будь-які потенційно піддані облікові дані повинні бути негайно замінені, і пам’ять конвеєра CI/CD повинна бути перевірена на ознаки витоків секретів.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#ff9966 %% Nodes node_sc_001["<b>Дія</b> – <b>T1195.001 Компрометація ланцюга поставок</b>: Компрометація програмних залежностей і засобів розробки <br/>Зловмисник захопив CI/CD pipeline для RedHatInsights/javascript-clients і використав GitHub Actions OIDC для публікації троянізованих пакетів npm @redhat-cloud-services."] class node_sc_001 action tool_github_oidc["<b>Інструмент</b> – <b>Назва</b>: GitHub Actions OIDC<br/><b>Опис</b>: Інтеграція OpenID Connect, яка надає короткочасні токени для робочих процесів CI."] class tool_github_oidc tool malicious_preinstall["<b>Шкідливе ПЗ</b> – <b>T1127.003 Довірений проксі-виконання утиліт розробника</b>: Шкідливий гачок встановлення в package.json, що виконується автоматично під час <code>npm install</code>, породжуючи <code>node index.js</code>."] class malicious_preinstall malware installer_trigger["<b>Дія</b> – <b>T1546.016 Виконання за подійним тригером</b>: Тригер пакету, що запускає дроппер, коли викликається сценарій перед встановленням."] class installer_trigger action obfuscated_payload["<b>Шкідливе ПЗ</b> – <b>T1027.009 Обфусковані файли або інформація</b>: Вбудований носій (4.29u202fMB index.js) з використанням багатошарових ROT, AES‑128‑GCM, рядкових масивів і власного шифру PBKDF2 для приховування свого коду."] class obfuscated_payload malware dynamic_resolution["<b>Шкідливе ПЗ</b> – <b>T1027.007 Обфусковані файли або інформація</b>: Динамічне API-розв’язання – розшифровка в реальному часі вирішує URL-адреси для середовища виконання Bun і кінцевих точок C2."] class dynamic_resolution malware ingress_transfer["<b>Дія</b> – <b>T1105 Переказ інструментів Ingress</b>: Дроппер завантажує середовище виконання Bun JavaScript з офіційних URL випуску, перш ніж виконати вантаж другого етапу."] class ingress_transfer action tool_bun_runtime["<b>Інструмент</b> – <b>Назва</b>: Bun JavaScript Runtime<br/><b>Опис</b>: Високопродуктивний JavaScript-двигун, використаний як середовище виконання для другого етапу."] class tool_bun_runtime tool metadata_query["<b>Дія</b> – <b>T1552.005 Незахищені облікові дані</b>: API метаданих у хмарі<br/>Запити до сервісів метаданих AWS/ECS, Azure IMDS і GCP для отримання токенів доступу до хмари."] class metadata_query action file_credential["<b>Дія</b> – <b>T1552.001 Незахищені облікові дані</b>: Облікові дані у файлах<br/>Знімає локальні файли для SSH-ключів, конфігурацій CLI, криптовалютних гаманців та іншого секретного матеріалу."] class file_credential action token_harvest["<b>Дія</b> – <b>T1528 Викрадення токенів доступу до додатку</b>: Збирання токенів запуску GitHub Actions, npm OIDC токенів та інших токенів постачальників."] class token_harvest action browser_discovery["<b>Дія</b> – <b>T1217 Виявлення інформації про браузер</b>: Збирання браузерних магазинів і криптовалютних гаманців з робочих станцій розробників."] class browser_discovery action elevation_control["<b>Дія</b> – <b>T1548 Зловживання механізмом керування підвищенням прав</b>: Встановлює правило sudo без пароля за допомогою примонтованого <code>/etc/sudoers.d</code>, щоб отримати привілеї root."] class elevation_control action exfiltration_git["<b>Дія</b> – <b>T1048 Вилучення по альтернативному протоколу</b>: Вилучення крадених облікових даних шляхом створення репозиторіїв GitHub під запис жертви, комітування JSON-файлів, а також використання альтернативної кінцевої HTTPS точки."] class exfiltration_git action destructive_cleanup["<b>Дія</b> – <b>T1070.010 Видалення індикаторів</b>: Переміщує шкідливе ПЗ і, якщо використовувався фальшивий токен, виконує <code>rm -rf ~/</code>, щоб видалити домашній каталог користувача."] class destructive_cleanup action node_sc_002["<b>Дія</b> – <b>T1195.002 Компрометація ланцюга поставок</b>: Компрометація ланцюга поставок програмного забезпечення – перевидання отруєних пакетів з підробленим походженням SLSA, що дозволяє червеподібне поширення на нижчі проекти."] class node_sc_002 action %% З’єднання node_sc_001 –>|використовує| tool_github_oidc tool_github_oidc –>|виконує| malicious_preinstall malicious_preinstall –>|активує| installer_trigger installer_trigger –>|виконує| obfuscated_payload obfuscated_payload –>|виконує| dynamic_resolution dynamic_resolution –>|завантажує| ingress_transfer ingress_transfer –>|встановлює| tool_bun_runtime tool_bun_runtime –>|запитує| metadata_query metadata_query –>|знімає| file_credential file_credential –>|збирає| token_harvest token_harvest –>|збирає| browser_discovery browser_discovery –>|активує| elevation_control elevation_control –>|вилучає через| exfiltration_git exfiltration_git –>|може активувати| destructive_cleanup destructive_cleanup –>|сприяє| node_sc_002 node_sc_002 –>|поширюється на| node_sc_001 "

Шлях атаки

Виявлення

Віддалене завантаження / вивантаження файлів через стандартні інструменти (через cmdline)

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

IOCs (HashSha256) для виявлення: Попереднє встановлення для збереження: У межах кампанії Red Hat npm Miasma для крадіжки облікових даних

Правила SOC Prime AI
08 червня 2026

Підозріла поведінка процесу Node.js з виконанням середовища Bun [Створення процесу Windows]

Правила SOC Prime AI
08 червня 2026

Виконання середовища Bun і виявлення правила sudo без пароля [Створення процесу Linux]

Правила SOC Prime AI
08 червня 2026

Збирання токенів облікового запису GCP кампанією Miasma [Google Cloud Platform]

Правила SOC Prime AI
08 червня 2026

Виявлення несанкціонованого доступу до токенів OAuth2 Azure IMDS [Журнали активності Azure]

Правила SOC Prime AI
08 червня 2026

Доступ до облікових даних через отримання токенів IMDS OAuth2 та доступ до диспетчера секретів [AWS Cloudtrail]

Правила SOC Prime AI
08 червня 2026

Виконання симуляції

Передумова: Перевірка телеметрії та базової передпольотної перевірки повинна бути пройдена.

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

  • Опис атаки та команди:
    Противник, який вже зламав віртуальну машину GCE, використовує підхід living‑off‑the‑land для збирання токену облікового запису служби за замовчуванням VM. Кроки наступні:

    1. Пробити сервер метаданих , щоб перевірити можливість доступу.
    2. Видати запит токену to http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token з потрібним Metadata-Flavor: Google заголовок.
    3. Зберегти повернений JSON (містить access_token, expires_in, token_type).
    4. Використовувати токен для виклику привілейованого API GCP (наприклад, переліку всіх бакетів), щоб продемонструвати дієві облікові дані.

    Це саме послідовність генерує подію аудиту GCPServiceAccountTokenAccess, яка відповідає вибір.

  • скрипту регресійного тестування Sigma:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Перевірте можливість доступу до серверу метаданих
    echo "[*] Пробиваем сервер метаданих..."
    curl -s -H "Metadata-Flavor: Google" 
      "http://metadata.google.internal/computeMetadata/v1/instance/id" >/dev/null
    
    # 2. Зібрати токен облікового запису служби за замовчуванням
    echo "[*] Запит облікового токену служби..."
    TOKEN_RESPONSE=$(curl -s -H "Metadata-Flavor: Google" 
      "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token")
    
    echo "[+] Отримано відповідь на токен:"
    echo "${TOKEN_RESPONSE}" | jq .
    
    # 3. Витягти токен доступу
    ACCESS_TOKEN=$(echo "${TOKEN_RESPONSE}" | jq -r '.access_token')
    
    # 4. Використовувати токен для перерахунку бакетів GCS (демонструє корисність токену)
    echo "[*] Використовувати токен для перерахунку бакетів GCS..."
    curl -s -H "Authorization: Bearer ${ACCESS_TOKEN}" 
      "https://storage.googleapis.com/storage/v1/b" | jq .
    
    echo "[+] Симуляція завершена. Наведені дії мали б виробити подію аудиту GCPServiceAccountTokenAccess."
  • Команди очищення:

    # Не було здійснено жодних постійних змін; видаляються лише тимчасові змінні.
    unset TOKEN_RESPONSE ACCESS_TOKEN
    echo "[*] Очищення завершено."