Utiliser la syntaxe N OF avec des variables d'événement

Compatible avec :

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][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, $e1 ou #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.