Simple Science

Hochmoderne Wissenschaft einfach erklärt

# Computerwissenschaften# Kryptographie und Sicherheit# Künstliche Intelligenz# Informationsbeschaffung# Maschinelles Lernen

Neue Methode zur Erkennung von Ähnlichkeiten im Binärcode

Dieser Ansatz verbessert den Funktionsvergleich in Software durch Call-Graphlets.

― 7 min Lesedauer


Methode zur Erkennung vonMethode zur Erkennung vonÄhnlichkeiten imBinärcodeverschiedenen Software.Identifizierung ähnlicher Funktionen inFortgeschrittene Technik zur
Inhaltsverzeichnis

Die Erkennung von Ähnlichkeiten im Binärcode dreht sich darum, kompilierte Funktionen in Software zu finden, die einer bestimmten Funktion ähneln. Das ist in verschiedenen Bereichen nützlich, wie zum Beispiel beim Überprüfen von Sicherheitsproblemen in Software, um sicherzustellen, dass Code nicht unsachgemäss wiederverwendet wird, oder bei der Analyse von Malware. Die Herausforderung dabei ist, dass unterschiedliche Software auf viele Arten erstellt werden kann, was zu erheblichen Änderungen in ihren Binärformen führt. Das erschwert es, Funktionen zu identifizieren, die im Grunde genommen gleich sind.

Die Herausforderung des Binärcodes

Software wird unter Verwendung unterschiedlicher Architekturen und Werkzeuge erstellt. Jedes dieser Werkzeuge kann verändern, wie der Code beim Kompilieren aussieht, was es schwierig macht, Ähnlichkeiten zwischen verschiedenen Versionen zu erkennen. Diese Änderungen können auf das Mass der Optimierung während des Kompilierens zurückzuführen sein. Während sich einige Methoden darauf konzentrieren, einzelne Funktionen zu vergleichen, übersehen sie oft die breiteren Beziehungen zwischen diesen Funktionen innerhalb der Software.

Vorherige Methoden und ihre Einschränkungen

Viele vorhandene Techniken zur Suche nach ähnlichen Funktionen betrachten entweder die Reihenfolge der Anweisungen oder verwenden Graphen, um das Verhalten der Funktion darzustellen. Allerdings konzentrieren sie sich überwiegend auf einzelne Funktionen und berücksichtigen nicht, wie Funktionen miteinander interagieren. Dieser Mangel an Kontext kann dazu führen, dass wichtige Informationen fehlen, die zeigen, wie eine Funktion in das gesamte Programm passt.

Ausserdem gehen viele Methoden davon aus, dass bestimmte Funktionen leicht in Standardbibliotheken gefunden werden können, was nicht immer für eingebettete Systeme oder Malware zutrifft. Diese Techniken sind oft unzureichend getestet und stützen sich auf Daten, die möglicherweise nicht richtig die realen Szenarien widerspiegeln. Die Bewertung der Methoden unter Verwendung desselben Funktionssatzes, auf dem sie trainiert wurden, kann die berichteten Ergebnisse aufblähen und ein falsches Gefühl von Genauigkeit erzeugen.

Einführung der Call Graphlets

Diese Arbeit stellt einen neuen Ansatz vor, um Funktionen mit sogenannten Call Graphlets zu betrachten. Ein Call Graphlet stellt eine Funktion und ihre Aufrufer, Aufgerufenen und andere relevante Funktionen in einem Graphformat dar. Das hilft, sowohl lokale als auch globale Verbindungen zu erfassen und ein klareres Bild davon zu bekommen, wie Funktionen zueinander in Beziehung stehen. Durch den Fokus auf diese Graphlets soll eine gründlichere und zuverlässigere Methode zum Vergleich von Funktionen bereitgestellt werden.

Wichtige Beiträge

  1. Call Graphlets: Eine neue Möglichkeit, Funktionen unter Verwendung ihrer umgebenden Beziehungen darzustellen, um ein besseres Verständnis ihres Kontexts zu ermöglichen.
  2. Graph Neural Network (GNN): Ein Modell, das entwickelt wurde, um mit diesen Graphdarstellungen zu arbeiten und Ähnlichkeiten zwischen Funktionen zu lernen.
  3. Robuste Bewertung: Eine Methode, die sowohl vertraute als auch ausserordentliche Datensätze verwendet, um das Modell gründlich zu testen und sicherzustellen, dass es tatsächlich in unterschiedlichen Szenarien funktioniert.

