Daten mithilfe von Outer Joins korrelieren

Unterstützt in:

In diesem Dokument werden Outer Joins (Left Join und Right Join) beschrieben. Mit Join-Vorgängen werden Daten aus mehreren Quellen anhand gemeinsamer Feldwerte korreliert und kombiniert. Durch die Kombination von zusammengehörigen Sicherheitsereignissen und Entitäten in einer einzigen, umfassenden Ansicht können Sie Bedrohungen effektiv erkennen und untersuchen.

Im Gegensatz zu Standard-Joins (inneren Joins), die übereinstimmende Einträge in beiden Datenquellen erfordern, werden bei einem äußeren Join alle Datensätze von einer Seite des Joins abgerufen, auch wenn es keine übereinstimmenden Einträge auf der anderen Seite gibt. Nicht übereinstimmende Felder von der anderen Seite werden normalerweise mit null gefüllt. So wird verhindert, dass Daten verloren gehen, für die es keine Übereinstimmung gibt.

Funktionsweise von Outer Joins

Das Konzept von Outer Joins in YARA-L 2.0 ist mit dem von Standard-SQL-Outer-Joins identisch:

  • Beim Left Outer Join bleiben alle Datensätze auf der linken Seite des Joins erhalten.

  • Beim Right Outer Join bleiben alle Datensätze auf der rechten Seite des Joins erhalten.

