Utiliser des instructions "if" imbriquées pour une logique plus complexe

Compatible avec :

Vous pouvez utiliser des instructions if dans les sections outcome et events. Vous pouvez également utiliser des instructions if dans les clauses else then d'une autre instruction if. Cette fonctionnalité vous permet d'introduire une logique plus complexe dans votre requête.

Cette syntaxe est acceptée dans les règles, la recherche et les tableaux de bord.

Syntaxe

if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)

Exemples de if imbriqués

Exemple de recherche : section "Résultat"

Cet exemple attribue un score de résultat basé sur principal.hostname.

$nested_if.principal.hostname != ""
outcome:
    $score = max(
        if($nested_if.principal.hostname = /win-adfs/,
           5,
          if($nested_if.principal.hostname = /server/,
             3,
            if($nested_if.principal.hostname = /win-atomic/,
               1,
               0))))

Exemple de recherche : section "Événements"

Cet exemple attribue l'adresse IP de l'espace réservé à target.ip ou principal.ip, à condition qu'elles ne soient pas vides. Si les valeurs IP sont manquantes, il attribue no_valid_ip.

events:
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $ip = if($e.target.ip != "",
            $e.target.ip,
            if($e.principal.ip != "",
              $e.principal.ip,
              "no_valid_ip"))
match:
   $ip

Exemple de règle : if imbriqué dans la section outcome

rule nested_if_outcome_example {
meta:

events:
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $e.principal.ip = $ip
match:
   $ip over 5m
outcome:
    $score = max(
        if($e.principal.hostname = /win-adfs/,
           5,
          if($e.principal.hostname = /server/,
             3,
            if($e.principal.hostname = /win-atomic/,
               1,
               0))))
  condition:
    $e
}

Exemple de règle : if imbriqué dans la section events

rule nested_if_events_example {

meta:

events:
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $ip = if($e.target.ip != "",
            $e.target.ip,
            if($e.principal.ip != "",
              $e.principal.ip,
              "no_valid_ip"))
match:
   $ip over 5m

  condition:
    $e
}

Limitation connue

L'instruction if() est une fonction de YARA-L 2.0 et est soumise à la limite de profondeur de fonction de 20.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.