Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 2 di 2
  • livello intermedio
Indice lezioni

Analisi dei malware con Ghidra. Installazione e configurazione

Ghidra: installazione e configurazione del software utilizzato dalla NSA per l'analisi dei malware e il reverse engineering
Ghidra: installazione e configurazione del software utilizzato dalla NSA per l'analisi dei malware e il reverse engineering
Link copiato negli appunti

In questa lezione ci occuperemo dell'installazione e della configurazione di Ghidra, uno degli strumenti più potenti per il reverse engineering. Ghidra, sviluppato dalla National Security Agency (NSA) degli Stati Uniti e rilasciato come software open source, ci permette di analizzare software sospetti e individuare potenziali minacce malware. Per sfruttare al massimo il suo potenziale, dobbiamo prima installarlo correttamente e configurarci un ambiente di lavoro adeguato.

Requisiti di sistema e download

Prima di installare Ghidra, assicuriamoci che il nostro sistema soddisfi i seguenti requisiti minimi:

  • Sistema operativo Windows, macOS o Linux.
  • Java Development Kit (JDK) versione 11 o superiore.
  • RAM almeno 4 GB (consigliati 8 GB o più per progetti complessi).
  • Spazio su disco circa 500 MB per l'installazione base.

Per scaricare Ghidra, seguiamo questi passaggi:

  1. Visitiamo il sito ufficiale di Ghidra: https://ghidra-sre.org
  2. Clicchiamo su "Download Ghidra" e accettiamo i termini della licenza.
  3. Scarichiamo l'archivio ZIP contenente il software e lo estraiamo in una directory a nostra scelta.

Installazione di Java e configurazione dell’ambiente

Poiché Ghidra è scritto in Java, abbiamo bisogno di installare un JDK compatibile. Possiamo installarlo con i seguenti metodi:

Windows

  1. Scarichiamo il JDK da Adoptium o Oracle.
  2. Installiamo il JDK e aggiungiamo il percorso della cartella bin nelle variabili d’ambiente (se necessario).
  3. Verifichiamo l'installazione aprendo il Prompt dei comandi ed eseguendo: java -version

Linux/macOS

Su Linux possiamo installare OpenJDK direttamente dai repository ufficiali:

sudo apt install openjdk-11-jdk # Debian/Ubuntu
sudo dnf install java-11-openjdk # Fedora

Su macOS possiamo utilizzare Homebrew e il comando brew install openjdk@11

Dopo aver installato Java, assicuriamoci che sia configurato correttamente eseguendo java -version nel terminale.

Avvio di Ghidra

Dopo aver estratto l’archivio ZIP di Ghidra:

  • Su Windows navighiamo nella cartella estratta e facciamo doppio clic su ghidraRun.bat.
  • Su Linux/macOS apriamo il terminale e navighiamo nella cartella estratta, poi eseguiamo: ./ghidraRun

Se tutto è andato a buon fine, vedremo aprirsi l'interfaccia principale di Ghidra.

Creazione di un nuovo progetto

Per iniziare un'analisi con Ghidra dobbiamo creare un progetto:

  1. Clicchiamo su "File > New Project".
  2. Selezioniamo il tipo di progetto (per la maggior parte delle analisi, scegliamo "Non-Shared Project").
  3. Diamo un nome al progetto e scegliamo una directory di salvataggio.
  4. Clicchiamo su "Finish".

Ora siamo pronti per importare un file eseguibile da analizzare.

Importazione di un file eseguibile sospetto

Come eseguibile da importare abbiamo scelto un eseguibile di esempio disponibile su GitHub. Questo ci permetterà di familiarizzare con l'interfaccia e le funzionalità dello strumento.

  • Scarichiamo l'eseguibile di esempio dal repository OliCyber.IT-Writeups. Il file si chiama guesser_master ed è un binario utilizzato in una challenge di reverse engineering.
  • Nella finestra principale di Ghidra, clicchiamo su "File > Import File".
  • Selezioniamo il file guesser_master scaricato. Ghidra analizzerà automaticamente il file e suggerirà l'architettura corrispondente.
  • Confermiamo le impostazioni e clicchiamo su "OK".

Configurazione dell’ambiente di lavoro

Ora possiamo personalizzare Ghidra per facilitare l’analisi:

Preferenze generali

  • Andiamo su "Edit > Tool Options" per modificare preferenze di visualizzazione e shortcut.
  • Attiviamo la modalità scura (opzionale) per una migliore leggibilità.

Gestione dei plugin

Ghidra supporta vari plugin utili per il reverse engineering. Per gestirli:

  1. Clicchiamo su "File > Configure".
  2. Nella scheda "Extensions", possiamo installare nuovi plugin o disattivare quelli non necessari.
  3. Alcuni plugin utili includono:

    • Decompiler Graphing per una migliore rappresentazione del flusso del codice.
    • Debugger Integration per il debugging di programmi in esecuzione.

Setup degli script personalizzati

