Effectuer des recherches de contexte d'entité

Compatible avec :

La fonctionnalité Contexte de l'entité dans la recherche améliore les enquêtes de sécurité et la réponse aux incidents en permettant aux utilisateurs de rechercher et d'afficher les événements de contexte liés aux entités dans leur compte Google Security Operations. Contrairement aux recherches limitées au schéma d'événement UDM (Unified Data Model) standard, cette fonctionnalité répond au besoin de rechercher au-delà des données d'événement UDM, y compris le contexte d'entité UDM, et fournit des insights plus approfondis sur les incidents de sécurité.

Principaux avantages

  • Les analystes de sécurité et les chasseurs de menaces peuvent interroger des informations contextuelles sur les entités.
  • Facilitez l'analyse des causes fondamentales, la recherche de menaces et l'investigation.
  • Les utilisateurs peuvent effectuer des recherches statistiques sur le contexte de l'entité pour comprendre les modèles de télémétrie et les entités concernées grâce à l'analyse de la télémétrie.

Vous pouvez utiliser le contexte d'entité pour obtenir des insights à partir de vos résultats de recherche de différentes manières :

  • Rechercher à l'aide des noms de champs d'entité UDM : créez vos requêtes de recherche à l'aide des noms de champs d'entité UDM. Par exemple, pour rechercher tous les événements de contexte associés à un nom d'hôte spécifique, créez une recherche à l'aide de graph.entity.hostname.
  • Accéder à l'onglet "Aperçu" : l'onglet Aperçu fournit un résumé général des entités trouvées dans votre recherche, en exploitant les informations de la requête saisie par un utilisateur pour afficher des informations. La page Vue d'ensemble affiche des informations sur les types d'entités, tels que DOMAIN_NAME, IP_ADDRESS, ASSET, USER, FILE, GROUP et RESOURCE.
  • Utiliser l'onglet "Entité" : l'onglet Entité liste tous les événements de contexte d'entité reçus, y compris les sous-composants tels que "Évolution au fil du temps", "Filtre d'instantané", "Agrégations" et "Événements". Les entités sont classées en entités temporelles et entités intemporelles, affichées dans des onglets distincts.
  • Afficher les agrégations : les agrégations sont affichées pour les champs, comme pour la recherche d'événements UDM. Les agrégations sont ensuite classées en types de contexte : contexte d'entité, contexte dérivé et contexte global.

Interface des résultats de recherche du graphique de contexte d'entité

L'interface des résultats de recherche du graphique contextuel d'entité (ECG) propose plusieurs onglets pour vous aider à analyser les données contextuelles des entités :

  • Onglet "Résultats" : affiche Timed Data et Timeless Data.

    • Données temporelles : affiche les entités qui avaient une valeur pour metadata.interval.end_time lors de l'ingestion.
    • Données intemporelles : affiche les entités qui n'avaient aucune valeur pour metadata.interval.end_time.

    L'interface affiche les entités temporelles ou intemporelles, jusqu'au nombre maximal de résultats configuré.

  • Onglet "Alertes" : affiche toutes les alertes associées aux entités trouvées dans la recherche.

  • Onglet "Aperçu" : présente des informations sur l'entité de la requête de recherche.

  • Graphique "Activité au fil du temps" :

    • Indique le nombre d'entités et le contexte d'entité valides dans chaque intervalle de temps. Vous pouvez utiliser le curseur pour faire un zoom avant ou arrière sur la période.

    • Nombre total d'entités modifiées : le graphique de contexte d'entité (ECG) stocke les données dans des buckets temporels pendant leur période de validité. Il copie également ces données dans l'intervalle de temps suivant, à condition que l'entité reste valide (en fonction de end_time). Ce graphique est mis à jour chaque fois qu'une propriété d'entité change entre deux intervalles de temps.

Cas d'utilisation : Examiner un compte utilisateur compromis

