Realiza una búsqueda de datos de contexto de la entidad
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.
Usa el contexto de la entidad en la búsqueda
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
yRESOURCE
. - 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:
Identifica al usuario cuya cuenta se vio comprometida: Una alerta indica que se identificó la cuenta de usuario email@company.com como sospechosa.
Recopila información del contexto de la entidad: Obtén datos contextuales sobre el usuario para comprender el alcance y el impacto.
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
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
yLast Seen Hour
.
- Verifica las marcas de tiempo de
- 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.
Examina la pestaña Eventos: Consulta los eventos asociados a este usuario, incluidos los intentos de acceso y las anomalías.
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.
Ejemplos de búsqueda
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, yDomain_name
yIP_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.
Búsqueda de estadísticas de entidades de UDM
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_TYPE
s 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
ylast_seen
para cadaENTITY_TYPE
Prevalence
: Es la cantidad de recursos que accedieron a unENTITY_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.