Der Inside-Out-Sicherheits Blog - Der Inside-Out-Sicherheits Blog

How to Use Ghidra to Reverse Engineer Malware | Varonis

Geschrieben von Neil Fox | May 24, 2022 4:21:26 PM

Es gibt zahlreiche Tools, mit denen Cybersecurity-Experten kostenlos Malware analysieren können. Ghidra wurde vor einigen Jahren erstmals veröffentlicht und ist schnell beliebt geworden, da es ein kostenloses Tool zur Disassemblierung von Malware ist. 

Viele Menschen, die noch nicht mit solchen Tools vertraut sind, haben jedoch oft Schwierigkeiten bei der Benutzung von Ghidra. Aber wie immer bin ich zur Stelle, wenn es um die Malware-Analyse geht! 

In diesem Artikel erfahren Sie, was Ghidra ist, wie es installiert wird und mit welchen Tipps Sie dieses Tool für die Malware-Analyse nutzen können.

Wenn Sie noch nicht mit dem Reverse Engineering von Malware bis hin zur Analyse des Assembler-Codes vertraut sein sollten, empfehle ich Ihnen die folgenden Artikel, die ich zusammengestellt habe. Dadurch erhalten Sie eine solide Wissensgrundlage für Ihren Weg zum Malware-Ninja:

Was ist Ghidra?

Ghidra ist ein Reverse-Engineering-Tool, das von der NSA entwickelt und im Jahr 2019 veröffentlicht wurde. Es ist bei Malware-Analysten besonders beliebt geworden, da es sich um ein sogenanntes Disassemblierungstool handelt. Damit können Malware-Analysten, die Funktionalität einer Malware-Probe zu untersuchen, ohne sie ausführen zu müssen. Das ist wiederum äußerst nützlich, da sich so der Code der Malware untersuchen und herausfinden lässt, was genau sie macht.

Der Unterschied zwischen Ghidra und einem Tool wie x64dbg besteht darin, dass x64dbg ein Debugger ist, d. h. es führt die Malware tatsächlich aus, während Sie den Code schrittweise analysieren. Wenn Sie beispielsweise eine interessante Funktion in x64dbg finden, die alle Dateien verschlüsselt, wird diese Funktion ausgeführt und alle Dateien auf dem Computer, die Sie für die Malware-Analyse verwenden, werden verschlüsselt.

Ein Disassemblierungstool wie Ghidra führt den Code nicht aus, sondern stellt den Assemblercode der Malware dar und ermöglicht es dem Benutzer, den Code schrittweise vorwärts und rückwärts durchzugehen, ohne das Dateisystem des Analysegeräts zu beeinträchtigen. Das macht Ghidra zu einem idealen Werkzeug, um Funktionen zu identifizieren und abzubilden, die für Malware-Analysten von weiterem Interesse sein könnten.

Achtung: Ghidra sollte nur in einer Sandbox-Umgebung verwendet werden, beispielsweise in einer virtuellen Maschine, die für die Analyse von Malware ausgelegt ist. Versuchen Sie nicht, Malware auf Ihrem Host-Betriebssystem zu analysieren.

Installation von Ghidra

Um Ghidra unter Windows zu installieren, gehen Sie auf die offizielle Ghidra-Website, wo Sie die folgende Seite zu sehen kriegen:

Gehen Sie auf „Download from Github“ (Von Github herunterladen). Dann gelangen Sie auf die Ghidra-Github-Seite, wo Sie die neueste Version der Software herunterladen können.

Laden Sie die Zip-Datei herunter und entpacken Sie den Inhalt an einem Ort Ihrer Wahl. Nach dem Entpacken sollten Sie die folgenden Dateien sehen:

Um Ghidra zu starten, doppelklicken Sie auf die Windows-Batch-Datei „ghidraRun“. Möglicherweise wird die folgende Fehlermeldung angezeigt:

Wenn das geschieht, können Sie das Problem mit meinem Video schnell lösen.

Sobald es geöffnet ist, werden die folgenden Fenster angezeigt: das Fenster „Active Project“ (Aktives Projekt) und „Tip of the Day“ (Tipp des Tages). Das Fenster „Tip of the Day“ ist relativ selbsterklärend und kann geschlossen werden.

