瞭解搜尋語法
本指南適用於想要在 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")。labelsfields:每個事件只能包含一組鍵/值配對 (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_domainabout.asset.network_domainnetwork.dns.questions.namenetwork.dns_domainprincipal.administrative_domainprincipal.asset.network_domaintarget.administrative_domaintarget.asset.hostnametarget.asset.network_domaintarget.hostname |
email |
intermediary.user.email_addressesnetwork.email.fromnetwork.email.toprincipal.user.email_addressessecurity_result.about.user.email_addressestarget.user.email_addresses |
file_path |
principal.file.full_pathprincipal.process.file.full_pathprincipal.process.parent_process.file.full_pathtarget.file.full_pathtarget.process.file.full_pathtarget.process.parent_process.file.full_path |
hash |
about.file.md5about.file.sha1about.file.sha256principal.process.file.md5principal.process.file.sha1principal.process.file.sha256security_result.about.file.sha256target.file.md5target.file.sha1target.file.sha256target.process.file.md5target.process.file.sha1target.process.file.sha256 |
hostname |
intermediary.hostnameobserver.hostnameprincipal.asset.hostnameprincipal.hostnamesrc.asset.hostnamesrc.hostnametarget.asset.hostnametarget.hostname |
ip |
intermediary.ipobserver.ipprincipal.artifact.ipprincipal.asset.ipprincipal.ipsrc.artifact.ipsrc.asset.ipsrc.iptarget.artifact.iptarget.asset.iptarget.ip |
namespace |
principal.namespacesrc.namespacetarget.namespace |
process_id |
principal.process.parent_process.pidprincipal.process.parent_process.product_specific_process_idprincipal.process.pidprincipal.process.product_specific_process_idtarget.process.parent_process.pidtarget.process.parent_process.product_specific_process_idtarget.process.pidtarget.process.product_specific_process_id |
user |
about.user.useridobserver.user.useridprincipal.user.user_display_nameprincipal.user.useridprincipal.user.windows_sidsrc.user.useridtarget.user.user_display_nametarget.user.useridtarget.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 專業人員尋求解答。