Analisi statica avanzata di un Malware – Parte Terza: funzioni maligne di Windows

Tempo di lettura: 7 minuti

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.

Nella Parte Seconda abbiamo imparato ad utilizzare il software IDA, che, con i suoi menu, funzioni ed opzioni, è il software principale utilizzato per effettuare un’analisi statica.

In questo terzo e ultimo articolo della serie introdurrò alcune funzioni di Windows che utilizzano i Malware per infettare i nostri dispositivi.

Funzioni del file System

Uno dei comportamenti più comuni nei Malware è quello di creare o modificare file, cercando di non essere rilevato rinominandoli come file sicuri. Osservando queste modifiche si può iniziare a categorizzarlo, ad esempio se inizia a creare dei file e salva il comportamento del nostro browser predefinito, il programma sarà probabilmente uno spyware.

Le funzioni utilizzate da Windows per queste modifiche sono:

  • CreateFile: questa funzione è utilizzata per creare e aprire file (come file si possono intendere pipes, streams, dispositivi I/O e file);
  • ReadFilee WriteFile: rispettivamente leggono e scrivono su file;
  • CreateFileMappingMapViewOfFile: i file mappings sono comunemente utilizzati dai Malware poichè permettono ad un file di essere caricato in memoria e modificato. La prima funzione prende un file dal disco e lo carica in memoria, mentre la seconda ritorna da la possibilità di accedere al file mappandolo.
  • Qualsiasi altra funzione di gestione dei file che trovate, potete cercarne il funzionamento a questo indirizzo, mentre per la gestione della memoria qui.

Registro di Windows

Il registro di Sistema contiene informazioni a cui il sistema operativo fa riferimento mentre viene utilizzato, come i profili degli utenti, le applicazioni installate nel computer e le impostazioni dello stesso. I Malware utilizzano il registro per avere persistenza nel sistema, inserendo stringhe che gli permettono di avviarsi in modo automatico all’avvio del sistema. Il registro è composto da un gruppo di chiavi, sottochiavi e valori. Le chiavi/cartella predefinite sono:

  1. **HKEY_USERS:**contiene tutti i profili utente presenti nel computer;
  2. HKEY_CURRENT_USER: contiene la cartella principale delle informazioni sulla configurazione per l’utente attualmente connesso. È una sottochiave di HKU;
  3. HKEY_LOCAL_MACHINE: contiene le impostazioni sulla configurazione specifica del computer;
  4. HKEY_CLASSES_ROOT: sottochiave di HKLM, salva le informazioni di ogni tipo di file, garantendo che venga aperto il programma corretto quando si apre un file;
  5. HKEY_CURRENT_CONFIG: contiene informazioni sul profilo hardware.
L'editor del registro (Regedit) è un software che permette di modificare e inserire nuove chiavi
L'editor del registro (Regedit) è un software che permette di modificare e inserire nuove chiavi

Le funzioni principali del registro sono:

  1. **RegOpenKeyEx:**apre il registro in modo da poterlo modificare o interrogare;
  2. **RegSetValueEx:**aggiunge una nuova chiave;
  3. RegGetValue: ritorna la chiave richiesta.

Se volessi cercare quando il mio programma apre il registro, basta che su IDA mi posiziono sulla scheda del disassemblatore (consiglio di provare sia con IDA-ViewA che con IDA-ViewB), clicco sul menù Search->text. Da li cerco la stringa che mi interessa

aaasearchida
aaasearchida

Se lo trova, comparirà una nuova scheda con tutte le ripetizioni della stringa ricercata. Facendo doppio click su una delle voci, ci porterà al disassemblatore e potremo vedere cosa sta per fare.

aaaidaregistro
aaaidaregistro

Scoperto il nome della funzione, possiamo ora cercare le istruzioni che andrà ad eseguire con il registro aperto. Per trovarle, basta fare tasto Destro->Jump to operand. Trovata la struttura ad albero che ci interessa, con un pò di pazienza bisogna cercare di capire cosa sta facendo il programma studiando il codice Assembly.

aaaidafunction
aaaidafunction

Se vogliamo controllare se il Malware si connette alla rete per inviare informazioni che riesce a sottrarre dal nostro dispositivo, le stringhe che si possono cercare sono:

  • socket;
  • bind;
  • listen;
  • WSAStartup;
  • accept;
  • Internet: viene utilizzato dalle API WinINet.

File DLL

I file DLL sono utilizzati per fornire librerie e moduli ai programmi. L’utilizzo di esse consente di migliorare la modularità del codice, il riutilizzo dello stesso ed utilizzare in maniera più efficiente la memoria. Una DLL è quindi una libreria che contiene codice e dati che possono essere utilizzati da più programmi contemporaneamente. i Malware utilizzano i DLL in tre modi:

  • salvare codice maligno;
  • utilizzando le DLL di Windows: in questo modo il programma riesce ad interagire in maniera più completa con il sistema operativo;
  • utilizzando DLL di terza parti.

Disassemblati, i file DLL appaiono uguali ad un file .exe, per cui non abbiate paura di analizzarli. Se utilizzano le DLL predefinite di Windows possono darci anche più informazioni rispetto al file eseguibile.

Conclusioni

Spero con questi tre articoli di essere riuscito ad introdurre e spiegare, anche per chi è alle prime armi, come funziona un’analisi statica. Se a qualcuno vuole approfondire ulteriormente, suggerisco di leggere Pratical Malware Analysis e Reverse Engineering Code with IDA Pro. Sempre inerente ai Malware i prossimi articoli saranno incentrati sull’analisi dinamica. Se avete notato errori o vi è talmente piaciuto l’argomento e volete scrivere articoli tutti vostri, basta un messaggio!