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