0Pricing
Cyber Security Academy · Lektion

Syntax von YARA-Regeln

Strings, Bedingungen und Metadaten

Syntax von YARA-Regeln ist eine kostenlose Cyber Security Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Die drei Abschnitte

Eine YARA-Regel hat einen Namen und bis zu drei Abschnitte: meta, strings und condition. Der Abschnitt condition ist der einzige obligatorische Abschnitt, aber in der Praxis verwenden Regeln alle drei.

rule Example_Malware
{
  meta:
    author = "analyst"
    description = "Detects Example family"
  strings:
    $a = "EvilConfig"
    $b = { 6A 40 68 00 30 00 00 }
  condition:
    $a and $b
}

Der Abschnitt meta

meta enthält beschreibende Metadaten, die das Matching nicht beeinflussen, aber für Triage und Wartung entscheidend sind.

  • author, date, description
  • reference — Link zu einem Bericht oder Advisory
  • hash — Sample(s), aus denen die Regel erstellt wurde
  • tlp — Klassifizierung für die Weitergabe

Werte sind Zeichenketten, Ganzzahlen oder boolesche Werte. Betrachten Sie meta als Dokumentation: Die nächste Person, die den Fall bearbeitet, verlässt sich darauf.

Textzeichenketten

Der Abschnitt strings definiert Bezeichner (beginnend mit $), die an Muster gebunden sind. Die einfachste Variante ist eine in Anführungszeichen gesetzte Textzeichenkette.

Modifikatoren verfeinern das Matching:

  • nocase — ignoriert Groß- und Kleinschreibung
  • wide — UTF-16 (zwei Bytes pro Zeichen, unter Windows üblich)
  • ascii — ASCII (Standard; mit wide kombinieren, um beides zu erkennen)
  • fullword — trifft nur auf ein vollständiges Wort zu
strings:
  $s1 = "cmd.exe /c" nocase
  $s2 = "InjectDll" wide ascii
  $s3 = "admin" fullword

Hex-Strings

Für Binärmuster verwenden Sie einen Hex-String in geschweiften Klammern. Diese gleichen rohe Bytes ab und eignen sich ideal für Opcodes, Magic Numbers und Strukturen.

Hex-Strings unterstützen flexible Angaben:

  • ?? — Platzhalter für Nibble/Byte
  • [n-m] — ein Sprung um n bis m beliebige Bytes
  • ( A | B ) — Alternativen
strings:
  $h1 = { 4D 5A 90 00 }
  $h2 = { E8 ?? ?? ?? ?? 83 C4 04 }
  $h3 = { 6A 00 [2-6] FF 15 ?? ?? ?? ?? }
  $h4 = { ( B8 | B9 ) 00 00 00 00 }

Reguläre Ausdrücke

YARA unterstützt Regex-Muster, die durch Schrägstriche begrenzt werden, mit denselben Modifikatoren wie Text-Strings. Verwenden Sie Regex, wenn ein Muster variieren kann, aber einer Struktur folgt, etwa bei einem Konfigurationsmarker oder einem generierten Mutex-Namen.

Regex ist leistungsfähig, aber kostspielig. Bevorzugen Sie nach Möglichkeit feste Strings oder Hex-Muster und verankern Sie Regex möglichst eng, um das Scannen der gesamten Datei zu vermeiden.

strings:
  $re1 = /mutex_[a-f0-9]{8}/ nocase
  $re2 = /https?:\/\/[a-z0-9]{12,20}\.top\// ascii

Der Abschnitt condition

condition ist ein boolescher Ausdruck, der über einen Treffer entscheidet. Verweisen Sie direkt auf String-Bezeichner. Ein allein stehendes $a ist wahr, wenn der String gefunden wurde.

Kombinieren Sie Ausdrücke mit and, or, not und Klammern. Hier kodieren Sie die Logik, die einen tatsächlichen Familientreffer von einem Zufallstreffer unterscheidet.

condition:
  $a and ($b or $c) and not $benign

Zählen und Mengen

YARA bietet ausdrucksstarke Quantifizierer für String-Mengen:

  • any of them / all of them
  • 2 of ($s*) — mindestens zwei aus einer Gruppe
  • #a > 3 — die Anzahl der Treffer von $a ist größer als 3

Damit können Sie beispielsweise drei von fünf Familienmarkern verlangen und so die Erkennungsrate gegen die Zahl der Fehlalarme abwägen.

condition:
  3 of ($str*) and #marker >= 2

Offsets und Dateigröße

Bedingungen können sich darauf beziehen, wo ein Treffer auftritt, sowie auf die Dateigröße:

  • $a at 0 — der Treffer muss bei Offset 0 liegen
  • $a in (0..1024) — innerhalb eines Bytebereichs
  • filesize — die Gesamtgröße, z. B. filesize < 200KB
  • uint16(0) == 0x5A4D — eine Ganzzahl an einem Offset lesen (hier den MZ-Header)

Wenn Sie Treffer an eine Position binden, verringert dies Fehlalarme deutlich und beschleunigt das Scannen.

condition:
  uint16(0) == 0x5A4D and filesize < 500KB and $payload

Module

YARA-Module stellen strukturierte, formatspezifische Daten bereit, sodass Bedingungen auf geparste Felder statt auf rohe Bytes zugreifen können.

  • pe — PE-Imports, Abschnitte, Einstiegspunkt, Signaturen, imphash
  • hash — MD5/SHA-256 von Bereichen berechnen
  • math — Entropie und Statistiken
  • elf, dotnet, magic

Durch das Importieren von pe können Sie beispielsweise auf importierte Funktionen oder einen bestimmten imphash prüfen – deutlich robuster als anhand eines literalen Strings.

import "pe"
condition:
  pe.imphash() == "a1b2c3d4e5f6..." and
  pe.imports("kernel32.dll", "VirtualAllocEx")

Über Mengen iterieren

Für komplexere Logik unterstützt YARA mit for Schleifen über Sammlungen. Sie können Bedingungen formulieren wie: Mindestens zwei dieser Offsets erfüllen eine Eigenschaft oder ein beliebiger Abschnittsname entspricht einem Muster.

Das ist unverzichtbar bei der Arbeit mit Moduldaten wie PE-Abschnitten oder Imports, wenn Sie eine Liste variabler Länge statt eines einzelnen Werts untersuchen müssen.

import "pe"
condition:
  for any i in (0..pe.number_of_sections - 1) : (
    pe.sections[i].name == ".evil"
  )

Global, Private und Tags

Schlüsselwörter auf Regelebene strukturieren einen Regelsatz:

  • global rule — seine Bedingung gilt als Voraussetzung für alle anderen Regeln in der Datei (z. B. nur PE-Dateien scannen)
  • private rule — wiederverwendbarer Baustein, der nicht eigenständig gemeldet, aber von anderen Regeln referenziert wird
  • Tags nach dem Regelnamen klassifizieren Treffer (z. B. zum Filtern der Ausgabe)
global private rule IsPE { condition: uint16(0) == 0x5A4D }

rule Dropper : trojan dropper {
  strings: $a = "drop_payload"
  condition: $a
}

Kurze Überprüfung

Beurteilen Sie die Robustheit einer Bedingung.

Zusammenfassung

Die Syntax von YARA-Regeln im Überblick:

  • Eine Regel = meta + strings + condition
  • Text-Strings mit den Modifikatoren nocase/wide/ascii/fullword
  • Hex-Strings mit Platzhaltern ??, Sprüngen [n-m] und Alternativen
  • Regex für strukturierte, variable Muster (sparsam einsetzen)
  • condition kombiniert Strings mit and/or/not
  • Quantifizierer: any/all/N of sowie die Anzahl #a
  • Verankerung: at, in, filesize und uint-Lesezugriffe
  • Module (pe, hash, math) prüfen strukturierte Daten und imphash
  • global, private und Tags strukturieren Regelsätze

Als Nächstes: Praktisches Hunting mit Strings und Hex-Mustern.

Häufig gestellte Fragen

Ist die Lektion „Syntax von YARA-Regeln“ kostenlos?

Ja — der vollständige Text von „Syntax von YARA-Regeln“ 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 „Syntax von YARA-Regeln“?

Strings, Bedingungen und Metadaten 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 2 von 4.

Wie lange dauert die Lektion „Syntax von YARA-Regeln“?

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