Zum Inhalt springen

YARA-Syntax: Aufbau einer Regel

Aufbau einer YARA-Regel: Bezeichner, Tags, die Abschnitte meta, strings und condition, Imports, Kommentare, private und globale Regeln und typische Syntaxfehler.

Veröffentlicht am 2 Min. Lesezeit

Eine YARA-Regel ist ein kleines deklaratives Programm. Mit ihren fünf Bausteinen — Kopf, meta, strings, condition und Imports — können Sie fast jede öffentliche Regel lesen. Alle Beispiele kompilieren mit YARA-X; probieren Sie sie im Online-Editor.

Der Regelkopf

rule MAL_Example_Stealer : windows stealer
{
    condition:
        false
}
  • Bezeichner: Buchstaben, Ziffern, Unterstriche, keine führende Ziffer, höchstens 128 Zeichen, kein Schlüsselwort. Groß-/Kleinschreibung zählt. Öffentliche Sammlungen nutzen meist PRÄFIX_Familie_Detail (siehe Konventionen).
  • Tags: optionale Wörter nach einem Doppelpunkt; sie beeinflussen den Treffer nicht, Scanner filtern damit.
  • Rumpf: alles zwischen den geschweiften Klammern.

Der Abschnitt meta

Schlüssel/Wert-Paare mit Strings, Ganzzahlen oder Booleans; Schlüssel dürfen sich wiederholen (z. B. mehrere hash).

rule Meta_Example
{
    meta:
        description = "Zeigt die drei Typen von meta-Werten"
        author = "yararules.org"
        date = "2026-09-29"
        score = 70
        experimental = true
    condition:
        true
}

Meta-Werte sind in der Bedingung nicht nutzbar, werden aber mit jedem Treffer ausgegeben; die Detection Rule License verlangt, dass author sichtbar bleibt.

Der Abschnitt strings

Muster werden als $bezeichner = wert deklariert, optional mit Modifikatoren: Text in Anführungszeichen, Hex in geschweiften Klammern, Regex zwischen Schrägstrichen.

rule Strings_Example
{
    strings:
        $text = "cmd.exe /c" ascii wide nocase
        $hex = { 4D 5A 90 00 ?? 00 00 00 }
        $re = /https?:\/\/[a-z0-9.\-]{4,64}\/gate\.php/
    condition:
        any of them
}

Gemeinsame Präfixe bilden Mengen ($x*), ein einzelnes $ deklariert einen anonymen String. Jeder deklarierte String muss in der Bedingung verwendet werden — sonst meldet YARA einen Fehler. Mehr im Leitfaden zu Strings.

Der Abschnitt condition

Ein boolescher Ausdruck mit Mustern ($a), Anzahlen (#a), Offsets (@a[1]), filesize, gelesenen Ganzzahlen (uint16(0)), Modulfeldern und anderen Regeln. Siehe Bedingungen.

Imports und Module

import "pe"

rule PE_Small_Dll
{
    condition:
        pe.is_pe and pe.is_dll() and filesize < 200KB
}

Die WebAssembly-Version von YARA-X auf dieser Website unterstützt pe, elf, macho, dotnet, lnk, math, hash, time, console, string, dex, crx, cuckoo und vt (siehe Module).

Kommentare, private und globale Regeln

//- und /* … */-Kommentare sind überall erlaubt, wo Leerraum steht. private rule wird ausgewertet und kann referenziert werden, aber nie allein gemeldet; global rule wirkt als Filter für den ganzen Namespace — sparsam einsetzen.

private rule Is_Small_PE
{
    condition:
        uint16(0) == 0x5A4D and filesize < 3MB
}

rule MAL_Example_Uses_Helper
{
    strings:
        $a = "EvilConfigMarker" ascii
    condition:
        Is_Small_PE and $a
}

Eine Regel kann nur auf vorher deklarierte Regeln verweisen.

Namespaces, Includes und externe Variablen

Beim gemeinsamen Kompilieren mehrerer Dateien kann jede ihren eigenen Namespace haben. include "andere.yar" bindet eine Datei beim Kompilieren ein (je nach Werkzeug). Externe Variablen werden beim Kompilieren oder Scannen gesetzt (yara -d env=prod, bei YARA-X --define) und wie Bezeichner verwendet.

Häufige Syntaxfehler

YARA-X meldet jeden Fehler mit Code, Meldung, Zeile und Spalte: nicht deklarierter String, unbenutzter String, fehlendes condition:, ungültige Escape-Sequenz.

rule Broken_Example
{
    strings:
        $a = "one"
        $b = "two"
    condition:
        $a and $c    // does not compile: $c ist nicht deklariert, $b unbenutzt
}

Im Editor zeigt YARA-X direkt auf $c; für Stil- und Performance-Hinweise gibt es den Linter. Weiter mit Strings und dem Spickzettel.

FAQ

Welche Abschnitte braucht eine YARA-Regel?
Nur condition ist Pflicht. meta und strings sind optional, müssen aber in der Reihenfolge meta, strings, condition stehen.
Unterscheiden Regelnamen Groß- und Kleinschreibung?
Ja. Bezeichner bestehen aus Buchstaben, Ziffern und Unterstrichen, beginnen nicht mit einer Ziffer und dürfen kein Schlüsselwort sein.
Wie prüfe ich die Syntax einer Regel?
Mit yr check rules.yar auf der YARA-X-Kommandozeile oder im Online-Editor dieser Website, der beim Tippen mit YARA-X kompiliert.