Analisi dinamica avanzata di un Malware - Parte seconda: OllyDbg

Tempo di lettura: 7 minuti
Data pubblicazione: November 24, 2016

L’analisi dinamica di un Malware, come ben sapete, consiste nell’analizzare un Malware in esecuzione, osservando le funzioni chiamate, i registri modificati e le sue componenti principali. In questo articolo, come per l'analisi statica, introdurrò uno dei software più utilizzati per questa operazione, OllyDbg.

Introduzione

OllyDbg è un debugger per sistemi Windows a 32 bit. Esso traccia i registri, riconosce le funzioni e i parametri passati alle principali librerie standard, insieme ad eventuali salti condizionali, tabelle, costanti, variabili e stringhe. È uno dei software più utilizzati dagli specialisti del settore poiché è gratuito, è semplice da usare ed ha la possibilità di essere esteso tramite plugin. Uno dei primi utilizzi fu quello di craccare programmi ed effettuare Reverse engineering, mentre tutt’oggi è sfruttato soprattutto per la sua capacità di analizzare i Malware.

Caricare Malware

Ci sono diversi modi per iniziare a debuggare un Malware con OllyDbg. Si possono caricare:

  • file eseguibili;
  • file DLL;
  • file già in esecuzione sul sistema;

Nel caso di un eseguibile, basta cliccare su File->Open e selezionare il file da analizzare. Se il programma necessita di argomenti a linea di comando, apparirà una finestra in cui potranno essere inseriti. Il programma verrà caricato e messo in pausa automaticamente dal software, solitamente nella posizione WinMain.

Schermata principale di OllyDbg
Schermata principale di OllyDbg

Nel caso si volesse allegare un processo già in esecuzione sul sistema, basterà fare File->Attach. Questo ci permetterà di selezionare l’ID del processo da analizzare .

Interfaccia grafica

Una volta caricato il processo, avremo quattro principali finestre aperte:

Interfaccia di OllyDbg
Interfaccia di OllyDbg
  1. Disassemblatore: visualizza il codice debuggato. Solitamente l’istruzione successiva è quella evidenziata;
  2. Registri: visualizza lo stato dei registri. Facendo doppio clic su di essi è possibile modificarli;
  3. Stack: visualizza lo stato dello stack al momento dell’istruzione. OllyDbg inserisce utilissimi commenti che ci permetteranno di capire lo stato dello stack. Come prima, facendo _Tasto Destro->Modify, _è possibile modificarli;
  4. Dump di memoria: visualizza un dump della memoria in modalità live. Premendo _CTRL+G _ è possibile inserire un qualsiasi indirizzo e visualizzarne lo stato. Per modificarlo basta fare Tasto Destro->Binary->Edit.

Viste

Nel menu principale si hanno altre finestre disponibili oltre a quelle appena citate. Le più importanti sono:

  • Mappa della memoria: visualizza tutti i blocchi di memoria allocati dal programma. È un ottimo modo per vedere come il programma viene distribuito all’interno della memoria. Da li è possibile visuallizare ogni singolo indirizzo e relativa sezione come singolo dump o visionarli in modo approfondito nel disassemblatore (Tasto destro->View in Disassembler);
  • Threads: a volte i Malware sfruttano il multithreading e, tramite questa vista, possiamo visualizzarne la lista. Visto che OllyDbg è a singolo thread, bisogna prima metterli tutti in pausa, impostare un breakpoints, e ri-avviare il programma senza il thread.
Finestra della Memoria
Finestra della Memoria

Esecuzione del codice

L’opzione più semplice per eseguire il codice è _Run _e Pause, che permette di avviare e interrompere l’esecuzione del Malware. Solitamente si evita di metterlo in pausa con questo metodo poiché si rischia di allocarlo in posizioni della memoria non agevoli.  Altre operazioni che si possono fare sono:

  • Execute till Return: causerà uno stop del programma fino a che la funzione corrente non arriva al return. Questo può essere utile quando si vuole interrompere l’esecuzione appena la funzione ha finito di svolgere l’operazione. Attenzione che se la funzione non ha fine, il programma continuerà all’infinito;
  • Execute till User Code: è da utilizzare quando il Malware è in pausa. Questa funzione eseguirà il programma fino alla funzione di compilazione del codice (solitamente la sezione .text).

Tracing

Il tracing è un’ottima tecnica che permette di registrare le informazioni d’esecuzione. OllyDbg supporta molte opzioni di tracciamento, tra le quali:

  1. Standard Back Trace: ogni volta che ci muoviamo all’interno del disassemblatore con Step Into (F7) e Step Over (F8), OllyDbg registra i movimenti. È quindi possibile usare il meno ( - ) per tornare indietro e vedere l’istruzione appena eseguita (viceversa, con il + si fa un passo avanti).
  2. Call Stack: per vedere una call stack basta selezionare View->Call Stack;
  3. Run trace: permette di eseguire il codice e salvare ogni istruzione appena eseguita, insieme ai cambiamente dei registri. Ci sono diversi modi per abilitarlo:
    1. Run Trace->skip selection: basterà evidenziare il codice che vogliamo tracciare e cliccare sul tasto destro selezionando l’opzione. Una volta eseguito il codice View->Run Trace. Con questo metodo si vedranno tutti i cambiamenti dei registri per ogni istruzione;
    2. _Debug->Set Condition: _in questo modo si traccierà fino ad arrivare alla condizione imposta da noi, dove il programma si fermerà.
Funzione Skip Selection
Funzione Skip Selection

Conclusioni

OllyDbg è uno dei debugger più popolari per l’analisi dinamica di Malware. L’unico modo per imparare ad utilizzarlo e capirne davvero il funzionamento è il solito, ossia quello di provare e sperimentare in modo autonomo. Ricordo che esso ha moltissimi plugin disponibili per il download, alcuni si possono trovare qui. Un buon manuale per chi vuole approfondire si trova a questo indirizzo.