Syntax für den Bereich „Ereignisse“

Unterstützt in:

Der Abschnitt events muss in einer Regel direkt auf den Abschnitt meta folgen. Sie definiert, welche Ereignisse in der Abfrage untersucht werden sollen 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 obligatorisch, für die Suche und Dashboards jedoch optional.

Im Abschnitt events werden die Bedingungen aufgeführt, 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

Für Regeln und Abfragen, die eine Korrelation zwischen zwei oder mehr unterschiedlichen Ereignistypen erfordern (z. B. eine Nutzeranmeldung gefolgt von einer Dateiänderung), ist eine Variable für jeden Ereignistyp erforderlich:

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 ist, verwenden Sie sie als Präfix, um auf bestimmte Felder dieses Ereignistyps zuzugreifen. Im folgenden event-Abschnitt werden beispielsweise fehlgeschlagene Anmeldeereignisse von Okta gefiltert:

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 die folgenden Beispiele zeigen:

  • $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 Abgleichs- oder Platzhaltervariablen zuweisen. Dies wird als transitive Join-Bedingung bezeichnet.

Beispiel:

  • $e1.source.ip = $ip
  • $e2.target.ip = $ip

entsprechen:

  • $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 sich auf eine einzelne Ereignisvariable bezieht, wird als Filter betrachtet.

Verknüpfungen von Ereignisvariablen

Alle Ereignisvariablen, die in einer Regel verwendet werden, müssen auf eine der folgenden Arten mit jeder anderen Ereignisvariablen verknüpft werden:

  • Direkt über einen Gleichheitsvergleich zwischen Ereignisfeldern der beiden verknüpften Ereignisvariablen, z. B. $e1.field = $e2.field. Der Ausdruck darf keine arithmetischen Operationen wie „+“, „–“, „*“ oder „/“ enthalten.

  • Indirekt über einen transitiven Join, der nur ein Ereignisfeld umfasst (siehe Variablendeklaration für eine Definition von „transitiv“). Der Ausdruck darf keine Arithmetik 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

Weitere Informationen

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten