Der PyRAT-Code: Interna eines Python-basierten RAT
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
Erkennungen
Möglicher eigenständiger Malware-Entfernungs- oder Stderr-Verschleierungs-Vorgang (über cmdline)
Ansehen
Archiv wurde im Linux-Tmp-Ordner erstellt (über file_event)
Ansehen
Mögliche Persistenzpunkte [ASEPs – Software/NTUSER Hive] (über cmdline)
Ansehen
Versuch der Entfernung möglicher Registrierungsschlüssel (über Prozess-Erstellung)
Ansehen
Versuch der Änderung von möglichen Linux XDG Autostart-Dateien (über cmdline)
Ansehen
Gefährliche Berechtigungen für eine Binärdatei/Skript/Ordner wurden gesetzt (über cmdline)
Ansehen
IOCs (HashMd5) zur Erkennung: Der PyRAT-Code: Python-basierter RAT und seine Interna
Ansehen
Windows-Persistenz über Run-Schlüssel des aktuellen Benutzers [Windows-Registrierungsereignis]
Ansehen
Erkennung von PyRAT-Persistenz auf Linux [Linux-Prozess-Erstellung]
Ansehen
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:
- 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. - Kopiert ein getarntes Debian-Paket-Tool namens
dpkgnnach/usr/local/bin, und versieht es mit Ausführungsrechten. Das Tool ist ein einfacher Wrapper, der einfach die ELF-Nutzlast startet. - Installiert einen Autostart-Desktop-Eintrag (
dpkgn.desktop) in~/.config/autostartsodass die Nutzlast bei jedem Start der grafischen Sitzung ausgeführt wird. - Setzt geeignete Berechtigungen um sofortigen Verdacht zu vermeiden.
Die kombinierten Datei-Ereignisse (
agent-svc.pycanddpkgn) erfüllen die erste Bedingung der Regel, während die.desktopDatei die zweite Bedingung erfüllt. - Schreibt die bösartige ELF-Nutzlast (
-
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."