Sintaxis de la sección de coincidencias

Se admite en los siguientes sistemas operativos:

La sección match proporciona los parámetros necesarios para correlacionar varios eventos relacionados en una sola detección. Solo se requiere para las reglas que vinculan dos o más eventos distintos. Úsalo para definir los criterios de esta correlación especificando lo siguiente:

  • Campos de agrupación (claves): Son los campos específicos de los eventos (definidos en la sección events) que deben compartir el mismo valor para que los eventos se vinculen de forma lógica.

  • Restricción de tiempo: Es el período continuo dentro del cual deben ocurrir los eventos relacionados para constituir una sola coincidencia completa. Esto solo es necesario para las reglas y no para la Búsqueda ni los paneles.

Define la sección de coincidencias

Las reglas requieren que las variables de coincidencia sean marcadores de posición definidos en la sección event. También puedes especificar campos event en Search y Dashboards.

Usa las variables de marcador de posición definidas en la sección events para especificar el período dentro del cual deben ocurrir los eventos. Los eventos coincidentes que ocurran fuera del período especificado se ignorarán para ese grupo de detección en particular.

Usa la palabra clave over y la sintaxis <number><m/h/d> (en la que m/h/d son minutos, horas y días) para especificar el período. Puedes especificar un mínimo de un minuto y un máximo de 48 horas.

Esta regla de ejemplo detecta los inicios de sesión fallidos que ocurren en un período de 10 minutos. La correlación de varios intentos de acceso fallidos en un período corto suele indicar un intento de acceso no autorizado o de fuerza bruta.

rule failed_logins
{
  meta:
   author = "Security Team"
   description = "Detects multiple failed user logins within 10-minute windows."
   severity = "HIGH"

  events:
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"
   $user = $e.target.user.userid

  match:
   $user over 10m

  condition:
    #e >= 5
}

La sección match encuentra a los usuarios que no pudieron acceder desde una ubicación nueva en un intervalo de 10 minutos:

match:
   $user over 10m

Valores cero en la sección de coincidencias

Google SecOps filtra de forma implícita los valores cero para todos los marcadores de posición que se usan en la sección match ("" para cadenas, 0 para números, false para booleanos y el valor en la posición 0 para los tipos enumerados).

Ejemplo: Filtra los valores cero

En el siguiente ejemplo, se ilustran las consultas que filtran los valores cero.

rule ZeroValuePlaceholderExample {
  meta:
  events:
    // Because $host is used in the match section, the query behaves
    // as if the following predicate was added to the events section:
    // $host != ""
    $host = $e.principal.hostname

    // Because $otherPlaceholder was not used in the match,
    // there is no implicit filtering of zero values for $otherPlaceholder.
    $otherPlaceholder = $e.principal.ip

  match:
    $host over 5m

  condition:
    $e
}

Sin embargo, si se asigna un marcador de posición a una función, las búsquedas no filtran de forma implícita los valores cero de los marcadores de posición que se usan en la sección match.

Para inhabilitar el filtrado implícito de valores cero, puedes usar la opción allow_zero_values en la sección de opciones. La opción allow_zero_values solo está disponible en Rules.

Ejemplo: Permite valores cero

En el siguiente ejemplo, se ilustran las consultas que no filtran de forma implícita los valores cero de los marcadores de posición que se usan en la sección match:

rule ZeroValueFunctionPlaceholder {
  meta:
  events:
    // Even though $ph is used in the match section, there is no
    // implicit filtering of zero values for $ph, because $ph is assigned to a function.
    $ph = re.capture($e.principal.hostname, "some-regex")

  match:
    $ph over 5m

  condition:
    $e
}

Períodos admitidos

Puedes agrupar los campos y marcadores de posición de eventos en la sección match según una granularidad temporal especificada con una de las siguientes ventanas admitidas.

  • Ventanas de salto (ventanas superpuestas)
  • Ventanas de saltos de tamaño constante (ventanas no superpuestas)
  • Ventanas deslizantes (ventanas generadas por pivotes)

