Usar instrucciones if anidadas para una lógica más compleja

Disponible en:

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

Esta sintaxis se admite en reglas, búsquedas y paneles de control.

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 basada en 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 de marcador de posición a target.ip o principal.ip siempre que 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 instrucción if() es una función de YARA-L 2.0 y está sujeta al límite de profundidad de las funciones, que es de 20.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.