Cómo usar combinaciones en la Búsqueda
Las uniones ayudan a correlacionar datos de múltiples fuentes para proporcionar más contexto a una investigación. Al vincular eventos, entidades y otros datos relacionados, puedes investigar situaciones de ataque complejas.
En este documento, se explica cómo usar la operación de unión en Google Security Operations. También abarca los tipos de unión admitidos, los casos de uso y las prácticas recomendadas.
Cómo crear una unión
Solo se admiten las uniones basadas en estadísticas. Debes definirlos en la sección de coincidencias de una búsqueda con un período de correlación de hasta 48 horas.
Puedes crear una unión conectando campos directamente (por ejemplo, $e1.hostname = $e2.hostname
) o usando variables de marcador de posición. Cuando defines una unión en la sección match
, debes usar variables de marcador de posición.
En el siguiente ejemplo de consulta, se unen 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 unión admitidos
En esta sección, se describen los diferentes tipos de uniones que puedes usar.
Combinación de evento a evento
Una unión de evento a evento conecta dos eventos diferentes del modelo de datos unificado (UDM).
La siguiente consulta de ejemplo vincula un evento USER_LOGIN
con otro evento para encontrar el nombre de host (altostrat
) con el que interactuó el usuario, según 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
Unión de ECG y evento
Una unión de Evento-ECG conecta un evento del UDM con una entidad del gráfico de contexto de la entidad (ECG). En el siguiente ejemplo de consulta, se buscan un evento NETWORK_CONNECTION
y un ASSET
del gráfico de entidades que comparten el mismo nombre de host en un período 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 del UDM con las entradas de una tabla de datos personalizada.
Esto es útil para verificar los datos de eventos en vivo en comparación con una lista definida por el usuario, como direcciones IP maliciosas conocidas o agentes de amenazas. En el siguiente ejemplo de consulta, se unen los eventos NETWORK_CONNECTION
con una tabla de datos para encontrar conexiones que involucran 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 hacer que las consultas fallen, a veces después de una larga demora, por ejemplo:
target.ip != null
metadata.event_type = "NETWORK_CONNECTION"
(si este tipo de evento es muy común en tu entorno)
Te recomendamos que combines filtros generales con otros más específicos para reducir la cantidad 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 búsqueda, 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 período 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 cuando se usan uniones:
Puedes usar un máximo de dos eventos de UDM por búsqueda.
Puedes usar un máximo de un evento de ECG por búsqueda.
Puedes usar un máximo de dos tablas de datos por consulta.
No puedes unir eventos de tablas de datos, UDM y ECG en una sola consulta.
El período máximo de la consulta es de 90 días.
El período máximo de
match
es de 48 horas.Las uniones son compatibles con la interfaz de usuario y la API de
EventService.UDMSearch
, pero no con la API deSearchService.UDMSearch
.
Casos de uso habituales
En esta sección, se enumeran algunas formas comunes de usar las uniones.
Detectar el robo y el uso de credenciales
Objetivo: Encontrar instancias en las que un usuario accede correctamente y, luego, borra rápidamente un archivo crítico del sistema. Esto podría sugerir una usurpación de cuenta o actividad maliciosa de un usuario interno.
Tipo de combinación: Combinación de evento a evento
Descripción: Esta búsqueda conecta dos eventos distintos que no son sospechosos por sí solos, pero se vuelven muy sospechosos cuando ocurren juntos. Primero, busca un evento USER_LOGIN
y, luego, un evento FILE_DELETION
. Estos se unen con el user.userid
común en un período 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
Identifica las conexiones riesgosas de los recursos críticos
Objetivo: Enriquecer los datos de la red en tiempo real con información de los activos 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 podría no ser una prioridad alta. Sin embargo, esta búsqueda aumenta la importancia de ese evento uniéndolo al gráfico de contexto de entidades (ECG). En particular, busca eventos NETWORK_CONNECTION
que provienen 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
Busca IOCs de agentes de amenazas
Objetivo: Buscar de forma activa indicadores de compromiso (IoC) verificando todas las consultas de DNS activas en una lista de dominios conocidos por ser utilizados por un actor de amenazas específico.
Tipo de unión: Unión de tabla de datos y evento
Descripción: Tu equipo de inteligencia sobre amenazas mantiene una tabla de datos llamada ThreatActor_Domains
que enumera los dominios maliciosos. Esta consulta une todos los eventos NETWORK_DNS_QUERY
en tiempo real con esta tabla de datos. Muestra de inmediato cualquier instancia en la que un host de tu red intente resolver un dominio de tu lista de inteligencia sobre 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? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.