0Pricing
Cyber Security Academy · Lektion

Hunting mit Strings und Hexwerten

Malware-Artefakte abgleichen

Hunting mit Strings und Hexwerten ist eine kostenlose Cyber Security Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cyber Security Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.

Von der Probe zur Regel

Hunting beginnt mit einer Probe. Sie extrahieren charakteristische Artefakte, entscheiden, welche davon beständig sind, und kodieren sie in einer Regel, die die Familie erkennt, ohne harmlose Dateien zu melden.

Der Ablauf: die Probe einer ersten Analyse unterziehen, Strings und strukturelle Merkmale extrahieren, verwertbare Signale von Rauschen trennen, die Regel entwerfen und sie anschließend sowohl gegen die Familie als auch gegen einen sauberen Korpus testen, bevor Sie sie einsetzen.

Kandidaten-Strings extrahieren

Beginnen Sie mit dem Dienstprogramm strings, um druckbare Sequenzen aufzulisten, und erfassen Sie dabei sowohl ASCII- als auch UTF-16-Text (wide). Windows-Malware speichert Strings häufig als wide.

Durchsuchen Sie die Ausgabe nach C2-URLs, Mutex-Namen, Registry-Pfaden, benutzerdefinierten Fehlermeldungen, PDB-Pfaden und ungewöhnlich spezifischen Texten. Ignorieren Sie allgemeine Strings von Laufzeitumgebungen und Compilern.

strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt   # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txt

Beständige Strings auswählen

Nicht jeder String gehört in eine Regel. Bevorzugen Sie Artefakte, die der Autor nur mit erheblichem Aufwand ändern kann:

  • Fest codierte, für die Familie eindeutige Mutex-/Pipe-Namen
  • Benutzerdefinierte Protokollmarker oder Konfigurationsschlüssel
  • Ungewöhnliche Debug- oder Panic-Meldungen
  • Eingebettete PDB-Pfade, die die Build-Umgebung offenlegen

Vermeiden Sie Boilerplate aus Bibliotheken, allgemeine API-Namen und Versions-Strings, die auch von legitimer Software verwendet werden und Fehlalarme erzeugen.

strings:
  $mutex = "Global\\Zx7yQ_lock" wide
  $cfgkey = "x0r_cfg_begin" ascii
  $pdb = "C:\\build\\loader\\release\\loader.pdb"

Einfache Verschleierung überwinden

Viele Familien XOR-verschlüsseln Strings oder codieren sie auf andere einfache Weise. Wenn nur wenige Klartext-Strings vorhanden sind, suchen Sie nach der codierten Form oder der Decoder-Routine.

Sie können die XOR-codierten Bytes eines bekannten Klartexts berechnen und diese abgleichen oder YARAs Modifikator xor verwenden, um einen String automatisch unter jedem Ein-Byte-XOR-Schlüssel abzugleichen.

strings:
  // matches "http://" under any single-byte XOR key
  $u = "http://" xor
  // or a fixed key range
  $k = "config" xor(0x01-0xff)

Hunting mit Hex-Mustern

Wenn Strings verschleiert, der Code jedoch unverändert ist, gleichen Sie Byte-Muster aus der eigenen Logik der Malware ab: eine Entschlüsselungsroutine, eine Entpackschleife oder eine eindeutige Konstante.

Disassemblieren Sie die Probe, ermitteln Sie eine charakteristische Befehlsfolge und übertragen Sie die Opcodes in einen Hex-String. Ersetzen Sie variable Bytes (Adressen, unmittelbare Werte) durch Platzhalter, damit das Muster eine Neukompilierung übersteht.

strings:
  // XOR decrypt loop with wildcarded counter/address
  $decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }

Platzhalter und Sprünge in der Praxis

Beim Hex-Hunting kommt es darauf an, die richtigen Bytes durch Platzhalter zu ersetzen. Ist das Muster zu starr, bricht eine Neukompilierung die Regel; ist es zu locker, trifft es auf alles zu.

  • Ersetzen Sie relative Offsets und unmittelbare Werte durch Platzhalter, da der Compiler sie ändert
  • Behalten Sie Opcodes bei, da der Algorithmus stabil ist
  • Verwenden Sie Sprünge [n-m], wenn die Befehlslängen variieren

Streben Sie ein ausreichend langes, eindeutiges Muster an (häufig mindestens 8 aussagekräftige Bytes), das dennoch an den notwendigen Stellen flexibel ist.

strings:
  $stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }

Strukturelle und PE-Indikatoren

Statische Merkmale über rohe Bytes hinaus ermöglichen starke Bedingungen mit wenigen Fehlalarmen. Mit dem Modul pe können Sie Folgendes abgleichen:

  • imphash — Hash der Importtabelle, der über die Builds einer Familie hinweg häufig stabil ist
  • Abschnittsnamen — benutzerdefinierte Packer fügen verräterische Abschnitte hinzu
  • Bestimmte Imports — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread deuten auf eine Injection hin
