検索構文について

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

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

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

データ型でデータ値を書式設定する

このセクションでは、次のことについて説明します。

列挙値(列挙型)

列挙型は、有効な 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 fields: イベント(additional.fields["key"] = "value")ごとに複数の Key-Value ペアを含めることができます。

  • labels fields: イベント(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 のプロフェッショナルから回答を得ることができます。