Realiza una búsqueda de datos de contexto de la entidad

Compatible con:

La función Contexto de la entidad en la Búsqueda mejora las investigaciones de seguridad y la respuesta ante incidentes, ya que permite a los usuarios buscar y ver eventos de contexto relacionados con entidades dentro de su cuenta de Google Security Operations. A diferencia de las búsquedas limitadas al esquema de eventos estándar del modelo de datos unificado (UDM), esta función aborda la necesidad de buscar más allá de los datos de eventos del UDM, incluido el contexto de la entidad del UDM, y proporciona estadísticas más detalladas sobre los incidentes de seguridad.

Ventajas clave

  • Los analistas de seguridad y los cazadores de amenazas pueden consultar información contextual sobre las entidades.
  • Ayuda con el análisis de la causa raíz, la búsqueda de amenazas y el análisis forense.
  • Los usuarios pueden realizar búsquedas estadísticas en el contexto de la entidad para comprender los patrones de telemetría y las entidades afectadas a través del análisis de telemetría.

Puedes usar el contexto de la entidad para obtener estadísticas a partir de los resultados de la búsqueda de las siguientes maneras:

  • Búsqueda con nombres de campos de entidades de UDM: Crea tus búsquedas con nombres de campos de entidades de UDM. Por ejemplo, para encontrar todos los eventos de contexto asociados a un nombre de host específico, crea una búsqueda con graph.entity.hostname.
  • Accede a la pestaña Resumen: La pestaña Resumen proporciona un resumen general de las entidades que se encuentran en tu búsqueda y aprovecha la información de la búsqueda que ingresa un usuario para mostrar información. En la página Descripción general, se muestra información sobre los tipos de entidades, como DOMAIN_NAME, IP_ADDRESS, ASSET, USER, FILE, GROUP y RESOURCE.
  • Usa la pestaña Entidad: En la pestaña Entidad, se enumeran todos los eventos de contexto de la entidad recibidos, incluidos los subcomponentes, como la tendencia a lo largo del tiempo, el filtro de instantáneas, las agregaciones y los eventos. Las entidades se clasifican en entidades temporales y entidades atemporales, que se muestran en pestañas separadas.
  • Ver agregados: Los agregados se muestran para los campos, de manera similar a la búsqueda de eventos de UDM. Además, las agregaciones se clasifican en tipos de contexto: contexto de entidad, contexto derivado y contexto global.

Caso de uso: Investiga una cuenta de usuario comprometida

Considera la siguiente situación: Un analista de seguridad necesita investigar una cuenta de usuario potencialmente vulnerada (correo electrónico@empresa.com). Sigue estos pasos para investigar:

  1. Identifica al usuario cuya cuenta se vio comprometida: Una alerta indica que se identificó la cuenta de usuario email@company.com como sospechosa.

  2. Recopila información del contexto de la entidad: Obtén datos contextuales sobre el usuario para comprender el alcance y el impacto.

  3. Ejecuta consultas: Usa el Contexto de la entidad en la Búsqueda para ejecutar las siguientes consultas:

    • graph.entity.user.email_addresses = "email@company.com" para recuperar información sobre el usuario.
    • graph.entity.user.email_addresses = "email@company.com" AND graph.metadata.product_name = "Google Cloud Compute Context" para verificar el nombre del producto y otros metadatos
  4. Analiza la pestaña Descripción general: La pestaña Descripción general muestra el resumen de la entidad para el usuario, incluidos los siguientes elementos:

    • Verifica las marcas de tiempo de First Seen Hour y Last Seen Hour.
  • Revisa los nombres de host, las direcciones IP y las direcciones MAC (si están disponibles).
  • Inspecciona el modelo de hardware, la plataforma del SO y la versión de la plataforma.
  1. Examina la pestaña Eventos: Consulta los eventos asociados a este usuario, incluidos los intentos de acceso y las anomalías.

  2. Agregados de opiniones: Identifica patrones y anomalías en los datos de contexto de la entidad, que se distribuyen en Contexto de la entidad, Contexto derivado y Contexto global.

Para buscar datos de contexto de la entidad, usa los nombres de los campos de la entidad del UDM en tus búsquedas:

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

En los resultados de la búsqueda, se muestra información clave sobre las entidades, como la siguiente:

  • Metadatos de la entidad
  • Métricas (First Seen Hour, Last Seen Hour)
  • Relaciones (Entity, Direction, Entity_label, Entity_type, Relationship)
  • Según el tipo de entidad, campos específicos, como Principal_ip para los recursos, Mail_id para los usuarios, File_name para los hashes o archivos, y Domain_name y IP_address para los dominios.

Ejemplos de contexto de la entidad en la búsqueda

En esta sección, se proporcionan ejemplos prácticos para compilar la función Contexto de la entidad del UDM y analizar las estadísticas de entidades.

Para ver los tipos y las fuentes de contexto disponibles, ejecuta la siguiente búsqueda de estadísticas de entidades del UDM en la Búsqueda del 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

El Selector de tiempo muestra los datos activos dentro del Gráfico de entidades, no cuando se incorporaron los datos de contexto.

