より複雑なロジックにはネストされた if ステートメントを使用する

以下でサポートされています。

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 のプロフェッショナルから回答を得ることができます。