Um Ghidra für die Analyse einer Probe zu verwenden, müssen Sie zunächst ein Projekt erstellen, in dem wir die Probe und alle von Ghidra generierten Dateien speichern.

Wählen Sie zunächst „File“ (Datei) und dann „New Project“ (Neues Projekt) aus.

Wählen Sie aus, ob Sie das Projekt freigeben möchten oder nicht. In diesem Beispiel wähle ich „Non-Shared Project“ (Nicht freigegebenes Projekt) und klicke auf „Next“ (Weiter).

Geben Sie dem Projekt als Nächstes einen Namen. Dafür können wir beispielsweise den Namen der analysierten Malware-Probe nehmen und auf „Finish“ (Fertigstellen) klicken. In diesem Beispiel habe ich „Varonis Demo“ verwendet.

Nun haben wir ein neu erstelltes Projekt und können Malware-Proben zur Analyse in das Projekt ziehen.

In der obigen Abbildung sehen wir eine Datei, die dem Projekt „remcos.exe“ hinzugefügt wurde. Ghidra sagt uns, dass es die Datei als 32-Bit-Windows-PE-Datei identifiziert hat.

Klicken Sie auf „OK“ und Ghidra beginnt mit dem Import der Datei. Die folgende Statusleiste wird angezeigt:

Sobald die Datei erfolgreich in Ghidra importiert wurde, wird das folgende Fenster mit Details zur importierten Datei angezeigt.

Gehen Sie auf „OK“ und doppelklicken Sie dann auf den Namen der importierten Malware oder klicken Sie auf das Drachenlogo-Symbol, um den Code-Browser zu öffnen.

Es wird die folgende Meldung angezeigt, dass Ghidra die Datei noch nicht analysiert hat. Sie werden gefragt, ob Sie sie jetzt analysieren möchten. Gehen Sie auf „Yes“ (Ja).

Daraufhin wird das folgende Fenster mit Analyseoptionen angezeigt. Wählen Sie hier die von mir hervorgehobene Option „WindowsPE x86 Propagate External Parameters“ (WindowsPE x86, externe Parameter propagieren) aus. Dies hilft bei der Analyse importierter Funktionen, da die Parameter für die Funktion, die auf den Stapel geschoben werden, im Tool aufgelistet werden.

Gehen Sie auf „Analyze“ (Analysieren) und Ghidra beginnt mit der Analyse der Datei. Die Statusleiste unten rechts zeigt den Analysefortschritt an.

Sobald dieser Vorgang abgeschlossen ist, können Sie mit dem Reverse Engineering der Malware-Probe beginnen.

Reverse Engineering mit Ghidra

Wenn Sie eine Malware-Probe in Ghidra öffnen, die von dem Tool importiert und analysiert wurde, sehen Sie mehrere Fenster.

Ghidra-Hauptfenster

Oben links gibt es das Fenster „Program Trees“ (Programmbäume), das die verschiedenen Bereiche der Malware anzeigt. Wenn Sie bereits mit einem Tool wie PeStudio gearbeitet haben, sollte Ihnen dies vertraut sein.

Der Abschnitt „Symbol Tree“-Abschnitt (Symbolbaum) ist sehr nützlich, da er die Importe, Exporte und Funktionen enthält, die die Malware für ihre schädlichen Aktivitäten verwendet.

Wenn Sie auf „Imports“ (Importe) klicken, sehen Sie, welche Bibliotheken von der Malware importiert wurden. Durch Klicken auf eine DLL sehen Sie die importierten Funktionen, die mit dieser Bibliothek verbunden sind.

Indem wir uns die Importe anschauen, können wir nun alle interessanten Malware-Funktionen ermitteln. Für die Malware-Analyse ist das sehr vorteilhaft, da wir auf diese Importe doppelklicken können, um zu sehen, ob sie von der Malware verwendet werden, und um zu verstehen, welche Aktivitäten sie auf einem kompromittierten Host durchführt.

Dasselbe geht mit der Registerkarte „Exports“ (Exporte). Hier können wir sehen, welche Funktionen von der Malware exportiert wurden, allerdings gibt es in der Malware-Probe für diese Demo keine Exporte.

