検索構文について

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

このガイドは、SIEM 検索ページのクエリエディタで検索式(データ値、エスケープ、演算子など)を構成するセキュリティ アナリストを対象としています。

Google Security Operations のクエリエディタで YARA-L 2.0 または SQL 検索式を記述する場合は、ターゲット UDM フィールドの正確なデータ型に従って、データ値、演算子、文字列エスケープ シーケンスをフォーマットする必要があります。検索条件は、UDM フィールド名、比較演算子(=、!=、>、<、<=、>=)、フォーマットされたデータ値で構成されます。

データ型別にデータ値をフォーマットする

このセクションでは、次のことを説明します。

列挙値(enum)

列挙型は、有効な UDM 辞書の定義と完全に一致する大文字のテキスト文字列として記述し、次の例のように二重引用符(")で囲む必要があります。

metadata.event_type = "NETWORK_CONNECTION" security_result.action = "BLOCK" network.ip_protocol = "TCP"

ブール値

ブール値フィールドには、次の例のように true または false を指定します(大文字と小文字は区別されません。引用符は不要です)。

network.dns.response = true target.user.is_admin = false

整数と数値

整数とポート番号は、次の例のように、二重引用符なしのリテラル数字として記述されます。

target.port = 443 network.sent_bytes > 10485760

浮動小数点値と 10 進数値

float 型または double 型の UDM フィールドの場合は、次の例のように、二重引用符なしで 10 進数または整数を入力します。

security_result.about.asset.vulnerabilities.cvss_base_score = 9.8

テキスト文字列

標準のテキスト値は、次の例のように二重引用符(")で囲む必要があります。

metadata.product_name = "Google Cloud VPC Flow Logs" target.asset.asset_id = "srv-prod-us-central1-a"

大文字と小文字を区別しないマッチング(nocase)

デフォルトでは、YARA-L 2.0 の文字列比較では大文字と小文字が区別されます。大文字と小文字の任意の組み合わせに一致させるには、次の例のように、条件の末尾に nocase 演算子を直接追加します。

principal.hostname != "http-server" nocase principal.user.userid = "jdoe" nocase

文字列のエスケープ(\ と ")

文字列リテラルにバックスラッシュまたは二重引用符が含まれている場合は、次の例のように、先頭にバックスラッシュ(\\)を付けてこれらの文字をエスケープする必要があります。

  • リテラル バックスラッシュ(\\)を照合するには、\\ を使用します。
  • リテラルの二重引用符(")を照合するには、\" を使用します。

  • エスケープされたバックスラッシュを含む Windows ファイルパスを検索します。

    principal.process.file.full_path = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
    
  • 埋め込みの二重引用符を含むコマンドラインを検索します。

    target.process.command_line = "cmd.exe /c \"c:\\program files\\malicious.exe\""
    

正規表現(RE2 構文)

正規表現を使用して検索するには、正規表現パターンを二重引用符ではなくスラッシュ(/ /)で囲みます。Google SecOps は、標準の RE2 正規表現エンジンを使用します。

  • 10.x.x.x の範囲内の任意のプリンシパル IP を照合します。

    principal.ip = /10\..*/
    
  • 次の例のように、オプションの .exe 拡張子(大文字と小文字を区別しない)を使用して PsExec の実行を検索します。

    target.process.command_line = /\bpsexec(\.exe)?\b/ nocase
    
  • 次の例のように、番号付きのパターンに従ってダイナミック DNS ホスト名を照合します。

    principal.hostname = /dns-server-[0-9]+/ nocase
    

ブール論理と演算子の優先順位

AND、OR、NOT 演算子を使用して、複数の検索条件を組み合わせます。次の例に示すように、かっこ () を使用して式を明示的にグループ化し、評価の優先順位を制御できます。

  • 次の例のように、機密性の高いホストで特定のユーザー ログイン イベントを検索します。

    metadata.event_type = "USER_LOGIN" AND target.hostname = "finance-db-prod"
    
    
  • 次の例のように、かっこを使用して OR 条件を AND チェーンから分離します。

    metadata.event_type = "PROCESS_LAUNCH" AND principal.process.file.full_path = /winword.exe/ nocase AND (target.process.file.full_path = /cmd.exe/ OR target.process.file.full_path = /powershell.exe/)
    

additional フィールドと labels フィールドで Key-Value ペアを検索する

additional フィールドと labels フィールドは、標準の UDM フィールドにマッピングされないカスタム イベントデータとサードパーティ ベンダー属性の柔軟なコンテナとして機能します。各エントリには Key-Value ペアが格納されます。

  • additional フィールド: イベント(additional.fields["key"] = "value")ごとに複数の Key-Value ペアを含めることができます。

  • labels フィールド: イベント(labels["key"] = "value")ごとに 1 つの Key-Value ペアのみを含めることができます。

Key-Value の完全一致(field["key"] = "value")

次の例のように、ブラケット構文を使用して、特定のキーとその対応する文字列値を直接クエリします。

additional.fields["pod_name"] = "kube-scheduler-prod" metadata.ingestion_labels["MetadataKeyDeletion"] = "startup-script"

additional フィールドでの高度な正規表現と文字列以外の値の一致

additional フィールド内の数値 / ブール値をクエリする必要がある場合、または正規表現を使用してキーと値を照合する必要がある場合は、完全修飾 protobuf フィールドパスを使用します。

  • 正規表現を使用して、追加のコンテナ内の任意の値文字列を照合します。

    additional.fields.value.string_value = /suspicious_payload_.*/ nocase
    
  • カスタム フィールド内のブール値または数値を照合します。

    additional.fields.value.bool_value = true additional.fields.value.number_value > 500
    
  • 正規表現の接頭辞に一致する複数の動的キーを検索します。

    additional.fields.key = /^myKeyNumber_.*/
    
  • 値に関係なくキーが存在するかどうかを確認します。

    additional.fields["pod_name"] != ""
    
  • 正規表現と nocase をブラケット構文で直接使用します。

    additional.fields["pod_name"] = /br/
    additional.fields["pod_name"] = bar nocase
    
  • AND を使用して複数の additional.fields Key-Value ペアを組み合わせます。

    additional.fields["pod_name"] = "kube-scheduler" AND additional.fields["namespace"] = "kube-system"
    

グループ化されたフィールドを検索する

グループ化されたフィールドは、関連する UDM フィールドのグループのエイリアスです。グループ化されたフィールドを使用すると、各フィールドを個別に入力することなく、複数の UDM フィールドを同時にクエリできます。

次の例は、指定した IP アドレスを含む可能性がある共通の UDM フィールドを照合するクエリを入力する方法を示しています。

ip = "1.2.3.4"

正規表現と nocase 演算子を使用して、グループ化されたフィールドを照合できます。参照リストもサポートされています。グループ化したフィールドは、次の例で示すように、通常の UDM フィールドと組み合わせて使用することもできます。

ip = "5.6.7.8" AND metadata.event_type = "NETWORK_CONNECTION"

グループ化された UDM フィールドのタイプ

次のグループ化された UDM フィールドをすべて検索できます。

グループ化されたフィールド名 関連する UDM フィールド
domain about.administrative_domain
about.asset.network_domain
network.dns.questions.name
network.dns_domain
principal.administrative_domain
principal.asset.network_domain
target.administrative_domain
target.asset.hostname
target.asset.network_domain
target.hostname
email intermediary.user.email_addresses
network.email.from
network.email.to
principal.user.email_addresses
security_result.about.user.email_addresses
target.user.email_addresses
file_path principal.file.full_path
principal.process.file.full_path
principal.process.parent_process.file.full_path
target.file.full_path
target.process.file.full_path
target.process.parent_process.file.full_path
hash about.file.md5
about.file.sha1
about.file.sha256
principal.process.file.md5
principal.process.file.sha1
principal.process.file.sha256
security_result.about.file.sha256
target.file.md5
target.file.sha1
target.file.sha256
target.process.file.md5
target.process.file.sha1
target.process.file.sha256
hostname intermediary.hostname
observer.hostname
principal.asset.hostname
principal.hostname
src.asset.hostname
src.hostname
target.asset.hostname
target.hostname
ip intermediary.ip
observer.ip
principal.artifact.ip
principal.asset.ip
principal.ip
src.artifact.ip
src.asset.ip
src.ip
target.artifact.ip
target.asset.ip
target.ip
namespace principal.namespace
src.namespace
target.namespace
process_id principal.process.parent_process.pid
principal.process.parent_process.product_specific_process_id
principal.process.pid
principal.process.product_specific_process_id
target.process.parent_process.pid
target.process.parent_process.product_specific_process_id
target.process.pid
target.process.product_specific_process_id
user about.user.userid
observer.user.userid
principal.user.user_display_name
principal.user.userid
principal.user.windows_sid
src.user.userid
target.user.user_display_name
target.user.userid
target.user.windows_sid

クエリにコメントを追加する

検索エディタ内にコメントを追加して、複雑なハンティング ロジックを文書化したり、テスト中に条件を一時的に無効にしたりできます。

  • 単一行コメント: コメントテキストの前に 2 つのスラッシュ(//)を付けます。その行のスラッシュ以降はすべて無視されます。
  • 複数行のブロック コメント: コメント テキストを /* と */ で囲みます。ブロック コメントは複数行にわたって記述できます。

例:

metadata.event_type = "NETWORK_CONNECTION" AND
// Exclude approved corporate proxy traffic
target.ip != "192.0.2.100" AND
/* Uncomment the lines below when investigating specific lateral
   movement across subnet 10.240.0.0/16 */
// principal.ip = /10.240\..*/ AND
// network.sent_bytes > 5000000

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