
Strumenti di analisi statica automatizzata per programmi binari
Il framework Pharos per l'analisi statica di binari è un progetto del Software Engineering Institute della Carnegie Mellon University. Il framework è progettato per facilitare l'analisi automatizzata di programmi binari. Utilizza l'infrastruttura del compilatore ROSE sviluppata dal Lawrence Livermore National Laboratory per disassemblaggio, analisi del flusso di controllo, semantica delle istruzioni e altro. Questo software è rilasciato sotto una licenza BSD licenza.
La distribuzione attuale è un aggiornamento sostanziale rispetto alla versione precedente e aggiunge diverse funzionalità, tra cui miglioramenti allo strumento OOAnalyzer, codice sperimentale per l'analisi dei percorsi, miglioramenti al partizionatore, multi-threading e molte altre funzionalità minori.
Il framework Pharos è un progetto di ricerca e il codice è in fase di sviluppo attivo. Non vengono fornite garanzie di idoneità per alcuno scopo. Sebbene questa versione fornisca istruzioni di compilazione, test unitari e documentazione, resta molto lavoro da fare. Abbiamo testato alcune configurazioni di compilazione selezionate, ma non abbiamo testato attivamente la portabilità del codice sorgente. Consulta le istruzioni di installazione per maggiori dettagli.
Poiché l'obiettivo principale del rilascio di questo codice è fornire trasparenza nella nostra ricerca e stimolare il dialogo con altri ricercatori di analisi statica di binari, non esitate a contattare Cory Cohen [email protected] per eventuali domande su questo lavoro. Potrei non essere in grado di rispondere tempestivamente, ma farò del mio meglio.
ApiAnalyzer è uno strumento per trovare sequenze di chiamate API con le relazioni di dati e controllo specificate. Questa funzionalità è intesa per rilevare paradigmi comuni di interazione con il sistema operativo, come aprire un file, scrivere al suo interno e chiuderlo.
OOAnalyzer è uno strumento per l'analisi e il recupero di costrutti orientati agli oggetti. Questo strumento è stato oggetto di un articolo intitolato "Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables" pubblicato alla ACM Conference on Computer and Communications Security nel 2018. Lo strumento identifica membri e metodi di oggetti tracciando i puntatori a oggetti tra le funzioni del programma. Una precedente implementazione di questo strumento si chiamava "Objdigger", ma è stata rinominata per riflettere una riprogettazione sostanziale che utilizza regole Prolog per recuperare gli attributi degli oggetti. La versione corrente dello strumento supporta solo l'analisi di eseguibili x86 a 32 bit compilati con Microsoft Visual C++. Per istruzioni più dettagliate su come eseguire OOAnalyzer su eseguibili molto grandi, consulta queste note.
La distribuzione Pharos includeva un plugin che importava le informazioni OO esportate da OOAnalayzer nel set di strumenti di reverse engineering Ghidra. Per ottenere ora e in futuro quella funzionalità, installa il plugin Kaiju per Ghidra, che include la funzionalità fornita dal plugin OOAnalayzer.
CallAnalyzer è uno strumento per riportare i parametri statici delle chiamate API in un programma binario. È in gran parte una dimostrazione delle nostre attuali capacità di analisi delle convenzioni di chiamata, dei parametri e del rilevamento dei tipi, sebbene fornisca anche un'analisi utile del codice in un programma.
FN2Yara è uno strumento per generare firme YARA per il matching di funzioni in un programma eseguibile. I programmi che condividono un numero significativo di funzioni hanno probabilmente comportamenti in comune.
FN2Hash è uno strumento per generare una varietà di hash e altre proprietà descrittive per le funzioni in un programma eseguibile. Come FN2Yara, può essere utilizzato per supportare l'analisi di similarità binaria o per fornire caratteristiche per algoritmi di machine learning.
DumpMASM è uno strumento per estrarre elenchi di disassemblaggio da un eseguibile utilizzando il framework Pharos nello stesso stile degli altri strumenti. Non è stato mantenuto attivamente e si consiglia di utilizzare il recursiveDisassemble standard di ROSE http://rosecompiler.org/ROSE_HTML_Reference/rosetools.html.