Nella Parte Prima abbiamo approfondito il discorso dell’analisi statica di un Malware introducendo l’astrazione di un dispositivo, i principali operatori assembly e, per ultimo, i software più utilizzati per questo tipo di operazioni. In questo articolo introdurrò l’interfaccia di IDA e inizierò ad analizzare un Malware utilizzando i servizi online VirusTotal e Malwr, insieme al software IDA freeware.
La lista da cui prenderò il Malware è questa, mentre il file stesso (se volete provare ad analizzarlo) è [il vostro browser tenderà a bloccare il download ovviamente] qui. Consiglio come sempre di utilizzare una macchina virtuale per questo tipo di operazioni. Sebbene in questo tipo di analisi non viene avviato nessun file, il rischio di essere infettati è alto (anche se, per ora, non analizziamo Ransomware). Nel mio caso, sto usando Windows 7 tramite VirtualBox.
Con VirusTotal e Malwr effettuo una veloce analisi statica di base, accertandomi del fatto che sia un Malware, a che tipologia appartiene e quali sono i comportamenti più “visibili” sul dispositivo attaccato.
Analisi di Malwr: è un tipo di File PE, effettua qualche connessione con degli indirizzi IP e, dagli screenshot forniti dal sito, è in tutto e per tutto un Adware.
Per prima cosa, apro IDA e seleziono un nuovo progetto. All’apertura, mi chiede che tipo di file voglio analizzare e seleziono PE eseguibile.
Dopo averlo caricato, vengono chieste diverse opzioni, e lascio tutto di default.
Nella cartella dove è presente il file che stiamo analizzando verranno creati diversi database, con estensione _.til, .id0, .id1 _e .nam. Sono file utilizzati da IDA per salvare le informazioni dell’eseguibile che analizziamo.
L’interfaccia di IDA è molto complessa, per cui cercherò di spiegare in dettaglio ogni menù ed opzione.
Quando lo apriamo si presenta in questo modo, e di primo impatto potrebbe sembrare confusionario, ma dopo un pò che lo si utilizza, diventerà un ambiente familiare, visto che è anche possibile personalizzarlo ai base alle nostre esigenze.
Rappresenta la memoria utilizzata dal file che abbiamo caricato, la freccia gialla indica il punto in cui ci troviamo, e i colori sono divisi in base al tipo di codice che è presente nell’eseguibile. Se con il tasto destro clicchiamo su di essa, possiamo ingrandirla a piacere.
È il menu principale nel quale possiamo scegliere la vista che ci interessa. Se nel menu in alto clicchiamo su View->open subviews abbiamo la possibilità di aprire altre viste, ad esempio lo Pseudocodice di alcune funzioni o i registri appartenenti al programma.
È il grafico dell’insieme di istruzioni nel punto della memoria selezionato sulla barra precedente. Ogni blocco logico rappresenta un obiettivo dell’istruzione jump, che salta ad un altro blocco, e cosi via. Le linee che separano ogni blocco possono essere verdi, rosse o blu:
L'help in linea può venirci incontro per questo tipo di informazioni.
Se con il mouse clicchiamo il tasto destro->Text Views in un punto qualsiasi del grafico, possiamo vedere il codice disassemblato da IDA
Le frecce tratteggiate rappresentano le istruzioni jump condizionali, mentre quelle solide indicano i jump non condizionali.; seguendole, possiamo ovviamente osservare cosa fa il programma, come nel grafico. Nel caso ci sia un commento verde, “; CODE XREF: " sapremo che l’istruzione presente sulla stessa riga si riferisce a quell’indirizzo; cliccando_ tasto destro->Jump to cross reference_ potremo sapere a quale locazione e istruzione fa riferimento.
In questa finestra sono presenti tutte le funzioni che l’eseguibile importa e di conseguenza non sono presenti al suo interno. La maggior parte dei file eseguibili effettua queste operazioni, poichè ha bisogno di DLL esterne o condivise per funzionare.
Sulla sinistra è presente la finestra delle funzioni, in cui sono presenti tutte le funzioni e subroutine che l’eseguibile sfrutta in tutti i suoi passaggi. Ci stampa in quale segmento siamo, dove inizia, la lunghezza della funzione e alcune flags (ad esempio: R per informarci che la funzioni ritorna al chiamante, S indica una funzione statica, etc.).
Sulla destra ho invece aperto la finestra Names (potete trovarla in_ View-> open Subviews_). In questo caso possiamo visualizzare tutti le stringhe che IDA trova nell’eseguibile, alcune generate da IDA stesso per indicare che quegli indirizzi virtuali non hanno nomi o simboli (sono indicati con il trattino basso, ad esempio _SEH). Anche in questo caso sono differenziate con delle lettere iniziali, che stanno ad indicare:
Un’altra finestra degna di nota è quella dei segmenti (si trova sempre in subviews). Essa ci permette di vedere quali tipologie di segmenti sono presenti nell’eseguibile e cliccando su uno di essi si può saltare direttamente all’inizio delle loro istruzioni.
Le funzioni che ho introdotto sono solo la punta dell’iceberg di questo software, ma per le analisi che stiamo compiendo saranno più che sufficienti. Per chi volesse approfondire, sono ottimi i libri “The IDA Pro Book” e “Reverse Engineering Code with IDA Pro”. Nel prossimo articolo analizzerò finalmente un Malware, andando a focalizzarmi sulle funzioni maligne e sull’utilizzo pratico di IDA.