Syntax für den Abschnitt „Abgleich“

Unterstützt in:

Im Abschnitt match finden Sie die erforderlichen Parameter, um mehrere zusammengehörige Ereignisse in einer einzigen Erkennung zu korrelieren. Sie ist nur für Regeln erforderlich, mit denen zwei oder mehr unterschiedliche Ereignisse verknüpft werden. Damit können Sie die Kriterien für diese Korrelation festlegen, indem Sie Folgendes angeben:

  • Gruppierungsfelder (Schlüssel): Die spezifischen Felder aus den Ereignissen (definiert im Abschnitt events), die denselben Wert haben müssen, damit die Ereignisse logisch verknüpft werden.

  • Zeitbindung: Das fortlaufende Zeitfenster, in dem die zugehörigen Ereignisse auftreten müssen, damit sie als einzelnes, vollständiges Match gelten. Dies ist nur für Regeln erforderlich und nicht für die Suche und Dashboards.

Abschnitt zum Abgleich definieren

Für Regeln sind Abgleichsvariablen erforderlich, die als Platzhalter im Abschnitt event definiert sind. Sie können auch event-Felder in Search und Dashboards angeben.

Verwenden Sie die im Abschnitt events definierten Platzhaltervariablen, um den Zeitraum anzugeben, in dem Ereignisse auftreten müssen. Alle übereinstimmenden Ereignisse, die außerhalb des angegebenen Zeitfensters auftreten, werden für diese bestimmte Erkennungsgruppe ignoriert.

Verwenden Sie das Keyword over und die Syntax <number><m/h/d> (wobei m/h/d für Minuten, Stunden und Tage steht), um den Zeitraum anzugeben. Sie können einen Zeitraum von mindestens einer Minute und höchstens 48 Stunden angeben.

Mit dieser Beispielregel werden fehlgeschlagene Anmeldungen erkannt, die innerhalb eines 10-Minuten-Zeitraums erfolgen. Wenn mehrere fehlgeschlagene Anmeldungen innerhalb kurzer Zeit auftreten, deutet dies oft auf einen Brute-Force-Angriff oder einen unbefugten Zugriffsversuch hin.

rule failed_logins
{
  meta:
   author = "Security Team"
   description = "Detects multiple failed user logins within 10-minute windows."
   severity = "HIGH"

  events:
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"
   $user = $e.target.user.userid

  match:
   $user over 10m

  condition:
    #e >= 5
}

Im Abschnitt match werden Nutzer mit fehlgeschlagener Anmeldung an einem neuen Standort innerhalb eines 10‑Minuten-Intervalls gefunden:

match:
   $user over 10m

Nullwerte im Abschnitt „Abstimmung“

Google SecOps filtert implizit Nullwerte für alle Platzhalter heraus, die im Abschnitt match verwendet werden ("" für String, 0 für Zahlen, false für boolesche Werte, der Wert an Position 0 für aufgezählte Typen).

Beispiel: Nullwerte herausfiltern

Im folgenden Beispiel werden Abfragen veranschaulicht, mit denen die Nullwerte herausgefiltert werden.

rule ZeroValuePlaceholderExample {
  meta:
  events:
    // Because $host is used in the match section, the query behaves
    // as if the following predicate was added to the events section:
    // $host != ""
    $host = $e.principal.hostname

    // Because $otherPlaceholder was not used in the match,
    // there is no implicit filtering of zero values for $otherPlaceholder.
    $otherPlaceholder = $e.principal.ip

  match:
    $host over 5m

  condition:
    $e
}

Wenn einem Platzhalter jedoch eine Funktion zugewiesen ist, werden die Nullwerte von Platzhaltern, die im Abschnitt match verwendet werden, nicht implizit aus Abfragen herausgefiltert.

Wenn Sie das implizite Filtern von Nullwerten deaktivieren möchten, können Sie die Option allow_zero_values im Abschnitt „Optionen“ verwenden. Die Option allow_zero_values ist nur in Regeln verfügbar.

Beispiel: Nullwerte zulassen

Im folgenden Beispiel werden Abfragen veranschaulicht, bei denen die Nullwerte von Platzhaltern, die im Abschnitt match verwendet werden, nicht implizit herausgefiltert werden:

rule ZeroValueFunctionPlaceholder {
  meta:
  events:
    // Even though $ph is used in the match section, there is no
    // implicit filtering of zero values for $ph, because $ph is assigned to a function.
    $ph = re.capture($e.principal.hostname, "some-regex")

  match:
    $ph over 5m

  condition:
    $e
}

Unterstützte Zeitfenster

Sie können Ereignisfelder und Platzhalter im Abschnitt match nach einer angegebenen Zeitgranularität gruppieren. Dazu verwenden Sie eines der folgenden unterstützten Zeitfenster.

  • Fenster springen lassen (überlappende Fenster)
  • Rollierende Fenster (nicht überlappende Fenster)
  • Schiebefenster (durch Pivots generierte Fenster)

