
Plugin IDA Python per il rapido matching basato sulla posizione di simboli di librerie open-source in binari, consentendo un efficiente reverse engineering e analisi delle vulnerabilità di grandi firmware e malware.
/$$ /$$ /$$
| $$ /$$/ | $$
| $$ /$$/ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$
| $$$$$/ |____ $$ /$$__ $$|_ $$_/ |____ $$
| $$ $$ /$$$$$$$| $$ \__/ | $$ /$$$$$$$
| $$\ $$ /$$__ $$| $$ | $$ /$$ /$$__ $$
| $$ \ $$| $$$$$$$| $$ | $$$$/| $$$$$$$
|__/ \__/ \_______/|__/ \___/ \_______/
"Karta" (parola russa per "Mappa") è un plugin IDA Python che identifica e abbina librerie open-source all'interno di un binario dato. Il plugin utilizza una tecnica unica che gli consente di supportare binari enormi (oltre 200.000 funzioni), con un impatto quasi nullo sulle prestazioni complessive.
L'algoritmo di matching è guidato dalla posizione. Ciò significa che il suo focus principale è localizzare i diversi file compilati e abbinare ciascuna funzione del file in base al loro ordine originale all'interno del file. In questo modo, il matching dipende da K (numero di funzioni nell'open source) invece che da N (dimensione del binario), ottenendo un significativo miglioramento delle prestazioni poiché di solito N ≫ K.
Riteniamo che ci siano 3 principali casi d'uso per questo plugin IDA:
Per le versioni più recenti, con Python 3, basta clonare il repository ed eseguire lo script setup.py install.
Python 3 è supportato a partire dalle versioni v2.0.0 e successive.
Con il rilascio di IDA 7.4, Karta viene sviluppato attivamente solo per IDA 7.4 o superiore e Python 3. Python 2 e versioni precedenti di IDA sono ancora supportati tramite la versione di rilascio v1.2.0, che molto probabilmente sarà l'ultima versione supportata a causa della fine del ciclo di vita di Python 2.
L'identificatore di Karta è un plugin più piccolo che identifica l'esistenza e genera le impronte digitali delle versioni delle librerie open source (supportate) presenti all'interno del binario. Niente più bisogno di fare reverse engineering della stessa libreria open-source ancora e ancora: basta eseguire il plugin identificatore e ottenere un elenco dettagliato degli open source utilizzati. Karta attualmente supporta più di 10 librerie open source, tra cui:
Dopo aver identificato gli open source utilizzati, è possibile compilare un file di configurazione .JSON per una libreria specifica (ad esempio libpng versione 1.2.29). Una volta compilato, Karta tenterà automaticamente di abbinare le funzioni (simboli) dell'open source nel binario caricato. Inoltre, nel caso in cui l'open source abbia utilizzato funzioni esterne (memcpy, fread, o zlib_inflate), Karta tenterà anche di abbinare tali funzioni esterne.
Questo progetto è stato sviluppato da me (vedi dettagli di contatto sotto) con l'aiuto e il supporto del mio gruppo di ricerca presso Check Point (Check Point Research).
Questo repository è stato sviluppato e mantenuto da me, Eyal Itkin, durante i miei anni in Check Point Research. Purtroppo, con la mia partenza dal gruppo di ricerca, non sarò più in grado di mantenere questo repository. Questo principalmente a causa della lunga lista di requisiti per eseguire tutti i test di regressione e le versioni di IDA Pro coinvolte nel processo.
Per favore accettate le mie sincere scuse.