在搜尋和資訊主頁中套用彙整
彙整功能可協助關聯多個來源的資料,為調查提供更多脈絡資訊。連結相關事件、實體和其他資料,即可調查複雜的攻擊情境並呈現趨勢。
本文說明如何在 Google Security Operations 搜尋和資訊主頁中使用聯結作業。此外,還會介紹支援的聯結類型、用途和最佳做法。
建立聯結
系統僅支援以統計資料為準的聯結。您必須在查詢的 match 區段中定義這些欄位。
關聯時間範圍 (比對時間範圍) 取決於您使用的是搜尋功能還是資訊主頁:
- 搜尋:最長 48 小時。
- 資訊主頁:最多 365 天 (適用於大多數資料來源)。
您可以直接連結欄位 (例如 $e1.hostname = $e2.hostname),或使用預留位置變數來建立聯結。在 match 區段中定義聯結時,必須使用預留位置變數。
以下範例查詢會使用等號 (=) 和共用的預留位置變數,聯結兩個欄位:
範例 1:
events: // Assign a value from the first event to the placeholder variable $user $user = $e1.principal.user.userid // The second assignment creates an implicit join, linking $e2 to $e1 // where the user ID is the same. $user = $e2.principal.user.userid match: $user over 1h condition: $e1 and $e2範例 2:
$e1.principal.ip = $ip $e1.metadata.event_type = "USER_LOGIN" $e1.principal.hostname = $host $e2.target.ip = $ip $e2.principal.hostname = "altostrat" $e2.target.hostname = $host match: $ip, $host over 5m
支援的聯結類型
本節說明可使用的不同聯結類型。本節的範例說明搜尋時使用的語法。如要瞭解資訊主頁中的彙整,請參閱「資訊主頁中的彙整」。
活動 - 活動加入
事件與事件的聯結會連結兩個不同的通用資料模型 (UDM) 事件。 以下查詢範例會將
USER_LOGIN事件與另一個事件連結,根據共用 IP 位址找出使用者互動的網域名稱 (altostrat):$e1.principal.ip = $ip $e1.metadata.event_type = "USER_LOGIN" $e2.target.ip = $ip $e2.principal.hostname = "altostrat" match: $ip over 5m
Event-ECG join
事件-ECG 聯結會將 UDM 事件與實體內容圖表 (ECG) 中的實體連結。以下查詢範例會找出實體圖表中的
NETWORK_CONNECTION事件和ASSET,兩者在 1 小時內共用相同的主機名稱:events: $e1.metadata.event_type = "NETWORK_CONNECTION" $g1.graph.metadata.entity_type = "ASSET" $e1.principal.asset.hostname = $g1.graph.entity.asset.hostname $x = $g1.graph.entity.asset.hostname match: $x over 1h condition: $e1 and $g1
資料表事件聯結
資料表事件聯結會將 UDM 事件與自訂資料表中的項目連結。這項功能有助於根據使用者定義的清單 (例如已知的惡意 IP 位址或威脅行為者),檢查即時事件資料。以下查詢範例會將
NETWORK_CONNECTION事件與資料表聯結,找出涉及該清單中特定 IP 位址的連線:$ip = %DATATABLE_NAME.COLUMN_NAME $ip = $e1.principal.ip $e1.metadata.event_type = "NETWORK_CONNECTION" match: $ip over 1h
最佳做法
由於聯結查詢會合併許多結果,因此可能需要大量資源。廣泛的一般篩選條件可能會導致查詢失敗,有時甚至會延遲很久才失敗,例如:
target.ip != ""metadata.event_type = "NETWORK_CONNECTION"(如果環境中很常見這類事件)
建議您將一般篩選條件與更具體的篩選條件合併,減少查詢需要處理的事件總數。廣泛的篩選器 (例如
target.ip != "") 應搭配更具體的篩選器,以提升查詢效能,例如:$e1.metadata.log_type = $log $e1.metadata.event_type = "USER_LOGIN" $e1.target.ip != "" $e2.metadata.log_type = $log $e2.principal.ip = "10.0.0.76" $e2.target.hostname != "altostrat" match: $log over 5m
如果查詢速度仍然緩慢,您也可以縮短查詢的整體時間範圍 (例如從 30 天縮短為一週)。
詳情請參閱「YARA-L 最佳做法」。
資訊主頁中的彙整
與搜尋功能相比,資訊主頁支援更多資料來源,且關聯性時間範圍更長。
支援的資料來源
在資訊主頁中,您可以使用下列來源的 YARA-L 前置字元,彙整這些來源的資料:
| 前置字串 | 資料來源 |
|---|---|
case |
案件和警示 |
case_history |
案件生命週期的活動趨勢 |
detection |
規則偵測記錄和分析師意見回饋 |
ingestion |
記錄檔數量和擷取健康狀態指標 |
ioc |
IoC (入侵指標) 比對結果 |
playbook |
自動回應和應對手冊執行指標 |
ruleset/rules |
有效規則集的相關中繼資料 |
graph |
實體圖形資料 (ECG) |
events |
UDM 事件 |
區分大小寫
與預設不區分大小寫的搜尋功能不同,資訊主頁會區分大小寫。如要在資訊主頁中執行不區分大小寫的聯結或搜尋,請使用 nocase 修飾符。
範例:聯結案件和案件記錄
您可以根據專屬案件 ID 彙整案件中繼資料與歷史活動。
以下範例會聯結
case和case_history資料來源,計算每個高優先順序案件的歷來動作總數。// 1. Establish the Join using a shared placeholder variable ($case_id) $h.case_history.case_response_platform_info.case_id = $case_id $c.case.response_platform_info.response_platform_id = $case_id // 2. Apply Filters $c.case.priority = "PRIORITY_HIGH" // 3. Group the correlated data by the Case ID match: $case_id // 4. Calculate the selected metrics to display on the dashboard outcome: $case_name = array_distinct($c.case.display_name) $total_historical_actions = count($h.case_history.case_activity)
進階用途:計算 MTTR
如要取得更複雜的指標 (例如平均解決時間 (MTTR) 或平均結案時間 (MTTC)),可以使用多階段查詢。這樣您就能計算第一階段中每個案件的時長,然後在最終結果區塊中計算這些時長的平均值。
下列查詢會計算「Default Environment」中所有案件的平均結案時間 (以分鐘為單位)。
stage stage1 { // 1. Establish the Join $h.case_history.case_response_platform_info.case_id = $case_id $c.case.response_platform_info.response_platform_id = $case_id // 2. Filter by specific environment $c.case.environment = "Default Environment" // 3. Group by Case ID to process per case match: $case_id // 4. Calculate the Time to Close (TTC) for each case individually outcome: $case_close_time = max(if($h.case_history.case_activity = "CLOSE_CASE", $h.case_history.event_time.seconds, 0)) $status = array_distinct($h.case_history.case_activity) // Subtract the very first event time (creation) from the close time $TTC = $case_close_time - min($h.case_history.event_time.seconds) // 5. Filter to ensure the case has a complete lifecycle condition: arrays.contains($status, "CREATE_CASE") and arrays.contains($status, "CLOSE_CASE") } // 6. Global Aggregation: Calculate the Mean (Average) across all processed cases outcome: $case_count = count($stage1.case_id) $MTTC = (math.round(avg($stage1.TTC) / 60))
限制
使用聯結時,請注意下列限制:
在搜尋中,每項查詢最多可使用兩個 UDM 事件。
每次查詢最多可使用一個心電圖事件。
每項查詢最多可使用兩個資料表。
您無法在單一查詢中同時加入資料表、UDM 和 ECG 事件。
查詢時間範圍最長為 90 天。
搜尋的
match時間範圍最長為 48 小時,資訊主頁則為 365 天。使用者介面和
EventService.UDMSearchAPI 支援聯結,但SearchService.UDMSearchAPI 不支援。
常見用途
本節列出幾種常見的聯結使用方式。
偵測憑證遭竊和遭盜用情形
目標:找出使用者成功登入,然後快速刪除重要系統檔案的案例。這可能表示帳戶遭到盜用,或是內部人員從事惡意活動。
聯結類型:活動 - 活動聯結
說明:這項查詢會連結兩個不同的事件,這些事件本身並不令人起疑,但如果同時發生,就非常可疑。系統會先尋找 USER_LOGIN 事件,然後尋找 FILE_DELETION 事件。這些項目會與常見的 user.userid 在短時間內合併。
查詢範例:
// Event 1: A user successfully logs in $e1.metadata.event_type = "USER_LOGIN" $e1.security_result.action = "ALLOW" $e1.principal.user.userid = $user // Event 2: The same user deletes a critical file $e2.metadata.event_type = "FILE_DELETION" $e2.target.file.full_path = /etc\/passwd|C:\\Windows\\System32\\/ $e2.principal.user.userid = $user match: $user over 10m condition: $e1 and $e2
找出重要資產的高風險連線
目標:使用資產資訊擴充即時網路資料,找出不應與外部低普及率網域通訊的伺服器 (例如生產資料庫伺服器) 傳出的連線。
加入類型:加入活動心電圖
說明:連線至罕見網域的單一網路連線可能不是高優先順序。不過,這項查詢會將該事件與實體脈絡圖 (ECG) 聯結,進而提高事件的重要性。具體來說,這項規則會尋找實體圖中標示為「重要資料庫伺服器」的資產所發出的事件。NETWORK_CONNECTION
查詢範例:
events: $e.metadata.event_type = "NETWORK_CONNECTION" $e.target.domain.prevalence.day_count <= 5 $asset.graph.metadata.entity_type = "ASSET" $asset.graph.entity.asset.labels.value = "Critical Database Server" $e.principal.asset.hostname = $asset.graph.entity.asset.hostname $host = $e.principal.asset.hostname match: $host over 1h condition: $e and $asset
搜尋威脅發動者入侵指標
目標:主動搜尋入侵指標 (IoC),方法是根據特定威脅行為者使用的已知網域清單,檢查所有即時 DNS 查詢。
聯結類型:資料表 - 事件聯結
說明:威脅情報團隊維護名為「ThreatActor_Domains」的資料表,其中列出惡意網域。這項查詢會將所有即時 NETWORK_DNS_QUERY 事件與這個資料表彙整。如果網路中的主機嘗試解析威脅情報清單中的網域,系統會立即顯示相關例項。
查詢範例:
// Datatable: Get the list of malicious domains $domain = %DATATABLE_NAME.COLUMN_NAME // Event: A DNS query is made $e.metadata.event_type = "NETWORK_DNS" $e.network.dns.questions.name = $domain match: $domain over 5m condition: $e
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。