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 les 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 associations statistiques qui nécessitent une section match pour agréger les résultats, une association de données récupère les données complètes d'événement ou d'entité 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 équation 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 dont 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 différents du modèle de données unifié (UDM).

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

Joindre des événements entre eux

Les jointures d'événement à événement sont idéales pour corréler des champs entre deux types d'événements UDM distincts. Cela est utile pour trouver des séquences d'événements ou d'actions impliquant les mêmes entités dans différentes sources de journaux ou différents 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

Rejoindre une réunion avec un 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 concerné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 requêtes par heure.

  • 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 disponible pour les requêtes d'association entre les événements et les données 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 sur 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"

Rejoindre un 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 optimiser vos campagnes en ajoutant des critères spécifiques :


$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. Cette table diffère d'une vue de statistiques, car elle fournit les données complètes sur les événements ou les entités, et non un nombre 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.