Der „Symbol Tree“ (Symbolbaum) enthält alle Funktionen, die vom Malware-Autor geschrieben wurden. Wenn Ghidra die Schadsoftware importiert und dann analysiert, versucht es, manche Funktionen anhand der automatischen Analyse zu benennen. In der Abbildung unten heißt eine der Funktionen „CreateToolhelp32Snapshot“. Dies ist der Name einer importierten Funktion, die zur Aufzählung der laufenden Prozesse auf einem Gerät verwendet wird. Ghidra hat also erkannt, dass dieser Import in dieser Funktion verwendet wird und ihn entsprechend benannt.

Wir können auch einige Funktionen sehen, die anhand einer allgemeinen Namenskonvention benannt wurden. Diese fangen mit „FUN_“ an und enthalten dann eine Reihe von Zahlen. Es handelt sich dabei um Funktionen, die nicht von Ghidra definiert wurden und daher mit „FUN_“ benannt sind – eine Abkürzung für „function“ (Funktion) – und dann einen hexadezimalen Zahlenwert enthalten, der angibt, wo sich die Funktion im Binärcode befindet.

Es gibt auch eine Auflistung für „entry“ (Eingang). Das ist der Eintrittspunkt der Malware. Durch Doppelklick darauf wird das Hauptfenster „Listing“ (Auflistung) von Ghidra aktualisiert und zeigt nun den Assembler-Code am Eintrittspunkt der Malware an.

Wenn Sie mit den Informationen in der obigen Abbildung wenig anfangen können, sollten Sie unbedingt die Artikel lesen, die ich zu Beginn dieses Artikels aufgeführt habe. Diese Themen habe ich in meinen vergangenen Artikeln erläutert.

In der obigen Abbildung können wir sehen, wie die Assembler-Anweisungen und Informationen auf dem Stack geschoben werden und verschiedene Aufrufe erfolgen. Anhand dieser Informationen können wir uns ein Bild davon machen, was die Malware tut, indem wir uns auf alle relevanten API-Aufrufe konzentrieren, die „Symbol Tree“-Fenster von Ghidra aufgelistet sind.

Wenn Sie auf „Entry“ (Eingabe) klicken, wird das Fenster „Decompile“ (Dekompilieren) aktualisiert und zeigt bestimmte Daten an. Dieses Fenster zeigt, wo Ghidra versucht hat, den Assembler-Code im Fenster „Listing“ (Auflistung) in C-Code zu konvertieren. So können Malware-Analysten sehen, wie der Code des Malware-Autors ausgesehen haben könnte. Das hilft weiter bei der Analyse der Malware.

Funktionsdiagramm

Das Funktionsdiagramm ist eine weitere Darstellungsmöglichkeit, die sich gut für die Malware-Analyse eignet. Es lässt sich über das Symbol „Display Function Graph“ (Funktionsdiagramm anzeigen) in der Ghidra-Symbolleiste aufrufen.

Daraufhin wird eine grafische Darstellung der aktuell im Fenster „Listing“ (Auflistung) angezeigten Funktion aufgerufen.

Indem Sie das Diagramm vergrößern, können Sie bei der Analyse besser erkennen, welche Entscheidungen die Malware trifft und welchen Ablauf sie wählt, je nach bestimmten Bedingungen.

In der obigen Abbildung habe ich hervorgehoben, wo ich festgestellt habe, dass die Funktion „GetStartupInfoA“ aufruft. Das bedeutet, dass diese Funktion die Startinformationen des kompromittierten Geräts abruft.

Ein Doppelklick auf den Namen einer Funktion, die im Diagramm aufgerufen wird, führt den Benutzer zu dieser Funktion und aktualisiert die Anzeige, sodass nun die neu ausgewählte Funktion angezeigt wird.

Strings durchsuchen

Wenn Sie in der Symbolleiste auf die Option „Windows“ (Fenster) klicken und „Defined Strings“ (Definierte Strings) auswählen, listet Ghidra die Strings in der ausführbaren Datei auf.

Das ist nützlich, da entpackte Malware häufig Strings enthält, die darauf hindeuten können, was die Malware tut, wenn sie einen Host kompromittiert hat. Nach Auswahl dieser Option wird das folgende Fenster angezeigt:

