より複雑なロジックにはネストされた if ステートメントを使用する
以下でサポートされています。
Google SecOps
SIEM
if ステートメントは、outcome セクションと events セクションの両方で使用できます。別の 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 のプロフェッショナルから回答を得ることができます。