Usar combinaciones en la Búsqueda
Las combinaciones ayudan a correlacionar datos de varias fuentes para proporcionar más contexto a una investigación. Al vincular eventos, entidades y otros datos relacionados, puedes investigar escenarios de ataque complejos.
En este documento se explica cómo usar la operación de unión en Google Security Operations. También se explican los tipos de combinaciones admitidos, los casos prácticos y las prácticas recomendadas.
Crear una combinación
Solo se admiten las combinaciones basadas en estadísticas. Debes definirlos en la sección match de una consulta con una ventana temporal de correlación de hasta 48 horas.
Puedes crear una combinación conectando campos directamente (por ejemplo, $e1.hostname = $e2.hostname
) o usando variables de marcador de posición. Cuando definas una combinación en la sección match
, debes usar variables de marcador de posición.
En el siguiente ejemplo, la consulta une dos campos con un signo igual (=
) y una variable de marcador de posición compartida:
Ejemplo 1:
events:
// Assign a value from the first event to the placeholder variable $user
$user = $e1.principal.user.userid
// The second assignment creates an implicit join, linking $e2 to $e1
// where the user ID is the same.
$user = $e2.principal.user.userid
match:
$user over 1h
condition:
$e1 and $e2
Ejemplo 2:
$e1.principal.ip = $ip
$e1.metadata.event_type = "USER_LOGIN"
$e1.principal.hostname = $host
$e2.target.ip = $ip
$e2.principal.hostname = "altostrat"
$e2.target.hostname = $host
match:
$ip, $host over 5m
Tipos de combinación admitidos
En esta sección se describen los distintos tipos de uniones que puede usar.
Combinación de eventos
Una unión de eventos conecta dos eventos diferentes del modelo de datos unificado (UDM).
La siguiente consulta de ejemplo vincula un evento USER_LOGIN
con otro para buscar el nombre de host (altostrat
) con el que ha interactuado el usuario, basándose en una dirección IP común:
$e1.principal.ip = $ip
$e1.metadata.event_type = "USER_LOGIN"
$e2.target.ip = $ip
$e2.principal.hostname = "altostrat"
match:
$ip over 5m
Event-ECG join
Una unión de Event-ECG conecta un evento de UDM con una entidad del gráfico de contexto de entidad (ECG). La siguiente consulta de ejemplo busca un evento NETWORK_CONNECTION
y un ASSET
del gráfico de entidades que comparten el mismo nombre de host en un periodo de 1 hora:
events:
$e1.metadata.event_type = "NETWORK_CONNECTION"
$g1.graph.metadata.entity_type = "ASSET"
$e1.principal.asset.hostname = $g1.graph.entity.asset.hostname
$x = $g1.graph.entity.asset.hostname
match:
$x over 1h
condition:
$e1 and $g1
Unión de eventos de tabla de datos
Una unión de evento de tabla de datos conecta los eventos de UDM con las entradas de una tabla de datos personalizada.
Esto resulta útil para comparar datos de eventos en directo con una lista definida por el usuario, como direcciones IP maliciosas o agentes de amenazas conocidos. La siguiente consulta de ejemplo
combina eventos NETWORK_CONNECTION
con una tabla de datos para buscar conexiones que incluyan
direcciones IP específicas de esa lista:
$ip = %DATATABLE_NAME.COLUMN_NAME
$ip = $e1.principal.ip
$e1.metadata.event_type = "NETWORK_CONNECTION"
match:
$ip over 1h
Prácticas recomendadas
Las consultas de unión pueden consumir muchos recursos porque combinan muchos resultados. Los filtros amplios y generales pueden provocar que las consultas fallen, a veces después de un largo retraso. Por ejemplo:
target.ip != null
metadata.event_type = "NETWORK_CONNECTION"
(si este tipo de evento es muy habitual en tu entorno)
Te recomendamos que combines filtros generales con otros más específicos para reducir el número total de eventos que debe procesar la consulta. Un filtro amplio como
target.ip != null
debe combinarse con filtros más específicos para mejorar el rendimiento de la consulta. Por ejemplo:
$e1.metadata.log_type = $log
$e1.metadata.event_type = "USER_LOGIN"
$e1.target.ip != ""
$e2.metadata.log_type = $log
$e2.principal.ip = "10.0.0.76"
$e2.target.hostname != "altostrat"
match:
$log over 5m
Si la consulta sigue siendo lenta, también puedes reducir el periodo general de la consulta (por ejemplo, de 30 días a una semana).
Para obtener más información, consulta las prácticas recomendadas de YARA-L.
Limitaciones
Se aplican las siguientes limitaciones al usar combinaciones:
Puedes usar un máximo de dos eventos de datos de usuario por consulta.
Puedes usar un máximo de un evento de ECG por consulta.
Puedes usar un máximo de dos Datatables por consulta.
No puedes combinar eventos de tabla de datos, UDM y ECG en una sola consulta.
El intervalo de tiempo máximo de las consultas es de 90 días.
La ventana temporal máxima de
match
es de 48 horas.Las combinaciones se admiten en la interfaz de usuario y en la API
EventService.UDMSearch
, pero no en la APISearchService.UDMSearch
.
Casos prácticos habituales
En esta sección se indican algunas formas habituales de usar las combinaciones.
Detectar el robo y el uso de credenciales
Objetivo: encontrar instancias en las que un usuario inicia sesión correctamente y, a continuación, elimina rápidamente un archivo de sistema crítico. Esto podría indicar que se ha tomado el control de una cuenta o que se ha producido una actividad interna malintencionada.
Tipo de unión: unión de evento a evento
Descripción: esta consulta conecta dos eventos distintos que no son sospechosos por sí solos, pero que se vuelven muy sospechosos cuando ocurren juntos. Primero busca un evento USER_LOGIN
y, después, un evento FILE_DELETION
. A estos se une el user.userid
común con una ventana de tiempo breve.
Consulta de ejemplo:
// Event 1: A user successfully logs in
$e1.metadata.event_type = "USER_LOGIN"
$e1.security_result.action = "ALLOW"
$e1.principal.user.userid = $user
// Event 2: The same user deletes a critical file
$e2.metadata.event_type = "FILE_DELETION"
$e2.target.file.full_path = /etc\/passwd|C:\\Windows\\System32\\/
$e2.principal.user.userid = $user
match:
$user over 10m
condition:
$e1 and $e2
Identificar conexiones arriesgadas desde recursos críticos
Objetivo: enriquecer los datos de la red en tiempo real con información de los recursos para encontrar conexiones salientes de servidores que no deberían comunicarse con dominios externos de baja prevalencia (por ejemplo, un servidor de base de datos de producción).
Tipo de unión: unión de evento y ECG
Descripción: Una sola conexión de red a un dominio poco común puede no ser de alta prioridad. Sin embargo, esta consulta aumenta la importancia de ese evento al combinarlo con el gráfico de contexto de entidad (ECG). Busca específicamente eventos NETWORK_CONNECTION
que procedan de recursos etiquetados como "Servidor de base de datos crítico" en el gráfico de entidades.
Consulta de ejemplo:
events:
$e.metadata.event_type = "NETWORK_CONNECTION"
$e.target.domain.prevalence.day_count <= 5
$asset.graph.metadata.entity_type = "ASSET"
$asset.graph.entity.asset.labels.value = "Critical Database Server"
$e.principal.asset.hostname = $asset.graph.entity.asset.hostname
$host = $e.principal.asset.hostname
match:
$host over 1h
condition:
$e and $asset
Buscar IOCs de atacantes
Objetivo: buscar activamente indicadores de vulneración (IoCs) comprobando todas las consultas de DNS activas en una lista de dominios que se sabe que utiliza un agente de amenazas específico.
Tipo de combinación: combinación de tabla de datos y evento
Descripción: tu equipo de inteligencia sobre amenazas mantiene una tabla de datos llamada ThreatActor_Domains
que incluye una lista de dominios maliciosos. Esta consulta combina todos los eventos NETWORK_DNS_QUERY
en tiempo real con esta tabla de datos. Muestra inmediatamente cualquier instancia en la que un host de tu red intente resolver un dominio de tu lista de inteligencia de amenazas.
Consulta de ejemplo:
// Datatable: Get the list of malicious domains
$domain = $ip = %DATATABLE_NAME.COLUMN_NAME
// Event: A DNS query is made
$e.metadata.event_type = "NETWORK_DNS"
$e.network.dns.questions.name = $domain
match:
$domain over 5m
condition:
$e
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.