Menggunakan pernyataan if bertingkat untuk logika yang lebih kompleks

Didukung di:

Anda dapat menggunakan pernyataan if di bagian outcome dan events. Anda juga dapat menggunakan pernyataan if dalam klausa else then dari pernyataan if lainnya. Kemampuan ini memungkinkan Anda memperkenalkan logika yang lebih rumit ke kueri Anda.

Sintaksis ini didukung di Aturan, Penelusuran, dan Dasbor.

Sintaksis

if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)

Contoh if bertingkat

Contoh penelusuran: bagian hasil

Contoh ini menetapkan skor hasil berdasarkan 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))))

Contoh penelusuran: bagian acara

Contoh ini menetapkan IP placeholder ke target.ip atau principal.ip selama IP tersebut tidak kosong. Jika nilai IP tidak ada, nilai no_valid_ip akan ditetapkan.

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

Contoh aturan: if bertingkat di bagian 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
}

Contoh aturan: if bertingkat di bagian 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
}

Batasan umum

Pernyataan if() adalah fungsi di YARA-L 2.0 dan tunduk pada batas kedalaman fungsi 20.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.