Statische Malware-Analyse

6 Kernkonzepte
Die wichtigsten Techniken der statischen Malware-Analyse: Strings · PE-Header · Import/Export-Tabellen · Hash-Werte · Disassembler · Tools Die statische Analyse untersucht Malware, ohne sie auszuführen. Sie extrahiert Informationen aus der Datei selbst – Strings, Header, Importe und den disassemblierten Code.

Strings – Lesbare Zeichenketten extrahieren

strings · -n · -e
strings -n 6 malware.exe strings -e l malware.exe // UTF-16

strings extrahiert alle lesbaren Zeichenketten (ASCII, UTF-16) aus einer Datei. Dies kann Hinweise auf URLs, Dateipfade, Registry-Keys und Funktionen geben.

Häufige Optionen

Option Beschreibung
-n [min] Mindestlänge der Strings (z.B. -n 6)
-e [s/l/b] Encoding: s=ASCII, l=UTF-16, b=Big-Endian
-a Gesamte Datei durchsuchen
-t [x/d/o] Offset-Ausgabe: hex, dezimal, oktal
| grep -i Nach bestimmten Strings filtern
Beispiele
strings sample.exe # Alle ASCII-Strings
strings -n 8 -e l sample.exe # UTF-16 Strings (ab 8 Zeichen)
strings sample.exe | grep -i "http" # URLs suchen
strings -t x sample.exe # Mit hex-Offset
strings sample.exe > strings.txt # Ausgabe speichern
Typische Ausgabe von strings sample.exe:
!This program cannot be run in DOS mode
KERNEL32.dll
CreateFileA
http://malicious-server.com/update
SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Tipp: Achten Sie auf verdächtige Strings wie cmd.exe, powershell, http://, CreateRemoteThread oder Registry-Pfade. Filtern Sie mit grep nach IOCs.

PE-Header – Struktur von Windows-Dateien

pefile · dumpbin · readpe
dumpbin /headers malware.exe readpe malware.exe python -c "import pefile; pe=pefile.PE('malware.exe'); print(pe)"

PE-Header (Portable Executable) enthalten Metadaten über Windows-Dateien – Zeitstempel, Subsystem, Sectionen, Einstiegspunkt und mehr.

Wichtige PE-Header-Felder

Feld Beschreibung Bedeutung
TimeDateStamp Kompilierungszeit Hinweis auf Alter der Datei
Machine Architektur (x86, x64) Bestimmt System-Anforderungen
Subsystem GUI, CUI, Native Bestimmt Konsolen-/Fensterverhalten
AddressOfEntryPoint Einstiegspunkt Erste ausgeführte Anweisung
Sectionen .text, .data, .rdata, .rsrc Speicherbereiche der Datei
Characteristics Dateieigenschaften DLL, ausführbar, etc.
Beispiele
# pefile (Python)
import pefile
pe = pefile.PE("sample.exe")
print(pe.dump_info())
# DOS-Header anzeigen
print(pe.DOS_HEADER)
# Section-Informationen
for section in pe.sections:
print(section.Name, section.SizeOfRawData)
# dumpbin (Windows SDK)
dumpbin /headers sample.exe
dumpbin /imports sample.exe
Tipp: Achten Sie auf ungewöhnliche Section-Namen (z.B. .vmp0, .upx0) – das deutet auf Packer hin. Der TimeDateStamp kann auf gefälschte Zeitstempel hinweisen.

Import / Export – API-Aufrufe erkennen

dumpbin /imports · pefile
dumpbin /imports malware.exe dumpbin /exports malware.dll

Import-Tabellen zeigen, welche Windows-APIs die Malware verwendet. Export-Tabellen zeigen, welche Funktionen eine DLL bereitstellt.

Verdächtige API-Funktionen

API Kategorie Verdachtsmoment
CreateRemoteThread Prozess-Injektion Code in anderen Prozess injizieren
WriteProcessMemory Prozess-Manipulation Speicher anderer Prozesse schreiben
RegSetValueEx Registry Persistenz einrichten
InternetOpenUrl Netzwerk C2-Kommunikation
WinExec / ShellExecute Ausführung Weitere Programme starten
VirtualAlloc Speicher Schreib-ausführbaren Speicher anlegen
Beispiele
# dumpbin /imports (Windows)
dumpbin /imports sample.exe | findstr "CreateRemoteThread"
# Python mit pefile
import pefile
pe = pefile.PE("sample.exe")
# Alle Importe anzeigen
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print(entry.dll.name)
for imp in entry.imports:
print(imp.name)
# Nach bestimmten APIs suchen
suspicious = ["CreateRemoteThread", "WriteProcessMemory", "WinExec"]
found = [imp.name for imp in pe.DIRECTORY_ENTRY_IMPORT if imp.name in suspicious]
Tipp: Die Import-Tabelle ist einer der wichtigsten Indikatoren für Malware-Verhalten. Achten Sie auf ungewöhnliche Kombinationen von APIs (z.B. Netzwerk + Prozess-Injektion).

