Analisi del malware: metodologie e strumenti per capire come funziona

By Adelmio Genovese

Gli incidenti di sicurezza moderni, anche quelli più complessi, comprendono nella maggior parte dei casi l’utilizzo di malware : conoscere come effettuare l’analisi del software malevolo rilevato nel corso del processo di risposta agli incidenti è un aspetto critico del processo stesso, al fine di riprendere il controllo della situazione e procedere con attività di rimedio efficaci.

Presentiamo, dunque, una panoramica delle principali tecniche e tool utilizzati per l’analisi del malware, una volta che è stato individuato. Si parlerà esclusivamente di malware per Windows, che rappresenta la stragrande maggioranza del malware prodotto, in formato eseguibile. Si tratta certamente di una limitazione, ma le tipologie di tecniche utilizzate, anche se non sempre i tool, possono essere estese anche agli altri casi.

Analisi del malware: cosa ci occorre

Analisi del malware: le definizioni Analisi automatizzata Analisi statica Analisi dinamica Analisi della RAM

Analisi automatizzata

Analisi statica

Analisi dinamica

Analisi della RAM

Analisi del malware: l’importanza per le aziende

Analisi del malware: cosa ci occorre

Per poter studiare il malware è importantissimo disporre di campioni di malware reale . Chi di professione fa il ricercatore ha certamente a disposizione proprie librerie di malware provenienti da sistemi di sicurezza gestiti e da honeypot .

Sono comunque disponibili online librerie di malware a cui è possibile accedere, in alcuni casi dopo registrazione, in altri anche in modalità anonima. Per alcuni esempi di questo articolo è stato utilizzato un campione di malware proveniente dal progetto TheZoo , libreria che mette a disposizione campioni di malware in formato binario e altri di cui sono resi disponibili i sorgenti. I campioni binari sono forniti come zip protetti da password.

Molti dei tool presentati nell’articolo sono disponibili all’interno di REMnux , un toolkit per il reverse engineering del malware fornito anche come distribuzione Linux (derivata da Ubuntu), o come container, su cui sono stati inclusi tutti i principali tool free per l’analisi del malware.

Analisi del malware: le definizioni

Per analisi statica si intendono quell’insieme di tecniche che permettono l’analisi di un file sospetto senza metterlo in esecuzione.

Per analisi dinamica si intendono quell’insieme di tecniche che prevedono la messa in esecuzione in un ambiente controllato del sospetto malware al fine di analizzarne i comportamenti.

Con analisi automatizzata si intendono quelle tecniche che prevedono la sottomissione del file sospetto ad un’applicazione, la quale, attraverso analisi statica e/o dinamica automatizzate, restituisce un responso, dal quale è possibile capire con differenti gradi di certezza se si tratti o meno di un malware ed eventualmente anche il tipo di comportamento tenuto dal file sospetto. Visto che si tratta della metodologia di analisi più semplice e che richiede meno competenze, inizieremo la nostra descrizione proprio da questa.

Infine, dall’ analisi della RAM è possibile rilevare malware in esecuzione in un sistema anche quando non si dispone di un file da analizzare oppure non si è certi che sul sistema sia presente un malware.

Una prima forma di analisi automatizzata utilizza siti specializzati ai quali è possibile sottoporre tramite upload file sospetti dei quali viene effettuata l’analisi. Al termine dell’analisi viene generato un report.

Probabilmente il sito di questo tipo più famoso è VirusTotal , un servizio Web di scansione antimalware. Il file sottoposto a VirusTotal viene scansionato con diversi tool antivirus e, al termine della scansione, i risultati vengono mostrati sulla pagina web.

Oltre a ciò VirusTotal è anche un servizio di repository di dati sul malware che permette di eseguire ricerche sul database utilizzando hash, URL, nome di dominio o indirizzo IP.

Infine, un’ulteriore funzionalità offerta (solo per gli utenti registrati) è il VirusTotal Graph, che permette di visualizzare la rappresentazione grafica della relazione tra il file sottomesso e gli indicatori di compromissione (IoC) associati, come domini, indirizzi IP ed URL; questa funzionalità è estremamente utile se si desidera determinare rapidamente gli indicatori associati a un file binario malevolo.

Come esempio, sottoponiamo a VirusTotal un malware che fa parte della libreria theZoo, nello specifico il malware denominato Trojan.Bladabindi . Scompattando lo zip che contiene i binari si ottiene il file un file exe che, sottomesso a VirusTotal, viene scansionato con 70 motori antivirus, di cui 58 lo rilevano come malevolo.