Uno dei punti di forza di Ghidra è la possibilità di usare script Python o Java per automatizzare analisi. Per configurare lo scripting:

  1. Apriamo il menu "Window > Script Manager".
  2. Qui possiamo caricare e scrivere script personalizzati.
  3. Ad esempio, uno script Python può essere utilizzato per identificare stringhe sospette nel malware:

from ghidra.program.model.address import AddressSet
from ghidra.program.model.listing import CodeUnit
from ghidra.util.task import ConsoleTaskMonitor
listing = currentProgram.getListing()
monitor = ConsoleTaskMonitor()
for codeUnit in listing.getCodeUnits(True):
    if "http" in codeUnit.getComment(CodeUnit.EOL_COMMENT):
        print("Possible C2 communication found at", codeUnit.getMinAddress())

Test dell'installazione con l'eseguibile di esempio

Ora che abbiamo importato l'eseguibile guesser_master:

  • Disassemblaggio: esaminiamo il codice assembly generato da Ghidra.
  • Decompilazione: utilizziamo il decompilatore integrato per ottenere una rappresentazione in linguaggio C del codice.
  • Mappatura delle funzioni: analizziamo la struttura del programma e le funzioni definite.

Questo ci aiuterà a familiarizzare con le funzionalità di Ghidra e le tecniche utilizzate per il reverse engineering. Adesso possiamo iniziare ad analizzarne la struttura. Un file eseguibile è composto da diverse sezioni, tra cui:

  • .text – contiene il codice eseguibile.
  • .data – contiene dati inizializzati utilizzati dal programma.
  • .bss – contiene dati non inizializzati.
  • .rodata – contiene dati in sola lettura, come stringhe di testo.
  • .plt e .got – tabelle utilizzate per la gestione delle funzioni dinamiche.

Possiamo esaminare queste sezioni in Ghidra utilizzando la vista "Program Trees" e "Symbol Tree", che ci permettono di identificare rapidamente il codice e i dati utilizzati dal programma.

Disassemblaggio

Il primo passo nell'analisi di un binario è il disassemblaggio del codice che converte il codice macchina in linguaggio assembly. In Ghidra, possiamo fare questo aprendo il file importato nel CodeBrowser e navigando attraverso le istruzioni assembly.

Alcuni aspetti chiave da osservare:

  • le chiamate di funzione, spesso identificate con CALL seguite dall'indirizzo della funzione.
  • Il flusso del programma, con istruzioni come JMP, JZ, JNZ che indicano salti condizionali e incondizionati.
  • L'uso dello stack (PUSH, POP) e dei registri (MOV, XOR, ADD).

Ghidra include un potente decompilatore che tenta di ricostruire il codice in un linguaggio simile al C. Possiamo visualizzare la versione decompilata del codice selezionando una funzione e aprendo la scheda Decompiler.

Questa visualizzazione semplificata aiuta a capire meglio la logica del programma e facilita l'identificazione di eventuali comportamenti sospetti, come:

  • lettura e scrittura su file.
  • Connessioni di rete non documentate.
  • Uso di funzioni crittografiche o tecniche di offuscamento.

Dopo aver decompilato il codice, possiamo cercare funzioni particolarmente rilevanti per comprendere il comportamento dell'eseguibile. Alcuni indicatori importanti:

  • Funzioni di input/outputfopen, fwrite, fread, printf che possono rivelare come il programma interagisce con i file.
  • Funzioni di retesocket, connect, send, recv che potrebbero indicare attività sospette di comunicazione con server remoti.
  • Uso della memoriamalloc, free, memcpy che possono rivelare possibili exploit di buffer overflow.
  • Evasione e offuscamento – funzioni che manipolano la memoria, come VirtualAlloc su Windows o mprotect su Linux, che potrebbero essere usate per nascondere codice malevolo.

Ghidra ci permette di esaminare queste funzioni utilizzando la vista "Function Graph" che mostra una rappresentazione visiva del flusso del programma e delle chiamate tra funzioni.

Conclusioni

In questa lezione abbiamo visto come installare e configurare Ghidra, oltre a esplorare le sue funzionalità di base per il reverse engineering di un eseguibile. Abbiamo importato un file di test, analizzato la sua struttura, disassemblato e decompilato il codice e identificato funzioni critiche. Questi passaggi sono fondamentali per comprendere il funzionamento di un software sconosciuto, soprattutto in ambito di sicurezza informatica e analisi malware.

Tuttavia, il lavoro di reverse engineering non si esaurisce qui: oltre alla configurazione dell’ambiente, è essenziale approfondire l’analisi statica per ottenere informazioni dettagliate sul comportamento di un codice binario senza eseguirlo. Nella prossima lezione, ci concentreremo proprio su questo aspetto: analizzeremo in dettaglio un codice binario tramite tecniche di analisi statica, esaminando le sue strutture interne, identificando le funzioni chiave e cercando eventuali indicatori di compromissione.

Questo ci permetterà di affinare ulteriormente le nostre competenze e di acquisire una maggiore comprensione dei metodi utilizzati nel reverse engineering.

Ti consigliamo anche