Prenons le scénario suivant : un analyste de sécurité doit examiner un compte utilisateur potentiellement compromis (email@company.com). Pour examiner le problème, procédez comme suit :

  1. Identifier l'utilisateur compromis : une alerte signale que l'utilisateur email@company.com a été identifié comme un compte suspect.

  2. Recueillir des informations sur le contexte de l'entité : obtenez des données contextuelles sur l'utilisateur pour comprendre la portée et l'impact.

  3. Exécuter des requêtes : utilisez le contexte de l'entité dans la recherche pour exécuter les requêtes suivantes :

    • graph.entity.user.email_addresses = "email@company.com" pour récupérer des informations sur l'utilisateur.
    • graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context" pour vérifier le nom du produit et d'autres métadonnées.
  4. Analyser l'onglet "Aperçu" : l'onglet Aperçu affiche le résumé de l'entité pour l'utilisateur, y compris :

    • Vérifiez les codes temporels First Seen Hour et Last Seen Hour.
  • Vérifiez les noms d'hôte, les adresses IP et les adresses MAC (si disponibles).
  • Inspectez le modèle de matériel, la plate-forme de l'OS et la version de la plate-forme.
  1. Examinez l'onglet "Événements" : affichez les événements associés à cet utilisateur, y compris les tentatives de connexion et les anomalies.

  2. Agrégats d'examen : identifiez les schémas et les anomalies dans les données contextuelles d'entité, réparties entre le contexte d'entité, le contexte dérivé et le contexte global.

Pour rechercher des données contextuelles d'entité, utilisez les noms de champs d'entité UDM dans vos requêtes de recherche :

  • graph.entity.hostname
  • graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"

Les résultats de recherche affichent des informations clés sur les entités, y compris :

  • Métadonnées d'entité
  • Métriques (First Seen Hour, Last Seen Hour)
  • Relations (Entity, Direction, Entity_label, Entity_type, Relationship)
  • Selon le type d'entité, des champs spécifiques, tels que Principal_ip pour les éléments, Mail_id pour les utilisateurs, File_name pour les hachages/fichiers, et Domain_name et IP_address pour les domaines.

Exemples de contexte d'entité dans la recherche

Cette section fournit des exemples pratiques d'utilisation de la fonctionnalité de contexte d'entité UDM pour analyser les statistiques d'entité.

Pour afficher les sources et les types de contexte disponibles, exécutez la recherche de statistiques d'entités UDM suivante dans la recherche UDM :

graph.metadata.source_type = $sourceType
graph.metadata.entity_type = $entityType
match:
  $sourceType, $entityType
outcome:
  $total = count(graph.metadata.product_entity_id)
order:
  $sourceType, $total desc
limit:
  100

Le sélecteur d'heure affiche les données actives dans le graphique d'entités, et non au moment où les données contextuelles ont été ingérées.

Comme la recherche d'entités UDM utilise l'interface de recherche UDM standard, vous pouvez utiliser des fonctionnalités telles que le panneau Agrégations (pour afficher les valeurs les plus élevées ou les plus basses), le tableau des résultats et les résultats développés des statistiques UDM.

Exemple : Afficher les ENTITY_TYPE distincts

Pour développer la recherche d'entités UDM, vous pouvez inclure la source de journaux, l'espace de noms et un tableau de résultats pour afficher les ENTITY_TYPE distincts observés, comme suit :

graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper(graph.metadata.event_metadata.base_labels.log_types)
$namespace = strings.to_upper(graph.metadata.event_metadata.base_labels.namespaces)
match:
  $logType, $namespace
outcome:
  $total = count(graph.metadata.product_entity_id)
  $entityTypes = array_distinct(graph.metadata.entity_type)
order:
  $logType, $total desc
limit:
  100

Exemple : Affiner votre ensemble d'entités

Vous pouvez affiner un ensemble spécifique d'entités à l'aide de la fonctionnalité de tableau croisé dynamique de la recherche UDM. Cet affinement génère ensuite une requête YARA-L semblable à celle-ci :