Hier können wir sehen, dass die Malware möglicherweise Persistenz aufbaut, da der Registrierungsspeicherort „Software\Microsoft\Windows\CurrentVersion\Run“ aufgelistet ist. Das ist ein gängiger Persistenzmechanismus für Malware.

Es wird auch eine Datei namens „install.bat“ aufgeführt. An dieser Datei bin ich nun interessiert und würde sie gerne bei der Analyse der Malware extrahieren. Ein Doppelklick auf einen dieser Strings führt Sie zu seiner Position in der Binärdatei. Hier können Sie nun die Ansichten „Listing“ (Auflistung), „Decompile“ (Dekompilieren) und „Function Graph“ (Funktionsdiagramm) benutzen, um weiter zu untersuchen, wo sich diese Strings befinden und was die Malware mit diesen Daten macht.

In der Abbildung unten habe ich auf „install.bat“ doppelgeklickt. Das Fenster „Listing“ (Auflistung) wurde aktualisiert und zeigt nun an, wo sich diese Zeichenfolge innerhalb der Binärdatei befindet.

In der Abbildung oben sehen wir auch die Zeichenfolge „XREF[1]“ und dann den Namen der Funktion. Ghidra zeigt uns hier an, dass es hier einen Querverweis auf den String „install.bat“ gibt, und listet den Namen der Funktion auf, in der sich der String befindet.

Durch Doppelklick auf den Funktionsnamen wird diese Funktion im Ghidra-Fenster „Listing“ (Auflistung) angezeigt, wo sich der String „install.bat“ befindet.

Für diese Demonstration habe ich die Funktion analysiert und festgestellt, dass install.bat auf der Festplatte erstellt wird. Wenn es ausgeführt wird, erstellt es einen Ausführungsschlüssel, der die Malware immer startet, wenn der kompromittierte Host gestartet wird. Mit Blick auf das obige Bild werde ich mir die Funktion mit dem Namen „FUN_00040560d“ vermutlich nicht merken können, also gebe ich ihr für meine Analyse einen anderen Namen.

Dazu klicke ich mit der rechten Maustaste auf die Funktion und gehe auf „Edit Function“ (Funktion bearbeiten).

Dadurch wird das folgende Fenster geöffnet:

Über das Feld „Function Name“ (Funktionsname) kann ich mir nun einen einprägsameren Namen aussuchen.

Das ist praktisch, da der Name dieser Funktion nun im gesamten Projekt in Ghidra geändert wird. Das können wir jetzt im Abschnitt „Symbol Tree“ (Symbolbaum) unter „Functions“ (Funktionen) sehen:

Abschließende Anmerkungen

Ghidra ist ein nützliches Tool für Ihr Malware-Analysearsenal. Hoffentlich haben Sie in diesem Artikel einen Überblick darüber erhalten, wie Sie damit bestimmte Funktionen innerhalb einer Malware-Probe genauer untersuchen können. Bedenken Sie, dass es in einem Tool wie Ghidra sehr zeitaufwändig sein kann, am Einstiegspunkt anzufangen und jede einzelne Codezeile zu analysieren.

Verwenden Sie stattdessen die Features, die ich in diesem Artikel erläutert habe, und sehen Sie sich die von der Malware importierten Funktionen an. Welche Importe könnten von Interesse sein? Gibt es welche, die zur Verbindung mit dem Internet oder zur Verschlüsselung von Daten verwendet werden? Wenn ja, sehen Sie sich an, wo diese Importe in der Malware verwendet werden, und versuchen Sie herauszufinden, wofür die Malware diese Funktionen verwendet. Dasselbe kann man mit allen interessanten Strings machen: Sehen Sie sich an, wo sie sich in der Malware befinden, und was die Malware mit diesen Daten macht.

Mit dieser Herangehensweise können Sie Informationen recherchieren, die für Sie von echtem Interesse sind, anstatt sich in einem Meer von Assembler-Code zu verlieren!


Wenn Sie wissen möchten, wie Varonis die Sicherheitslage Ihres Unternehmens verbessern kann, dann schauen Sie sich an, wie Varonis Ihnen bei der Bekämpfung von Insider-Bedrohungen hilft und die Sicherheit Ihrer Unternehmensdaten gewährleistet.