瞭解搜尋語法

支援的國家/地區:

本指南適用於想要在 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

浮點值和小數值

如果是 float 或 double 類型的 UDM 欄位,請輸入十進位數字或整數,不要加上雙引號,如下例所示:

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\..*/
    
  • 搜尋執行 PsExec 的動作,可選擇性使用 .exe 擴充功能,不區分大小寫,如下列範例所示:

    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 欄位中搜尋鍵/值組合

additional 和 labels 欄位可做為彈性容器,存放未對應至標準 UDM 欄位的自訂事件資料和第三方供應商屬性。每個項目都會儲存鍵/值組合:

  • additional 欄位:每個事件可包含多個鍵/值組合 (additional.fields["key"] = "value")。

  • labels fields:每個事件只能包含一組鍵/值配對 (labels["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 鍵/值組合:

    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

在查詢中新增註解

您可以在搜尋編輯器中新增註解,記錄複雜的搜尋邏輯,或在測試期間暫時停用條件:

  • 單行註解:在註解文字前加上兩個正斜線 (//)。系統會忽略該行斜線後的所有內容。
  • 多行區塊註解:將註解文字放在 /* 和 */ 之間。區塊註解可以跨越多行。

範例:

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 專業人員尋求解答。