Dado que la búsqueda de entidades del UDM usa la interfaz de búsqueda estándar del UDM, puedes usar funciones como el panel Aggregations (para ver los valores más altos o más bajos), la tabla de resultados y los resultados expandidos de las estadísticas del UDM.

Ejemplo: Ver ENTITY_TYPE distintos

Para ampliar la búsqueda de entidades del UDM, puedes incluir la fuente de registro, el espacio de nombres y un array de resultados para mostrar los ENTITY_TYPEs distintos observados, de la siguiente manera:

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

Ejemplo: Refina tu conjunto de entidades

Puedes definir mejor un conjunto específico de entidades con la función de cambio de UDM Search. Luego, este perfeccionamiento genera una consulta de YARA-L como la siguiente:

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"

Contexto derivado

Google SecOps proporciona los siguientes tipos de contexto derivado:

  • Marcas de tiempo first_seen y last_seen para cada ENTITY_TYPE
  • Prevalence: Es la cantidad de recursos que accedieron a un ENTITY_TYPE determinado.

Marcas de tiempo de First Seen Hour y Last Seen Hour

Google SecOps realiza análisis estadísticos de los datos entrantes y enriquece los registros de contexto de la entidad con marcas de tiempo de first_seen y last_seen:

  • El campo first_seen_hour captura la hora en la que se vio por primera vez una entidad en el entorno del cliente.
  • El campo last_seen_hour registra la hora de la observación más reciente de esa entidad.

Usuarios con una hora de primera visualización en los últimos 7 días:

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

Dominios vistos por primera vez en los últimos 7 días:

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)

Archivos (hashes) observados en los últimos 7 días:

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)

El ENTITY_TYPE representa un hash FILE, por ejemplo, entity.file.hash. Dentro del objeto hash, el tipo puede ser uno de los siguientes:

  • md5
  • sha1
  • sha256

Para buscar un hash específico, puedes ejecutar una búsqueda de entidades de UDM para el tipo de hash determinado:

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

Direcciones IP

El ENTITY_TYPES derivado de IP_ADDRESS puede representar entidades internas o externas.

La siguiente búsqueda de estadísticas de entidades del UDM identifica los IP_ADDRESSES observados recientemente y usa funciones de agregación (en la sección de resultados) para contarlos por bloque de 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))

Para investigar más a fondo un rango inusual o inesperado, puedes ejecutar una búsqueda de entidades de 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")

Prevalencia

La prevalencia siempre es del tipo DERIVED_CONTEXT.

La siguiente búsqueda de entidades del UDM identifica nombres de dominio que se observan con poca frecuencia. Estos dominios se asocian específicamente con como máximo un recurso distinto por día, durante el período de la búsqueda (day_max = 1), y como máximo un recurso distinto en los últimos 10 días (rolling_max = 1).

Este patrón es útil para detectar dominios con interacción limitada en tu entorno:

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

Como alternativa, puedes convertirla en una búsqueda agregada de Entity Stats de UDM y agregar los resultados:

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

Búsquedas básicas de campos de entidades de UDM

A continuación, se incluyen ejemplos adicionales del uso de la función Contexto de la entidad en la Búsqueda en Google SecOps, según las fuentes 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"

Cómo generar tablas dinámicas a partir de campos de entidades

Usa los campos de entidades para crear tablas dinámicas y explorar datos relacionados. Estos son algunos ejemplos de campos de segmentación:

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

Información sobre los campos dinámicos

Las fuentes hacen referencia a campos estructurados dinámicos con prefijos, como additional. Puedes buscar estos campos en los eventos de UDM.

Consideraciones sobre el control de acceso

Se impone un límite de 50 eventos en los datos de contexto global y se quitan las referencias a los controles de acceso.

Las siguientes fuentes proporcionan compatibilidad con el contexto global:

  • Navegación segura
  • Relaciones de VirusTotal
  • WHOIS
  • Uppercase
  • IOC de Open Source Intel (OPEN_SOURCE_INTEL_IOC)
  • IoC de Mandiant Active Breach (MANDIANT_ACTIVE_BREACH_IOC)
  • IoC de Mandiant Fusion (MANDIANT_FUSION_IOC)

Limitaciones

  • Límites de volumen: Límite de 1 millón de resultados acumulativos para los datos con y sin marca de tiempo.
  • Datos de contexto global: Hay un límite de 50 filas para los datos de contexto global sensibles, como UPPERCASE_VT_PROTECTED, MANDIANT_ACTIVE_BREACH_IOC, MANDIANT_FUSION_IOC y VIRUS_TOTAL_CONNECTIONS, que se muestran a los usuarios con permiso de acceso a datos globales.
  • Coherencia de los datos: Los datos de Última vez visto pueden tener un retraso de hasta 2 horas. Las entidades relacionadas pueden mostrar solo un subconjunto de las entidades que se enumeran en un evento.
  • Funciones no admitidas:

    • Búsquedas inversas en campos de entidades, búsquedas de campos agrupados, baja prevalencia y mapa de calor.
    • No puedes unir el contexto de la entidad y las consultas de eventos.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.