Usar instruções "if" aninhadas para uma lógica mais complexa

Compatível com:

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.