関数からプレースホルダへの割り当て

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

YARA-L では、関数を使用してデータを処理し、結果を保存するプロセスを関数からプレースホルダへの割り当てと呼びます。プレースホルダ変数($ で示されます)は、UDM イベントやその他のデータソースから抽出された特定のデータポイントを表すために使用されます。関数はこれらのイベント フィールドまたはフィールドの組み合わせに対して動作し、これらのオペレーションの結果はプレースホルダ変数に割り当てられ、matchconditionoutcome セクションなど、クエリの他の部分で使用されます。

  • 関数: YARA-L には、イベント フィールドで計算やデータ変換を実行できる指標関数が用意されています。

  • プレースホルダ変数: 先頭にドル記号が付いた変数($user$ip など)で、イベント フィールドまたは関数出力から派生した値を保持できます。これらは events セクションで定義され、ルール全体で使用できます。

  • 割り当て: 関数の出力がプレースホルダ変数に割り当てられます。

制限事項

関数からプレースホルダへの割り当てを使用する場合、次の 2 つの制限があります。

  1. 関数からプレースホルダへの割り当てのすべてのプレースホルダは、イベント フィールドを含む式に割り当てる必要があります。

    有効な例

    $ph1 = $e.principal.hostname
    $ph2 = $e.src.hostname
    
    // Both $ph1 and $ph2 have been assigned to an expression containing an event field.
    $ph1 = strings.concat($ph2, ".com")
    
    $ph1 = $e.network.email.from
    $ph2 = strings.concat($e.principal.hostname, "@gmail.com")
    
    // Both $ph1 and $ph2 have been assigned to an expression containing an event field.
    $ph1 = strings.to_lower($ph2)
    

    無効な例

    $ph1 = strings.concat($e.principal.hostname, "foo")
    $ph2 = strings.concat($ph1, "bar") // $ph2 has NOT been assigned to an expression containing an event field.
    
  2. 関数呼び出しは、1 つのイベントに依存する必要があります。ただし、同じイベントからの複数のフィールドが関数呼び出し引数で使用される場合があります。

    有効な例

    $ph = strings.concat($event.principal.hostname, "string2")

    $ph = strings.concat($event.principal.hostname, $event.src.hostname)

    無効な例

    $ph = strings.concat("string1", "string2")

    $ph = strings.concat($event.principal.hostname, $anotherEvent.src.hostname)

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。