透過 YARA-L 2.0 搜尋統計資料和匯總資料

支援的國家/地區:

本頁說明如何使用 YARA-L 2.0 對 UDM 事件執行統計查詢,並將結果分組以供分析。

處理環境中產生的大量 UDM 事件時,瞭解 UDM 搜尋資料的趨勢非常重要。您可以使用統計和匯總函式,從 UDM 記錄檔中取得可做為行動依據的洞察資料。UDM 搜尋支援 YARA-L 2.0 中的所有匯總函式

統計查詢的用途

統計查詢適用於下列用途:

  • 追蹤重要指標:您可以評估 UDM 事件和相關聯資產 (例如與已知惡意 IP 位址通訊的主機) 的分布情形和頻率。

  • 偵測異常行為:您可以找出可能代表安全性事件的活動尖峰,例如非上班時間的登入次數或網路流量突然暴增。

  • 分析一段時間內的趨勢:您可以評估安全防護機制變化,評估控制措施的有效性或找出待改善的部分,例如監控一段時間內漏洞數量的變化。

您可以使用類似於偵測引擎規則中 YARA-L 結構的語法,將 UDM 搜尋查詢結果分組及排序。詳情請參閱 YARA-L 2.0 語言語法

YARA-L 2.0 查詢結構如下:

  • 篩選陳述式:指定篩選事件的條件。

  • 比對 (選用):定義要分組的欄位。詳情請參閱「比對區段語法」。

  • 結果:指定查詢的輸出內容。詳情請參閱「結果區段語法」。

  • 順序:決定查詢結果的順序,可以是 asc (遞增) 或 desc (遞減)。如未指定順序 (ascdesc),系統會預設為 asc

  • 限制 (選用):設定查詢傳回的資料列數量上限。

以下是訂單和用量限制的範例:

metadata.log_type = "OKTA"

match:
    principal.ip
Outcome:
    $user_count_by_ip = count(principal.user.userid)

order:
 $user_count_by_ip desc

limit:
    20

匯總資料

UDM 搜尋支援下列匯總函式:

陣列

array(expression)

說明

array 函式會以清單形式傳回所有值。並將清單截斷為最多 25 個隨機元素。

參數資料類型

STRING

傳回類型

LIST

程式碼範例

範例

傳回包含事件類型的陣列。

  $event_type = metadata.event_type
  outcome:
    $event_type_array = array($event_type)

array_distinct

array_distinct(expression)

說明

array_distinct 函式會以清單形式傳回所有不重複的值。並將清單截斷為最多 25 個隨機元素。系統會在截斷前套用重複資料刪除程序,取得不重複的清單。

參數資料類型

STRING

傳回類型

LIST

程式碼範例

範例

傳回包含不重複事件類型的陣列。

  $event_type = metadata.event_type
  outcome:
    $event_type_array = array_distinct($event_type)

平均

avg(numericExpression)

說明

avg 函式會傳回數值資料欄中的平均值。計算時會忽略 NULL 值。這項函式通常會與 match 搭配使用,計算資料中特定群組的平均值。

參數資料類型

NUMBER

傳回類型

NUMBER

程式碼範例

範例

找出 target.ip 不為空白的所有事件。針對所有符合 principal.ip 的事件,將 metadata.event_timestamp.seconds 的平均值儲存在名為 avg_seconds 的變數中。

  target.ip != ""
  match:
    principal.ip
  outcome:
    $avg_seconds = avg(metadata.event_timestamp.seconds)

數量

count(expression)

說明

count 函式會傳回群組內的列數。這項函式通常會與 match 搭配使用,取得資料中特定群組的計數。

參數資料類型

STRING

傳回類型

NUMBER

程式碼範例

範例

傳回一段時間內使用者成功登入的次數。

  metadata.event_type = "USER_LOGIN"
  $security_result = security_result.action
  $security_result = "ALLOW"
  $date = timestamp.get_date(metadata.event_timestamp.seconds, "America/Los_Angeles")
  match:
      $security_result, $date
  outcome:
      $event_count = count(metadata.id)

count_distinct

count_distinct(expression)

說明

count_distinct 函式會傳回群組中具有相異值的列數。這項函式通常會與 match 搭配使用,取得資料中特定群組的計數。

參數資料類型

STRING

傳回類型

NUMBER

程式碼範例

範例

傳回一段時間內成功登入的不重複使用者人數。

  metadata.event_type = "USER_LOGIN"
  $security_result = security_result.action
  $security_result = "ALLOW"
  $date = timestamp.get_date(metadata.event_timestamp.seconds, "America/Los_Angeles")
  match:
      $security_result, $date
  outcome:
      $event_count = count_distinct(metadata.id)

max

max(numericExpression)

說明

max 函式會傳回數值資料欄中的最大值。這項函式通常會與 match 搭配使用,以取得資料中每個群組的最大值。

參數資料類型

NUMBER

傳回類型

NUMBER

程式碼範例

範例

找出 target.ip 不為空白的所有事件。針對 principal.ip 上符合 principal.ip 的所有事件,將 metadata.event_timestamp.seconds 的最大值儲存在名為 max_seconds 的變數中。

  target.ip != ""
  match:
    principal.ip
  outcome:
    $max_seconds = max(metadata.event_timestamp.seconds)

分鐘

min(numericExpression)

說明

min 函式會傳回數值資料欄中的最小值。這項函式通常會與 match 搭配使用,以取得資料中每個群組的最小值。

參數資料類型

NUMBER

傳回類型

NUMBER

程式碼範例

範例