graph.metadata.source_type = "ENTITY_CONTEXT"
$logType = strings.to_upper( graph.metadata.event_metadata.base_labels.log_types )
$namespace = strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces )
AND strings.to_upper( graph.metadata.event_metadata.base_labels.log_types ) = "WINDOWS_AD"
AND strings.to_upper( graph.metadata.event_metadata.base_labels.namespaces ) = "ACME"

Contexte dérivé

Google SecOps fournit les types de contexte dérivé suivants :

  • Codes temporels first_seen et last_seen pour chaque ENTITY_TYPE
  • Prevalence : nombre d'assets ayant accédé à un ENTITY_TYPE donné

First Seen Hour et Last Seen Hour codes temporels

Google SecOps effectue une analyse statistique des données entrantes et enrichit les enregistrements de contexte d'entité avec les codes temporels first_seen et last_seen :

  • Le champ first_seen_time capture l'heure à laquelle une entité a été vue pour la première fois dans l'environnement client.
  • Le champ last_seen_time enregistre l'heure de la dernière observation de cette entité.

Utilisateurs dont la première heure d'activité remonte aux sept derniers jours :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)

Domaines détectés pour la première fois au cours des sept derniers jours :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
graph.entity.domain.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)

Fichier (hachages) observé au cours des sept derniers jours :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "FILE"
//graph.entity.file.md5 != ""
//graph.entity.file.sha1 != ""
graph.entity.file.sha256 != ""
graph.entity.file.first_seen_time.hours >= timestamp.current_hours() - (86400 * 7)

ENTITY_TYPE représente un hachage FILE, par exemple entity.file.hash. Dans l'objet hash, le type peut être l'un des suivants :

  • md5
  • sha1
  • sha256

Pour rechercher un hachage spécifique, vous pouvez exécuter une recherche d'entité UDM pour le type de hachage donné :

// This will search ENTITY, DERIVED, and GLOBAL Source Types
graph.metadata.entity_type = "FILE"
graph.entity.file.sha256 = "eb5db1feadda5351c3b8fc0770e9f4c173484df5dc4a785bd1bdce7806a9e498"

Adresses IP

Les ENTITY_TYPES dérivés de IP_ADDRESS peuvent représenter des entités internes ou externes.

