UDM 検索のベスト プラクティス

このドキュメントでは、UDM 検索 を使用して検索を行う際の Google が推奨するベスト プラクティスについて説明します。UDM 検索では、注意深く構築しないと大量の計算リソースが必要になります。また、Chronicle インスタンス内のデータのサイズや複雑さによってパフォーマンスも変わります。

各条件は、udm-field operator value の形式でなければなりません。

次に例を示します。principal.hostname = "win-server"

時間範囲はできるだけ短くします。Chronicle では、膨大な量のデータが取り込まれるため、検索の実施中にそのデータの範囲を制限すると、検索のパフォーマンスが大幅に向上します。

UDM 検索を実行するときは、正規表現を使用できます。

  • ANDORNOT を使用します。
  • 他の演算子がない場合は、AND とみなされます。
  • 優先順位を変更するには、かっこを使用します。
  • フィールド タイプに応じて、フィールド演算子には「= != >= > < <=」を含めることができます。

検索修飾子として nocase を使用する

大文字の使用を無視するために、nocase を修飾子として使用できます。

たとえば、次の検索は無効です。

target.user.userid = "TIM.SMITH" nocase

列挙型フィールドでは正規表現が機能しません

列挙型フィールド(事前定義された値の範囲を持つフィールド)には、metadata.event_typenetwork.ip_protocol などの正規表現を使用できません。

たとえば、次の検索は無効です。

metadata.eventtype = /NETWORK*/

ただし、次の検索は有効です(上の記述が想定したと考えられる結果が返されます)。

(metadata.event_type = "NETWORK_CONNECTION" or metadata.event_type = "NETWORK_DHCP")

Events フィールドであらゆるすべての演算子を使用する

UDM 検索では、一部のフィールドが繰り返しとしてラベル付けされ、値やその他の種類のメッセージのリストとして表示されます。YARA-L とは異なり、UDM 検索の繰り返しフィールドは、デフォルトで any 演算子として扱われます。検索で all を指定するオプションはありません。

any 演算子を使用すると、繰り返しフィールドの値のいずれかが条件を満たした場合に、述語が true と評価されます。たとえば、principal.ip != "1.2.3.4" を検索し、検索で principal.ip = "1.2.3.4"principal.ip = "5.6.7.8" の両方を含む場合、検索で一致が生成されます。これにより、すべての演算子と一致する代わりに、いずれかの演算子と一致する結果を含むように検索が拡張されます。

繰り返しフィールドの各要素は個別に処理されます。検索でイベントに繰り返しフィールドが見つかった場合、そのフィールドの各要素に対してイベントが評価されます。特に != 演算子を使用して検索する場合は、予期しない動作が発生することがあります。

any 演算子を使用する場合、繰り返しフィールドのいずれかの値が条件を満たす場合、述語は true と評価されます。

タイムスタンプは Unix エポック時間を使用します

タイムスタンプ フィールドは、Unix エポック時間(1970 年 1 月 1 日(木)00:00:00 から経過した秒数)を使用して照合されます。

特定のタイムスタンプを検索する場合、次の形式(エポックタイム)は有効です。

metadata.ingested_timestamp.seconds = 1660784400

次のタイムスタンプは無効です。

metadata.ingested_timestamp = "2022-08-18T01:00:00Z"

次のような特定のフィールドはフィルタから除外されます。

  • metadata.id
  • metadata.product_log_id
  • *.timestamp

このようなフィールドには、固有の値が含まれる傾向があるため、UDM 検索インターフェースより「ノイズ」が多く発生します。

連言標準形

UDM 検索では、連言標準形(AND または OR で項を結合として数式を表現するブール論理の手法)が使用されます。論理積(AND)で連結された各項は、リテラルか論理和(OR)を含む必要があります。

次に例を示します。

  • (A OR B) AND (C OR D)
  • (A OR B) AND (NOT C OR B)

項はリテラルにすることもできます。

  • A OR B
  • A AND B

A OR (B AND C) は連言標準形で使用できませんが、(A OR B) AND (A OR C) は使用できます。

次の例は、UDM 検索でエラーが発生します。

principal.hostname = "win-server" nocase OR (principal.hostname = "win-adfs" nocase AND metadata.event_type = "NETWORK_CONNECTION")

UDM 検索で連言標準形を使用した有効な例を次に示します。

(principal.hostname = "win-server" nocase OR principal.hostname = "win-adfs" nocase) AND (principal.hostname = "win-server" nocase OR metadata.event_type = "NETWORK_CONNECTION")

NOT (A OR B) は連言標準形で使用できませんが、NOT A AND NOT B は使用できます。

次の形は無効です。

principal.hostname = "win-server" nocase AND NOT(metadata.event_type = "PROCESS_TERMINATION" OR metadata.event_type = "USER_RESOURCE_ACCESS")

次の形は有効です。

principal.hostname = "win-server" nocase AND NOT metadata.event_type = "PROCESS_TERMINATION" AND NOT metadata.event_type = "USER_RESOURCE_ACCESS"

A AND (B OR (C AND D)) は連言標準形で使用できませんが、A AND (B OR C) AND (B OR D) は使用できます。

次の形は無効です。

principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR (metadata.event_type = "NETWORK_CONNECTION" AND target.ip = "10.128.0.21")

次の形は有効です。

principal.hostname = "win-server" nocase AND (metadata.event_type = "PROCESS_LAUNCH" OR metadata.event_type = "NETWORK_CONNECTION") AND (metadata.event_type = "PROCESS_LAUNCH" OR target.ip = "10.128.0.21")