Usa sentencias if anidadas para una lógica más compleja
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.