La recherche de statistiques d'entités UDM suivante identifie les IP_ADDRESSES récemment observés et utilise des fonctions d'agrégation (dans la section des résultats) pour les compter par bloc CIDR :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
//note, for IP addresses the first seen is under artifact, not ip
graph.entity.artifact.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
outcome:
  $total = count(graph.metadata.product_entity_id)
  $classA = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.0.0.0/8"),1,0))
  $classB = sum(if(net.ip_in_range_cidr(graph.entity.ip, "172.16.0.0/12"),1,0))
  $classC = sum(if(net.ip_in_range_cidr(graph.entity.ip, "192.168.0.0/16"),1,0))
  $classD = sum(if(net.ip_in_range_cidr(graph.entity.ip, "224.0.0.0/4"),1,0))
  // we shouldn't see results here…
  $classE = sum(if(net.ip_in_range_cidr(graph.entity.ip, "240.0.0.0/4"),1,0))
  $thisNetwork = sum(if(net.ip_in_range_cidr(graph.entity.ip, "0.0.0.0/8"),1,0))
  $loopback = sum(if(net.ip_in_range_cidr(graph.entity.ip, "127.0.0.0/8"),1,0))
  $linklocal = sum(if(net.ip_in_range_cidr(graph.entity.ip, "169.254.0.0/16"),1,0))
  $benchmark = sum(if(net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15"),1,0))
  $cgnat = sum(if(net.ip_in_range_cidr(graph.entity.ip, "10.64.0.0/10"),1,0))

Pour examiner plus en détail une plage inhabituelle ou inattendue, vous pouvez effectuer une recherche d'entité UDM :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "IP_ADDRESS"
net.ip_in_range_cidr(graph.entity.ip, "198.18.0.0/15")

Prévalence

La prévalence est toujours de type DERIVED_CONTEXT.

La recherche d'entités UDM suivante identifie les noms de domaine rarement observés. Ces domaines sont spécifiquement associés à au plus un élément distinct par jour, pendant la période de la requête (day_max = 1), et à au plus un élément distinct au cours des 10 jours précédents (rolling_max = 1).

Ce modèle est utile pour détecter les domaines dont l'interaction est limitée dans votre environnement :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return specific TLDs where the FQDN is more than X characters
//graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
graph.entity.domain.prevalence.rolling_max = 1
graph.entity.domain.prevalence.day_max = 1

Vous pouvez également transformer cette recherche en recherche agrégée de statistiques d'entités UDM et agréger les résultats :

graph.metadata.source_type = "DERIVED_CONTEXT"
graph.metadata.entity_type = "DOMAIN_NAME"
//optional, filter to only return FQDN
graph.entity.domain.name = /^.{40,}\.(?:sx|cc|st|ac|lc|wd|vg|tv|cm|gd)$/
$domain = graph.entity.domain.name
$length = strings.length(graph.entity.domain.name)
$tld = strings.extract_domain(graph.entity.domain.name)
graph.entity.domain.prevalence.day_max = 1
graph.entity.domain.prevalence.rolling_max = 1
match:
  $domain, $tld, $length
limit:
  10

Recherches de base dans les champs d'entité UDM

Voici d'autres exemples d'utilisation de la fonctionnalité Contexte de l'entité dans la recherche dans Google SecOps, en fonction des sources disponibles :

  • graph.entity.hostname
  • graph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"
  • principal.ip
  • principal.hostname="baz"
  • principal.ip="1.2.3.4"
  • network.dns.questions.name="youtube.com"

Créer un tableau croisé dynamique à partir des champs d'entité

Utilisez les champs d'entité pour croiser et explorer les données associées. Voici quelques exemples de champs de tableau croisé dynamique :

  • network.email.to
  • network.email.cc
  • principal.process.file.fileMetadata.pe.importHash
  • principal.process.file.sha256
  • network.dns.questions.name

Comprendre les champs dynamiques

Les sources font référence à des champs structurés dynamiques avec des préfixes, tels que additional. Vous pouvez effectuer des recherches dans ces champs dans les événements UDM.

Points à prendre en compte concernant le contrôle des accès

Le système impose une limite de 50 événements pour les données contextuelles globales. Les utilisateurs globaux et limités peuvent voir les données.

Les sources suivantes fournissent des données contextuelles globales :

Données contextuelles globales Où un utilisateur peut-il voir ces données ou interagir avec elles ? Qui peut le voir
Navigation sécurisée - Recherche
- Règles
Tous les utilisateurs
Relations VirusTotal - Recherche
- Règles
Tous les utilisateurs
WHOIS - Recherche
- Règles
Tous les utilisateurs
Majuscules - Recherche
- Règles
Tous les utilisateurs
IOC de renseignements Open Source (OPEN_SOURCE_INTEL_IOC) - Recherche
- Règles
Tous les utilisateurs
Mandiant Fusion IoC (MANDIANT_FUSION_IOC) - Recherche
- Règles
- Menaces émergentes
Tous les utilisateurs

Limites

  • Limites de volume : limite de 1 million de résultats cumulés pour les données temporelles et intemporelles.
  • Données contextuelles globales : la limite est de 50 lignes pour les données contextuelles globales sensibles, telles que UPPERCASE_VT_PROTECTED, MANDIANT_FUSION_IOC et VIRUS_TOTAL_CONNECTIONS.
  • Cohérence des données : les données de la dernière consultation peuvent être retardées de deux heures maximum. Les entités associées ne peuvent afficher qu'un sous-ensemble des entités listées dans un événement.
  • Fonctionnalités non compatibles :

    • Recherches inversées sur les champs d'entité, recherches de champs groupés, faible prévalence et carte de densité.
    • Vous ne pouvez pas effectuer de jointure entre le contexte d'entité et les requêtes d'événement.

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