Cómo usar la sintaxis N OF con variables de eventos
En este documento, se explica cómo usar la sintaxis N OF para escribir lógica flexible y condicional dentro de la sección condition de tu búsqueda.
La sintaxis N OF te permite combinar varias condiciones, lo que reduce la complejidad general de la sintaxis de tu búsqueda:
- Proporciona una forma de especificar que una cantidad mínima de expresiones booleanas de una lista determinada deben evaluarse como verdaderas.
- Evita la necesidad de especificar cada combinación posible, lo que reduce los errores y el esfuerzo.
Sintaxis de N OF
La sintaxis de una sentencia N OF es una lista separada por comas de expresiones booleanas que se expresan de la siguiente manera:
[expr1, expr2, … , exprN] donde [expr1, expr2, … , exprN]
En las siguientes secciones, se muestran algunas variaciones de la sintaxis de N OF.
CUALQUIERA DE LOS SIGUIENTES
En el siguiente ejemplo, se verifica si al menos una expresión de la lista es verdadera.
Esto es lo mismo que unir todas las expresiones con or.
condition:
ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]
TODOS LOS SIGUIENTES
Si todas las expresiones de la siguiente lista son verdaderas, el ejemplo es verdadero. Esto es lo mismo que unir todas las expresiones con and.
condition:
ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]
N de X
Se evalúa como verdadero 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 accede correctamente ($e1). Luego, la regla verifica si la sesión también cumple con uno de los dos criterios: se accede a un archivo sensible ($e2) o la cantidad 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 el acceso a archivos sensibles
En el siguiente ejemplo, se muestra cómo podrías reformatear la regla de ejemplo como una 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 N OF de la sintaxis no pueden ser ilimitadas. La existencia del evento debe ser un requisito para que la cláusula sea verdadera (por ejemplo,
$e1o#e1 > 0).Combinación de tipos de variables: No puedes combinar variables que no son del UDM con variables de eventos del UDM en la misma lista de N OF.
Restricción de ventanas: No puedes usar ventanas deslizantes con la sintaxis N OF.
Próximos pasos
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.