SOC Prime Bias: Medio

29 Gen 2026 18:23

Il codice PyRAT: dettagli di un RAT basato su Python

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Il codice PyRAT: dettagli di un RAT basato su Python
shield icon

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

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:

    1. 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.
    2. Copia uno strumento di pacchetto Debian camuffato chiamato dpkgn in /usr/local/bin, concedendogli diritti eseguibili. Lo strumento è un semplice wrapper che avvia il payload ELF.
    3. Installa un’entrata desktop autostart (dpkgn.desktop) in ~/.config/autostart così il payload viene eseguito ad ogni inizio sessione grafica.
    4. Imposta permessi appropriati per evitare sospetti immediati.

    Gli eventi combinati sui file (agent-svc.pyc and dpkgn) soddisfano la prima condizione della regola, mentre il .desktop file soddisfa la seconda condizione.

  • 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."