YARA-L のベスト プラクティス

このドキュメントでは、YARA-L でルールを記述するための Google Security Operations の推奨ベスト プラクティスについて説明します。

ゼロ値を除外する

ルールを実行するイベントでは、フィールドが自動的に省略される場合があります。フィールドを省略すると、デフォルトはゼロ値になります。

たとえば、省略された文字列値のデフォルト値は "" です。

省略された 2 つのフィールドを等価にすると、両方ともデフォルトでゼロ値になる可能性があります。これは、2 つのフィールドがゼロ値になるために一致してしまう意図しない一致につながる可能性があります。この動作を回避するには、ゼロ値を明示的に指定します。

たとえば、2 つのフィールドに基づいて 2 つのイベントを等価にするルールがある場合は、これらのフィールドの両方が空になっており、一致が発生する可能性があります。

$e1.field1 = $e2.field2

データで e1.field1e2.field2 の両方が省略されている場合は、"" = "" が true になり、一致が発生します。

次の比較式は、e1.field1e2.field2 にデータが含まれていないため、一致しないことが保証されます。

$e1.field1 = $e2.field2
$e1.field != ""

イベントタイプ フィルタを追加する

次の例では、各 UDM イベントの IP アドレスが参照リストと照合され、大量のリソースが消費されます。

events:
  // For every UDM event, check if the target.ip is listed in
  // the suspicious_ip_addresses reference list.
  $e.target.ip in %suspicious_ip_addresses

YARA-L ルールの検出対象が特定のイベントタイプの UDM イベントのみである場合は、イベントタイプ フィルタを追加すると、ルールで評価する必要があるイベントの数を減らすことでルールを最適化できます。

events:
  // For every UDM event of type NETWORK_DNS, check if the target.ip is
  // listed in the suspicious_ip_addresses reference list.
  $e.metadata.event_type = "NETWORK_DNS"
  $e.target.ip in %suspicious_ip_addresses

これらのフィルタをイベント セクションの先頭に追加します。また、正規表現やその他の比較の前に等式フィルタを配置する必要もあります。フィルタは、ルールで表示される順序で適用されます。