Ventanas de salto

Una ventana de salto es un tipo de consulta de varios eventos que agrupa los eventos que coinciden con los criterios de una consulta dentro de un período especificado, independientemente del orden en que ocurren. De forma predeterminada, las consultas de YARA-L con una sección match usan ventanas de salto para correlacionar varios eventos a lo largo del tiempo. El período de la ejecución de la consulta se divide en un conjunto de ventanas de salto superpuestas, cada una con la duración especificada en la sección match. Luego, los eventos se correlacionan dentro de cada ventana de salto.

Por ejemplo, para una búsqueda que se ejecuta en el período [1:00, 2:00], con una sección match sobre 30m, un posible conjunto de ventanas de salto superpuestas que se podrían generar es [1:00, 1:30], [1:03, 1:33] y [1:06, 1:36]. Estas ventanas se usan para correlacionar varios eventos.

Ventanas de saltos de tamaño constante

Una ventana de saltos de tamaño constante segmenta un flujo de datos en intervalos de tiempo continuos, sin superposición y de tamaño fijo. Cada evento de datos se asigna a una sola ventana. Esto contrasta con una ventana deslizante o de salto, que puede tener intervalos de tiempo superpuestos.

Por ejemplo, con una ventana deslizante de 30 minutos, los eventos que ocurren entre la 1:00:00 y la 1:29:59 se procesan juntos. Luego, se procesa por separado el siguiente conjunto de eventos, desde las 1:30:00 hasta las 1:59:59.

Ventanas deslizantes

Cuando necesitas buscar eventos que ocurren en un orden relativo específico (por ejemplo, e1 ocurre hasta dos minutos después de e2), las ventanas deslizantes son muy eficaces. Las ventanas deslizantes se generan cuando una restricción de tiempo comienza o finaliza con una variable de evento pivote especificada. Esto hace un seguimiento dinámico de la secuencia y el tiempo de los eventos en relación con esa variable de evento pivote específica.

Luego, se correlacionan los eventos dentro de cada ventana deslizante. Esto permite buscar eventos que ocurren en un orden específico (por ejemplo, e1 ocurre dentro de los 2 minutos posteriores a e2). Una ocurrencia del evento e1 y una ocurrencia del evento e2 se correlacionan si el evento e1 ocurre dentro de la duración de la ventana deslizante después del evento e2.

  • Las ventanas deslizantes se basan en la variable del evento pivote (pivot-event-var).
  • Usa la palabra clave before para generar ventanas deslizantes que finalicen con cada ocurrencia del evento pivote.
  • Usa la palabra clave after para generar ventanas deslizantes que comiencen con cada ocurrencia del evento pivote.

Especifica ventanas deslizantes en la sección match de una consulta de la siguiente manera:

<match-var-1>, <match-var-2>, ... over <duration> before|after <pivot-event-var>

En los siguientes ejemplos, se muestran ventanas deslizantes válidas:

$var1, $var2 over 5m after $e1

$user over 1h before $e2

Notas:

  • Ejemplo adicional de ventana deslizante.
  • Se sabe que el uso de ventanas deslizantes en lugar de ventanas de salto genera un rendimiento más lento. Recomendamos usar ventanas deslizantes solo en casos específicos, como cuando el orden de los eventos es absolutamente necesario o cuando se busca la no existencia de eventos.

  • Dado que las ventanas deslizantes están diseñadas para detectar varios eventos, te recomendamos que no las uses para consultas de un solo evento. En su lugar, usa una de las siguientes soluciones alternativas:

    • Convierte la consulta para que use varias variables de eventos y actualiza la sección de condiciones si la consulta requiere más de una ocurrencia del evento.
    • Opcionalmente, considera agregar filtros de marcas de tiempo en lugar de usar una ventana deslizante. Por ejemplo: $permission_change.metadata.event_timestamp.seconds < $file_creation.metadata.event_timestamp.seconds.
    • Quita la ventana deslizante.

¿Qué sigue?

Información adicional

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.