Lo screenshot seguente mostra il risultato VirusTotal Graph per lo stesso file binario.

Dal grafico si vede come tra i comportamenti del file in questione ci sia una comunicazione con il dominio soa7.zapto.com.

Tornando sulla home page di VirusTotal e cercando soa7.zapto.com vediamo che, tra le altre informazioni, è presente una lista di malware che comunicano con tale dominio; tra di questi c’è effettivamente max.exe, che come vedremo è il nome originale del malware che abbiamo sottomesso.

Altra tipologia di strumenti di analisi automatizzata disponibile online sono strumenti basati su sandbox, ovvero sistemi controllati ed isolati dove il sospetto malware può essere eseguito (fatto detonare), oppure il documento che si sospetta malevolo aperto, registrando tutte le conseguenze sul sistema: si tratta quindi di un’analisi dinamica.

Molti di questi strumenti sono disponibili gratuitamente. Come esempio vediamo Hybrid Analysis di Payload Security.

Prendendo lo stesso eseguibile utilizzato precedentemente su VirusTotal e sottomettendolo su Hybrid Analysis otteniamo, fra le altre cose, un report dettagliato del comportamento del malware. Il seguente screenshot ne mostra una piccola parte, da cui è possibile vedere domini e server con cui avviene la comunicazione, ma anche altre informazioni, come la creazione di mutant durante l’esecuzione. Un mutant o mutex, è un oggetto utilizzato per controllare o limitare l’accesso ad una risorsa, per esempio facendo in modo che solo un processo alla volta possa accedervi; spesso è utilizzato dai malware per “marcare” come infetto un sistema, evitando di infettarlo nuovamente.

Infine, per completare il quadro sull’analisi automatica, citiamo Cuckoo Sandbox , uno strumento di analisi dinamico basato su sandbox eseguite generalmente all’interno di un ambiente di virtualizzazione (di default VirtualBox). Cuckoo prevede la presenza di un host di gestione, dove girano anche l’ambiente di virtualizzazione e il software di gestione, ovvero il software che permette l’invio dei campioni, il controllo dell’esecuzione, la produzione dei risultati e la presenza di una o più macchine guest (normalmente virtuali, ma possono essere anche fisiche), dove il potenziale malware viene messo in esecuzione. Sulle macchine guest deve essere installato un agente per la comunicazione con l’host.

Cuckoo è in grado di analizzare diverse tipologie di file malevoli, come eseguibili, documenti office, pdf, email, ma anche siti web. Le analisi effettuate riguardano il tracciamento delle API e il comportamento generale del malware, il traffico di rete (anche cifrato), l’analisi avanzata della memoria. A proposito del traffico di rete, Cuckoo permette di bloccare il traffico oppure di ridirigerlo attraverso InetSIM, (Internet Services Simulation Suite). Quest’ultima opzione evita al malware di compiere attività malevoli verso l’esterno della sandbox e nello stesso tempo dare la possibilità di monitorarne il comportamento anche a livello di rete.

Rispetto agli strumenti web di analisi dinamica automatizzata visti precedentemente, Cuckoo permette un maggior controllo sulle sandbox su cui far detonare il malware, permettendo di configurare ambienti di diverse tipologie con installate le stesse versioni di sistemi operativi e di software dei PC e dei server utilizzati in azienda. Naturalmente la contropartita è una maggior difficoltà di configurazione e di gestione.

La prima tipologia di analisi statica che mostreremo è l’estrazione delle stringhe presenti all’interno del file binario. Un eseguibile può contenere stringhe nel caso preveda di stampare messaggi, indirizzi IP, nomi di dominio o URL a cui connettersi, nomi di file da salvare, chiavi di registro da modificare e così via. Si tratta di un’analisi che può fornire informazioni utili sul funzionamento del malware.

Una prima possibilità per estrarre le stringhe è quello di usare il comando Linux standard strings , che permette di estrarre sia stringhe in formato ASCII (default) che in formato Unicode (con l’opzione -el). Altri tool più specifici che si trovano all’interno della REMUX sono i comandi pestr , progettato per l’estrazione di stringhe da eseguibili Windows, e il comando floss , ovvero FireEye Labs Obfuscated String Solver, progettato per estrarre anche eventuali stringhe che eventualmente gli autori del malware avessero offuscato.

Di seguito, l’output ottenuto dal comando floss utilizzato con il malware già usato negli esempi precedenti:

Alcune informazioni che è possibile derivare da tale analisi mostrano che il malware è di tipo .NET (probabilmente Visual Basic), che il nome dell’eseguibile originale è max.exe (lo avevamo già visto dalle analisi precedenti), che non ci sono stringhe offuscate.

