Malwareanalyse in 4 Schritten (Artikel 1: Statische Analyse)
Da die Malwareanalyse ein umfangreicher Prozess ist, habe ich den Prozess in mehrere Artikel gegliedert, die dir einen Einblick in den die Thematik geben sollen.Malwareanalyse ist die Analyse der Verhaltensweise von Malware und daher als Teilgebiet des Reverse Engineerings zu verstehen. Erklärtes Ziel ist die Leistungsfähigkeit von Malware und deren Indikatoren zu ermitteln, um künftige Schutzmechanismen zu entwickeln. Zudem soll verstanden werden, welche Mechanismen ausgelöst werden, um ein System zu kompromittieren. Eine ganzheitliche Malwareanalyse besteht aus den folgenden Kategorien:
1. Statische Analyse (Artikel 1)
2. Dynamisch Analyse bzw. Verhaltensanalyse (Artikel 2)
3. Statische Codeanalyse (Artikel 3)
4. Dynamische Codeanalyse (Artikel 4)
Um einen umfassenden Einblick in die Malware zu bekommen ist das Durchlaufen möglichst aller Kategorien notwendig. Dies ist jedoch nicht bei jedem Malware-Typ möglich, da Cyberkriminelle darauf bedacht sind ihre Malware gegen die Analyse zu schützen.
Statische Analyse
Die statische Analyse ist in der Regel der erste Schritt der Malwareanalyse und dient einem ersten Überblick über die Funktionen, jedoch ohne Ausführung der Malware. Häufig wird nicht einmal der Quellcode der Malware genauer betrachtet. Es geht hier vielmehr darum mit effizienten Tools einen ersten Eindruck in die Malwarefunktionen, sowie deren Verhalten zu erhalten. Diese Erkenntnisse werden zur Einschätzung der Folgeschritte genutzt. Höher entwickelte Malware erschwer diese Analysekategorie jedoch mithilfe von Verschleierungs- und Verschlüsselungsmechanismen.
Die einzelnen Schritte der statischen Analyse können variieren, weshalb ich hier die standardmäßigen Schritte vorstellen will.
Ein erster Schritt ist häufig die Festlegung des Dateityps der vorliegenden Malware, womit das Zielsystem (z.B. Windows) und dessen Architektur (z.B. 64-Bit) ermittelt werden können. Ein erster Anhaltspunkt könnte die File-Extension (z.B. .exe, .pdf) liefern. Jedoch kann diese von einem Malwareautor sehr leicht verändert werden, sodass man im Bytecode nach typischen Bytesequenzen bzw. Strings für diesen Dateityp sucht. PE-Files (ausgeschrieben: Portable Executable Files, wie z.B. .exe oder .dll) haben bspw. den typischen String „…0x4D 0x5A…“ in den ersten zwei Bytes (Umgewandelt in ASCII-Zeichen: „…MZ…“). Der Bytecode kann, zur Analyse des Dateityps, automatisiert mittels entsprechender Programme auf diese Sequenzen abgeglichen werden.
Ein weiterer Schritt ist das sog. Fingerprinting der Malware. Dabei wird die Malware gehasht, sodass ein identifizierender Hashstring entsteht. Dieser kann gegen eine Hash-Datenbank abgeglichen werden. So lässt sich eine schon bekannte Malware sehr schnell entlarven, auch wenn der Dateiname zunächst unverdächtig ist. Dieses Verfahren nutzen auch Antivirenprogramme (zum Artikel).
Auch multiples Antiviren-Scanning der verdächtigen Datei ist von großer Bedeutung bei der statischen Analyse. Hierzu wird die verdächtige Datei auf ein Multi-Antiviren-Portal hochgeladen und automatisch mit deren Datenbank abgeglichen. Um dir dies bildlich zu zeigen, habe ich die Datei „smsniff.exe“ (Normales Programm der Nirsoft Suite) auf www.virustotal.com hochgeladen. Erkennbar sind der SHA-256 Hash, als auch andere Metadaten. Das Programm wird hier oft als unsicher bzw. „unwanted program“ oder „Tojan“ deklariert, was aus seiner Sniffing-Funktion resultiert. Mehrheitlich ist es jedoch als unbedenklich eingestuft.
Ebenfalls ein grundsätzlicher Schritt ist das Extrahieren von Strings aus der verdächtigen Datei. Diese Strings sind ASCII- und Unicode-Bytestrings, die Hinweise auf die Funktionalität von Malware geben können. Für diesen Schritt gibt es zahlreiche Programme, die automatisiert die Strings aus dem Code extrahieren (z.B. strings.exe aus der Sysinternal Suite).
Wichtiger Schritt: PE-Header Analyse Der umfangreichste Schritt der statischen Analyse stellt, im Falle von PE-Dateien, die Analyse des Headers dar. Im Grunde handelt es sich bei PE-Dateien um ein Set aus mehreren Unterkomponenten, die Informationen für das Betriebssystem bereitstellen und in der Regel importiert werden. Beim Kompilieren wird der PE-Header in die Gesamtdatei eingebunden und enthält Informationen über die Adressen wohin die PE-Datei in den Speicher geladen werden soll. Zudem enthält er eine Liste von Bibliotheken und Ressourcen auf die im Laufe der Ausführung zurückgegriffen wird. Die nachfolgende Tabelle zeigt die relevanten Headerfelder und die darin enthaltenen wertvollen Informationen für die statische Analyse.
Für eine ausführlichere Anleitung der statischen Analyse empfehle ich dir das Buch von Monappa „Learning Malware Analysis“!