SOC Prime Bias: Mittel

29 Jan. 2026 18:23

Der PyRAT-Code: Interna eines Python-basierten RAT

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
Der PyRAT-Code: Interna eines Python-basierten RAT
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Der Artikel beschreibt PyRAT, einen auf Python basierenden Remote-Access-Trojaner, der als ELF-Binärdatei mittels PyInstaller verpackt ist. Er läuft sowohl auf Linux als auch auf Windows, kommuniziert über unverschlüsseltes HTTP mit einem C2-Server und unterstützt die Ausführung von Befehlen, Dateiexfiltration, Bildschirmaufnahme und eine Selbstzerstörungsroutine. Persistenz wird auf Linux durch XDG-Autostart und auf Windows durch einen Run-Registrierungsschlüssel implementiert. Der Bericht unterstreicht, wie leicht das Tool ist und wie einfach es von Cyberkriminellen umfunktioniert werden kann.

Untersuchung

Forscher extrahierten den eingebetteten Python-Bytecode mit pyinstxtractor, dekompilierten die Module und identifizierten die primäre Agent-Klasse, die Host-Fingerprinting, UID-Generierung, Thread-Management und C2-Koordination durchführt. Die statische Analyse deckte wichtige Importe, Dateinamen, Registrierungsinteraktionen und die für das Beacons verwendete HTTP-POST-Endpunkt auf. Verhaltensanalysen zeigten den gesamten Workflow: Erstellung der Persistenz, Befehlsausführung, Dateiauflistung, Hoch-/Herunterladevorgänge, Erstellung von ZIP-Archiven, Bildschirmaufnahme und optionales Bereinigen von Artefakten.

Minderung

Überwachen Sie verdächtige Autostart-.desktop-Dateien in Benutzerprofilen und für Hinzufügungen zum HKCURun-Registrierungsschlüssel mit unbekannten ausführbaren Namen. Auf der Netzwerkebene sollten Sie auf ausgehenden HTTP-POST-Verkehr zu unbekannten Hosts, der auf den /api/{uid}/hello-Endpunkt abzielt, achten. Auf Endpunkten markieren Sie unbekannte ELF-Binärdateien mit eingebettetem Python-Inhalt und anomales Prozessverhalten wie häufige Subprozesse-Ausführung.

Reaktion

Wenn erkannt, isolieren Sie das System, sammeln Sie das ELF-Sample und alle zugehörigen .desktop-Dateien und bewahren Sie relevante Registrierungszustände. Extrahieren Sie die UID, die C2-Adresse und alle während der Ausführung übertragenen Dateien im Rahmen der forensischen Analyse. Blockieren Sie die identifizierte C2-Infrastruktur, entfernen Sie die Persistenz und führen Sie eine vollständige Bereinigung durch. Ändern Sie die Anmeldedaten für Konten, die möglicherweise gefährdet wurden.

graph TB %% Class Definitions classDef malware fill:#ff9999 classDef technique fill:#99ccff classDef action fill:#ccffcc classDef persistence fill:#ffcc99 classDef cleanup fill:#dddddd %% Node Definitions malware_pyrat[„<b>Schadsoftware</b> – <b>Name</b>: PyRAT ELF<br/><b>Beschreibung</b>: Linux/Windows-RAT, ausgeführt als ELF-Binärdatei“] class malware_pyrat malware tech_system_info[„<b>Technik</b> – <b>T1082 Systeminformations-Erkennung</b><br/>Sammelt Betriebssystemversion, Hostname und Hardwaredetails“] class tech_system_info technique tech_user_discovery[„<b>Technik</b> – <b>T1033 Erkennung von Systembesitzer/Benutzer</b><br/>Ermittelt angemeldeten Benutzer und Kontodetails“] class tech_user_discovery technique action_establish_c2[„<b>Aktion</b> – Aufbau von C2 über unverschlüsseltes HTTP POST“] class action_establish_c2 action tech_web_service[„<b>Technik</b> – <b>T1102.003 Webdienst: Einweg-Kommunikation</b><br/>Verwendet HTTP POST zur Datenübertragung an einen Remote-Server“] class tech_web_service technique tech_exfil_unenc[„<b>Technik</b> – <b>T1048.003 Exfiltration über unverschlüsseltes Nicht-C2-Protokoll</b><br/>Überträgt Daten ohne Verschlüsselung“] class tech_exfil_unenc technique tech_data_encoding[„<b>Technik</b> – <b>T1132.002 Datenkodierung: Nicht-Standard-Kodierung</b><br/>Wendet benutzerdefinierte Kodierung vor der Übertragung an“] class tech_data_encoding technique action_execute_cmd[„<b>Aktion</b> – Befehle Ausführen“] class action_execute_cmd action tech_windows_shell[„<b>Technik</b> – <b>T1059.003 Windows-Befehlszeile</b><br/>Führt Befehle über cmd.exe aus“] class tech_windows_shell technique tech_unix_shell[„<b>Technik</b> – <b>T1059.004 Unix-Shell</b><br/>Führt Befehle über /bin/sh aus“] class tech_unix_shell technique action_collect_files[„<b>Aktion</b> – Dateien Sammeln & Dateisystem Auflisten“] class action_collect_files action tech_archive[„<b>Technik</b> – <b>T1560.002 Archivieren Gesammelter Daten: Über Bibliothek</b><br/>Komprimiert Daten mit einer ZIP-Bibliothek“] class tech_archive technique tech_screenshot[„<b>Technik</b> – <b>T1113 Bildschirmaufnahme</b><br/>Erfasst das Desktop-Bild“] class tech_screenshot technique tech_persist_linux[„<b>Technik</b> – <b>T1547.013 XDG-Autostart</b><br/>Fügt einen .desktop-Eintrag zum Autostart-Verzeichnis hinzu“] class tech_persist_linux persistence tech_persist_windows[„<b>Technik</b> – <b>T1547.014 Registry-Run-Keys / Autostartordner</b><br/>Erstellt einen Eintrag in HKCU\\Run für Persistenz“] class tech_persist_windows persistence tech_cleanup[„<b>Technik</b> – <b>T1070.009 Indikatoren-Entfernung: Persistenz Bereinigen</b><br/>Löscht Persistenzartefakte und Protokolle“] class tech_cleanup cleanup %% Connections malware_pyrat –>|führt_zu| tech_system_info malware_pyrat –>|führt_zu| tech_user_discovery tech_system_info –>|liefert Informationen für| action_establish_c2 tech_user_discovery –>|liefert Informationen für| action_establish_c2 action_establish_c2 –>|verwendet| tech_web_service action_establish_c2 –>|verwendet| tech_exfil_unenc action_establish_c2 –>|verwendet| tech_data_encoding action_establish_c2 –>|ermöglicht| action_execute_cmd action_execute_cmd –>|verwendet| tech_windows_shell action_execute_cmd –>|verwendet| tech_unix_shell action_execute_cmd –>|führt_zu| action_collect_files action_collect_files –>|führt_zu| tech_archive tech_archive –>|führt_zu| tech_screenshot tech_screenshot –>|ermöglicht| tech_persist_linux tech_screenshot –>|ermöglicht| tech_persist_windows tech_persist_linux –>|führt später zu| tech_cleanup tech_persist_windows –>|führt später zu| tech_cleanup

