
Mole
Mole è un plugin per Binary Ninja progettato per identificare percorsi di esecuzione interessanti nei binari. Esegue backward slicing sulle variabili usando il Medium Level Intermediate Language (MLIL) di Binary Ninja in forma Static Single Assignment (SSA), costituendo la base per un'analisi statica del taint.
In Mole, un percorso si riferisce al flusso di dati tra una sorgente e un sink definiti. Cosa costituisce un percorso "interessante" dipende dagli obiettivi dell'analisi. Ad esempio, quando si cercano vulnerabilità, si potrebbero cercare percorsi in cui input non fidati (sorgenti) influenzano operazioni sensibili (sink) in modi potenzialmente pericolosi.
Il seguente elenco evidenzia alcune delle caratteristiche attuali di Mole:
- Modalità Operativa: Mole può essere eseguito sia all'interno dell'interfaccia utente di Binary Ninja che in modalità headless. La modalità headless è particolarmente utile per analisi scriptate su un gran numero di binari. Al contrario, l'uso di Mole nell'interfaccia utente è ideale per indagare da vicino sui percorsi rilevati.
- Identificazione dei Percorsi:
- Configurazione: Mole consente agli utenti di definire funzioni sorgente e sink attraverso l'interfaccia utente di Binary Ninja o file di configurazione (vedi Usage). Questo offre flessibilità nella selezione di sorgenti e sink in base allo scenario d'uso specifico.
- Esplorazione: Per comprendere meglio un percorso ed esaminarne le caratteristiche, tutte le istruzioni lungo il percorso possono essere stampate o evidenziate visivamente in Binary Ninja. Inoltre, è possibile visualizzare un confronto affiancato di due percorsi per individuare rapidamente le differenze. Simile alle istruzioni, la sequenza di chiamate di funzione di un percorso può essere stampata o visualizzata come grafico.
- Raggruppamento: Per facilitare l'identificazione di percorsi simili, Mole supporta molteplici strategie di raggruppamento. Attualmente, i percorsi possono essere raggruppati in base alla corrispondenza di funzioni sorgente e sink, o per sequenze di chiamate identiche. Nuove strategie di raggruppamento personalizzate possono essere facilmente aggiunte per estendere e personalizzare questa funzionalità (vedi Customization).
- Persistenza: I percorsi scoperti possono essere annotati per chiarezza o rimossi se ritenuti irrilevanti. Per preservare l'avanzamento dell'analisi, i percorsi possono essere salvati direttamente nel database del binario target (formato
.bndb di Binary Ninja). I percorsi possono anche essere esportati, ad esempio, quando si esegue un'analisi headless su molti binari in un filesystem, consentendo di importare successivamente i percorsi identificati per un'esplorazione più agevole all'interno di Binary Ninja.
- Analisi dei Percorsi con AI: Mole può interagire con Large Language Models (LLMs) locali o remoti tramite l'API OpenAI (vedi Usage). I modelli vengono utilizzati per analizzare i percorsi identificati e stabilire se un dato percorso corrisponde a una vulnerabilità sfruttabile o meno. L'LLM tenta di classificare la vulnerabilità e assegnare un livello di gravità, il che può aiutare a prioritizzare quali percorsi meritano ulteriori indagini da parte di un analista. Mole fornisce un set base di strumenti che l'LLM può utilizzare per richiedere informazioni aggiuntive sul binario in analisi.
- Slicing Inter-Procedurale di Variabili: Mole supporta il slicing delle variabili MLIL attraverso i confini delle funzioni - un compito che presenta diverse sfide. Ad esempio, determinare staticamente il/i chiamante/i effettivo/i di una funzione è spesso difficile o addirittura impossibile. Di conseguenza, l'approccio implementato è un'approssimazione. Sebbene non perfetto, si comporta ragionevolmente bene in un'ampia gamma di scenari pratici.
- Analisi Base dei Puntatori: Mole attualmente implementa una strategia semplificata per tracciare l'uso dei puntatori. Come lo slicing inter-procedurale, questo approccio è una semplificazione con limitazioni intrinseche (ad esempio, non può tracciare variabili globali). Tuttavia, funziona bene in molti casi pratici e si prevede di migliorarlo nelle versioni future.
Esempio di Utilizzo
Vedi Mole in azione mentre espone CVE-2021-4045, una vulnerabilità di command injection non autenticata nella fotocamera IP TP-Link Tapo C200 (clicca sull'immagine qui sotto per guardare su YouTube):

Documentazione
- Installation
- Usage
- Customization
Contribuisci o Condividi la Tua Esperienza
Mole è attualmente un lavoro in corso. Se incontri un bug, hai un utile nuovo test unitario che evidenzia un falso positivo o negativo, o hai un suggerimento per una nuova funzionalità, considera di aprire una issue o contribuire tramite pull request. Nota anche che gli attuali unit tests sono stati verificati solo su binari linux-x86_64 e linux-armv7 finora.
Se hai una storia di successo interessante - come trovare una vulnerabilità con l'aiuto di Mole - ci piacerebbe saperne di più! Sentiti libero di condividere la tua esperienza con noi.
Contributori