Hash-Werte – Datei-Identifikation

md5sum · sha1sum · sha256sum
md5sum malware.exe sha256sum malware.exe

Hash-Werte sind eindeutige Fingerabdrücke einer Datei. Sie werden verwendet, um Malware zu identifizieren, mit Threat-Intelligence-Datenbanken abzugleichen und Dateien zu verifizieren.

Beispiele
# Linux / macOS
md5sum sample.exe
sha1sum sample.exe
sha256sum sample.exe
# Windows (PowerShell)
Get-FileHash sample.exe -Algorithm MD5
Get-FileHash sample.exe -Algorithm SHA256
# Python
import hashlib
with open("sample.exe", "rb") as f:
print(hashlib.sha256(f.read()).hexdigest())
Typische Ausgabe:
MD5: f4c2c3d4a1b2c3d4e5f6a7b8c9d0e1f2
SHA1: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
SHA256: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Tipp: Verwenden Sie SHA-256 für die eindeutige Identifikation. Prüfen Sie Hashes in Threat-Intelligence-Plattformen wie VirusTotal, Hybrid-Analysis oder MalwareBazaar.

Disassembler – IDA Pro, Ghidra, radare2

IDA Pro · Ghidra · radare2 · objdump
// Statische Code-Analyse ida64 sample.exe // IDA Pro starten ghidra sample.exe // Ghidra starten r2 -A sample.exe // radare2 mit Analyse objdump -d sample.exe // GNU objdump

Disassembler wandeln Maschinencode in Assembler-Code um. Sie ermöglichen die statische Analyse des Programmablaufs – ohne die Malware auszuführen.

Wichtige Disassembler-Funktionen

Tool Funktion Besonderheit
IDA Pro Interaktiver Disassembler, Cross-Referenzen, Graph-View Kommerziell, De-facto-Standard, FLIRT
Ghidra Open-Source, Decompiler, Scripting (Java/Python) Von der NSA entwickelt, kostenlos
radare2 Kommandozeilen-basiert, Skriptbar, Debugging Open-Source, leichtgewicht
objdump GNU-Disassembler, einfache Analyse Linux-Standard, für ELF und PE
Beispiele
# objdump (Linux)
objdump -d -M intel sample.exe # Intel-Syntax
objdump -S sample.exe # Mit Quellcode (falls verfügbar)
# radare2: Analyse und Suche
r2 -A sample.exe
/ CreateRemoteThread # Nach String suchen
# Ghidra: Skript für Automatisierung
# Python-Skript in Ghidra für API-Extraktion
# IDA Pro: Tastenkürzel
# F5: Decompiler (Hex-Rays)
# X: Cross-Referenzen anzeigen
Tipp: Für die statische Analyse ist der Decompiler (Hex-Rays in IDA, Ghidra-Decompiler) oft hilfreicher als reiner Assembler-Code. Ghidra ist kostenlos und eine gute Alternative zu IDA Pro.

Weitere Tools – Erweiterte Analyse

Capstone · PE-Bear · Detect It Easy
// Disassembler-Bibliothek capstone // Disassembler für Python // PE-Viewer PE-Bear // PE-Datei-Viewer und -Editor // Packer-Erkennung Detect It Easy (DIE) // Packer und Compiler erkennen

Weitere Tools ergänzen die statische Analyse – Packer-Erkennung, PE-Viewer und Disassembler-Bibliotheken für eigene Skripte.

Beispiele
# Capstone (Python)
from capstone import *
md = Cs(CS_ARCH_X86, CS_MODE_64)
for i in md.disasm(code, 0x1000):
print(f"0x{i.address:x}: {i.mnemonic} {i.op_str}")
# Detect It Easy (Kommandozeile)
diec sample.exe
# PE-Bear (GUI-Tool)
# Öffnen, Header anzeigen, Sectionen bearbeiten
# YARA-Regeln für statische Muster-Erkennung
yara -r rules.yar sample.exe
Detect It Easy - Ausgabe:
Compiler: Microsoft Visual C++ 2017
Packer: UPX 3.96
Entropy: 7.89 (hoch)
Tipp: Detect It Easy hilft, Packer und Compiler zu erkennen – wichtig für die Entpackung. Capstone ist ideal für die automatisierte Disassemblierung in eigenen Analysetools.

Statische Analyse im Überblick

Strings Lesbare Zeichenketten
URLs, Pfade, APIs
PE-Header Datei-Metadaten
Zeitstempel, Sectionen
Imports Verwendete APIs
CreateRemoteThread
Hash Fingerabdruck
SHA-256, MD5
Disassembler Code analysieren
IDA, Ghidra, radare2
Packer Verschlüsselung/ Kompression
UPX, ASPack

Quick Summary

strings
Zeichenketten
pefile
PE-Header
imports
API-Aufrufe
sha256
Hash-Werte
Ghidra
Disassembler
DIE
Packer-Erkennung
strings -n 6 sample.exe · sha256sum sample.exe · ghidra sample.exe