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.
Il nostro “paradigma” di protezione multilivello affronta questa minaccia mediante varie tecnologie, che controllano tutte le fasi e i vettori di attacco: analisi comportamentale, controlli speciali per le aree critiche, protezione automatica contro gli exploit. Ma in questo caso sono le nostre tecnologie brevettate a giocare un ruolo fondamentale, (US 10691800, RU 2665910, RU 2659738), grazie all’analisi della memoria per scoprire attività sospette che possono essere utilizzate dai malware fileless.
Esempio: il nostro System Watcher (che ha protetto proattivamente gli utenti da WannaCry e altri cyberattacchi), monitora costantemente l’attività delle applicazioni su un compute e trova un certo processo affidabile che esegue azioni insolite o critiche per la sicurezza. A questo punto si analizza l’evento con molta attenzione, in particolare per scoprire in quale memoria si trova il codice che ha causato l’evento. Se vediamo un indirizzo sospetto, lo analizziamo più a fondo per capire se è presente un qualsiasi codice riflesso. In questo modo, non cerchiamo un ago in un pagliaio analizzando tutta la memoria; conduciamo invece un’analisi mirata e ragionata degli indirizzi sospetti in linea con una serie di regole. Ed è così che scopriamo rapidamente e in modo affidabile il piccolo e astuto malware fileless.