在搜尋中使用聯結

支援的國家/地區:

彙整有助於關聯多個來源的資料,為調查提供更多背景資訊。連結相關事件、實體和其他資料,即可調查複雜的攻擊情境。

本文說明如何在 Google Security Operations 中使用聯結作業。此外,本文也會說明支援的聯結類型、用途和最佳做法。

建立聯結

系統僅支援以統計資料為準的聯結。您必須在查詢的相符區段中定義這些欄位,關聯時間範圍最多為 48 小時。您可以直接連結欄位 (例如 $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 != null

  • metadata.event_type = "NETWORK_CONNECTION" (如果此事件類型在您的環境中非常常見)

建議您將一般篩選器與更具體的篩選器合併使用,減少查詢需要處理的事件總數。target.ip != null 等廣泛篩選器應搭配更具體的篩選器,以提升查詢效能,例如:

$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 最佳做法」。

限制

使用聯結時,請注意下列限制:

  • 每項查詢最多可使用兩個 UDM 事件。

  • 每次查詢最多可使用一個心電圖事件。

  • 每項查詢最多可使用兩個資料表。

  • 您無法在單一查詢中同時加入資料表、UDM 和 ECG 事件。

  • 查詢時間範圍最長為 90 天。

  • match 時間範圍最長為 48 小時。

  • 使用者介面和 EventService.UDMSearch API 支援聯結,但 SearchService.UDMSearch API 不支援。

常見用途

本節列出幾種常見的聯結使用方式。

偵測憑證遭竊和遭盜用情形

目標:找出使用者成功登入後,快速刪除重要系統檔案的案例。這可能表示帳戶遭到盜用,或是內部人員從事惡意活動。

聯結類型:事件 - 事件聯結

說明:這項查詢會連結兩個不同的事件,這些事件本身並不令人起疑,但如果同時發生,就非常可疑。系統會先尋找 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

目標:主動搜尋入侵指標 (IoC),方法是根據已知由特定威脅行為人使用的網域清單,檢查所有即時 DNS 查詢。

聯結類型:資料表 - 事件聯結

說明:您的威脅情報團隊維護名為 ThreatActor_Domains 的資料表,其中列出惡意網域。這項查詢會將所有即時 NETWORK_DNS_QUERY 事件與這個資料表彙整。如果網路中的主機嘗試解析威脅情報清單中的網域,系統會立即顯示相關例項。

查詢範例


// Datatable: Get the list of malicious domains

$domain = $ip = %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 專業人員尋求答案。