Die Syntax für Outer Joins (Left Join und Right Join) wird für alle Abfragen unterstützt – sowohl mit als auch ohne match-Bedingung. Das grundlegende Verhalten eines Outer Joins ist bei der Suche, in Dashboards und in Erkennungsregeln gleich, obwohl sich die Syntax je nach Kontext unterscheidet:

  • Suche und Dashboards: Verwenden Sie die expliziten Keywords left join oder right join im Abschnitt events.

  • Erkennungsregeln: Definieren Sie die Join-Beziehung mit einem Gleichheitszeichen (=) im Abschnitt events und geben Sie im Abschnitt condition eine unbegrenzte Bedingung an (z. B. #data_table >= 0 für einen Left Outer Join oder #data_table = 0 für einen Anti-Join-Ausschluss).

Left Outer Join verstehen

Bei einem Left Outer Join (oder Left Join) werden alle Datensätze aus der Datenquelle auf der linken (beibehaltenen) Seite des Joins beibehalten, unabhängig davon, ob Sie das Schlüsselwort left join in der Suche oder eine unbegrenzte Bedingung (#data_table >= 0) in einer Erkennungsregel verwenden.

  • Wenn ein Datensatz von der linken Seite keine Entsprechung in der rechten Ereignis- oder Datentabelle hat, werden die Felder von der rechten Seite als null zurückgegeben.

  • Auswirkungen von Platzhaltern: Jede im Abschnitt match verwendete Platzhaltervariable muss auf ein Feld aus dem linken Ereignis verweisen, damit die Daten im gesamten Ergebnissatz korrekt aggregiert werden.

Beispiel für einen Left Join von Ereignis zu Ereignis

Im folgenden Beispiel wird ein Left Outer Join verwendet, um Nutzeranmeldeereignisse mit nachfolgenden Netzwerkverbindungsereignissen auf demselben Host zu korrelieren. Der Left Join sorgt dafür, dass alle USER_LOGIN-Ereignisse im Ergebnissatz erhalten bleiben. Wenn ein übereinstimmendes NETWORK_CONNECTION-Ereignis ($e2) gefunden wird, werden die zugehörigen Daten zusammengeführt. Wenn keine Übereinstimmung gefunden wird, sind die Felder für $e2 null.


$e1.metadata.event_type = "USER_LOGIN"
$e2.metadata.event_type = "NETWORK_CONNECTION"
left join $e1.principal.hostname = $e2.principal.hostname

Ereignis „Paket abgegeben“ definieren

Im folgenden Abfragebeispiel wird die linke Seite des Joins ($e1) definiert. Das ist die Ereignismenge, die im Endergebnis beibehalten wird:

$e1.metadata.event_type = "USER_LOGIN"

Die folgende Tabelle zeigt das Abfrageergebnis mit den ersten Nutzeranmeldeereignissen:

Ereignistyp Haupt-Hostname IP-Adresse
USER_LOGIN workstation-01 192.168.1.101
USER_LOGIN laptop-hr-02 192.168.1.102
USER_LOGIN server-db-03 10.0.0.50
USER_LOGIN kiosk-4 192.168.1.104

Das richtige Ereignis definieren

Im folgenden Abfragebeispiel wird die rechte Seite des Joins ($e2) definiert. Dies ist die Ereignismenge, die mit den linken Ereignissen abgeglichen wird:

$e2.metadata.event_type = "NETWORK_CONNECTION"

In der folgenden Tabelle sind die Netzwerkverbindungsereignisse aufgeführt, die für den Abgleich verfügbar sind:

Ereignistyp Haupt-Hostname IP-Adresse
NETWORK_CONNECTION workstation-01 192.168.1.101
NETWORK_CONNECTION laptop-hr-02 192.168.1.101
NETWORK_CONNECTION kiosk-4 203.0.113.3

An den Events teilnehmen

mit einem Abschnitt für Übereinstimmungen

Das folgende Beispiel zeigt eine Übereinstimmungsabfrage mit einem Left Outer Join für das Feld principal.hostname:


  $e1.metadata.event_type = "USER_LOGIN"

  $e2.metadata.event_type = "NETWORK_CONNECTION"

  left join $e1.principal.hostname = $e2.principal.hostname

  $host = $e1.principal.hostname

  match:
    $host over 5m

  • Der linke äußere Join sorgt dafür, dass jedes USER_LOGIN-Ereignis ($e1) in der endgültigen Ergebnismenge enthalten ist.

  • Dem Platzhalter $host wird der Wert aus $e1.principal.hostname zugewiesen. Der Left Outer Join sorgt dafür, dass das Ereignis $e1 vorhanden ist, sodass die Variable $host immer für die Aggregation ausgefüllt wird.

  • Die Regel aggregiert die Ergebnisse nach Host für ein Zeitfenster von 5 Minuten.

Join-Ergebnis

Die resultierenden Daten zeigen die Kombination der beiden Ereignisse. Alle Datensätze aus der linken Tabelle ($e1) werden beibehalten und Felder aus der rechten Tabelle ($e2) werden auf null gesetzt, wenn kein übereinstimmender Hostname gefunden wird (z. B. für server-db-03).

Ereignistyp ($e1) Haupt-Hostname ($host) IP-Adresse ($e1) Ereignistyp ($e2) IP-Adresse ($e2) Übereinstimmungsstatus
USER_LOGIN workstation-01 192.168.1.101 NETWORK_CONNECTION 192.168.1.101 Treffer gefunden
USER_LOGIN laptop-hr-02 192.168.1.102 NETWORK_CONNECTION 192.168.1.101 Treffer gefunden
USER_LOGIN server-db-03 10.0.0.50 null null Keine Übereinstimmung
USER_LOGIN kiosk-4 192.168.1.104 NETWORK_CONNECTION 203.0.113.3 Treffer gefunden

Beispielabfragen für Left Joins

In diesem Abschnitt finden Sie Beispiele für Left-Join-Abfragen.

Joins mit einer Übereinstimmungsbedingung

  • Ereignis-Entität

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    $g1.graph.metadata.entity_type = "ASSET"
    left join $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
    $host = $e1.principal.asset.hostname
    
    match:
      $host over 5m
    
    
  • Event-datatable

    
    $host = $e1.principal.hostname
    left join $e1.principal.hostname = %all_dt_column_types.hostname
    
    match:
      $host by 5m
    

Joins ohne Übereinstimmungsbedingung

  • Event-event

    
    $e1.metadata.event_type = "USER_LOGIN"
    $e1.principal.ip = "114.241.96.87"
    $e2.metadata.event_type = "NETWORK_CONNECTION"
    left join $e1.principal.hostname = $e2.principal.hostname
    
    
  • Ereignis-Entität

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    $g1.graph.metadata.entity_type = "ASSET"
    left join $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
    $host = $e1.principal.asset.hostname
    
    
  • Event-datatable

    
    $host = $e1.principal.hostname
    left join $e1.principal.hostname = %all_dt_column_types.hostname
    
    

Left Joins in Erkennungsregeln

In Erkennungsregeln verwenden Sie das Schlüsselwort left join nicht im Abschnitt events. Stattdessen verknüpfen Sie ein UDM-Ereignis im Abschnitt events mit einer Datentabelle oder einem sekundären Ereignis, indem Sie Gleichheit (=) verwenden, und steuern das Join-Verhalten im Abschnitt condition:

Join-Typ Abschnitt „events“ Abschnitt „condition“ Verhalten bei nicht übereinstimmenden Ereignissen
Inner Join $key = %data_table.key $e and #data_table > 0 Nicht übereinstimmende Ereignisse werden aus dem Erkennungsstream entfernt.
Left Outer Join (Anreicherung) $key = %data_table.key $e and #data_table >= 0 Alle Ereignisse in $e bleiben erhalten. Nicht übereinstimmende Datentabellenfelder sind null.
Anti-Join (Ausschluss) $key = %data_table.key $e and #data_table = 0 Löst nur dann eine Benachrichtigung aus, wenn der Ereignisschlüssel nicht in der Datentabelle vorhanden ist.

Beispiel für einen Left Join von Ereignis zu Datentabelle in einer Regel

Im folgenden Beispiel wird eine Datentabelle namens corporate_asset_directory verwendet, um Ereignisse mit Asset-Kritikalität und geografischen Metadaten anzureichern, ohne Ereignisse von nicht verwalteten Hosts zu verwerfen.

Datentabelle definieren

Die Datentabelle corporate_asset_directory enthält die folgenden Zeilen, wobei hostname als Schlüsselspalte verwendet wird:

hostname (Schlüssel) country_code country_name asset_tier owner_dept risk_score
ES01-W10 ES Spain TIER_3_WORKSTATION Finance 20
CH02-SRV CH Switzerland TIER_1_CRITICAL Engineering 80
US03-LAP US United States TIER_2_PRODUCTION Executive 50

Bedingungen für Inner Join und Left Outer Join vergleichen

  • Inner Join (#corporate_asset_directory > 0): Wenn die Anzahl der Datentabellen größer als 0 sein muss, wird ein Inner Join ausgeführt. Wenn ein Ereignis von einem nicht verwalteten Host stammt, der nicht in corporate_asset_directory aufgeführt ist (z. B. unmanaged-byod-09), wird das Ereignis herausgefiltert und es wird keine Erkennung generiert:

    rule inner_join_drops_unmatched_events {
      meta:
        author = "Google SecOps"
        description = "Inner join example: drops events whose hostname is not in the data table."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        // Direct inner join against data table
        $hostname = %corporate_asset_directory.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $country = array_distinct(%corporate_asset_directory.country_code)
        $asset_tier = array_distinct(%corporate_asset_directory.asset_tier)
        $risk_score = max(%corporate_asset_directory.risk_score)
    
      condition:
        $e and #corporate_asset_directory > 0
    }
    
  • Left Outer Join (#corporate_asset_directory >= 0): Mit der unbegrenzten Bedingung #corporate_asset_directory >= 0 wird ein Left Outer Join ausgeführt. Alle Ereignisse in $e bleiben erhalten, auch wenn der Hostname nicht mit einer Zeile in corporate_asset_directory übereinstimmt.

    Wenn ein Ereignis nicht mit einer Zeile der Datentabelle übereinstimmt, werden Verweise auf %corporate_asset_directory.column als null ausgewertet. Verwenden Sie im Abschnitt outcome die Option strings.coalesce für Stringspalten und bedingte if-Ausdrücke für numerische Spalten, um Standard-Fallback-Werte zuzuweisen:

    rule left_outer_join_enrichment {
      meta:
        author = "Google SecOps"
        description = "Left outer join using #dt >= 0: preserves all events and populates enrichment fields."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        // Outer join equality binding
        $hostname = %corporate_asset_directory.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $country = array_distinct(strings.coalesce(%corporate_asset_directory.country_code, "UNKNOWN"))
        $asset_tier = array_distinct(strings.coalesce(%corporate_asset_directory.asset_tier, "UNMANAGED"))
        $risk_score = max(if(%corporate_asset_directory.risk_score > 0, %corporate_asset_directory.risk_score, 0))
    
      condition:
        $e and #corporate_asset_directory >= 0
    }
    

Ergebnis der Regelverknüpfung

In der folgenden Tabelle werden die resultierenden Ergebniswerte für übereinstimmende und nicht übereinstimmende Hosts bei Verwendung von #corporate_asset_directory >= 0 verglichen:

Haupt-Hostname ($hostname) Abgleichsstatus der Datentabelle $country $asset_tier $risk_score
CH02-SRV Treffer gefunden ["CH"] ["TIER_1_CRITICAL"] 80
ES01-W10 Treffer gefunden ["ES"] ["TIER_3_WORKSTATION"] 20
unmanaged-byod-09 Keine Übereinstimmung (null durch Standardwerte ersetzt) ["UNKNOWN"] ["UNMANAGED"] 0

Beispiele für Left-Anti-Join (Ausschluss) in Regeln

Sie können einen Left Outer Join mit einer Bedingung für die Anzahl „0“ (#data_table = 0) verwenden, um einen Left Anti-Join auszuführen. Bei diesem Muster werden Erkennungen unterdrückt, wenn ein Ereignis mit einer Datentabelle für Ausschlüsse übereinstimmt. Eine Benachrichtigung wird nur ausgelöst, wenn keine Übereinstimmung vorliegt.

  • Ausschluss einer einzelnen Spalte (#authorized_scanners_exclusion = 0): Die folgende Regel verknüpft $e.principal.hostname mit einer authorized_scanners_exclusion-Datentabelle und wird nur ausgelöst, wenn der Host nicht in der Tabelle vorhanden ist:

    rule anti_join_scanner_exclusion {
      meta:
        author = "Google SecOps"
        description = "Anti-join exclusion using #dt = 0: triggers only if the host is not in the authorized scanners table."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        // Bind join key to data table
        $hostname = %authorized_scanners_exclusion.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $total_sent_bytes = sum($e.network.sent_bytes)
    
      condition:
        $e and #authorized_scanners_exclusion = 0
    }
    

    Alternativ können Sie die übereinstimmenden Datentabellenzeilen im Abschnitt outcome ($scanner_match_count = count(%authorized_scanners_exclusion.hostname)) zählen und $e and $scanner_match_count = 0 im Abschnitt condition auswerten:

    rule anti_join_outcome_count {
      meta:
        author = "Google SecOps"
        description = "Anti-join via outcome variable count check: triggers when scanner match count is zero."
    
      events:
        $e.principal.hostname != ""
        $hostname = $e.principal.hostname
    
        $hostname = %authorized_scanners_exclusion.hostname
    
      match:
        $hostname over 1h
    
      outcome:
        $total_sent_bytes = sum($e.network.sent_bytes)
        $scanner_match_count = count(%authorized_scanners_exclusion.hostname)
    
      condition:
        $e and $scanner_match_count = 0
    }
    
  • Mehrspaltiger Zeilentupelausschluss (#multi_column_admin_exceptions = 0): Wenn Sie Ereignisse nur ausschließen möchten, wenn eine bestimmte Kombination mehrerer Felder mit der gleichen Zeile in einer Ausnahmedatentabelle übereinstimmt, binden Sie jedes Ereignisfeld an die entsprechende Spalte im Abschnitt events und geben Sie #data_table = 0 im Abschnitt condition an:

    rule multi_column_tuple_exclusion {
      meta:
        author = "Google SecOps"
        description = "Multi-column row-tuple anti-join: excludes activity matching composite (origin_ip, target_ip, username, action) rows."
    
      events:
        // Bind event fields to match variables
        $e.principal.ip = $src_ip
        $e.target.ip = $dst_ip
        $e.principal.user.userid = $user
        $e.metadata.product_event_type = $action
    
        // Multi-column equality against the same data table row
        $src_ip = %multi_column_admin_exceptions.origin_ip
        $dst_ip = %multi_column_admin_exceptions.target_ip
        $user = %multi_column_admin_exceptions.username
        $action = %multi_column_admin_exceptions.action
    
      match:
        $src_ip, $dst_ip, $user, $action over 5m
    
      outcome:
        $event_count = count($e.metadata.id)
    
      condition:
        $e and #multi_column_admin_exceptions = 0
    }
    

Right Outer Join

Bei einem Right Outer Join (oder Right Join) werden alle Datensätze aus der Datenquelle auf der rechten Seite des Schlüsselworts right join beibehalten.

  • Wenn ein Datensatz aus dem rechten Ereignis keine Entsprechung im linken Ereignis hat, werden die Felder aus dem linken Ereignis als null zurückgegeben.

  • Auswirkungen von Platzhaltern: Jede Platzhaltervariable, die im Abschnitt match verwendet wird, muss auf ein Feld aus dem richtigen Ereignis verweisen, damit die Daten im gesamten Ergebnissatz korrekt aggregiert werden.

Beispiel für einen Right Join von Ereignis zu Ereignis

Im folgenden Beispiel wird eine right outer join-Anweisung verwendet, um Nutzeranmeldeereignisse mit nachfolgenden Netzwerkverbindungsereignissen auf demselben Host zu korrelieren. Mit right join wird sichergestellt, dass alle NETWORK_CONNECTION-Ereignisse im Ergebnissatz beibehalten werden. Wenn ein übereinstimmendes USER_LOGIN-Ereignis gefunden wird, werden die zugehörigen Daten zusammengeführt. Wenn keine Übereinstimmung gefunden wird, sind die Felder für $e1 null.


$e1.metadata.event_type = "USER_LOGIN"

$e2.metadata.event_type = "NETWORK_CONNECTION"

right join $e1.principal.hostname = $e2.principal.hostname

Ereignis „Verlassen“ definieren

Die folgende Abfrage definiert die linke Seite des Joins ($e1), d. h. die optionale Ereignismenge im Endergebnis:


$e1.metadata.event_type = "USER_LOGIN"

Die folgende Tabelle zeigt das Ergebnis der Abfrage, in der die ersten Nutzeranmeldeereignisse identifiziert werden:

Ereignistyp Haupt-Hostname IP-Adresse
USER_LOGIN workstation-01 192.168.1.101
USER_LOGIN laptop-hr-02 192.168.1.102
USER_LOGIN server-db-03 10.0.0.50

Rechtes Ereignis definieren

Mit der folgenden Abfrage wird die rechte Seite des Joins ($e2) definiert. Das ist die Ereignismenge, die im Endergebnis beibehalten wird.


$e2.metadata.event_type = "NETWORK_CONNECTION"

In der folgenden Tabelle sind die Netzwerkverbindungsereignisse aufgeführt, die für den Abgleich verfügbar sind.

Ereignistyp Haupt-Hostname IP-Adresse
NETWORK_CONNECTION workstation-01 192.168.1.101
NETWORK_CONNECTION laptop-hr-02 192.168.1.101
NETWORK_CONNECTION vm-unauth-05 203.0.113.3

An den Events teilnehmen

Das folgende Beispiel zeigt eine Übereinstimmungsabfrage mit einem Right Outer Join für das Feld principal.hostname:


$e1.metadata.event_type = "USER_LOGIN"

$e2.metadata.event_type = "NETWORK_CONNECTION"

right join $e1.principal.hostname = $e2.principal.hostname

$host = $e1.principal.hostname

match:
  $host over 5m

  • Der Right Outer Join sorgt dafür, dass jedes NETWORK_CONNECTION-Ereignis ($e2) in der endgültigen Ergebnismenge enthalten ist.

  • Dem Platzhalter $host wird der Wert aus $e2.principal.hostname zugewiesen. Der Right Outer Join sorgt dafür, dass das Ereignis $e2 vorhanden ist, sodass die Variable $host immer für die Aggregation ausgefüllt wird.

  • Die Regel aggregiert die Ergebnisse nach Host für ein Zeitfenster von 5 Minuten.

Join-Ergebnis

Das resultierende Dataset zeigt die Kombination der beiden Ereignisse. Alle Datensätze aus der rechten Tabelle ($e2) werden beibehalten und Felder aus der linken Tabelle ($e1) werden auf „null“ gesetzt, wenn kein übereinstimmender Hostname gefunden wird (z. B. vm-unauth-05).

Ereignistyp ($e1) Haupt-Hostname ($e1) IP-Adresse ($e1) Ereignistyp ($e2) Haupt-Hostname ($host) IP-Adresse ($e2) Übereinstimmungsstatus
USER_LOGIN workstation-01 192.168.1.101 NETWORK_CONNECTION workstation-01 192.168.1.101 Treffer gefunden
USER_LOGIN laptop-hr-02 192.168.1.102 NETWORK_CONNECTION laptop-hr-02 192.168.1.101 Treffer gefunden
null null null NETWORK_CONNECTION vm-unauth-05 203.0.113.4 Keine Übereinstimmung

Beispiele für Right-Join-Abfragen

In diesem Abschnitt finden Sie Beispiele für RIGHT JOIN-Abfragen.

Joins mit einer Übereinstimmungsbedingung

  • Event-event

    
    $e1.metadata.event_type = "USER_LOGIN"
    
    $e2.metadata.event_type = "NETWORK_CONNECTION"
    
    right join $e1.principal.hostname = $e2.principal.hostname
    
    $host = $e2.principal.hostname
    
    match:
      $host over 5m
    
    
  • Entitätsereignis

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    
    $g1.graph.metadata.entity_type = "ASSET"
    
    right join $g1.graph.entity.asset.hostname = $e1.principal.asset.hostname
    
    $host = $e1.principal.asset.hostname
    
    match:
      $host over 5m
    
    
  • Datatable-event

    
    $host = $e1.principal.hostname
    
    right join %all_dt_column_types.hostname = $e1.principal.hostname
    
    match:
      $host by 5m
    
    

Joins ohne Übereinstimmungsbedingung

  • Event-event

    
    $e1.metadata.event_type = "USER_LOGIN"
    
    $e1.principal.ip = "114.241.96.87"
    
    $e2.metadata.event_type = "NETWORK_CONNECTION"
    
    right join $e1.principal.hostname = $e2.principal.hostname
    
    
  • Entitätsereignis

    
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    
    $g1.graph.metadata.entity_type = "ASSET"
    
    right join $g1.graph.entity.asset.hostname = $e1.principal.asset.hostname
    
    $host = $e1.principal.asset.hostname
    
    
  • Datatable-event

    
    $host = $e1.principal.hostname
    
    right join %all_dt_column_types.hostname = $e1.principal.hostname
    
    

Beschränkungen

Beachten Sie beim Erstellen von Outer Joins die folgenden Einschränkungen:

  • Ein Full Outer Join (Left Join und Right Join zusammen) wird nicht unterstützt.

  • Der Abfragezeitraum für Joins ohne Übereinstimmung ist auf maximal 14 Tage begrenzt.

  • Sie können zwei kontextbezogene Quellen nicht direkt zusammenführen (z. B. eine Entität direkt mit einer Datentabelle).

  • Das primäre UDM-Ereignis (Unified Data Model) muss die beibehaltene Seite des Outer Joins sein. Die Abfrage ist ungültig, wenn sich das primäre Ereignis auf der Seite „nullable“ befindet.

    • Ein Join zwischen Ereignis und Entität muss ein Left Join sein. Dadurch wird das Ereignis ($e1) korrekt beibehalten.

    • Ein Entitäts-Ereignis-Join muss ein Right Join sein. Dadurch wird das Ereignis ($e1) korrekt beibehalten.

    Das folgende Beispiel ist ungültig, da sich das UDM-Ereignis ($e1) auf der linken Seite befindet, aber der Right Join die rechte Seite ($g1) beibehält. Dies verstößt gegen die Regel, dass das UDM-Ereignis beibehalten werden muss:

    
    // Invalid query
    $e1.metadata.event_type = "NETWORK_CONNECTION"
    $g1.graph.metadata.entity_type = "ASSET"
    right join $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
    
    
  • Die expliziten Keywords left join und right join im Abschnitt events werden in Erkennungsregeln nicht unterstützt und nur in YARA-L-Suchen und Dashboards unterstützt. Wenn Sie einen Left Outer Join oder Anti-Join in einer Erkennungsregel ausführen möchten, verwenden Sie eine unbegrenzte Bedingung wie #data_table >= 0 oder #data_table = 0 im Abschnitt condition. Weitere Informationen finden Sie unter Left Joins in Erkennungsregeln.

Best Practices

Verwenden Sie spezifische und enge Filter, um langsame Leistung und Abfrage-Timeouts bei Outer-Join-Abfragen zu vermeiden.

Beispiel für eine allgemeine Abfrage:


$e1.metadata.event_type = "USER_LOGIN"
$e2.metadata.event_type = "NETWORK_CONNECTION"
right join $e1.principal.hostname = $e2.principal.hostname

Kann durch Hinzufügen bestimmter Kriterien optimiert werden:


$e1.metadata.event_type = "USER_LOGIN"
$e1.principal.ip = "121.121.121.121"
$e1.principal.user.userid = "alex"
$e2.metadata.event_type = "NETWORK_CONNECTION"
$e2.src.hostname = "altostrat.com"
$e1.principal.hostname = $e2.principal.hostname

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