Usar la sintaxis N DE con variables de evento
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,
$e1o#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.