Wie die Methode funktioniert

Erstellen von Call Graphlets

Call Graphlets werden erstellt, indem eine Funktion analysiert wird, um zu sehen, welche Funktionen sie aufruft, welche sie aufruft und sogar diejenigen, die von den Funktionen, die sie aufruft, aufgerufen werden. So können wir ein Umfeld von Funktionen um unsere Ziel-Funktion sammeln. Das Graphlet behält eine Balance, indem es nicht zu viele indirekte Beziehungen einbezieht, was die Darstellung komplizieren könnte.

Merkmale von Call Graphlets

Jede Funktion innerhalb eines Call Graphlets wird mit einfachen Merkmalen beschrieben. Diese Merkmale könnten die Anzahl der Aufrufer, Aufgerufenen, die Gesamtanzahl der Anweisungen und die Anzahl der Argumente umfassen. Ziel ist es, das Wesentliche jeder Funktion zu erfassen und gleichzeitig zu reflektieren, wie sie im breiteren Sinne interagiert. Dieser reiche Merkmalsatz hilft dabei, eine klarere Darstellung zu erstellen.

Das Graph Neural Network

Das GNN nimmt diese Call Graphlets und verarbeitet sie, um Ähnlichkeiten zwischen Funktionen zu finden. Es verwendet Techniken, die es ihm ermöglichen, aus der Struktur des Graphen zu lernen, was hilft, zwischen verschiedenen Funktionen zu unterscheiden, auch wenn sie auf den ersten Blick ähnlich erscheinen.

Training des Modells

Um das Modell effektiv zu trainieren, wird ein grosser Datensatz mit verschiedenen Softwareprojekten verwendet. Diese Projekte werden auf unterschiedliche Weise kompiliert, um eine vielfältige Sammlung von Binärdateien zu erstellen. Durch das Training an diesem Mix lernt das Modell, Funktionen über verschiedene Kompilierungsstile hinweg zu identifizieren.

Bewertungsprozess

Der Bewertungsprozess ist rigoros. Das Modell wird gegen mehrere Datensätze getestet, um sicherzustellen, dass es gut generalisieren kann, auch auf nicht gesehenen Funktionen. Das bedeutet, dass es mit Datensätzen bewertet wird, die das Modell zuvor nicht gesehen hat, was ein klareres Bild davon gibt, wie es in realen Szenarien abschneiden würde.

Arten von verwendeten Datensätzen

  1. Datensatz-1: Umfasst Funktionen aus mehreren bekannten Open-Source-Projekten.
  2. Datensatz-2: Enthält verschiedene Bibliotheken, die nicht in Datensatz-1 enthalten waren.
  3. BinKit-Datensätze: Konzentriert sich auf Binärdateien, die mit bestimmten Einstellungen kompiliert wurden, und bietet eine vielfältige Testumgebung.

Ergebnisse und Erkenntnisse

Die Ergebnisse zeigen, dass die vorgeschlagene Methode bestehende Techniken bei der Identifizierung ähnlicher Funktionen übertrifft. Sie zeigt starke Leistungen sowohl bei bekannten als auch bei nicht gesehenen Datensätzen.

Cross-Architecture-Leistung

In Tests, bei denen Funktionen aus verschiedenen Architekturen stammen, zeigte der Ansatz bemerkenswerte Stärke. Das Modell identifizierte erfolgreich ähnliche Funktionen, unabhängig von der verwendeten Architektur, was seine Vielseitigkeit offenbart.

Mono-Architecture-Leistung

Bei der Evaluierung ausschliesslich auf Funktionen aus der x86-64-Architektur zeigte das Modell weiterhin eine bewundernswerte Leistung. Das deutet darauf hin, dass es in der Lage ist, spezialisierte Fälle effektiv zu bewältigen und gleichzeitig seine Gesamtwirksamkeit beizubehalten.

Funktionsinlining