Un’opzione che è possibile utilizzare in Windows è il software PeStudio , sistema free per sistemi Windows. Si tratta di un tool utile per visualizzare molte informazioni presenti in un eseguibile che, tra le altre cose, permette anche l’estrazione di stringhe.

Spesso gli autori di malware, per non rivelarne il funzionamento implementano meccanismi di offuscamento del binario, attraverso l’utilizzo di cosiddetti packer o cryptor.

Un packer è un programma che, a partire da un file binario, utilizza meccanismi di compressione per offuscarne il contenuto, ottenendo un nuovo eseguibile con contenuto offuscato. All’esecuzione del nuovo eseguibile viene eseguita la decompressione, in modo che il binario originale venga caricato in memoria ed eseguito. Un cryptor ha un funzionamento simile, tranne che per offuscare il binario utilizza meccanismi di cifratura invece che di compressione.

Non ci sono meccanismi certi per determinare se un binario è stato offuscato, ma un metodo molto valido è quello di valutarne l’entropia. I file compressi o cifrati, diversamente da quelli normali, hanno un elevato grado di casualità. Gli eseguibili legittimi in Windows difficilmente sono compressi o cifrati e quindi raramente esibiscono quella casualità di caratteri che portano ad un’entropia elevata.

Un tool utilizzabile per misurare l’entropia di un binario è binwalk . Tale tool utilizzato per il nostro malware di riferimento mostrerà il seguente risultato.

Il risultato ottenuto mostra come solo una parte ben precisa del file, ovvero a partire dalla posizione 89268, è compressa utilizzando il tool gzip.

Una volta stabilito che l’eseguibile è offuscato attraverso un packer o un cryptor, il modo più semplice, quando applicabile, per analizzare la versione è quello di decomprimere o decifrare l’eseguibile utilizzando lo stesso tool utilizzato per offuscare il file. Un esempio, è il popolare UPX (riconoscibile per il fatto che il file offuscato contiene stringhe del tipo UPX0 e UPX1): in tal caso è possibile utilizzare il tool stesso per tornare alla versione originale.

Tornando al nostro esempio, possiamo quindi provare ad estrarre la sezione cifrata del file, utilizzando l’editor esadecimale wxHexEditor fornito con REMnux, e salvandola come nuovo file hostr_unpacked.

Ora possiamo cercare le stringhe (unicode) presenti all’interno della sezione decompressa del file.

A questo punto le cose sembrano decisamente più interessanti: è possibile individuare il dominio soa7.zapto.org , che avevamo già visto in precedenza, riferimenti a chiavi di registro ( Software/Microsoft/Windows/CurrentVersionRun ) con il probabile obiettivo di mantenere la persistenza del malware, comandi di modifica delle impostazioni del firewall di sistema ( netsh firewall add allowedprogram e netsh firewall delete allowedprogram ).

Spesso la situazione è più complicata, per cui può essere necessario individuare l’algoritmo utilizzato e scrivere manualmente l’unpacker, oppure, quando anche questo non è possibile, mettere in esecuzione (in maniera controllata) il malware, lasciare che sia il malware stesso a farne l’unpacking, e poi fare il dump del malware dalla memoria (si veda più avanti).

Il passo successivo nell’analisi statica è l’analisi del file PE. Il formato PE (Portable Executable), utilizzato dagli eseguibili Windows (.exe, .dll, .ocx, .sys, .drv, ecc.), è una struttura dati che permette al sistema operativo Windows di eseguire correttamente il contenuto eseguibile.

I file di tipo PE iniziano con un header che contiene informazioni rispetto al codice da eseguire e all’indirizzo in cui è contenuta la porzione eseguibile, al tipo di applicazione, alle librerie di funzioni da caricare, e così via. Le informazioni presenti nell’header di un file PE sono molto importanti dal punti di vista dell’analisi del malware.

Il file PE è suddiviso in sezioni, la cui struttura è descritta nella Section Header , che si trova subito prima delle sezioni stesse. Le sezioni più comuni in un file PE sono le seguenti:

Questo elenco è solo indicativo, in quanto i nomi delle sezioni possono cambiare in base al compilatore utilizzato e possono essere presenti più sezioni rispetto a quelle elencate.

Per ognuna delle sezioni presenti sono disponibili le seguenti informazioni:

