一致セクションの構文
YARA-L 2.0 では、match セクションでマルチイベントの関連付けを行うことができます。このセクションでは、特定の 時間枠内でユーザー、IP アドレス、ファイル ハッシュなどの共通属性をリンクすることで、イベントを 1 つの検出にグループ化するロジックを定義します。
match セクションは、次のようなユースケースで使用します。
- ルール内で 2 つ以上の異なるイベントをリンクする。
- 検索とダッシュボードでデータを集計する(特定の期間にログインに失敗した回数をカウントするなど)。
関連付けの条件を定義する
次の項目を指定して、この関連付けの条件を定義します。
グループ化フィールド(キー): 一致をトリガーするには、イベント(
eventsセクションで定義)間で同じ値を持つ必要がある変数($userや$ipなど)。時間制約: グループ化されたイベントがルールまたは集計を満たすために発生する必要がある期間ウィンドウ。ルールでは、これが検出ウィンドウを定義します。検索とダッシュボードでは、これが集計または関連付けウィンドウを定義します。
機能要件を比較する
次の表に、ルールと検索、ダッシュボードの比較を示します。
| 機能 | ルールの要件 | 検索とダッシュボードのサポート |
|---|---|---|
| 変数タイプ | events セクションで定義されたプレースホルダを使用する必要があります。 |
プレースホルダと直接 UDM フィールドの両方をサポートします。 |
| 期間 | 検出境界を定義します。 | 集計または関連付けバケットを定義します。 |
| 構文 | over <number><m/h/d>(例: 10m、2h、1d) |
over <number><m/h/d> |
| 上限 | 最小: 1m / 最大: 48h |
最小: 1m / 最大: 48h |
サポートされているウィンドウ タイプ
YARA-L 2.0 では、さまざまなウィンドウ処理動作を使用して、時間のスライス方法とイベントのグループ化方法を決定します。サポートされている次のいずれかのウィンドウを使用して、指定した時間粒度で match セクションのイベント フィールドとプレースホルダをグループ化できます。
YARA-L 2.0 でサポートされているウィンドウ タイプの詳細については、YARA-L 2.0 のウィンドウ処理ロジックをご覧ください。
時間境界について
match セクションでは、グループ化キーに基づいてイベントがグループに分割されます。指定した期間によって、各グループの時間境界が定義されます。
- 包含: ウィンドウ内のイベントのみが、特定の照合の
condition評価に渡されます。 - 除外: ウィンドウ外のイベントは、特定の照合グループでは無視されます。これにより、無関係なイベントが誤検出をトリガーするのを防ぎます。
match セクションのゼロ値
例: ゼロ値を除外する
次の例は、ゼロ値を除外するクエリを示しています。
rule ZeroValuePlaceholderExample {
events:
// Because $host is used in the match section, the query behaves
// as if the following predicate was added to the events section:
// $host != ""
$host = $e.principal.hostname
// Because $otherPlaceholder was not used in the match,
// there is no implicit filtering of zero values for $otherPlaceholder.
$otherPlaceholder = $e.principal.ip
match:
$host over 5m
condition:
$e
}ただし、プレースホルダが関数に割り当てられている場合、match セクションで使用されているプレースホルダのゼロ値がクエリによって暗黙的に除外されません。
ゼロ値の暗黙的なフィルタリングを無効にするには、
allow_zero_values オプションを [オプション] セクションで使用します。allow_zero_values オプションは、ルールでのみ使用できます。
例: ゼロ値を許可する
次の例は、match セクションで使用されているプレースホルダのゼロ値を暗黙的に除外しないクエリを示しています。
rule AllowZeroValuesExample {
events:
// Because allow_zero_values is set to true, there is no implicit filtering
// of zero values for $host.
$host = $e.principal.hostname
// Because $otherPlaceholder was not used in the match,
// there is no implicit filtering of zero values for $otherPlaceholder.
$otherPlaceholder = $e.principal.ip
match:
$host over 5m
condition:
$e
options:
allow_zero_values = true
}次のステップ
YARA-L ロジックを続行するか、高度なクエリ関数について詳しく調べるには、次のリソースをご覧ください。
構文とロジック
リファレンスと例
さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。