Usa sentencias if anidadas para una lógica más compleja

Se admite en los siguientes sistemas operativos:

Puedes usar instrucciones if en las secciones outcome y events. También puedes usar declaraciones if dentro de las cláusulas then else de otra declaración if. Esta capacidad te permite introducir una lógica más complicada en tu consulta.

Esta sintaxis se admite en las reglas, la búsqueda y los paneles.

Sintaxis

if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)

Ejemplos de if anidados

Ejemplo de búsqueda: sección de resultados

En este ejemplo, se asigna una puntuación de resultado en función de 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))))

Ejemplo de búsqueda: sección de eventos

En este ejemplo, se asigna la IP del marcador de posición a target.ip o principal.ip, siempre y cuando no estén vacíos. Si faltan los valores de IP, se asigna 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

Ejemplo de regla: if anidado en la sección 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
}

Ejemplo de regla: if anidado en la sección 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
}

Limitación conocida

La sentencia if() es una función en YARA-L 2.0 y está sujeta al límite de profundidad de la función de 20.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.