Daten mithilfe von Outer Joins korrelieren
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 joinoderright joinim Abschnittevents.Erkennungsregeln: Definieren Sie die Join-Beziehung mit einem Gleichheitszeichen (
=) im Abschnitteventsund geben Sie im Abschnittconditioneine unbegrenzte Bedingung an (z. B.#data_table >= 0für einen Left Outer Join oder#data_table = 0fü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
nullzurückgegeben.Auswirkungen von Platzhaltern: Jede im Abschnitt
matchverwendete 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.hostnamezugewiesen. Der Left Outer Join sorgt dafür, dass das Ereignis$e1vorhanden 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 5mEvent-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.hostnameEreignis-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.hostnameEvent-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 als0sein muss, wird ein Inner Join ausgeführt. Wenn ein Ereignis von einem nicht verwalteten Host stammt, der nicht incorporate_asset_directoryaufgefü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 >= 0wird ein Left Outer Join ausgeführt. Alle Ereignisse in$ebleiben erhalten, auch wenn der Hostname nicht mit einer Zeile incorporate_asset_directoryübereinstimmt.Wenn ein Ereignis nicht mit einer Zeile der Datentabelle übereinstimmt, werden Verweise auf
%corporate_asset_directory.columnalsnullausgewertet. Verwenden Sie im Abschnittoutcomedie Optionstrings.coalescefür Stringspalten und bedingteif-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.hostnamemit einerauthorized_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 = 0im Abschnittconditionauswerten: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 Abschnitteventsund geben Sie#data_table = 0im Abschnittconditionan: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
nullzurückgegeben.Auswirkungen von Platzhaltern: Jede Platzhaltervariable, die im Abschnitt
matchverwendet 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
$hostwird der Wert aus$e2.principal.hostnamezugewiesen. Der Right Outer Join sorgt dafür, dass das Ereignis$e2vorhanden ist, sodass die Variable$hostimmer 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 5mEntitä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 5mDatatable-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.hostnameEntitä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.hostnameDatatable-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.hostnameDie expliziten Keywords
left joinundright joinim Abschnitteventswerden 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 >= 0oder#data_table = 0im Abschnittcondition. 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