Analisi statica avanzata di un Malware - Parte seconda: IDA

Tempo di lettura: 8 minuti
Data pubblicazione: September 5, 2016

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 VirusTotal, su 56 antivirus, 39 segnalano un possibile Trojan/Adware
Analisi di VirusTotal, su 56 antivirus, 39 segnalano un possibile Trojan/Adware
Analisi di Malwr, è un tipo di File PE
Analisi di Malwr, è un tipo di File PE

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.

Interfaccia di IDA

Per prima cosa, apro IDA e seleziono un nuovo progetto. All’apertura, mi chiede che tipo di file voglio analizzare e seleziono PE eseguibile.

aaaTipodiFile
aaaTipodiFile

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.

Interfaccia di IDA
Interfaccia di IDA

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.

Memoria

aaainterfacciaIDAbarra
aaainterfacciaIDAbarra

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.

aaainterfacciaIDAmenu
aaainterfacciaIDAmenu

È 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.

Grafico

aaainterfacciaIDAgraph
aaainterfacciaIDAgraph

È 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:

  • linea verde: l’obiettivo esiste, e la jump è soddisfatta;
  • linea blu:  non ci sono decisioni da intraprendere e la jump non è soddisfatta (l’obiettivo non esiste);
  • linea rossa: non ci sono decisioni da prendere.

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

aaainterfacciaIDAtextviews1
aaainterfacciaIDAtextviews1

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.

**Con il tasto destro seleziono Jump to cross reference**
**Con il tasto destro seleziono Jump to cross reference**
**Clicco OK e mi porta alla locazione scelta**
**Clicco OK e mi porta alla locazione scelta**
aaainterfacciaIDAcross2
aaainterfacciaIDAcross2

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.

aaainterfacciaIDAmenuimport
aaainterfacciaIDAmenuimport

Finestra delle funzioni

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.).

aaainterfacciaIDAfunzioni1
aaainterfacciaIDAfunzioni1

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:

  • **F:**regolare funzione (che quindi troviamo nella finestra delle funzioni);
  • L: funzione di libreria;
  • C: istruzione;
  • A: stringa ascii;
  • D: dati;
  • I: nome importato.

Segmenti

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.

aaainterfacciaIDAsegmenti
aaainterfacciaIDAsegmenti

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.