Utiliser la syntaxe N OF avec des variables d'événement
Ce document explique comment utiliser la syntaxe N OF pour écrire une logique flexible et conditionnelle dans la section condition de votre requête.
La syntaxe N OF vous permet de combiner plusieurs conditions, ce qui réduit la complexité globale de la syntaxe de votre requête :
- Permet de spécifier qu'un nombre minimal d'expressions booléennes d'une liste donnée doivent être évaluées comme vraies.
- Cela évite d'avoir à spécifier toutes les combinaisons possibles, ce qui réduit les erreurs et l'effort requis.
Syntaxe N OF
La syntaxe d'une instruction N OF est une liste d'expressions booléennes séparées par une virgule, comme suit :
[expr1, expr2, … , exprN] où [expr1, expr2, … , exprN]
Les sections suivantes présentent quelques variantes de la syntaxe N OF.
N'IMPORTE QUEL
L'exemple suivant vérifie si au moins une expression de la liste est vraie.
Cela revient à joindre toutes les expressions avec or.
condition:
ANY OF [$e1, #e2 > 5, $outcome1 = "FAILED"]
TOUTES LES
Si toutes les expressions de la liste suivante sont vraies, l'exemple est vrai. Cela revient à joindre toutes les expressions avec and.
condition:
ALL OF [$e1, $e2, $outcome1 = "SUCCESS"]
N de X
La valeur est "true" si au moins N expressions de la liste sont "true".
condition:
2 of [$e1, $e2 > 0, $e3, arrays.contains($outcome_ips, "1.2.3.4")]
Exemple de règle : signaler l'accès à des fichiers sensibles
La règle suivante signale un utilisateur s'il se connecte ($e1). Elle vérifie ensuite si la session répond également à l'un des deux critères suivants : un fichier sensible est consulté ($e2) ou le nombre total de fichiers sensibles uniques consultés dépasse 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]
}
Exemple de recherche : signaler l'accès à un fichier sensible
L'exemple suivant montre comment reformater la règle d'exemple en requête de recherche.
$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]
Limitations connues
Existence requise de l'événement : la syntaxe N OF des expressions ne peut pas être illimitée. L'existence de l'événement doit être une condition requise pour que la clause soit vraie (par exemple,
$e1ou#e1 > 0).Mélange des types de variables : vous ne pouvez pas combiner des variables non UDM avec des variables d'événement UDM dans la même liste N OF.
Restriction concernant les fenêtres : vous ne pouvez pas utiliser de fenêtres glissantes avec la syntaxe N OF.
Étape suivante
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.