UDM 検索のベスト プラクティス
このドキュメントでは、UDM 検索 を使用して検索を行う際の Google が推奨するベスト プラクティスについて説明します。UDM 検索では、注意深く構築しないと大量の計算リソースが必要になります。また、Google セキュリティ オペレーション インスタンス内のデータのサイズや複雑さによってパフォーマンスも変わります。
UDM 検索の基本的な構成
各条件は、udm-field operator value
の形式でなければなりません。
次に例を示します。principal.hostname = "win-server"
UDM 検索の期間を最適化する
期間は常に必要最小限のものにしてください。Google Security Operations では、膨大な量のデータが取り込まれるため、検索の実施中にそのデータの範囲を制限すると、検索のパフォーマンスが大幅に向上します。
UDM 検索で正規表現を使用する
UDM 検索を行うときに正規表現を使用できます。
AND
、OR
、NOT
を使用します。- 他の演算子がない場合は、
AND
とみなされます。 - 括弧を使用して優先順位を変更します。
- フィールド タイプに応じて、フィールド演算子には「
= != >= > < <=
」を含めることができます。
検索修飾子として nocase を使用する
大文字の使用を無視するために、nocase
を修飾子として使用できます。
たとえば、次の検索は無効です。
target.user.userid = "TIM.SMITH" nocase
正規表現は列挙型フィールドで機能しません
列挙型フィールド(事前定義された値の範囲を持つフィールド)には、metadata.event_type
や network.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")