Realiza búsquedas de contexto de entidades

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 que los usuarios busquen y vean eventos de contexto relacionados con entidades en 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 de UDM, incluido el contexto de las entidades de 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 causa raíz, la búsqueda de amenazas y el análisis forense.
  • Los usuarios pueden ejecutar 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 de tus resultados de la búsqueda de las siguientes maneras:

  • Busca con los nombres de los campos de la entidad de UDM: Crea tus búsquedas con los nombres de los campos de la entidad de UDM. Por ejemplo, para encontrar todos los eventos de contexto asociados con 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 de alto nivel de las entidades que se encuentran en tu búsqueda, lo que aprovecha la información de la consulta 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 Entity: En la pestaña Entity, se enumeran todos los eventos de contexto de entidad recibidos, incluidos los subcomponentes, como Trend Over Time, Snapshot Filter, Aggregations y Events. Las entidades se clasifican en entidades temporales y atemporales, que se muestran en pestañas separadas.
  • Ver agregaciones: Se muestran las agregaciones para los campos, de forma similar a la búsqueda de eventos de UDM. Las agregaciones se clasifican, además, en tipos de contexto: contexto de entidad, contexto derivado y contexto global.

Interfaz de resultados de la búsqueda de Entity Context Graph

La interfaz de resultados de la búsqueda del Gráfico de contexto de entidades (ECG) proporciona varias pestañas para ayudarte a analizar los datos de contexto de las entidades:

  • Pestaña Resultados: Muestra Timed Data y Timeless Data.

    • Datos con marca de tiempo: Muestra las entidades que tenían un valor para metadata.interval.end_time durante la transferencia.
    • Datos atemporales: Muestra las entidades que no tenían valor para metadata.interval.end_time.

    La interfaz muestra entidades con o sin tiempo, hasta la cantidad máxima de resultados configurada.

  • Pestaña Alertas: Muestra las alertas asociadas con las entidades que se encontraron en la búsqueda.

  • Pestaña Resumen: Presenta información sobre la entidad en la búsqueda.

  • Gráfico de actividad a lo largo del tiempo:

    • Muestra la cantidad de entidades y el contexto de la entidad que son válidos dentro de cada bucket de tiempo. Puedes usar el control deslizante para acercar o alejar el período.

    • Total de entidades modificadas: El grafo de contexto de entidades (ECG) almacena datos en buckets de tiempo dentro de su período de validez. También copia estos datos en el siguiente bucket de tiempo, siempre que la entidad siga siendo válida (según end_time). Este grafo se actualiza cada vez que cambia una propiedad de entidad entre dos buckets de tiempo.

Caso de uso: Investiga una cuenta de usuario vulnerada

Considera la siguiente situación: un analista de seguridad debe investigar una cuenta de usuario potencialmente comprometida (email@company.com). Sigue estos pasos para investigar:

  1. Identifica al usuario comprometido: Una alerta marca al usuario email@company.com como una cuenta sospechosa.

  2. Recopilar información de 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 Resumen: En la pestaña Resumen, se muestra el resumen de la entidad para el usuario, lo que incluye lo siguiente:

    • Verifica las marcas de tiempo 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. Agregadores de opiniones: Identifica patrones y anomalías en los datos de contexto de la entidad, distribuidos en Contexto de la entidad, Contexto derivado y Contexto global.

Para buscar datos de contexto de entidades, usa los nombres de los campos de entidad de 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 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 recursos, Mail_id para usuarios, File_name para hashes/archivos, y Domain_name y IP_address para dominios.

Ejemplos de contexto de la entidad en la búsqueda

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

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

Debido a que la búsqueda de entidades de UDM usa la interfaz estándar de búsqueda de UDM, puedes usar funciones, como el panel Agregaciones (para ver los valores superiores o inferiores), la tabla de resultados y los resultados expandidos de las estadísticas de UDM.

Ejemplo: Ver ENTITY_TYPE distintos

Para expandir la búsqueda de entidades de UDM, puedes incluir la fuente de registro, el espacio de nombres y un array de resultados para mostrar los ENTITY_TYPE 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: Define mejor tu conjunto de entidades

Puedes definir mejor un conjunto específico de entidades con la función de tabla dinámica de la búsqueda de UDM. 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 de 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 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 las entidades con las marcas de tiempo first_seen y last_seen:

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

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

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)

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)

Archivo (hashes) observado 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)

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

Los ENTITY_TYPES derivados de IP_ADDRESS pueden representar entidades internas o externas.

La siguiente búsqueda de estadísticas de entidades de UDM identifica las IP_ADDRESSES observadas recientemente y usa funciones de agregación (en la sección de resultados) para contarlas por bloque 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 entidad 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 de 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 consulta (day_max = 1), y como máximo un recurso distinto durante los 10 días anteriores (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 convertir esto en una búsqueda de estadísticas de entidades de UDM agregadas 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 muestran ejemplos adicionales de cómo usar 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 dinamizar desde los campos de entidad

Usa campos de entidades para dinamizar y explorar datos relacionados. Estos son algunos ejemplos de campos dinámicos:

  • 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

El sistema impone un límite de 50 eventos en los datos de contexto globales. Tanto los usuarios globales como los de alcance pueden ver los datos.

Las siguientes fuentes proporcionan datos de contexto globales:

Datos de contexto globales Dónde un usuario puede ver estos datos o interactuar con ellos Quién puede verla
Navegación segura - Search
- Reglas
Todos los usuarios
Relaciones de VirusTotal - Search
- Reglas
Todos los usuarios
WHOIS - Search
- Reglas
Todos los usuarios
Uppercase - Search
- Reglas
Todos los usuarios
IOC de inteligencia de código abierto (OPEN_SOURCE_INTEL_IOC) - Search
- Reglas
Todos los usuarios
IoC de Mandiant Fusion (MANDIANT_FUSION_IOC) - Búsqueda
- Reglas
- Amenazas emergentes
Todos los usuarios

Limitaciones

  • Límites de volumen: Límite de 1 millón de resultados acumulados para datos con y sin tiempo.
  • Datos de contexto globales: Hay un límite de 50 filas para los datos de contexto globales sensibles, como UPPERCASE_VT_PROTECTED, MANDIANT_FUSION_IOC y VIRUS_TOTAL_CONNECTIONS.
  • Coherencia de los datos: Los datos vistos por última vez pueden tener un retraso de hasta 2 horas. Las entidades relacionadas solo pueden mostrar un subconjunto de las entidades que se indican 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.