Fenster wechseln

Ein Hop-Fenster ist ein Abfragetyp mit mehreren Ereignissen, bei dem Ereignisse, die den Kriterien einer Abfrage entsprechen, innerhalb eines bestimmten Zeitraums gruppiert werden, unabhängig von der Reihenfolge, in der sie auftreten. Standardmäßig verwenden YARA-L-Abfragen mit einem match-Abschnitt Hop-Fenster, um mehrere Ereignisse im Zeitverlauf zu korrelieren. Der Zeitraum der Abfrageausführung wird in eine Reihe von sich überschneidenden Hop-Fenstern unterteilt, die jeweils die im Abschnitt match angegebene Dauer haben. Ereignisse werden dann innerhalb jedes Hop-Fensters in Beziehung gesetzt.

Bei einer Abfrage, die für den Zeitraum [1:00, 2:00] mit einem match-Abschnitt über 30m ausgeführt wird, könnte beispielsweise die folgende Gruppe von sich überschneidenden Hop-Fenstern generiert werden: [1:00, 1:30], [1:03, 1:33] und [1:06, 1:36]. Diese Zeiträume werden verwendet, um mehrere Ereignisse in Beziehung zu setzen.

Rollierende Fenster

Bei einem rollierenden Fenster wird ein Datenstrom in nicht überlappende, kontinuierliche Zeitintervalle fester Größe segmentiert. Jedes Datenereignis wird nur einem Fenster zugewiesen. Im Gegensatz dazu können sich Zeitintervalle bei einem gleitenden oder springenden Fenster überlappen.

Bei einem 30‑minütigen gleitenden Fenster werden beispielsweise Ereignisse, die zwischen 1:00:00 und 1:29:59 Uhr auftreten, gemeinsam verarbeitet. Anschließend wird die nächste Gruppe von Ereignissen (von 1:30:00 bis 1:59:59) separat verarbeitet.

Schiebefenster

Wenn Sie nach Ereignissen suchen müssen, die in einer bestimmten relativen Reihenfolge auftreten (z. B. e1tritt bis zu zwei Minuten nach e2 auf), sind gleitende Fenster sehr effektiv. Gleitende Fenster werden generiert, wenn eine Zeitbeschränkung mit einer angegebenen Pivot-Ereignisvariablen beginnt oder endet. So werden Ereignissequenz und ‑zeitpunkt dynamisch in Bezug auf die jeweilige Pivot-Ereignisvariable erfasst.

Ereignisse werden dann in jedem gleitenden Fenster in Beziehung gesetzt. So können Sie nach Ereignissen suchen, die in einer bestimmten Reihenfolge eintreten (z. B. e1 innerhalb von 2 Minuten nach e2). Ein Auftreten des Ereignisses e1 und ein Auftreten des Ereignisses e2 sind korreliert, wenn das Ereignis e1 innerhalb des gleitenden Zeitfensters nach dem Ereignis e2 auftritt.

  • Gleitende Fenster basieren auf der Pivot-Ereignisvariablen (pivot-event-var).
  • Mit dem Keyword before können Sie gleitende Zeiträume generieren, die mit jedem Auftreten des Pivot-Ereignisses enden.
  • Mit dem Keyword after können Sie gleitende Fenster generieren, die mit jedem Auftreten des Pivot-Ereignisses beginnen.

Geben Sie gleitende Fenster im Abschnitt match einer Abfrage so an:

<match-var-1>, <match-var-2>, ... over <duration> before|after <pivot-event-var>

Die folgenden Beispiele zeigen gültige gleitende Fenster:

$var1, $var2 over 5m after $e1

$user over 1h before $e2

Hinweise:

  • Zusätzliches Beispiel für ein gleitendes Fenster
  • Die Verwendung von gleitenden Fenstern anstelle von Hop-Fenstern kann zu einer langsameren Leistung führen. Wir empfehlen, gleitende Fenster nur in bestimmten Fällen zu verwenden, z. B. wenn die Reihenfolge der Ereignisse unbedingt erforderlich ist oder wenn Sie nach dem Nichtvorhandensein von Ereignissen suchen.

  • Da gleitende Fenster für die Erkennung mehrerer Ereignisse konzipiert sind, empfehlen wir, sie nicht für Anfragen mit einzelnen Ereignissen zu verwenden. Verwenden Sie stattdessen eine der folgenden Behelfslösungen:

    • Konvertieren Sie die Abfrage so, dass mehrere Ereignisvariablen verwendet werden, und aktualisieren Sie den Bedingungsabschnitt, wenn für die Abfrage mehr als ein Ereignis erforderlich ist.
    • Optional können Sie Zeitstempelfilter hinzufügen, anstatt ein gleitendes Fenster zu verwenden. Beispiel: $permission_change.metadata.event_timestamp.seconds < $file_creation.metadata.event_timestamp.seconds
    • Entfernen Sie das Schiebefenster.

Nächste Schritte

Weitere Informationen

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