Usar la sintaxis N DE con variables de evento

Disponible en:

En este documento se explica cómo usar la sintaxis N OF para escribir lógica flexible y condicional en la sección condition de tu consulta.

La sintaxis N OF te permite combinar varias condiciones, lo que reduce la complejidad general de la sintaxis de tu consulta:

  • Proporciona una forma de especificar que un número mínimo de expresiones booleanas de una lista determinada debe evaluarse como true.
  • Evita tener que especificar todas las combinaciones posibles, lo que reduce los errores y el esfuerzo.

Sintaxis N OF

La sintaxis de una instrucción N OF es una lista separada por comas de expresiones booleanas que se expresa de la siguiente manera:

[expr1, expr2, … , exprN] donde [expr1, expr2, … , exprN]

En las siguientes secciones se muestran algunas variaciones de la sintaxis N OF.

CUALQUIERA DE

En el siguiente ejemplo se comprueba si al menos una expresión de la lista es verdadera. Es lo mismo que unir todas las expresiones con or.

condition:
  ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]

TODOS LOS

Si todas las expresiones de la siguiente lista son verdaderas, el ejemplo es verdadero. Es lo mismo que unir todas las expresiones con and.

condition:
  ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]

N de X

Se evalúa como true si al menos N expresiones de la lista son verdaderas.

condition:
  2 of [$e1, $e2 > 0, $e3, arrays.contains($outcome_ips, "1.2.3.4")]

Regla de ejemplo: marcar el acceso a archivos sensibles

La siguiente regla marca a un usuario si inicia sesión correctamente ($e1). A continuación, la regla comprueba si la sesión también cumple uno de estos dos criterios: se accede a un archivo sensible ($e2) o el número total de archivos sensibles únicos a los que se accede supera 3.

rule MultiEventNOf {
  meta:
    author = "google-secops"
    description = "Detects user login followed by sensitive file access or multiple sensitive files."
  events:
    $e1.principal.user.userid = $user
    $e1.metadata.event_type = "USER_LOGIN"

    $e2.principal.user.userid = $user
    $e2.metadata.event_type = "FILE_OPEN"
    re.regex($e2.target.file.full_path, `^/cns/sensitive/`)

  match:
    $user over 1h
  outcome:
    $sensitive_file_count = count_distinct($e2.target.file.full_path)
  condition:
    $e1 and ANY OF [$e2, $sensitive_file_count > 3]
  }

Ejemplo de búsqueda: marcar acceso a archivos sensibles

En el siguiente ejemplo se muestra cómo se podría reformatear la regla de ejemplo como una consulta de búsqueda.

$e1.principal.user.userid = $user
$e1.metadata.event_type = "USER_LOGIN"
$e2.principal.user.userid = $user
$e2.metadata.event_type = "FILE_OPEN"
re.regex($e2.target.file.full_path, `^/cns/sensitive/`)

match:
  $user over 1h
outcome:
  $sensitive_file_count = count_distinct($e2.target.file.full_path)
condition:
  $e1 and ANY OF [$e2, $sensitive_file_count > 3]

Limitaciones conocidas

  • Existencia de eventos obligatoria: las expresiones de sintaxis N OF no pueden ser ilimitadas. La existencia del evento debe ser un requisito para que la cláusula sea verdadera (por ejemplo, $e1 o #e1 > 0).

  • Mezcla de tipos de variables: no puedes combinar variables que no sean de UDM con variables de evento de UDM en la misma lista N OF.

  • Restricción de ventana: no puedes usar ventanas de tumbling con la sintaxis N OF.

Siguientes pasos

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.