
Ein Binary Ninja-Plugin, das das Rückwärtsslicing von Variablen als Treiber für die statische Taint-Analyse verwendet.
Mole ist ein Binary Ninja-Plugin, das entwickelt wurde, um interessante Ausführungspfade in Binärdateien zu identifizieren. Es führt Rückwärtsslicing an Variablen mithilfe von Binary Ninjas Medium Level Intermediate Language (MLIL) in Static Single Assignment (SSA)-Form durch, was die Grundlage für eine statische Taint-Analyse bildet.
In Mole bezeichnet ein Pfad den Datenfluss zwischen einer definierten Quelle und Senke. Was einen „interessanten“ Pfad ausmacht, hängt von den Analysezielen ab. Zum Beispiel sucht man bei der Suche nach Sicherheitslücken nach Pfaden, bei denen nicht vertrauenswürdige Eingaben (Quellen) sensible Operationen (Senken) auf potenziell gefährliche Weise beeinflussen.
Die folgende Liste hebt einige der aktuellen Funktionen von Mole hervor:
Betriebsmodus: Mole kann entweder innerhalb der Binary Ninja-Benutzeroberfläche oder im unbeaufsichtigten Modus (Headless) ausgeführt werden. Der unbeaufsichtigte Modus ist besonders nützlich für scriptgesteuerte Analysen über eine große Anzahl von Binärdateien. Im Gegensatz dazu ist die Verwendung von Mole innerhalb der Benutzeroberfläche ideal, um erkannte Pfade detailliert zu untersuchen.
Pfadidentifikation:
.bndb-Format). Pfade können auch exportiert werden, zum Beispiel bei der unbeaufsichtigten Analyse vieler Binärdateien in einem Dateisystem, sodass identifizierte Pfade später importiert werden können, um sie innerhalb von Binary Ninja einfacher zu erkunden.Pfadanalyse mit KI: Mole kann über die OpenAI API mit lokalen oder entfernten Großen Sprachmodellen (LLMs) interagieren (siehe Verwendung). Die Modelle werden verwendet, um identifizierte Pfade zu analysieren und zu beurteilen, ob ein gegebener Pfad einer ausnutzbaren Sicherheitslücke entspricht. Das LLM versucht, die Sicherheitslücke zu klassifizieren und einen Schweregrad zuzuweisen, was dabei helfen kann, Prioritäten zu setzen, welche Pfade einer weiteren Untersuchung durch einen Analysten wert sind. Mole stellt eine grundlegende Reihe von Werkzeugen bereit, die das LLM verwenden kann, um zusätzliche Informationen über die untersuchte Binärdatei anzufordern.
Interprozedurales Variablenslicing: Mole unterstützt das Slicing von MLIL-Variablen über Funktionsgrenzen hinweg – eine Aufgabe, die mehrere Herausforderungen mit sich bringt. Beispielsweise ist es oft schwierig oder sogar unmöglich, die effektiven Aufrufer einer Funktion statisch zu bestimmen. Daher ist der implementierte Ansatz eine Näherung. Obwohl nicht perfekt, funktioniert er in einer Vielzahl praktischer Szenarien recht gut.
Basis-Pointer-Analyse: Mole implementiert derzeit eine vereinfachte Strategie zur Verfolgung der Pointer-Nutzung. Wie das interprozedurale Slicing ist dieser Ansatz eine Vereinfachung mit inhärenten Einschränkungen (z. B. kann er keine globalen Variablen verfolgen). Dennoch funktioniert er in vielen praktischen Fällen gut und es ist geplant, ihn in zukünftigen Versionen zu verbessern.
Sehen Sie Mole in Aktion, wie es CVE-2021-4045 aufdeckt, eine nicht authentifizierte Befehlsinjektionslücke in der TP-Link Tapo C200 IP-Kamera (klicken Sie auf das Bild unten, um es auf YouTube anzusehen):
Mole befindet sich derzeit in der Entwicklung. Wenn Sie auf einen Fehler stoßen, einen nützlichen neuen Unit-Test haben, der einen False Positive oder False Negative aufzeigt, oder einen Vorschlag für eine neue Funktion haben, erwägen Sie bitte, ein Issue zu eröffnen oder über einen Pull-Request beizutragen. Beachten Sie auch, dass die aktuellen Unit-Tests bisher nur auf linux-x86_64- und linux-armv7-Binärdateien verifiziert wurden.
Wenn Sie eine interessante Erfolgsgeschichte haben – zum Beispiel das Finden einer Sicherheitslücke mit Hilfe von Mole – freuen wir uns, davon zu hören! Teilen Sie uns gerne Ihre Erfahrungen mit.