Implémenter des jointures sans section de correspondance

Compatible avec :

Ce document explique le concept des opérations de jointure sans section match ni jointure de données dans la recherche Google Security Operations.

Vous pouvez utiliser des opérations de jointure pour corréler et combiner des données brutes provenant de plusieurs sources en fonction de valeurs de champ communes. En combinant les événements et entités de sécurité associés dans une vue unique et complète, vous pouvez détecter et examiner les menaces plus efficacement.

Contrairement aux jointures statistiques qui nécessitent une section match pour agréger les résultats, une jointure de données récupère les données d'événement ou d'entité complètes et les affiche sans aucune agrégation.

Fonctionnement des jointures de données

Vous pouvez créer une jointure de données en corrélant des champs communs dans différents blocs d'événements ou d'entités. Pour ce faire, vous pouvez utiliser l'une des méthodes suivantes :

  • Établissez une équivalence directe entre les champs (par exemple, $e1.principal.hostname = $e2.principal.hostname).

  • Attribuez les deux champs à la même variable d'espace réservé (par exemple, $host = $e1.principal.hostname et $host = $e2.principal.hostname).

Dans les deux cas, la recherche joint implicitement les blocs où les valeurs de ces champs sont identiques.

Types d'association de données acceptés

Vous pouvez utiliser les types de jointure de données suivants dans vos requêtes de recherche :

  • Jointures d'événement à événement : mettez en corrélation les données entre deux types d'événements UDM (Unified Data Model) différents.

  • Jointures événement-ECG : enrichissez les données d'événement UDM avec des informations provenant du graphique de contexte d'entité (ECG).

Jointures d'événement à événement

Les jointures d'événement à événement sont idéales pour corréler des champs entre deux types d'événements UDM distincts. Cela permet de trouver des séquences d'événements ou d'actions impliquant les mêmes entités dans différentes sources de journaux ou types d'événements.

L'exemple de requête suivant recherche toutes les connexions réseau (NETWORK_CONNECTION) provenant d'un hôte sur lequel une connexion utilisateur (USER_LOGIN) a également eu lieu :


  // 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

Limites

  • Vous pouvez participer à deux événements maximum.

  • La période de la requête est limitée à 14 jours maximum.

  • La limite de requêtes est de 120 requêtes par heure (RPH).

Exemples

L'exemple de requête suivant recherche toutes les connexions réseau (NETWORK_CONNECTION) provenant d'un hôte sur lequel une connexion utilisateur (USER_LOGIN) a également eu lieu :


  // 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

Joindre sur l'ID utilisateur


  $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

Rejoindre une réunion à l'aide d'une adresse IP


  $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

Jointures du graphique contextuel d'événement à entité

Les jointures entre les événements et l'ECG sont idéales pour enrichir les événements UDM avec des données contextuelles sur les entités impliquées (telles que les composants et les utilisateurs) provenant de l'ECG. Cette jointure permet d'obtenir une vue plus complète en combinant les données d'événements en temps réel avec les informations historiques et relationnelles sur les entités.

Limites

  • La période de la requête est limitée à 14 jours maximum.

  • La limite de requêtes est de 120 QPH.

  • Vous pouvez joindre jusqu'à deux événements UDM dans la requête.

  • Vous ne pouvez joindre qu'un seul événement ECG à la requête.

  • L'exportation vers une table de données n'est pas compatible avec les requêtes de jointure entre les événements et l'ECG.

  • Les jointures ECG-à-ECG ne sont pas acceptées.

  • Les jointures ECG vers table de données ne sont pas acceptées.

Exemples

Cette requête enrichit les événements de connexion réseau avec des informations sur les composants provenant de l'ECG en effectuant une jointure sur le nom d'hôte.


  // 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

Joindre une adresse IP avec un type de journal spécifique


  $ip = $e1.principal.ip

  $ip = $g1.graph.entity.ip

  $e1.metadata.log_type = "WINDOWS_DEFENDER_ATP"

  $g1.graph.entity.ip = "10.19.6.24"

Effectuer une jointure sur le nom d'hôte avec un filtre d'adresse IP spécifique


  $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

Bonnes pratiques

Pour éviter les ralentissements et les délais d'expiration des requêtes, utilisez des filtres spécifiques et précis dans chaque bloc ($e1, $e2, $g1) de vos requêtes de jointure.

Par exemple, une requête large comme celle-ci :

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

Vous pouvez l'optimiser en ajoutant des critères spécifiques, comme suit :


$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

Utiliser les résultats

Les résultats d'une jointure de données s'affichent dans un tableau Jointures, y compris les champs combinés des deux événements corrélés. Ce tableau diffère d'une vue de statistiques, car il fournit les données complètes sur les événements ou les entités, et non un décompte agrégé.

Après avoir exécuté une requête, vous pouvez utiliser les résultats de différentes manières :

  • Télécharger au format CSV : exportez l'ensemble des résultats dans un fichier CSV pour les analyser hors connexion.

  • Exporter vers des tables de données : enregistrez les résultats dans une table de données de votre instance pour référence ou pour une corrélation plus poussée (uniquement pour les jointures d'événement à événement).

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.