Il codice PyRAT: dettagli di un RAT basato su Python
Detection stack
- AIDR
- Alert
- ETL
- Query
Sintesi
L’articolo descrive PyRAT, un trojan di accesso remoto basato su Python, confezionato come file binario ELF utilizzando PyInstaller. Funziona su Linux e Windows, comunica con un server C2 tramite HTTP non criptato e supporta l’esecuzione di comandi, esfiltrazione di file, cattura degli screenshot e una routine di autodistruzione. La persistenza è implementata tramite XDG autostart su Linux e una chiave di registro Run su Windows. Il rapporto enfatizza la leggerezza dello strumento e la facilità con cui può essere riutilizzato dai cybercriminali.
Indagine
I ricercatori hanno estratto il bytecode Python incorporato con pyinstxtractor, decompilato i moduli e identificato la classe principale Agent che esegue l’identificazione dell’host, la generazione dell’UID, la gestione dei thread e il coordinamento con il C2. L’analisi statica ha portato alla luce importazioni chiave, nomi di file, interazione con il registro e l’endpoint HTTP POST usato per il beaconing. I test comportamentali hanno mostrato l’intero flusso di lavoro: creazione della persistenza, esecuzione dei comandi, enumerazione dei file, operazioni di upload/download, creazione di archivi ZIP, cattura degli screenshot e pulizia opzionale degli artefatti.
Mitigazione
Monitorare la creazione di file .desktop di autostart sospetti nei profili utente e le aggiunte alla chiave di registro HKCURun utilizzando nomi eseguibili non familiari. A livello di rete, osservare il traffico HTTP POST in uscita verso host sconosciuti che puntano all’endpoint /api/{uid}/hello. Sui punti finali, segnalare binari ELF sconosciuti contenenti contenuti Python incorporati e comportamenti di processo anomali come l’esecuzione frequente di subprocessi.
Risposta
Se rilevato, isolare il sistema, raccogliere il campione ELF e i file .desktop associati e conservare lo stato del registro pertinente. Estrarre l’UID, l’indirizzo C2 e tutti i file trasferiti durante l’esecuzione come parte della forensica. Bloccare l’infrastruttura C2 identificata, rimuovere la persistenza e completare una pulizia completa. Ruotare le credenziali degli account che potrebbero essere stati esposti.
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>Malware</b> – <b>Nome</b>: PyRAT ELF<br/><b>Descrizione</b>: RAT per Linux/Windows eseguito come binario ELF”] class malware_pyrat malware tech_system_info[“<b>Tecnica</b> – <b>T1082 Scoperta delle Informazioni di Sistema</b><br/>Raccoglie versione del SO, hostname e dettagli hardware”] class tech_system_info technique tech_user_discovery[“<b>Tecnica</b> – <b>T1033 Scoperta del Proprietario/Utente del Sistema</b><br/>Enumera l’utente attivo e i dettagli dell’account”] class tech_user_discovery technique action_establish_c2[“<b>Azione</b> – Stabilire C2 tramite HTTP POST non cifrato”] class action_establish_c2 action tech_web_service[“<b>Tecnica</b> – <b>T1102.003 Servizio Web: Comunicazione Unidirezionale</b><br/>Utilizza HTTP POST per inviare dati a un server remoto”] class tech_web_service technique tech_exfil_unenc[“<b>Tecnica</b> – <b>T1048.003 Esfiltrazione tramite Protocollo Non-C2 Non Cifrato</b><br/>Trasferisce dati senza cifratura”] class tech_exfil_unenc technique tech_data_encoding[“<b>Tecnica</b> – <b>T1132.002 Codifica dei Dati: Codifica Non Standard</b><br/>Applica una codifica personalizzata prima della trasmissione”] class tech_data_encoding technique action_execute_cmd[“<b>Azione</b> – Eseguire Comandi”] class action_execute_cmd action tech_windows_shell[“<b>Tecnica</b> – <b>T1059.003 Shell dei Comandi Windows</b><br/>Esegue comandi tramite cmd.exe”] class tech_windows_shell technique tech_unix_shell[“<b>Tecnica</b> – <b>T1059.004 Shell Unix</b><br/>Esegue comandi tramite /bin/sh”] class tech_unix_shell technique action_collect_files[“<b>Azione</b> – Raccogliere File ed Enumerare il File System”] class action_collect_files action tech_archive[“<b>Tecnica</b> – <b>T1560.002 Archiviazione dei Dati Raccolti: Tramite Libreria</b><br/>Comprimes i dati usando una libreria ZIP”] class tech_archive technique tech_screenshot[“<b>Tecnica</b> – <b>T1113 Acquisizione dello Schermo</b><br/>Cattura l’immagine del desktop”] class tech_screenshot technique tech_persist_linux[“<b>Tecnica</b> – <b>T1547.013 Avvio Automatico XDG</b><br/>Aggiunge una voce .desktop alla directory di avvio automatico”] class tech_persist_linux persistence tech_persist_windows[“<b>Tecnica</b> – <b>T1547.014 Chiavi Run del Registro / Cartella di Avvio</b><br/>Crea una voce in HKCU\\Run per la persistenza”] class tech_persist_windows persistence tech_cleanup[“<b>Tecnica</b> – <b>T1070.009 Rimozione degli Indicatori: Pulizia della Persistenza</b><br/>Elimina artefatti di persistenza e log”] class tech_cleanup cleanup %% Connections malware_pyrat –>|porta_a| tech_system_info malware_pyrat –>|porta_a| tech_user_discovery tech_system_info –>|fornisce informazioni per| action_establish_c2 tech_user_discovery –>|fornisce informazioni per| action_establish_c2 action_establish_c2 –>|utilizza| tech_web_service action_establish_c2 –>|utilizza| tech_exfil_unenc action_establish_c2 –>|utilizza| tech_data_encoding action_establish_c2 –>|abilita| action_execute_cmd action_execute_cmd –>|utilizza| tech_windows_shell action_execute_cmd –>|utilizza| tech_unix_shell action_execute_cmd –>|porta_a| action_collect_files action_collect_files –>|porta_a| tech_archive tech_archive –>|porta_a| tech_screenshot tech_screenshot –>|abilita| tech_persist_linux tech_screenshot –>|abilita| tech_persist_windows tech_persist_linux –>|porta successivamente a| tech_cleanup tech_persist_windows –>|porta successivamente a| tech_cleanup
Flusso di attacco
Rilevamenti
Potenziale Operazione di Autoremozione Malware o Occultamento Stderr (via cmdline)
Visualizza
Archivio Creato nella Cartella Tmp di Linux (via file_event)
Visualizza
Possibili Punti di Persistenza [ASEPs – Software/NTUSER Hive] (via cmdline)
Visualizza
Tentativo di Rimozione Chiavi di Registro (via process_creation)
Visualizza
Tentativo di Modifica File Autostart Linux XDG (via cmdline)
Visualizza
Impostate Permessi Pericolosi per un Binario/Script/Cartella (via cmdline)
Visualizza
IOCs (HashMd5) per rilevare: Il Codice PyRAT: RAT Basato su Python e i suoi Interni
Visualizza
Persistenza su Windows via Chiave Run dell’Utente Corrente [Evento Registro Windows]
Visualizza
Rilevamento di Persistenza di PyRAT su Linux [Creazione Processo Linux]
Visualizza
Esecuzione Simulazione
Prerequisito: Il Controllo Preliminare di Telemetria & Baselining deve essere superato.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente le TTP identificate e mirare a generare la telemetria esatta attesa dalla logica di rilevamento.
-
Narrativa dell’attacco e Comandi:
Un attaccante ha ottenuto una credenziale SSH compromessa per un utente normale. Dopo il login, eseguono uno script di living‑off‑the‑land che:
- Scrive il payload ELF malevolo (
agent-svc.pyc) nella directory home dell’utente, camuffandolo come un file di bytecode Python mentre è in realtà un binario ELF. - Copia uno strumento di pacchetto Debian camuffato chiamato
dpkgnin/usr/local/bin, concedendogli diritti eseguibili. Lo strumento è un semplice wrapper che avvia il payload ELF. - Installa un’entrata desktop autostart (
dpkgn.desktop) in~/.config/autostartcosì il payload viene eseguito ad ogni inizio sessione grafica. - Imposta permessi appropriati per evitare sospetti immediati.
Gli eventi combinati sui file (
agent-svc.pycanddpkgn) soddisfano la prima condizione della regola, mentre il.desktopfile soddisfa la seconda condizione. - Scrive il payload ELF malevolo (
-
Script di Test di Regressione:
#!/usr/bin/env bash set -euo pipefail # 1. Distribuire ELF malevolo camuffato da .pyc MALWARE_PATH="$HOME/agent-svc.pyc" echo "Creazione payload ELF falso (dummy binary) ..." dd if=/dev/zero bs=1 count=1024 of="$MALWARE_PATH" status=none chmod +x "$MALWARE_PATH" # 2. Distribuire falso strumento Debian chiamato dpkgn 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. Creare entrata desktop autostart 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 "Artefatti di persistenza PyRAT distribuiti." -
Comandi di Pulizia:
#!/usr/bin/env bash set -euo pipefail # Rimuovere ELF malevolo rm -f "$HOME/agent-svc.pyc" # Rimuovere strumento falso sudo rm -f /usr/local/bin/dpkgn # Rimuovere entrata autostart rm -f "$HOME/.config/autostart/dpkgn.desktop" echo "Pulizia completata."