Effectuer des recherches sur le contexte des entités
La fonctionnalité "Contexte de l'entité dans la recherche" améliore les investigations sur la sécurité et la réponse aux incidents en permettant aux utilisateurs de rechercher et d'afficher les événements contextuels liés aux entités de leur compte Google Security Operations. Contrairement aux recherches limitées au schéma d'événement standard du modèle de données unifié (UDM), cette fonctionnalité permet d'effectuer des recherches au-delà des données d'événement UDM, y compris le contexte d'entité UDM, et de fournir 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.
- Aide à l'analyse des causes fondamentales, à la chasse aux menaces et à l'analyse forensique.
- Les utilisateurs peuvent effectuer des recherches statistiques sur le contexte des entités 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.
Utiliser le contexte de l'entité dans la recherche
Vous pouvez utiliser le contexte de l'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 trouver tous les événements contextuels associés à un nom d'hôte spécifique, créez une recherche à l'aide de
graph.entity.hostname. - Accéder à l'onglet "Présentation" : l'onglet Présentation fournit un résumé de haut niveau 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 Présentation affiche des informations pour les types d'entités, tels que
DOMAIN_NAME,IP_ADDRESS,ASSET,USER,FILE,GROUPetRESOURCE. - 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 "Tendance au fil du temps", "Filtre d'instantané", "Agrégations" et "Événements". Les entités sont classées en entités temporisées et intemporelles, affichées dans des onglets distincts.
- Afficher les agrégats : les agrégats sont affichés pour les champs, comme dans 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.
Search Console du graphique de contexte d'entité
La console de recherche du graphique de contexte d'entité (ECG) comporte plusieurs onglets qui vous aident à analyser les données de contexte d'entité :
Onglet "Résultats" : affiche
Timed DataetTimeless Data.- Timed Data : affiche les entités qui avaient une valeur pour
metadata.interval.end_timelors de l'ingestion. - Données intemporelles : affiche les entités qui n'avaient aucune valeur pour
metadata.interval.end_time.
La Search Console affiche un maximum de 10 000 entrées de données temporisées ou intemporelles.
- Timed Data : affiche les entités qui avaient une valeur pour
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é dans la requête de recherche.
Graphique "Activité au fil du temps" :
Affiche le nombre d'entités et le contexte d'entité valides dans chaque compartiment temporel. Vous pouvez utiliser le curseur pour effectuer un zoom avant ou arrière sur la plage de dates.
Total des entités modifiées : le graphique de contexte d'entité (ECG) stocke les données dans des compartiments temporels pendant leur période de validité. Il copie également ces données dans le compartiment temporel 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 compartiments temporels.
Cas d'utilisation : examiner un compte utilisateur compromis
Prenons l'exemple suivant : un analyste de sécurité doit examiner un compte utilisateur potentiellement compromis (email@company.com). Procédez comme suit :
Identifier l'utilisateur compromis : une alerte signale que l'utilisateur email@company.com a été identifié comme un compte suspect.
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.
Exécuter des requêtes : utilisez 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.
Analyser l'onglet "Présentation" : l'onglet Présentation affiche le résumé de l'entité pour l'utilisateur, y compris :
- Vérifiez les codes temporels
First Seen HouretLast Seen Hour.
- Vérifiez les codes temporels
- 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 du système d'exploitation et la version de la plate-forme.
Examiner l'onglet "Événements" : affichez les événements associés à cet utilisateur, y compris les tentatives de connexion et les anomalies.
Examiner les agrégats : identifiez les modèles et les anomalies dans les données contextuelles d'entité, réparties dans le contexte d'entité, le contexte dérivé et le contexte global.
Exemples de recherche
Pour rechercher des données contextuelles d'entité, utilisez les noms de champs d'entité UDM dans vos requêtes de recherche :
graph.entity.hostnamegraph.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) - En fonction du type d'entité, des champs spécifiques, tels que
Principal_ippour les actifs,Mail_idpour les utilisateurs,File_namepour les hachages/fichiers, etDomain_nameetIP_addresspour 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 des entités.
Recherche de statistiques d'entité UDM
Pour afficher les sources et les types de contexte disponibles, exécutez la recherche de statistiques d'entité 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 de date affiche les données actives dans le graphique d'entités, et non le moment où les données contextuelles ont été ingérées.
Étant donné que 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 du journal, 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 pivot de la recherche UDM. Cet affinement génère ensuite une requête YARA-L 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 )
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_seenetlast_seenpour chaqueENTITY_TYPE Prevalence: nombre d'actifs ayant accédé à unENTITY_TYPEdonné
Codes temporels First Seen Hour et Last Seen Hour
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_timecapture l'heure à laquelle une entité a été vue pour la première fois dans l'environnement client. - Le champ
last_seen_timeenregistre l'heure de l'observation la plus récente de cette entité.
Utilisateurs ayant vu l'heure pour la première fois au cours des sept derniers jours :
graph.metadata.entity_type = "USER"
graph.entity.user.userid != ""
graph.entity.user.first_seen_time.hours >= timestamp.current_hours()-(86400 * 7)
Domaines vus 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)
Fichiers (hachages) observés 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 :
md5sha1sha256
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é UDM suivante identifie les IP_ADDRESSES récemment observées 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 exécuter 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 du type DERIVED_CONTEXT.
La recherche d'entité UDM suivante identifie les noms de domaine rarement observés. Ces domaines sont spécifiquement associés à au maximum un actif distinct par jour, pendant la période de la requête (day_max = 1), et à au maximum un actif distinct au cours des 10 jours précédents (rolling_max = 1).
Ce modèle est utile pour détecter les domaines avec une interaction 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 une recherche agrégée de statistiques d'entité 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 champs d'entité UDM de base
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.hostnamegraph.entity.ip = "8.8.8.8" and graph.metadata.entity_type = "ASSET"principal.ipprincipal.hostname="baz"principal.ip="1.2.3.4"network.dns.questions.name="youtube.com"
Pivot à partir des champs d'entité
Utilisez les champs d'entité pour pivoter et explorer les données associées. Voici quelques exemples de champs de pivot :
network.email.tonetwork.email.ccprincipal.process.file.fileMetadata.pe.importHashprincipal.process.file.sha256network.dns.questions.name
Comprendre les champs dynamiques
Les sources référencent des champs structurés dynamiques avec des préfixes, tels que additional. Vous pouvez rechercher 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 sur 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 voir ou interagir avec ces données | Qui peut les 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 Open Source Intel (OPEN_SOURCE_INTEL_IOC) |
- Recherche - Règles |
Tous les utilisateurs |
IoC Mandiant Fusion (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 temporisées et intemporelles.
- Données de contexte global : il existe une limite de 50 lignes pour les données de contexte global sensibles, telles que
UPPERCASE_VT_PROTECTED,MANDIANT_FUSION_IOC, etVIRUS_TOTAL_CONNECTIONS. - Cohérence des données : les dernières données vues peuvent avoir un décalage allant jusqu'à deux heures. 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 chaleur.
- 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 auprès des membres de la communauté et des professionnels de Google SecOps.