使用巢狀 if 陳述式處理更複雜的邏輯
支援的國家/地區:
Google SecOps
SIEM
您可以在 outcome 和 events 區段中使用 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.ip 或 principal.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 專業人員尋求答案。