Syntax des Abschnitts „Ereignisse“
Der Abschnitt events muss in einer Regel direkt auf den Abschnitt meta folgen. Er definiert, welche Ereignisse die Abfrage untersuchen soll und welche spezifischen Attribute diese Ereignisse haben müssen, um für eine potenzielle Erkennung als relevant zu gelten.
Der Abschnitt events ist für Regeln, Suchanfragen und Dashboards obligatorisch.
Verwenden Sie den Abschnitt events, um die Prädikate aufzulisten, die Folgendes angeben:
- Variablendeklarationen
- Filter für Ereignisvariablen
- Verknüpfungen von Ereignisvariablen
Abschnitt „Ereignisse“ definieren
Regeln und Abfragen, die sich nur auf einen Ereignistyp konzentrieren, können eine einzelne Ereignisvariable enthalten, z. B.:
events:
$e.metadata.event_type = "USER_LOGIN" // 'e' is the common convention for a single event
Regeln und Abfragen, die eine Korrelation zwischen zwei oder mehr verschiedenen Ereignistypen erfordern (z. B. eine Nutzeranmeldung gefolgt von einer Dateimodifikation), benötigen eine Variable für jeden Ereignistyp:
events:
$login.metadata.event_type = "USER_LOGIN" // Event 1: User Login
$file_op.metadata.event_type = "FILE_MODIFICATION" // Event 2: File Modification
Sobald eine Ereignisvariable deklariert wurde, verwenden Sie sie als Präfix, um auf bestimmte Felder dieses Ereignistyps zuzugreifen. Der folgende Abschnitt event filtert beispielsweise fehlgeschlagene Anmeldeereignisse aus Okta:
events:
$e.metadata.vendor_name = "Okta"
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "FAIL"
Variablendeklarationen
Verwenden Sie für Variablendeklarationen die folgende Syntax:
<EVENT_FIELD> = <VAR><VAR> = <EVENT_FIELD>
Beide sind gleichwertig, wie in den folgenden Beispielen gezeigt:
$e.source.hostname = $hostname$userid = $e.principal.user.userid
Diese Deklaration gibt an, dass diese Variable das angegebene Feld für die Ereignisvariable darstellt. Wenn das Ereignisfeld ein wiederholtes Feld ist, kann die Variable match einen beliebigen Wert im Array darstellen. Sie können auch mehrere Ereignisfelder einer einzelnen Übereinstimmungs- oder Platzhaltervariablen zuweisen. Dies wird als transitive Verknüpfungsbedingung bezeichnet.
Beispiel:
$e1.source.ip = $ip$e2.target.ip = $ip
Entspricht:
$e1.source.ip = $ip$e1.source.ip = $e2.target.ip
Wenn eine Variable verwendet wird, muss sie durch eine Variablendeklaration deklariert werden. Wenn eine Variable ohne Deklaration verwendet wird, wird ein Kompilierungsfehler ausgelöst.
Weitere Informationen zu Variablen finden Sie unter Ausdrücke, Operatoren und andere Konstrukte.
Filter für Ereignisvariablen
Ein boolescher Ausdruck, der auf eine einzelne Ereignisvariable angewendet wird, gilt als Filter.
Verknüpfungen von Ereignisvariablen
Alle in einer Regel verwendeten Ereignisvariablen müssen auf eine der folgenden Arten mit jeder anderen Ereignisvariablen verknüpft werden:
Direkt durch einen Gleichheitsvergleich zwischen Ereignisfeldern der beiden verknüpften Ereignisvariablen, z. B.
$e1.field = $e2.field. Der Ausdruck darf keine arithmetischen Operationen enthalten (z. B. $\text{+, -, *, /}$).Indirekt durch eine transitive Verknüpfung, die nur ein Ereignisfeld enthält (siehe Variablendeklaration für eine Definition von „transitive Verknüpfung“). Der Ausdruck darf keine arithmetischen Operationen enthalten.
Wenn beispielsweise $e1, $e2 und $e3 in der Regel verwendet werden, sind die folgenden events-Abschnitte gültig:
events:
$e1.principal.hostname = $e2.src.hostname // $e1 joins with $e2
$e2.principal.ip = $e3.src.ip // $e2 joins with $e3
events:
// $e1 joins with $e2 using function to event comparison
re.capture($e1.src.hostname, ".*") = $e2.target.hostname
events:
// $e1 joins with $e2 using an `or` expression
$e1.principal.hostname = $e2.src.hostname
or $e1.principal.hostname = $e2.target.hostname
or $e1.principal.hostname = $e2.principal.hostname
events:
// all of $e1, $e2 and $e3 are transitively joined using the placeholder variable $ip
$e1.src.ip = $ip
$e2.target.ip = $ip
$e3.about.ip = $ip
events:
// $e1 and $e2 are transitively joined using function to event comparison
re.capture($e2.principal.application, ".*") = $app
$e1.principal.hostname = $app
Die folgenden Beispiele zeigen jedoch ungültige events-Abschnitte.
events:
// Event to arithmetic comparison is an invalid join condition for $e1 and $e2.
$e1.principal.port = $e2.src.port + 1
events:
$e1.src.ip = $ip
$e2.target.ip = $ip
$e3.about.ip = "192.1.2.0" //$e3 is not joined with $e1 or $e2.
events:
$e1.src.port = $port
// Arithmetic to placeholder comparison is an invalid transitive join condition.
$e2.principal.port + 800 = $port
Nächste Schritte
- Syntax des Abschnitts „Übereinstimmung“
- Syntax des Abschnitts „Ergebnis“
- Syntax des Abschnitts „Bedingung“
- Syntax des Abschnitts „Optionen“
Weitere Informationen
- In YARA-L 2.0 verwendete Ausdrücke, Operatoren und Konstrukte
- Funktionen in YARA-L 2.0
- Zusammengesetzte Erkennungsregeln erstellen
- Beispiele: YARA-L 2.0-Abfragen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten