Usar instruções "if" aninhadas para uma lógica mais complexa
Você pode usar instruções if nas seções outcome e events. Também é possível usar instruções if nas cláusulas then else de outra instrução if. Com esse recurso, é possível
introduzir uma lógica mais complicada na consulta.
Essa sintaxe é compatível com regras, pesquisa e dashboards.
Sintaxe
if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)
Exemplos de if aninhados
Exemplo de pesquisa: seção de resultados
Este exemplo atribui uma pontuação de resultado com base em 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))))
Exemplo de pesquisa: seção de eventos
Este exemplo atribui o IP do marcador de posição a target.ip ou principal.ip, desde que não estejam vazios. Se os valores de IP estiverem faltando, ele vai atribuir 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
Exemplo de regra: if aninhado na seção 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
}
Exemplo de regra: if aninhado na seção 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
}
Limitação conhecida
A instrução if() é uma função na YARA-L 2.0 e está sujeita ao limite de profundidade de função de 20.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.