Analizzando ancora il nostro campione di malware hostr.exe con PeStudio vediamo che è formato dalle seguenti sezioni: .text, .sdata, .rsrc, .reloc. La sezione .rsrc ha un’elevata entropia elevata: è infatti la sezione che contiene l’ulteriore file eseguibile compresso che avevamo già individuato.

Tra le altre cose, PeStudio mostra anche il contenuto della tabella di import del campione di malware nell’area denominata “ imports “. Windows utilizza queste informazioni per determinare quali DLL (“libraries”) e le funzioni implementate al loro interno (“ symbols ” o “API”) sono necessarie per l’esecuzione del programma. L’analisi degli import può aiutarci a determinare il tipo di funzionalità implementata all’interno del campione di malware.

Infine, l’analisi statica più avanzata, a cui per forza di cose accenneremo soltanto, è quella che si ottiene aprendo il file PE con un disassemblatore, che permette, a partire dall’eseguibile, di ottenere il codice assembler, analizzando il quale è possibile dedurre i comportamenti del malware.

Il disassemblatore più famoso e più utilizzato dagli analisti di malware è IDA Pro , con versioni per Windows, Linux e MacOS, che ha anche funzioni di debugger, disponibile in due versioni, una versione free con funzionalità molto limitate e una versione Pro a pagamento. È possibile scaricare quest’ultima versione in modalità demo, con alcune limitazioni, tra cui l’impossibilità di salvare il lavoro svolto.

Un’altra possibilità è quella di utilizzare Ghidra , anch’esso con funzionalità di debugging e di decompilatore, realizzato dalla NSA con licenza open source. Ghidra è disponibile su REMnux.

Di seguito uno screenshot di Ghidra col quale è stato aperto l’eseguibile hostr.exe utilizzato sopra per altre tipologie di analisi.

L’analisi dinamica viene tipicamente effettuata dopo l’analisi statica, ed è complementare a questa.

Sebbene l’analisi dinamica sia molto potente e permetta di osservare le reali funzionalità del malware, alcune delle quali altrimenti difficili da individuare, effettuata senza analisi statica potrebbe portare a non considerare ed esplorare tutti i possibili path di esecuzione. D’altra parte tutti i risultati derivanti dall’analisi statica dovrebbero essere sempre verificati dall’analisi dinamica.

Per effettuare l’analisi dinamica di potenziale malware occorre innanzitutto predisporre un ambiente controllato dove eseguire in sicurezza il potenziale malware.

Il modo più semplice è quello di predisporre un ambiente di laboratorio formato da macchine virtuali. Nella versione più semplice il lab può essere da una macchina Windows posizionata su una rete isolata, su cui viene eseguito il potenziale malware, e da una macchina Linux (per esempio una REMnux), posizionata sulla stessa rete isolata e configurata come default gateway per la macchina Windows.

Sulla macchina Windows dove viene eseguito il malware devono essere installati i tool di analisi, mentre sulla macchina Linux sarà installato un tool per lo sniffing della rete. Sulla macchina Linux sarà anche installato un tool per emulare i vari servizi di rete invocati eventualmente dal malware e rispondere al posto di qualsiasi host che il malware cercasse di contattare.

L’utilizzo di macchine virtuali permette di catturare degli snapshot prima dell’analisi, in modo da tornare ad una situazione pulita una volta terminata l’analisi.

Naturalmente il lab può essere complicato a piacere, per esempio creando più macchine Windows con architetture a 32 e 64 bit e con diverse versioni di sistema operativo.

L’analisi dinamica è basata sul monitoraggio delle interazioni del malware con il sistema, in particolare vengono di solito monitorati:

Possibili tool utilizzati per queste tipologie di monitoraggio sono i seguenti.

Process Hacker è uno strumento open source che permette monitorare le risorse di sistema. È un ottimo strumento per esaminare i processi in esecuzione sul sistema e per ispezionare gli attributi del processo, che può essere utilizzato, una volta eseguito il campione di malware, per identificare il processo malware appena creato, eventuali sottoprocessi e tutti i loro attibuti.

Process Monitor è uno strumento di monitoraggio avanzato che mostra l’interazione in tempo reale dei processi con il filesystem, il registry e alcune attività di rete. Poiché il tool genera molti eventi, la cattura degli eventi deve essere attivata appena prima dell’esecuzione del campione di malware. Per filtrare ulteriormente il rumore è possibile utilizzare Noriben , uno script Python che a partire dagli eventi generati da Process Monitor può generare report sugli indicatori di compromissione del malware.