Ein wichtiger Aspekt der modernen Kompilierung ist das Funktionsinlining, bei dem Funktionen in andere integriert werden können, um die Leistung zu optimieren. Diese Studie testete, wie gut die Methode die Genauigkeit in Anwesenheit von Inlining beibehält. Die Ergebnisse deuteten darauf hin, dass die Leistung zwar leicht abnahm, das Modell aber dennoch angemessene Genauigkeit beibehielt.

Zero-Shot-Schwachstellensuche

Das Modell wurde auch in Situationen getestet, in denen es Schwachstellen identifizieren musste, ohne vorherige Erfahrung mit bestimmten Bibliotheken oder Architekturen. Die Ergebnisse zeigten, dass die Leistung je nach Architektur variierte, es jedoch dennoch viele Schwachstellen erfolgreich identifizierte, was auf vielversprechende Anwendungen in der realen Welt hindeutet.

Bedeutung von Kantengewichten und Normalisierung

Ein wichtiger Faktor für den Erfolg des Modells ist die Verwendung von Kantengewichten, die helfen, Kontext über die Beziehungen zwischen Funktionen bereitzustellen. Darüber hinaus halfen Normalisierungstechniken, die während des Trainings verwendet wurden, den Lernprozess des Modells zu stabilisieren, was es ihm erleichtert, mit verschiedenen Funktionen umzugehen.

Einschränkungen und zukünftige Richtungen

Trotz der vielversprechenden Ergebnisse gibt es Bereiche, die verbessert werden könnten.

  1. Rechenanforderungen: Der Prozess zur Erzeugung von Call Graphlets kann ressourcenintensiv sein, insbesondere bei grossen Binärdateien.
  2. Herausforderungen bei der Disassemblierung: Wenn die Binärdateien obfuskiert oder stark optimiert sind, kann das die Effektivität der Extraktionsmethoden beeinträchtigen.
  3. Diversität in der Bewertung: Künftige Tests sollten proprietäre und reale Software einbeziehen, um die Bewertung über Open-Source-Projekte hinaus zu erweitern.

Fazit

Die hier vorgeschlagene KYN-Methode bietet einen soliden Ansatz zur Erkennung von Ähnlichkeiten im Binärcode über verschiedene Architekturen und Formate hinweg. Durch die Nutzung von Call Graphlets und einem massgeschneiderten neuronalen Netzwerk übertrifft sie frühere Methoden sowohl in Vielseitigkeit als auch in Genauigkeit. Dieser Fortschritt hat erhebliche Anwendungen in der Software-Sicherheit, der Malware-Analyse und mehr und ebnet den Weg für zukünftige Forschungen, um verbleibende Herausforderungen im Bereich anzugehen.

Originalquelle

Titel: Know Your Neighborhood: General and Zero-Shot Capable Binary Function Search Powered by Call Graphlets

Zusammenfassung: Binary code similarity detection is an important problem with applications in areas such as malware analysis, vulnerability research and license violation detection. This paper proposes a novel graph neural network architecture combined with a novel graph data representation called call graphlets. A call graphlet encodes the neighborhood around each function in a binary executable, capturing the local and global context through a series of statistical features. A specialized graph neural network model operates on this graph representation, learning to map it to a feature vector that encodes semantic binary code similarities using deep-metric learning. The proposed approach is evaluated across five distinct datasets covering different architectures, compiler tool chains, and optimization levels. Experimental results show that the combination of call graphlets and the novel graph neural network architecture achieves comparable or state-of-the-art performance compared to baseline techniques across cross-architecture, mono-architecture and zero shot tasks. In addition, our proposed approach also performs well when evaluated against an out-of-domain function inlining task. The work provides a general and effective graph neural network-based solution for conducting binary code similarity detection.

Autoren: Joshua Collyer, Tim Watson, Iain Phillips

Letzte Aktualisierung: 2024-11-11 00:00:00

Sprache: English

Quell-URL: https://arxiv.org/abs/2406.02606

Quell-PDF: https://arxiv.org/pdf/2406.02606

Lizenz: https://creativecommons.org/licenses/by-nc-sa/4.0/

Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.

Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.

Ähnliche Artikel