Angriffsablauf

Simulationausführung

Voraussetzung: Die Telemetrie & Basisüberprüfung vor dem Flug muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die darauf ausgelegt ist, die Erkennungsregel auszulösen. Die Befehle und Erzählungen MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, die exakte Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.

  • Angriffsnarrativ & Befehle:

    Ein Angreifer hat kompromittierte SSH-Anmeldedaten für einen regulären Benutzer erhalten. Nach der Anmeldung führen sie ein Living-off-the-Land Skript aus, das:

    1. Schreibt die bösartige ELF-Nutzlast (agent-svc.pyc) in das Home-Verzeichnis des Benutzers und tarnt sie als Python-Bytecode-Datei, während es tatsächlich eine ELF-Binärdatei ist.
    2. Kopiert ein getarntes Debian-Paket-Tool namens dpkgn nach /usr/local/bin, und versieht es mit Ausführungsrechten. Das Tool ist ein einfacher Wrapper, der einfach die ELF-Nutzlast startet.
    3. Installiert einen Autostart-Desktop-Eintrag (dpkgn.desktop) in ~/.config/autostart sodass die Nutzlast bei jedem Start der grafischen Sitzung ausgeführt wird.
    4. Setzt geeignete Berechtigungen um sofortigen Verdacht zu vermeiden.

    Die kombinierten Datei-Ereignisse (agent-svc.pyc and dpkgn) erfüllen die erste Bedingung der Regel, während die .desktop Datei die zweite Bedingung erfüllt.

  • Regressions-Test-Skript:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Bösartige ELF gefälscht als .pyc bereitstellen
    MALWARE_PATH="$HOME/agent-svc.pyc"
    echo "Falsche ELF-Nutzlast erstellen (Dummy-Binärdatei) ..."
    dd if=/dev/zero bs=1 count=1024 of="$MALWARE_PATH" status=none
    chmod +x "$MALWARE_PATH"
    
    # 2. Falsches Debian-Tool namens dpkgn bereitstellen
    FAKE_TOOL="/usr/local/bin/dpkgn"
    echo "#!/usr/bin/env bash" | sudo tee "$FAKE_TOOL" > /dev/null
    echo "exec "$MALWARE_PATH" "$@"" | sudo tee -a "$FAKE_TOOL" > /dev/null
    sudo chmod +x "$FAKE_TOOL"
    
    # 3. Autostart-Desktop-Eintrag erstellen
    AUTOSTART_DIR="$HOME/.config/autostart"
    mkdir -p "$AUTOSTART_DIR"
    DESKTOP_FILE="$AUTOSTART_DIR/dpkgn.desktop"
    cat > "$DESKTOP_FILE" <<EOF
    [Desktop Entry]
    Type=Application
    Exec=$FAKE_TOOL
    Hidden=false
    NoDisplay=false
    X-GNOME-Autostart-enabled=true
    Name=Package Manager
    Comment=System Update Service
    EOF
    
    echo "PyRAT-Persistenz-Artefakte bereitgestellt."
  • Bereinigungskommandos:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Bösartige ELF entfernen
    rm -f "$HOME/agent-svc.pyc"
    
    # Falsches Tool entfernen
    sudo rm -f /usr/local/bin/dpkgn
    
    # Autostart-Eintrag entfernen
    rm -f "$HOME/.config/autostart/dpkgn.desktop"
    
    echo "Bereinigung abgeschlossen."