import "pe"
condition:
  pe.imphash() == "4e3a9f..." or
  for any s in pe.sections : ( s.name == ".x0rsec" )

Entropie als Signal

Gepackte oder verschlüsselte Bereiche haben eine hohe Entropie. Das Modul math misst sie und ermöglicht es Ihnen, Proben zu markieren, deren Payload-Abschnitt verschlüsselt wirkt – ein typisches Merkmal von Packern.

Entropie allein ist ein unzuverlässiges Signal (komprimierte Installationsprogramme haben ebenfalls eine hohe Entropie). Kombinieren Sie sie daher mit anderen Indikatoren, statt allein darauf einen Alarm auszulösen.

import "math"
condition:
  math.entropy(0, filesize) >= 7.2 and $loader_stub

Indikatoren kombinieren

Die stärksten Regeln verlangen mehrere unabhängige Indikatoren, damit kein einzelner Zufallstreffer eine Übereinstimmung auslöst. Kombinieren Sie einen String, ein Code-Muster und ein strukturelles Merkmal.

Diese mehrschichtige Bedingung widersteht sowohl Fehlalarmen (alle Teile müssen übereinstimmen) als auch Umgehungsversuchen (der Autor muss mehrere Merkmale gleichzeitig ändern).

condition:
  uint16(0) == 0x5A4D and
  filesize < 800KB and
  $mutex and
  $decrypt and
  pe.imports("kernel32.dll", "CreateRemoteThread")

Benennung, Meta und Versionierung

Eine Hunting-Regel ist nur dann nützlich, wenn andere ihr vertrauen und sie pflegen können. Geben Sie jeder Regel einen eindeutigen Namen mit Namespace und eine vollständige meta.

  • Dokumentieren Sie die Hashes der Proben, auf deren Grundlage die Regel erstellt wurde
  • Vermerken Sie Familie, Autor, Datum und eine Referenz
  • Erhöhen Sie ein Feld version, wenn Sie die Logik verfeinern

Wenn die Regel Monate später auslöst, zeigt diese Metadaten dem Incident-Responder, was der Treffer bedeutet und wie sehr er ihm vertrauen kann. So wird aus einem einmaligen Hunt eine dauerhafte, gemeinsam nutzbare Erkennung.

meta:
  family = "X0rLoader"
  author = "ir-team"
  date = "2026-06-04"
  hash = "9f1c...e2"
  version = "2"

Vor dem Vertrauen testen

Validieren Sie eine neue Regel immer gegen zwei Korpora:

  • Echte Treffer — jede bekannte Probe der Familie muss einen Treffer liefern
  • Goodware — eine große saubere Sammlung (System-Binärdateien, gängige Anwendungen) darf KEINEN Treffer liefern

Ein einziger Fehlalarm bei einer Windows-DLL kann kritische Dateien im gesamten Bestand unter Quarantäne stellen. Führen Sie die Regel aus, zählen und prüfen Sie Fehl- und echte Treffer und verfeinern Sie sie, bevor Sie sie umfassend einsetzen.

yara -r family.yar /malware_corpus/   # expect all to hit
yara -r family.yar /clean_corpus/     # expect zero hits

Kurze Überprüfung

Wählen Sie den robustesten Indikator.

Zusammenfassung

Praktisches YARA-Hunting von Anfang bis Ende:

  • Extrahieren Sie ASCII- und wide-Strings und behalten Sie beständige Artefakte (Mutexes, Konfigurationsschlüssel, PDB-Pfade)
  • Überwinden Sie einfache Verschleierung mit dem xor-Modifikator oder codierten Mustern
  • Gleichen Sie Code-Byte-Muster (Entschlüsselungs-/Entpackroutinen) ab, wenn Strings verborgen sind
  • Ersetzen Sie veränderliche Bytes durch Platzhalter, behalten Sie Opcodes bei und verwenden Sie Sprünge für variable Längen
  • Verwenden Sie PE-imphash, Abschnitte und Imports sowie die Entropie als strukturelle Signale
  • Kombinieren Sie mehrere Indikatoren, um Fehlalarmen und Umgehungsversuchen zu widerstehen
  • Testen Sie vor dem Einsatz immer gegen Korpora mit der Familie und Goodware

Als Nächstes: Diese Regeln im gesamten Bestand ausführen.

Häufig gestellte Fragen

Ist die Lektion „Hunting mit Strings und Hexwerten“ kostenlos?

Ja — der vollständige Text von „Hunting mit Strings und Hexwerten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cyber Security Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Hunting mit Strings und Hexwerten“?

Malware-Artefakte abgleichen Du übst Cyber Security Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Cyber Security Academy zu starten?

Keine Vorkenntnisse erforderlich. Cyber Security Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Hunting mit Strings und Hexwerten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Cyber Security Academy-Lektion Code schreiben und ausführen?

Ja. Jede Cyber Security Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Wofür YARA eingesetzt wird
  2. Syntax von YARA-Regeln
  3. Hunting mit Strings und Hexwerten
  4. Scans skalieren und automatisieren
← Zurück zu Cyber Security Academy