
Automatisierte statische Analysewerkzeuge für Binärprogramme
Das Pharos statische Binary-Analyse-Framework ist ein Projekt des Software Engineering Institute an der Carnegie Mellon University. Das Framework wurde entwickelt, um die automatisierte Analyse von Binärprogrammen zu erleichtern. Es nutzt die am Lawrence Livermore National Laboratory entwickelte ROSE-Compiler-Infrastruktur für Disassemblierung, Kontrollflussanalyse, Instruktionssemantik und mehr. Diese Software wird unter einer BSD-Lizenz veröffentlicht.
Die aktuelle Distribution ist eine wesentliche Aktualisierung der vorherigen Version und fügt eine Vielzahl von Funktionen hinzu, darunter Verbesserungen am OOAnalyzer-Tool, experimentellen Pfadanalysecode, Verbesserungen am Partitioner, Multithreading und viele weitere kleinere Funktionen.
Das Pharos-Framework ist ein Forschungsprojekt, und der Code wird aktiv weiterentwickelt. Es werden keine Garantien für die Eignung für irgendeinen Zweck gegeben. Obwohl diese Version Bauanleitungen, Unit-Tests und einige Dokumentationen bietet, bleibt noch viel Arbeit zu tun. Wir haben einige ausgewählte Build-Konfigurationen getestet, aber die Portabilität des Quellcodes wurde nicht aktiv getestet. Weitere Einzelheiten finden Sie in den Installationsanweisungen.
Da das Hauptziel der Veröffentlichung dieses Codes darin besteht, Transparenz über unsere Forschung zu schaffen und Gespräche mit anderen Forschern im Bereich der statischen Binary-Analyse anzuregen, können Sie sich gerne an Cory Cohen [email protected] wenden, wenn Sie Fragen zu dieser Arbeit haben. Ich kann möglicherweise nicht rechtzeitig antworten, werde aber mein Bestes tun.
ApiAnalyzer ist ein Werkzeug zum Auffinden von Sequenzen von API-Aufrufen mit den angegebenen Daten- und Kontrollbeziehungen. Diese Fähigkeit soll dazu verwendet werden, gängige Betriebssystem-Interaktionsparadigmen zu erkennen, wie das Öffnen einer Datei, das Schreiben in sie und das Schließen derselben.
OOAnalyzer ist ein Werkzeug zur Analyse und Wiederherstellung objektorientierter Konstrukte. Dieses Werkzeug war Gegenstand eines Papiers mit dem Titel "Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables", das auf der ACM Conference on Computer and Communications Security 2018 veröffentlicht wurde. Das Werkzeug identifiziert Objektmitglieder und Methoden, indem es Objektzeiger zwischen Funktionen im Programm verfolgt. Eine frühere Implementierung dieses Werkzeugs hieß "Objdigger", wurde aber umbenannt, um eine umfassende Neugestaltung unter Verwendung von Prolog-Regeln zur Wiederherstellung der Objektattribute widerzuspiegeln. Die aktuelle Version des Werkzeugs unterstützt nur die Analyse von 32-Bit-x86-Executables, die mit Microsoft Visual C++ kompiliert wurden. Detailliertere Anweisungen zur Ausführung von OOAnalyzer auf sehr großen Executables finden Sie in diesen Hinweisen.
Die Pharos-Distribution enthielt früher ein Plugin, das von OOAnalayzer exportierte OO-Informationen in die Ghidra-Reverse-Engineering-Toolsuite importierte. Um diese Funktionalität jetzt und in Zukunft zu erhalten, installieren Sie das Kaiju Ghidra-Plugin, das die Funktionalität des OOAnalayzer-Plugins enthält.
CallAnalyzer ist ein Werkzeug zur Meldung der statischen Parameter von API-Aufrufen in einem Binärprogramm. Es ist weitgehend eine Demonstration unserer aktuellen Aufrufkonvention, Parameteranalyse und Typerkennungsfähigkeiten, obwohl es auch eine nützliche Analyse des Codes in einem Programm bietet.
FN2Yara ist ein Werkzeug zur Generierung von YARA-Signaturen zum Abgleichen von Funktionen in einem ausführbaren Programm. Programme, die eine signifikante Anzahl von Funktionen gemeinsam haben, haben wahrscheinlich gemeinsames Verhalten.
FN2Hash ist ein Werkzeug zur Generierung einer Vielzahl von Hashes und anderen beschreibenden Eigenschaften für Funktionen in einem ausführbaren Programm. Wie FN2Yara kann es zur Unterstützung von Binary-Ähnlichkeitsanalysen oder zur Bereitstellung von Merkmalen für maschinelle Lernalgorithmen verwendet werden.
DumpMASM ist ein Werkzeug zum Ausgeben von Disassemblierungslisten aus einer ausführbaren Datei unter Verwendung des Pharos-Frameworks im gleichen Stil wie die anderen Werkzeuge. Es wurde nicht aktiv gewartet, und Sie sollten stattdessen die Verwendung des standardmäßigen recursiveDisassemble von ROSE in Betracht ziehen http://rosecompiler.org/ROSE_HTML_Reference/rosetools.html.