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,descriptionreference— Link zu einem Bericht oder Advisoryhash— Sample(s), aus denen die Regel erstellt wurdetlp— 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 Kleinschreibungwide— 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" fullwordHex-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\// asciiDer 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 $benignZählen und Mengen
YARA bietet ausdrucksstarke Quantifizierer für String-Mengen:
any of them/all of them2 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 >= 2Offsets 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 Bytebereichsfilesize— die Gesamtgröße, z. B.filesize < 200KBuint16(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 $payloadModule
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, imphashhash— MD5/SHA-256 von Bereichen berechnenmath— Entropie und Statistikenelf,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)
conditionkombiniert 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,privateund 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
- Wofür YARA eingesetzt wird
- Syntax von YARA-Regeln
- Hunting mit Strings und Hexwerten
- Scans skalieren und automatisieren