luglio 16, 2020
Giocare a nascondino con i malware fileless
Il codice dannoso… si insinua ovunque…
È un po’ come un gas, che riempirà sempre lo spazio in cui si trova, anche se una differenza c’è: il codice dannoso passerà sempre attraverso i “buchi” (le vulnerabilità) di un sistema informatico. Quindi il nostro lavoro (anzi, uno di questi) è trovare tali falle e chiuderle. Il nostro obiettivo è di farlo in modo proattivo, cioè prima che il malware scopra queste falle. E se ci riesce, siamo lì pronti ad acciuffarlo.
Di fatto, è questa protezione proattiva e la capacità di prevedere le azioni dei cybercriminali e di creare una barriera in anticipo che fa la differenza tra una cybersecurity di qualità e altamente tecnologica dal marketing di paccottiglia.
Oggi voglio parlarvi di un altro modo in cui la nostra protezione proattiva protegge da un tipo di malware, particolarmente astuto. Sì, voglio parlarvi del cosiddetto codice dannoso fileless (o bodiless, senza corpo), un tipo pericoloso di malware-fantasma che ha imparato a usare i difetti dell’architettura di Windows per infettare i computer. E voglio parlarvi anche della nostra tecnologia brevettata che combatte questa particolare cyber-malattia. Lo farò proprio come piace a voi: spiegando problemi complessi in modo semplice, senza nascondere nulla ma in modo avvicente, una sorta di cyber-thriller con elementi di suspense.
Prima di tutto, cosa indica il termine fileless?
Ebbene, il codice fileless, una volta entrato in un sistema informatico, non crea copie di sé stesso sotto forma di file su disco e, in questo modo, evita di essere individuato dalle tecniche tradizionali, utilizzando ad esempio un monitor antivirus.
Come può esistere un tale “malware fantasma” all’interno di un sistema? In realtà, risiede nella memoria di processi affidabili! Ah, sì. Proprio così.
Su Windows (in realtà, non solo Windows), è sempre esistita la possibilità di eseguire un codice dinamico che, in particolare, viene utilizzato per il compilatore just-in-time; cioè, il codice del programma viene trasformato in linguaggio macchina non subito, ma quando è necessario e nel modo in cui è necessario. Questo approccio aumenta la velocità di esecuzione per alcune applicazioni. E per supportare questa funzionalità, Windows permette alle applicazioni di inserire il codice nella memoria del processo (o anche in un’altra memoria di un processo affidabile) e di eseguirlo.
Non è una grande idea dal punto di vista della sicurezza, ma cosa si può fare? Da decenni milioni di applicazioni eseguite su Java, .NET, PHP, Python e altri linguaggi e per altre piattaforme funzionano in questo modo.
Come era facile prevedere, i cybercriminali hanno approfittato della possibilità di utilizzare il codice dinamico, inventando vari metodi per utilizarlo per i propri scopi. E uno dei metodi più comodi e quindi più diffusi è la cosiddetta Reflective PE injection. Che cosa? Lasciate che vi spieghi (in realtà, è un argomento piuttosto interessante, quindi abbiate pazienza)…
Lanciare un’applicazione cliccando su un’icona, un’operazione abbastanza semplice e diretta, giusto? Sembra semplice, ma in realtà, dietro ci sono tante operazioni in ballo: viene richiamato un loader di sistema, che prende il rispettivo file dal disco, lo carica in memoria e lo esegue. E questo processo standard è controllato dai monitor antivirus, che controllano al volo la sicurezza dell’applicazione.
Ora, quando c’è un “riflesso”, il codice viene caricato bypassando il loader del sistema (e quindi anche il monitor antivirus). Il codice viene posto direttamente nella memoria di un processo affidabile, creando un “riflesso” del modulo eseguibile originale. Tale riflesso può essere eseguito come un modulo reale caricato con un metodo standard, ma non è registrato nella lista dei moduli e, come detto sopra, non ha un file sul disco.
Inoltre, a differenza di altre tecniche di iniezione del codice (per esempio, tramite shellcode), le reflected injection consentono di creare un codice funzionalmente avanzato in linguaggi di programmazione ad alto livello e framework di sviluppo standard con quasi nessuna limitazione. Quindi quello che si ottiene è: (i) nessun file, (ii) l’occultamento dietro un processo affidabile, (iii) l’invisibilità alle tradizionali tecnologie di protezione e (iv) via libera per causare un po’ di caos.
Quindi, naturalmente, le reflected injection hanno avuto un grande successo tra gli sviluppatori di codici dannosi: all’inizio apparivano in pacchetti di exploit, poi sono entrati in gioco le cyberspie (per esempio, Lazarus e Turla), i cybercriminali avanzati (perché è un modo utile e legittimo di eseguire un codice complesso!) e infine anche i cybercriminali di poco conto.
Ora, dall’altra parte della barricata, trovare una tale infezione fileless non è una passeggiata nel cyber-parco. Quindi non c’è da stupirsi che la maggior parte dei vendor di sicurezza informatica non sia troppo esperta. Alcune riescono a malapena a individuare il problema.
Continua a leggere:Giocare a nascondino con i malware fileless