Utilizzare istruzioni if nidificate per una logica più complessa

Supportato in:

Puoi utilizzare le istruzioni if nelle sezioni outcome e events. Puoi anche utilizzare le istruzioni if all'interno delle clausole then else di un'altra istruzione if. Questa funzionalità ti consente di introdurre una logica più complessa nella tua query.

Questa sintassi è supportata in Regole, Ricerca e Dashboard.

Sintassi

if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)

Esempi di if nidificati

Esempio di ricerca: sezione dei risultati

Questo esempio assegna un punteggio del risultato in base a 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))))

Esempio di ricerca: sezione degli eventi

Questo esempio assegna l'IP segnaposto a target.ip o principal.ip, purché non siano vuoti. Se i valori IP non sono presenti, viene assegnato 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

Esempio di regola: if nidificato nella sezione 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
}

Esempio di regola: if nidificato nella sezione 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
}

Limitazione nota

L'istruzione if() è una funzione in YARA-L 2.0 ed è soggetta al limite di profondità delle funzioni di 20.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.