Joins ohne Abschnitt für Übereinstimmungen implementieren
In diesem Dokument wird das Konzept von Join-Vorgängen ohne match-Abschnitt oder Daten-Join in der Google Security Operations-Suche erläutert.
Mit Join-Vorgängen können Sie Rohdaten aus mehreren Quellen anhand gemeinsamer Feldwerte korrelieren und kombinieren. Wenn Sie verknüpfte Sicherheitsereignisse und -entitäten in einer umfassenden Ansicht zusammenfassen, können Sie Bedrohungen effektiver erkennen und untersuchen.
Im Gegensatz zu statistischen Joins , für die ein match Abschnitt zum Aggregieren von Ergebnissen erforderlich ist,
ruft ein Daten-Join die vollständigen Ereignis- oder Entitätsdaten ab und zeigt sie
ohne Aggregation an.
Funktionsweise von Daten-Joins
Sie können einen Daten-Join erstellen, indem Sie gemeinsame Felder in verschiedenen Ereignis- oder Entitätsblöcken korrelieren. Dazu haben Sie folgende Möglichkeiten:
Felder direkt gleichsetzen (z. B.
$e1.principal.hostname = $e2.principal.hostname)Beide Felder derselben Platzhaltervariablen zuweisen (z. B.
$host = $e1.principal.hostnameund$host = $e2.principal.hostname).
In beiden Fällen werden die Blöcke in der Suche implizit zusammengeführt, wenn die Werte dieser Felder identisch sind.
Unterstützte Daten-Join-Typen
In Ihren Suchanfragen können Sie die folgenden Daten-Join-Typen verwenden:
Ereignis-zu-Ereignis-Joins:Daten zwischen zwei verschiedenen Ereignistypen des Unified Data Model (UDM) korrelieren.
Ereignis-zu-ECG-Joins:UDM-Ereignisdaten mit Informationen aus dem Entity Context Graph (ECG) anreichern.
Ereignis-zu-Ereignis-Joins
Ereignis-zu-Ereignis-Joins eignen sich am besten zum Korrelieren von Feldern zwischen zwei verschiedenen UDM-Ereignistypen. Das ist nützlich, um Sequenzen von Ereignissen oder Aktionen zu finden, bei denen dieselben Entitäten in verschiedenen Logquellen oder Ereignistypen vorkommen.
Die folgende Beispielabfrage findet alle Netzwerkverbindungen (NETWORK_CONNECTION), die von einem Host stammen, auf dem auch eine Nutzeranmeldung (USER_LOGIN) stattgefunden hat:
// Find user logins and assign the hostname to the $host placeholder
$e1.metadata.event_type = "USER_LOGIN"
$host = $e1.principal.hostname
// Find network connections and join them where the hostname matches the
$host placeholder
$e2.metadata.event_type = "NETWORK_CONNECTION"
$host = $e2.principal.hostname
Beschränkungen
Es können maximal zwei Ereignisse zusammengeführt werden.
Der Zeitraum für die Abfrage ist auf maximal 14 Tage begrenzt.
Das Abfragelimit beträgt 120 Abfragen pro Stunde.
Beispiele
Die folgende Beispielabfrage findet alle Netzwerkverbindungen
(NETWORK_CONNECTION), die von einem Host stammen, auf dem auch eine Nutzeranmeldung
(USER_LOGIN) stattgefunden hat:
// Find user logins and assign the hostname to the $host placeholder
$e1.metadata.event_type = "USER_LOGIN"
$host = $e1.principal.hostname
// Find network connections and join them where the hostname matches the $host
placeholder
$e2.metadata.event_type = "NETWORK_CONNECTION"
$host = $e2.principal.hostname
Join anhand der Nutzer-ID
$e1.metadata.event_type = "USER_LOGIN"
$e1.security_result.action = "ALLOW"
$e1.principal.user.userid = $user
$e2.metadata.event_type = "NETWORK_CONNECTION"
$e2.principal.user.userid = $user
Join anhand der IP-Adresse
$e1.metadata.event_type = "USER_LOGIN"
$e1.security_result.action = "ALLOW"
$e1.principal.ip = $ip
$e2.metadata.event_type = "NETWORK_CONNECTION"
$e2.principal.ip = $ip
Ereignis-zu-Entity Context Graph-Joins
Ereignis-zu-ECG-Joins eignen sich am besten, um UDM-Ereignisse mit Kontextdaten zu den beteiligten Entitäten (z. B. Assets, Nutzern) aus dem ECG anzureichern. Dieser Join bietet ein umfassenderes Bild, indem er Echtzeit-Ereignisdaten mit historischen und relationalen Entitätsinformationen kombiniert.
Beschränkungen
Der Zeitraum für die Abfrage ist auf maximal 14 Tage begrenzt.
Das Abfragelimit beträgt 120 Abfragen pro Stunde.
In der Abfrage können maximal zwei UDM-Ereignisse zusammengeführt werden.
In der Abfrage kann maximal ein ECG-Ereignis zusammengeführt werden.
Der Export in eine Datentabelle wird für Ereignis-zu-ECG-Join-Abfragen nicht unterstützt.
ECG-zu-ECG-Joins werden nicht unterstützt.
ECG-zu-Datentabelle-Joins werden nicht unterstützt.
Beispiele
Diese Abfrage reichert Netzwerkverbindungsereignisse mit Asset-Informationen aus dem ECG an, indem sie anhand des Hostnamens zusammengeführt werden.
// Find network connections and assign the hostname to the $host placeholder
$e1.metadata.event_type = "NETWORK_CONNECTION"
$host = $e1.principal.asset.hostname
// Find asset entities in the graph and join where the hostname matches the
$host placeholder
$g1.graph.metadata.entity_type = "ASSET"
$host = $g1.graph.entity.asset.hostname
Join anhand der IP-Adresse mit einem bestimmten Logtyp
$ip = $e1.principal.ip
$ip = $g1.graph.entity.ip
$e1.metadata.log_type = "WINDOWS_DEFENDER_ATP"
$g1.graph.entity.ip = "10.19.6.24"
Join anhand des Hostnamens mit einem bestimmten IP-Filter
$e1.metadata.event_type = "FILE_CREATION"
$host = $e1.principal.hostname
$e1.principal.ip = "10.0.0.76"
$g1.graph.metadata.entity_type = "ASSET"
$host = $g1.graph.entity.hostname
Best Practices
Um langsame Leistung und Abfrage-Time-outs zu vermeiden, verwenden Sie in Ihren Join-Abfragen spezifische und enge Filter in jedem Block ($e1, $e2, $g1).
Eine breite Abfrage wie die folgende:
$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 = "192.168.1.101"
$e1.principal.user.userid = "alex"
$e2.metadata.event_type = "NETWORK_CONNECTION"
$e2.src.hostname = "altostrat.com"
right join $e1.principal.hostname = $e2.principal.hostname
Mit Ergebnissen arbeiten
Die Ergebnisse eines Daten-Joins werden in einer Tabelle Joins angezeigt, einschließlich der kombinierten Felder aus beiden korrelierten Ereignissen. Diese Tabelle unterscheidet sich von einer Statistikansicht, da sie die vollständigen Ereignis- oder Entitätsdaten und keine aggregierte Anzahl enthält.
Nach dem Ausführen einer Abfrage können Sie auf folgende Weise mit den Ergebnissen arbeiten:
Als CSV herunterladen:Exportieren Sie das vollständige Ergebnis-Set zur Offlineanalyse in eine CSV-Datei.
In Datentabellen exportieren:Speichern Sie die Ergebnisse in einer Datentabelle in Ihrer Instanz, um sie als Referenz zu verwenden oder weiter zu korrelieren (nur für Ereignis-zu-Ereignis-Joins).
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten