MindshaRE: Verwendung der Binary Ninja-API zur Erkennung potenzieller Use-After-Free-Schwachstellen
Use-after-free-Fehler, eine Art von Speicherbeschädigung, sind schwierig zu erkennen, wenn sie statisch analysiert werden. Dieser Beitrag untersucht die Verwendung von Binary Ninjas MLIL, um einen Datenflussgraphen zu erstellen, der die Interaktionen bei der Speicherzuweisung nachverfolgt. Der Graph stellt Speicherbereiche als Knoten und Pointer-Speicherungen als Kanten dar, wobei Knoten für die Zuweisung, den Stack-Frame, den dynamischen Speicher und den globalen Speicher verwendet werden. SSA-Variablen werden Knoten zugeordnet und Offsets werden gespeichert, um Pointer-Arithmetik darzustellen. Speicher-Speicher- und Ladeoperationen erstellen Graphkanten, wobei angenommen wird, dass vorherige Initialisierung für Ladeoperationen außerhalb des Funktionsumfangs erfolgt ist. Informationen werden durch den Graphen basierend auf SSA-Variablen-Zuweisungen und Offset-Berechnungen während der Pointer-Arithmetik propagiert. Aufrufe werden analysiert, wenn Argumente Zuordnungen oder Stack-Offsets bestimmte Bedingungen erfüllen, wobei Rekursion gemanagt wird, um unendliche Schleifen zu vermeiden. Nach der Graphenerstellung werden Anweisungen, die von dem nachverfolgten Zuweisungsknoten abhängig sind, protokolliert. Diese Analyse hilft, potenzielle UAF-Schwachstellen durch kontextunabhängige Erreichbarkeit zu identifizieren. Der Ansatz erkennt an, dass inhärente Klassifikationsfehler bei der statischen Analyse auftreten können, aber adaptierbare Primitiven für andere Schwachstellen hervorhebt.