È possibile utilizzare Regshot per creare una baseline del sistema prima dell’esecuzione del campione di malware e confrontarla con lo stato del sistema dopo l’esecuzione. L’utilizzo di Regshot con strumenti come Process Monitor ci consente di essere relativamente certi di poter osservare l’effetto del campione sul sistema infetto.

Se il lab utilizzato per l’analisi dinamica ha una configurazione simile a quella descritta sopra, i tool per l’analisi del traffico di rete saranno eseguiti sulla macchina Linux. In primo luogo, visto che la maggior parte dei malware comunica con host su Internet (es. command & control server) è bene che durante l’analisi questo non avvenga, ma, per far sì che il malware continui nel suo funzionamento, è necessario fornire tutti i servizi richiesti.

Questo è possibile utilizzando InetSim , tool open source per la simulazione di servizi Internet standard (come DNS, HTTP / HTTPS e così via), presente su REMnux. Attraverso questo tool è possibile rispondere alle richieste fatte via rete dal malware.

Come mostrato nell’output seguente, INetSim si mette in ascolto su diverse porte tcp e udp simulando servizi standard. È inoltre in grado di eseguire un servizio “dummy” per gestire le connessioni dirette a porte non standard.

Per il monitoraggio del traffico di rete generato come risultato dell’esecuzione del malware è possibile utilizzare Wireshark , uno sniffer di pacchetti che consente di catturare il traffico di rete. L’analisi del traffico di rete catturato è utile per capire il canale di comunicazione utilizzato dal malware e determinare gli indicatori di compromissione basati sulla rete.

Infine, una forma più avanzata di analisi dinamica che richiede adeguate competenze, è quella di aprire l’eseguibile con un debugger ed eseguirlo in maniera controllata. Con un debugger è infatti possibile inserire breackpoint e breackpoint condizionali, avanzare passo passo nell’esecuzione, gestire manualmente le eccezioni, andando molto a fondo nella comprensione del funzionamento del malware.

Oltre ai già citati IDA Pro e Ghidra, un altro debugger per Windows molto utilizzato è OllyDbg .

L’analisi della RAM è uno strumento molto potente nella ricerca di malware, considerato che ogni malware, per quanto adotti stratagemmi per rimanere nascosto, per essere messo in esecuzione deve risiedere nella memoria del sistema dove viene eseguito.

Il punto di vista dell’analisi della memoria per rilevare il malware è tuttavia molto diverso da quello visto finora. Nelle tipologie di analisi viste finora avevamo infatti un eseguibile di cui volevamo studiare il comportamento, mentre l’analisi della RAM viene normalmente avviata in quei casi in cui si sospetti la presenza di un malware in un sistema, ma non sia stato individuato l’eseguibile sospetto.

Alcune tecniche di analisi della memoria sono descritte qui , un articolo nel quale viene presentato quello che è probabilmente il principale tool per l’analisi della memoria, Volatility .

All’interno di Volatility sono presenti diversi plugin utili nella rilevazione di malware.

Alcuni plugin, come pslist , psscan , pstree , malprocfind e processbl , permettono di esaminare i processi in esecuzione sul sistema e rilevarne le anomalie. Un’altra famiglia di plugin, come connscan , sockscan e netscan , permette di esaminare le comunicazioni di rete del processo. Altre categorie di plugin come ldrmodules , malfind , ssdt e apihooks permettono di individuare la presenza di meccanismi di code injection e di rootkit.

Infine, una volta individuato uno o più processi che mostra comportamenti malevoli, è possibile estrarlo dalla memoria, ottenendo un file eseguibile che può essere analizzato con le tecniche discusse sopra. Il plugin di Volatility che permette il dump di un processo dalla memoria è procdump , ma è possibile anche utilizzare dlldump per il dump delle DLL utilizzate da un processo o moddump per il dump di driver del kernel.

Analisi del malware: l’importanza per le aziende

L’analisi del malware è certamente un tema affascinante e complesso che in un articolo può essere solo sfiorato.

Qui sono state presentate alcune tecniche e tool utilizzabili anche con competenze non troppo specifiche, come quelle per l’analisi automatizzata e alcune di quelle base per l’analisi statica e dinamica. Nonostante tali tecniche non siano sufficienti a comprendere il funzionamento di malware zero-day o malware scritto con l’intento di confondere i meccanismi di analisi, in molti casi permettono di ottenere buoni risultati.

Si tratta certamente di un tema che le aziende dovrebbero affrontare, come parte del processo di gestione degli incidenti di sicurezza, prima di trovarsi in una situazione di emergenza, sviluppando le opportune conoscenze, coinvolgendo esperti esterni e predisponendo processi e strumenti appropriati.