使用巢狀 if 陳述式處理更複雜的邏輯

支援的國家/地區:

您可以在 outcomeevents 區段中使用 if 陳述式。您也可以在另一個 if 陳述式的 then else 子句中使用 if 陳述式。這項功能可讓您在查詢中導入更複雜的邏輯。

規則、搜尋和資訊主頁都支援這個語法。

語法

if(BOOL_CLAUSE, THEN_CLAUSE, ELSE_CLAUSE)

巢狀 if 範例

搜尋範例:結果部分

這個範例會根據 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))))

搜尋範例:活動部分

這個範例會將預留位置 IP 指派給 target.ipprincipal.ip,只要這些預留位置不是空白即可。如果缺少 IP 值,系統會指派 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

規則範例:outcome 區段中的巢狀 if

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
}

規則範例:events 區段中的巢狀 if

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
}

已知限制

if() 陳述式是 YARA-L 2.0 中的函式,函式深度限制為 20。

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。