Cómo usar combinaciones en la Búsqueda

Compatible con:

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 de SearchService.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.