找出 target.ip 不為空白的所有事件。針對所有符合 principal.ip 的事件,將 metadata.event_timestamp.seconds 的最小值儲存在名為 min_seconds 的變數中。

  target.ip != ""
  match:
    principal.ip
  outcome:
    $min_seconds = min(metadata.event_timestamp.seconds)

總和

sum(numericExpression)

說明

sum 函式會傳回數值資料欄中的值總和。計算時會忽略 NULL 值。這項函式通常會與 match 搭配使用,計算資料中不同群組的總和。

參數資料類型

NUMBER

傳回類型

NUMBER

程式碼範例

範例

找出 target.ip 不為空白的所有事件。針對所有符合 principal.ip 的事件,將 network.sent_bytes 的總和儲存在名為 sent_bytes 的變數中。

  target.ip != ""
  match:
    principal.ip
  outcome:
    $sent_bytes = sum(network.sent_bytes)

stddev

stddev(numericExpression)

說明

stddev 函式會傳回所有可能值的標準差。

參數資料類型

NUMBER

傳回類型

NUMBER

程式碼範例

範例

找出 target.ip 不為空白的所有事件。針對所有符合 principal.ip 的事件,將 metadata.event_timestamp.seconds 的標準差儲存在名為 stddev_seconds 的變數中。

  target.ip != ""
  match:
    principal.ip
  outcome:
    $stddev_seconds = stddev(metadata.event_timestamp.seconds)

最早

earliest(timestamp)

說明

earliest 函式會從一組記錄中傳回最早的時間戳記,解析度為微秒。

參數資料類型

TIMESTAMP

傳回類型

TIMESTAMP

程式碼範例

範例

針對所有符合 hostname 的事件,將最早的 metadata.event_timestamp 儲存在 start 變數中。

  $hostname = principal.hostname
  match:
    $hostname
  outcome:
    $start = earliest(metadata.event_timestamp)

最新

latest(timestamp)

說明

latest 函式會從一組記錄中傳回最新的時間戳記,解析度為微秒。

參數資料類型

TIMESTAMP

傳回類型

TIMESTAMP

程式碼範例

範例

針對所有符合 hostname 的事件,將最新的 metadata.event_timestamp 儲存在 end 變數中。

  $hostname = principal.hostname
  match:
    $hostname
  outcome:
    $end = latest(metadata.event_timestamp)

YARA-L 2.0:搜尋與 UDM 用法

  • 搜尋功能不支援用於搜尋事件視窗的 over 關鍵字。

  • UDM 搜尋查詢不包含 conditionoption 區段。

依時間精細程度分組

您可以在 match 區段中,依指定的時間精細度將事件欄位和預留位置分組,類似於在 SQL 中將資料欄分組。

語法如下:

match:
  ... [BY|OVER EVERY] [FIRST] [TIME_GRANULARITY]

如要依時間細微程度分組,可以使用 byover every 關鍵字。允許的時間精細程度如下:

  • MINUTEm
  • HOURh
  • DAYd
  • WEEKw
  • MONTHmo

byover every 關鍵字的功能相同。你可以使用其中一個。

範例

依小時分組 IP 位址和主機名稱。

$hostname = principal.hostname
match:
  $hostname, target.ip by hour

依主機名稱和事件發生日期,將所有事件的計數分組。

$hostname = target.hostname
match:
  $hostname over every day
outcome:
  $events_count = count($hostname)

部分資料來源 (例如實體內容) 在時間範圍 (<start_time>, <end_time>) 內有效,且沒有單一時間戳記。

first 關鍵字為選用項目,且僅適用於單一時間戳記。也就是說,如果資料來源在一段時間內有效,關鍵字 first 只會考量開始時間 (<start_time>)。

舉例來說,假設實體的時段為 (1m, 5m),時間精細程度為 1m。如果結果是依主機分組 (h1h2),傳回的資料欄會是 (h11m) 和 (h21m),其餘時間範圍則會遭到忽略。

first 關鍵字可以同時加入 byover every,因此兩者會出現相同的行為。使用 by first 等同於 over every first

以下範例查詢使用 by 運算子,以及在時間範圍內有效的實體內容資料來源。由於省略了 first 關鍵字,因此系統會將整個時間範圍納入這項查詢。

graph.entity.hostname != ""
match:
  graph.entity.ip by hour
outcome:
  $min_seconds = min(graph.metadata.event_metadata.event_timestamp.seconds)

在搜尋中建立及儲存視覺化圖表

本節將說明 Google SecOps 統合式資料模型 (UDM) 搜尋的資料圖表製作功能。這項功能可讓資安營運中心 (SOC) 分析師從搜尋結果建立視覺化圖表,並儲存至資訊主頁,有效偵測、調查及回應威脅。

建立圖表並儲存至資訊主頁

如要建立及儲存視覺化效果,並新增至資訊主頁,請按照下列步驟操作:

  1. 編寫含有 matchoutcome 區段的 YARA-L 查詢。

  2. 選取日期範圍,然後按一下「執行搜尋」執行查詢。 在「統計資料」和「視覺化」分頁中查看結果。

  3. 在「Visualize」(視覺化) 分頁中,執行下列操作: a. 從「圖表類型」清單中選取圖表類型。 b. 調整「資料設定」下方的設定,即可自訂圖表。

  4. 在「Add to dashboard」(新增至資訊主頁) 畫面中,執行下列操作: a. 輸入圖表名稱說明時間範圍。 b. 選擇將圖表新增至現有資訊主頁,或建立新的資訊主頁。

  5. 按一下「新增至資訊主頁」,將圖表新增至資訊主頁。

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。