YARA-L 2.0 の概要

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

YARA-L 2.0 は、Google Security Operations の専用言語です。エンタープライズ ログデータを操作して、セキュリティ専門家がデータを探索し、脅威を調査し、検出ルールを構築できるようにします。

このドキュメントでは、YARA-L とその構文について説明し、基本的なフィルタ クエリから複雑なパターンを探すルールまで、あらゆるものを表現するために YARA-L を使用する方法を示します。YARA-L クエリのセクションを使用して、集計関数と条件ロジックをサポートし、結合やパターン マッチングなどを通じてコンテキストを追加します。

YARA-L 2.0 の構文の概要

YARA-L ルールまたはクエリを作成するには、変数宣言、定義、用途を指定するための構造と構文をよく理解しておくことをおすすめします。

ルールの構造

YARA-L ルールには次のセクションが含まれており、次の順序で指定する必要があります。

注文 セクション ルール 検索/ダッシュボード 説明
1 メタ 必須 なし ルールの説明。作成者、重大度、説明、優先度などの値を含めることができます。メタセクションの構文をご覧ください。
2 イベント 必須 必須 イベントをフィルタして結合する方法を定義します。events セクションの構文をご覧ください。
3 一致 省略可 省略可 結果を集計するときにグループ化するフィールドを指定します。一致セクションの構文をご覧ください。

注: match セクションを除外すると、ルールは単一のイベントと照合できます。
4 outcome 省略可 省略可 ルールが実行されたとき、またはルールがトリガーされたときに出力するデータを定義します。結果セクションの構文をご覧ください。
5 条件 必須 省略可 ルールがトリガーされるかどうかを判断するロジックが含まれています。条件セクションの構文をご覧ください。
6 オプション 省略可 省略可 特定のルール動作を有効または無効にできます。options セクションの構文をご覧ください。

次の図は、ルールの一般的な構造を示しています。

rule <rule name>
{
    meta:
    // Stores arbitrary key-value pairs of the rule details, such as who wrote
    // it, what it detects on, version control, etc.

  events:
    // Defines which events to filter and the relationship between events.

  match:
    // Values to return when matches are found.

  outcome:
    // Define the output of each rule and security alert.

  condition:
    // Condition to check events and the variables used to find matches.

  options:
    // Options to turn on or off while executing this rule. The `options` syntax is only valid for rules.
}

ルールを作成すると、Google SecOps は YARA-L 構文に対して型チェックを行い、エラーを表示します。これにより、ルールが正しく機能するように修正できます。次の例は、無効な構文が使用された場合に表示されるエラーを示しています。

// $e.target.port is of type integer which cannot be compared to a string.
$e.target.port = "80"

// "LOGIN" is not a valid event_type enum value.
$e.metadata.event_type = "LOGIN"

このルールの例では、10 分間のウィンドウ内でユーザーごとに 5 回連続してログインに失敗したことを検出します。

rule failed_logins
{
  meta:
   author = "Security Team"
   description = "Detects multiple failed user logins within 10-minute windows."
   severity = "HIGH"

  events:
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"
   $user = $e.target.user.userid

  match:
   $user over 10m

  outcome:
   $failed_login_count = count($e.metadata.id)
   $first_fail_time = min($e.metadata.event_timestamp.seconds)

  condition:
    #e >= 5
}

ルールは次のように定義されます。

  • meta セクションでは、ルール作成者(セキュリティ チーム)、説明(10 分間のウィンドウ内で複数のユーザー ログイン失敗を検出)、重大度(高)を定義します。

10 分間のウィンドウ内で複数のユーザー ログインの失敗を検出する

  • events セクションでは、ユーザーのログイン、ユーザーのログイン失敗(イベント変数)、user 一致変数へのリンク(プレースホルダ変数)など、トラッキングする必要があるイベントを定義します。

  • outcome セクションでは、イベントとプレースホルダ変数に対して実行する計算を定義します。失敗したログインの数と、最初の失敗が発生した時刻をカウントします。

  • match セクションでは、イベントをグループ化する変数($user)と、一致と見なされるためにイベントが発生する必要がある期間(10m)を定義します。

  • condition セクションでは、5 回以上ログインに失敗したユーザーのみを返すように指定しています。

次のステップ

その他の情報

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