剖析器擴充功能

支援的國家/地區:

本文說明如何建立剖析器擴充功能,從原始記錄資料中擷取欄位,並將這些欄位對應至 Google Security Operations 平台中的目標 UDM (Unified Data Model) 欄位。

這份文件概述剖析器擴充功能的建立程序:

建立剖析器擴充功能

剖析器擴充功能提供彈性的方式,可擴充現有預設 (和自訂) 剖析器的功能。剖析器擴充功能提供彈性方式,可擴充現有預設 (或自訂) 剖析器的功能,不必取代這些剖析器。您可以透過擴充功能自訂剖析器管道,方法是新增剖析邏輯、擷取及轉換欄位,以及更新或移除 UDM 欄位對應。

剖析器擴充功能與自訂剖析器不同。您可以為沒有預設剖析器的記錄類型建立自訂剖析器,或是選擇不接收剖析器更新

剖析器擷取和正規化程序

Google SecOps 會以原始記錄的形式接收原始記錄資料。預設 (和自訂) 剖析器會擷取核心記錄欄位,並將其正規化為 UDM 記錄中的結構化 UDM 欄位。這僅代表原始記錄資料的子集。您可以定義剖析器擴充功能,擷取預設剖析器未處理的記錄檔值。啟用後,剖析器擴充功能就會成為 Google SecOps 資料擷取和正規化程序的一部分。

擷取和正規化工作流程

定義新的剖析器擴充功能

預設剖析器包含預先定義的對應指令集,可指定如何擷取、轉換及正規化核心安全性值。您可以透過無程式碼 (「對應資料欄位」) 或程式碼片段方法定義對應指示,建立新的剖析器擴充功能:

  • 無程式碼方法

    無程式碼方法最適合從原始記錄中,以原生 JSON、XML 或 CSV 格式簡單擷取資料。您可以指定原始記錄來源欄位,並對應相應的目的地 UDM 欄位。

    舉例來說,如要使用簡單的等式比較,擷取最多 10 個欄位的 JSON 記錄資料。

  • 程式碼片段方法

    使用程式碼片段方法,您可以定義指令,從原始記錄中擷取及轉換值,並將這些值指派給 UDM 欄位。程式碼片段使用的 Logstash 類似語法,與預設 (或自訂) 剖析器相同。

    這種做法適用於所有支援的記錄檔格式。最適合下列情境:

    • 複雜的資料擷取或邏輯。
    • 需要 Grok 型剖析器的非結構化資料。
    • 非 JSON 格式,例如 CSV 和 XML。

    程式碼片段會使用函式,從原始記錄資料中擷取特定資料。例如 Grok、JSON、KV 和 XML。

    在大多數情況下,最好使用預設 (或自訂) 剖析器中使用的資料對應方法。

將新擷取的值併入 UDM 欄位

啟用後,剖析器擴充功能會根據預先定義的合併原則,將新擷取的值合併至對應 UDM 記錄中指定的 UDM 欄位。例如:

  • 覆寫現有值:擷取的值會覆寫目標 UDM 欄位中的現有值。

    重複欄位是例外狀況,您可以設定剖析器擴充功能,在將資料寫入 UDM 記錄中的重複欄位時,附加新值。

  • 剖析器擴充功能優先:剖析器擴充功能中的資料對應指示,優先於該記錄檔類型預設 (或自訂) 剖析器中的指示。如果對應指令發生衝突,剖析器擴充功能會覆寫預設值。

    舉例來說,如果預設剖析器將原始記錄檔欄位對應至 event.metadata.description UDM 欄位,而剖析器擴充功能將不同的原始記錄檔欄位對應至同一個 UDM 欄位,則剖析器擴充功能會覆寫預設剖析器設定的值。

限制

  • 每個記錄類型只能有一個剖析器擴充功能:每個記錄類型只能建立一個剖析器擴充功能。
  • 只能採用一種資料對應指示方法:您可以使用無程式碼或程式碼片段方法建立剖析器擴充功能,但不能同時使用這兩種方法。
  • 用於驗證的記錄樣本:如要驗證 UDM 剖析器擴充功能,必須提供過去 30 天的記錄樣本。詳情請參閱「確認記錄類型有可用的剖析器」。
  • 基本剖析器錯誤:基本剖析器錯誤無法在剖析器擴充功能中識別或修正。
  • 程式碼片段中的重複欄位:請謹慎取代程式碼片段中的整個重複物件,以免不慎遺失資料。詳情請參閱「進一步瞭解重複欄位選取器」。
  • 消歧事件:剖析器擴充功能無法處理單一記錄中有多個不重複事件的記錄,例如 Google 雲端硬碟陣列。
  • XML 和無程式碼:XML 不支援無程式碼模式。請改用程式碼片段方法。

  • 無法追溯資料:您無法追溯剖析原始記錄資料。

  • 使用無程式碼方法時的保留關鍵字:如果記錄檔包含下列任何保留關鍵字,請使用程式碼片段方法,而非無程式碼方法:

    • collectionTimestamp
    • createTimestamp
    • enableCbnForLoop
    • event
    • filename
    • message
    • namespace
    • output
    • onErrorCount
    • timestamp
    • timezone
  • 移除現有對應關係:您只能使用程式碼片段方法,移除現有的 UDM 欄位對應關係。

  • 移除重複 IP 欄位的對應:您無法移除重複 IP 欄位的 UDM 欄位對應。

剖析器概念

下列文件說明重要的剖析器概念:

必要條件

建立剖析器擴充功能的必要條件:

  • 記錄類型必須有有效的預設 (或自訂) 剖析器。
  • Google SecOps 必須能夠使用預設 (或自訂) 剖析器,擷取及正規化原始記錄。
  • 請確認目標記錄類型的有效預設 (或自訂) 剖析器,在過去 30 天內已擷取原始記錄資料。這項資料應包含您打算擷取或用於篩選記錄的欄位樣本。這項資訊會用於驗證新的資料對應指示。

開始使用

建立剖析器擴充功能前,請先完成下列步驟:

  1. 確認必要條件

    確認記錄類型有有效的剖析器。如果尚未有剖析器,請建立自訂剖析器。

  2. 找出要從原始記錄中擷取的欄位

    找出要從原始記錄中擷取的欄位。

  3. 選取適當的 UDM 欄位

    選取適當的對應 UDM 欄位,以對應擷取的原始記錄欄位。

  4. 選擇剖析器擴充功能定義方法

    選擇任一擴充功能方法 (資料對應方法) 來建立剖析器擴充功能。

確認必要條件

請確認您要擴充的記錄類型有作用中的剖析器,如以下各節所述:

確認記錄類型有有效的剖析器

請確定您要擴充的記錄類型有有效的預設 (或自訂) 剖析器。

在下列清單中搜尋記錄類型:

確認記錄類型有自訂剖析器

如要確認記錄類型是否有自訂剖析器,請按照下列步驟操作:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」表格中,搜尋要擴充的記錄檔類型。

確認記錄類型已啟用剖析器

如要檢查記錄類型是否已啟用剖析器,請執行下列步驟:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」表格中,搜尋要擴充的記錄檔類型。

    如果記錄類型的剖析器未啟用,請啟用:

找出要從原始記錄檔擷取的欄位

分析要從中擷取資料的原始記錄,找出預設 (或自訂) 剖析器未擷取的欄位。請注意預設 (或自訂) 剖析器如何擷取原始記錄欄位,並將其對應至相應的 UDM 欄位。

如要找出要從原始記錄中擷取的特定欄位,可以使用搜尋工具找出這些欄位:

如要進一步瞭解如何搜尋原始記錄,請參閱:

選取適當的 UDM 欄位

現在您已找出要擷取的特定目標欄位,可以將這些欄位對應至相應的目的地 UDM 欄位。在原始記錄來源欄位和目的地 UDM 欄位之間建立明確的對應關係。您可以將資料對應至任何支援標準資料類型重複欄位的 UDM 欄位。

選擇正確的 UDM 欄位

下列資源可協助簡化程序:

熟悉 UDM 的主要概念

  • 邏輯物件:事件和實體

    UDM 結構定義會說明儲存資料的所有可用屬性。每筆 UDM 記錄都會說明事件或實體。資料會儲存在不同欄位,視記錄描述的是「事件」還是「實體」而定。

    • UDM 事件物件會儲存環境中發生的動作相關資料。原始事件記錄會說明裝置 (例如防火牆或網頁 Proxy) 記錄的動作。
    • UDM 實體物件會儲存 UDM 事件中參與者或實體的相關資料,例如環境中的資產、使用者或資源。
  • UDM 事件的結構

  • UDM 實體結構

  • UDM 名詞: 名詞代表 UDM 事件中的參與者或實體。舉例來說,名詞可以是執行事件所描述活動的裝置或使用者。名詞也可以是事件所描述活動的目標裝置或使用者。

    UDM 名詞 說明
    principal 負責發起事件中所述動作的實體。
    target 動作的接收者或對象。在防火牆連線中,接收連線的機器就是目標。
    src 主體執行的來源實體。舉例來說,如果使用者將檔案從一部電腦複製到另一部電腦,檔案和原始電腦就會以 src 表示。
    intermediary 在事件中擔任中介角色的任何實體,例如 Proxy 伺服器。這類外掛程式可以影響動作,例如封鎖或變更要求。
    observer 負責監控及回報事件,但不會直接與流量互動的實體。例如網路入侵偵測系統或安全資訊與事件管理系統。
    about 不屬於上述類別的任何其他事件相關實體。例如電子郵件附件,或在程序啟動期間載入的 DLL。

    在實務上,主體和目標名詞物件最常使用。此外,請注意,上述說明是名詞的建議用法。實際用量可能會因預設或自訂基礎剖析器的實作方式而異。

瞭解現有剖析器使用的資料對應

建議您先瞭解預設 (或自訂) 剖析器使用的現有資料對應,也就是原始記錄來源欄位與目的地 UDM 欄位之間的對應。

如要查看原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在「剖析器」表格中,搜尋要擴充的記錄檔類型。
  3. 前往該列,然後依序點按「選單」 >「查看」

    「剖析器程式碼」分頁會顯示原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應。

使用 UDM 查詢工具

使用 UDM 查詢工具,找出與原始記錄來源欄位相符的 UDM 欄位。

Google SecOps 提供 UDM 查詢工具,可協助您快速找出目的地 UDM 欄位。如要存取 UDM 查詢工具,請依序前往「調查」>「SIEM 搜尋」

如要瞭解如何使用 UDM 查詢工具,請參閱下列主題:

UDM 查詢工具範例

舉例來說,如果原始記錄中有一個名為「packets」的來源欄位,請使用 UDM 查詢工具找出名稱中含有「packets」的潛在目的地 UDM 欄位:

  1. 依序點選「調查」>「SIEM 搜尋」

  2. 在「SIEM Search」(SIEM 搜尋) 頁面的「Look up UDM fields by value」(按照值查詢 UDM 欄位) 欄位中輸入「packets」,然後按一下「UDM Lookup」(UDM 查詢)

    系統會開啟「UDM Lookup」對話方塊。搜尋工具會依「欄位名稱」或「欄位值」比對 UDM 欄位:

    • 欄位名稱查詢 - 系統會比對您輸入的文字字串與含有該文字的欄位名稱。
    • 欄位值查詢 - 將您輸入的值與儲存的記錄資料中包含該值的欄位進行比對。
  3. 在「UDM Lookup」(UDM 查詢) 對話方塊中,選取「UDM Fields」(UDM 欄位)

    搜尋功能會顯示潛在 UDM 欄位的清單,這些欄位的 UDM 欄位名稱中含有「packets」文字。

  4. 逐一點選每個資料列,即可查看各 UDM 欄位的說明。

避免發生錯誤的重要 UDM 注意事項

  • 外觀相似的欄位:UDM 的階層式結構可能會導致欄位名稱相似。如需相關指引,請參閱預設剖析器。詳情請參閱「瞭解現有剖析器使用的資料對應」。
  • 任意欄位對應:針對未直接對應至 UDM 欄位的資料,使用 additional 物件。詳情請參閱「將任意欄位對應至 UDM」。
  • 重複欄位:在程式碼片段中使用重複欄位時,請務必謹慎。取代整個物件可能會覆寫原始資料。 使用無程式碼方法可進一步控管重複欄位。詳情請參閱「進一步瞭解重複欄位選取器」。
  • UDM 事件類型適用的必要 UDM 欄位:將 UDM metadata.event_type 欄位指派給 UDM 記錄時,每個 event_type 都需要在 UDM 記錄中提供一組不同的相關欄位。詳情請參閱「進一步瞭解如何指派 UDM metadata.event_type 欄位」。
  • 基本剖析器問題:剖析器擴充功能無法修正基本剖析器的錯誤。基礎剖析器是建立 UDM 記錄的預設 (或自訂) 剖析器。請考慮強化剖析器擴充功能、修改基本剖析器,或預先篩選記錄等選項。
將任意欄位對應至 UDM

如果找不到合適的標準 UDM 欄位來儲存資料,請使用 additional 物件,將資料儲存為自訂鍵/值組合。即使 UDM 記錄沒有相符的 UDM 欄位,您還是能將重要資訊儲存在 UDM 記錄中。

選擇剖析器擴充功能定義方法

選擇剖析器擴充功能定義方法之前,請先完成下列章節:

接下來,請開啟「剖析器擴充功能」頁面,然後選取要用來定義剖析器擴充功能的擴充功能方法

開啟剖析器擴充功能頁面

您可以在「剖析器擴充功能」頁面定義新的剖析器擴充功能。

您可以透過下列方式開啟「剖析器擴充功能」頁面:從「設定」選單、從「原始記錄搜尋」,或從舊版「原始記錄搜尋」

從「設定」選單開啟

如要從「設定」選單開啟「剖析器擴充功能」頁面,請按照下列步驟操作:

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」

    「剖析器」表格會依記錄檔類型顯示預設剖析器清單。

  2. 找到要延長的記錄類型,然後依序點選「選單」圖示 「建立擴充功能」

    「剖析器擴充功能」頁面隨即開啟。

如要從「原始記錄搜尋」開啟「剖析器擴充功能」頁面,請按照下列步驟操作:

  1. 依序點選「調查」>「SIEM 搜尋」
  2. 在搜尋欄位中,將 raw = 前置字元加到搜尋引數,並將搜尋字詞放在引號內。例如:raw = "example.com"
  3. 按一下「執行搜尋」。 結果會顯示在「原始記錄」面板中。
  4. 在「原始記錄」面板中,按一下記錄 (資料列)。 系統會顯示「事件檢視」面板。
  5. 在「Event View」面板中,按一下「Raw Log」分頁。 系統會顯示原始記錄。
  6. 依序點選「管理剖析器」>「建立擴充功能」 >「下一步」

    「剖析器擴充功能」頁面隨即開啟。

如要從舊版「原始記錄搜尋」開啟「剖析器擴充功能」頁面,請按照下列步驟操作:

  1. 使用舊版「原始記錄」搜尋功能,搜尋與要剖析的記錄類似的記錄。
  2. 從「事件」>「時間軸」面板中選取事件。
  3. 展開「事件資料」面板。
  4. 依序點選「管理剖析器」>「建立擴充功能」>「下一步」

    「剖析器擴充功能」頁面隨即開啟。

剖析器擴充功能頁面

頁面會顯示「原始記錄」和「擴充功能定義」面板:

  • 「原始記錄」面板:

    系統會顯示所選記錄類型的原始記錄資料範例。 如果您是從「原始記錄搜尋」開啟頁面,範例資料就是搜尋結果。您可以使用「View as」(查看為) 選單 (RAW、JSON、CSV、XML 等) 和「Wrap Text」(換行) 核取方塊,設定範例格式。

    1. 確認顯示的原始記錄資料樣本可代表剖析器擴充功能將處理的記錄。

    2. 按一下「預覽 UDM 輸出內容」,即可查看範例原始記錄資料的 UDM 輸出內容。

  • 「擴充功能定義」面板:

    您可以透過兩種對應指示方法定義剖析器擴充功能:對應資料欄位 (免程式碼) 或編寫程式碼片段。您無法在同一個剖析器擴充功能中同時使用這兩種方法。

    視您選擇的方法而定,您可以指定要從傳入的原始記錄中擷取的來源記錄資料欄位,並將這些欄位對應至相應的 UDM 欄位,也可以編寫程式碼片段來執行這些工作及其他作業。

選取擴充功能做法

在「剖析器擴充功能」頁面的「擴充功能定義」面板中,選取「擴充功能方法」欄位,然後選擇下列其中一種方法來建立剖析器擴充功能:

  • 對應資料欄位 (無程式碼) 方法:

    這個方法可讓您指定原始記錄中的欄位,並將這些欄位對應至目的地 UDM 欄位。

    這個方法適用於下列原始記錄格式:

    • 原生 JSON、原生 XML 或 CSV。
    • Syslog 標頭加上原生 JSON、原生 XML 或 CSV。您可以為下列格式的原始記錄建立資料欄位類型對應指示:JSONXMLCSVSYSLOG + JSONSYSLOG + XMLSYSLOG + CSV

    請參閱下一個步驟的「建立無程式碼 (地圖資料欄位) 指示」。

  • 編寫程式碼片段方法:

    這種做法可讓您使用類似 Logstash 的語法指定指令,從原始記錄中擷取及轉換值,並將這些值指派給 UDM 記錄中的 UDM 欄位。

    • 程式碼片段使用的語法和區段,與預設 (或自訂) 剖析器相同。詳情請參閱「剖析器語法」。

    • 這種做法適用於該記錄檔類型支援的所有資料格式

    請參閱下一個步驟:建立程式碼片段操作說明

建立無程式碼 (地圖資料欄位) 指示

免程式碼方法 (也稱為「對應資料欄位」方法) 可讓您指定原始記錄欄位的路徑,並將這些欄位對應至相應的目標 UDM 欄位。

使用免程式碼方法建立剖析器擴充功能前,請先完成下列章節:

定義剖析器擴充功能的後續步驟如下:

  1. 設定重複欄位選取器
  2. 為每個欄位定義資料對應指示
  3. 提交並啟用剖析器擴充功能

設定「重複欄位」選取器

在「擴充功能定義」面板的「重複欄位」欄位中,設定剖析器擴充功能應如何將值儲存至重複欄位 (支援值陣列的欄位,例如 principal.ip):

  • 附加值:新擷取的值會附加至 UDM 陣列欄位中儲存的現有值集。
  • 取代值:新擷取的值會取代 UDM 陣列欄位中現有的值集,這些值先前是由預設剖析器儲存。

「重複欄位」選取器中的設定不會影響非重複欄位。

詳情請參閱「進一步瞭解重複欄位選取工具」。

為每個欄位定義資料對應指示

為要從原始記錄中擷取的每個欄位定義資料對應指令。指令應指定原始記錄中的來源欄位路徑,並將其對應至目的地 UDM 欄位。

  1. 如果「原始記錄」面板中顯示的原始記錄樣本包含 Syslog 標頭,則會顯示「Syslog」和「目標」欄位。(部分記錄格式不含 Syslog 標頭,例如原生 JSON、原生 XML 或 CSV)。

    Google SecOps 需要 Syslog 和「目標」欄位,才能預先處理 Syslog 標頭,並擷取記錄的結構化部分。

    1. 定義下列欄位:

      • Syslog:這是使用者定義的模式,可預先處理原始記錄,並將系統記錄標頭與結構化部分分開。

        使用 Grok 和規則運算式指定擷取模式,找出 Syslog 標頭和原始記錄訊息。詳情請參閱「定義 Syslog 擷取器欄位」。

      • 目標:Syslog 欄位中的變數名稱,用於儲存記錄的結構化部分。

        在擷取模式中指定變數名稱,用來儲存記錄的結構化部分。

      以下分別是「Syslog」和「目標」欄位的擷取模式和變數名稱範例。

      Syslog 擷取器欄位

    2. 在「Syslog」和「目標」欄位中輸入值後,請按一下「驗證」按鈕。

      驗證程序會檢查語法和剖析錯誤,然後傳回下列任一項目:

      • 成功:系統會顯示資料對應欄位。定義剖析器擴充功能的其餘部分。
      • 失敗:系統會顯示錯誤訊息。請先修正錯誤情況再繼續。
  2. 視需要定義前置條件指令。

    前置條件指令會將靜態值與原始記錄中的欄位比對,找出剖析器擴充功能要處理的原始記錄子集。如果傳入的原始記錄符合前提條件,剖析器擴充功能就會套用對應指令。如果值不相符,剖析器擴充功能就不會套用對應指令。

    填寫下列欄位:

    • 前置條件欄位:原始記錄中的欄位 ID,內含要比較的價值。如果記錄資料格式為 JSON 或 XML,請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入欄位位置。
    • 先決條件運算子:選取 EQUALSNOT EQUALS
    • 先決條件值:這個靜態值會與原始記錄中的先決條件欄位進行比較。

    如需前置條件指令的另一個範例,請參閱「無程式碼 - 使用前置條件值擷取欄位」。

  3. 將原始記錄檔資料欄位對應至目的地 UDM 欄位:

    • 原始資料欄位:如果記錄資料格式為 JSON (例如:jsonPayload.connection.dest_ip) 或 XML (例如:/Event/Reason-Code),請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入資料欄位置 (注意:索引位置從 1 開始)。

    • 目的地欄位:輸入用來儲存值的完整 UDM 欄位名稱,例如 udm.metadata.collected_timestamp.seconds

  4. 如要繼續新增更多欄位,請按一下「新增」,然後輸入下一個欄位的所有對應指示詳細資料。

如需其他欄位對應範例,請參閱「無程式碼 - 擷取欄位」。

提交並啟用剖析器擴充功能

為要從原始記錄中擷取的所有欄位定義資料對應指示後,請提交並啟用剖析器擴充功能。

按一下「提交」,儲存並驗證對應指示。

Google SecOps 會驗證對應指示:

  • 如果驗證程序成功,狀態會變更為「有效」,且對應指令會開始處理傳入的記錄資料。
  • 如果驗證程序失敗,狀態會變更為「失敗」,且「原始記錄」欄位會顯示錯誤。

    以下是驗證錯誤的範例:

      ERROR: generic::unknown: pipeline.ParseLogEntry failed: LOG_PARSING_CBN_ERROR:
      "generic::invalid_argument: pipeline failed: filter mutate (7) failed: copy failure:
      copy source field \"jsonPayload.dest_instance.region\" must not be empty
      (try using replace to provide the value before calling copy)
    
      "LOG: {"insertId":"14suym9fw9f63r","jsonPayload":{"bytes_sent":"492",
      "connection":{"dest_ip":"10.12.12.33","dest_port":32768,"protocol":6,
      "src_ip":"10.142.0.238","src_port":22},"end_time":"2023-02-13T22:38:30.490546349Z",
      "packets_sent":"15","reporter":"SRC","src_instance":{"project_id":"example-labs",
      "region":"us-east1","vm_name":"example-us-east1","zone":"us-east1-b"},
      "src_vpc":{"project_id":"example-labs","subnetwork_name":"default",
      "vpc_name":"default"},"start_time":"2023-02-13T22:38:29.024032655Z"},
      "logName":"projects/example-labs/logs/compute.googleapis.com%2Fvpc_flows",
      "receiveTimestamp":"2023-02-13T22:38:37.443315735Z","resource":{"labels":
      {"location":"us-east1-b","project_id":"example-labs",
        "subnetwork_id":"00000000000000000000","subnetwork_name":"default"},
        "type":"gce_subnetwork"},"timestamp":"2023-02-13T22:38:37.443315735Z"}
    

    剖析器擴充功能的生命週期狀態

    剖析器擴充功能有下列生命週期狀態:

  • DRAFT:新建立的剖析器擴充功能,尚未提交。

  • VALIDATING:Google SecOps 會根據現有的原始記錄驗證對應指示,確保欄位剖析作業沒有錯誤。

  • LIVE:剖析器擴充功能通過驗證,現已投入生產。 並從傳入的原始記錄檔中擷取資料,然後轉換為 UDM 記錄。

  • FAILED:剖析器擴充功能驗證失敗。

重複欄位選取器簡介

某些 UDM 欄位會儲存值陣列,例如 principal.ip 欄位。「重複欄位」選取器可讓您控管剖析器擴充功能如何將新擷取的資料儲存在「重複欄位」中:

  • 附加值

    剖析器擴充功能會將新擷取的值附加至 UDM 欄位中現有值的陣列。

  • 取代值

    剖析器擴充功能會以新擷取的值,取代 UDM 欄位中的現有值陣列。

只有當重複欄位位於階層的最低層級時,剖析器擴充功能才能將資料對應至重複欄位。例如:

  • 系統支援將值對應至 udm.principal.ip,因為重複的 ip 欄位位於階層的最低層級,且 principal 不是重複欄位
  • 系統不支援將值對應至 udm.intermediary.hostname,因為 intermediary重複欄位,且不位於階層的最低層級。

下表提供範例,說明「重複欄位」選取器設定如何影響產生的 UDM 記錄。

選取「重複欄位」 範例記錄 剖析器擴充功能設定 生成結果
附加值 {"protoPayload":{"@type":"type.AuditLog","authenticationInfo":{"principalEmail":"admin@cmmar.co"},"requestMetadata":{"callerIp":"1.1.1.1, 2.2.2.2"}}} 先決條件欄位:protoPayload.requestMetadata.callerIp
先決條件值:" "
先決條件運算子:NOT_EQUALS
原始資料欄位:protoPayload.requestMetadata.callerIp
目的地欄位:event.idm.read_only_udm.principal.ip
metadata:{event_timestamp:{}.....}principal:{Ip:"1.1.1.1, 2.2.2.2"} } }
附加值 {"protoPayload":{"@type":"type.AuditLog","authenticationInfo":{"principalEmail":"admin@cmmar.co"},"requestMetadata":{"callerIp":"2.2.2.2, 3.3.3.3", "name":"Akamai Ltd"}}} 前置條件 1:
前置條件欄位:protoPayload.requestMetadata.callerIp
前置條件值:" "
前置條件運算子:NOT_EQUALS
原始資料欄位:protoPayload.requestMetadata.callerIp
目的地欄位:event.idm.read_only_udm.principal.ip

前提條件 2:
原始資料欄位:protoPayload.requestMetadata.name
目的地欄位:event.idm.read_only_udm.metadata.product_name

在套用擴充功能前,預先建構的剖析器產生的事件。
metadata:{event_timestamp:{} ... principal:{ip:"1.1.1.1"}}}

套用擴充功能後的輸出內容。
timestamp:{} idm:{read_only_udm:{metadata:{event_timestamp:{} .... product_name: "Akamai Ltd"}principal:{ip:"1.1.1.1, 2.2.2.2, 3.3.3.3"}}}

替換值 {"protoPayload":{"@type":"type..AuditLog","authenticationInfo":{"principalEmail":"admin@cmmar.co"},"requestMetadata":{"callerIp":"2.2.2.2"}}} 先決條件欄位:protoPayload.authenticationInfo.principalEmail
先決條件值:" "
先決條件運算子:NOT_EQUALS
原始資料欄位:protoPayload.authenticationInfo.principalEmail
目的地欄位:event.idm.read_only_udm.principal.ip
套用擴充功能前,預先建構的剖析器產生的 UDM 事件。
timestamp:{} idm:{read_only_udm:{metadata:{event_timestamp:{} ... principal:{ip:"1.1.1.1"}}}

套用擴充功能後的 UDM 輸出內容 timestamp:{} idm:{read_only_udm:{metadata:{event_timestamp:{} ....} principal:{ip:"2.2.2.2"}}}

進一步瞭解 Syslog 擷取器欄位

您可以定義 Grok、規則運算式,以及規則運算式模式中的具名權杖,將 Syslog 標頭與結構化記錄檔分開,並儲存輸出內容。

定義 Syslog 擷取器欄位

「Syslog」和「Target」欄位中的值會共同定義剖析器擴充功能如何將 Syslog 標頭與原始記錄的結構化部分分開。在「Syslog」Syslog欄位中,您可以使用 Grok 和規則運算式語法組合定義運算式。運算式包含變數名稱,可識別原始記錄的結構化部分。在「目標」欄位中,指定該變數名稱。

以下範例說明這些欄位如何搭配運作。

以下是原始記錄的範例:

<13>1 2022-09-14T15:03:04+00:00 fieldname fieldname - - - {"timestamp": "2021-03-14T14:54:40.842152+0000","flow_id": 1885148860701096, "src_ip": "10.11.22.1","src_port": 51972,"dest_ip": "1.2.3.4","dest_port": 55291,"proto": "TCP"}

原始記錄包含下列部分:

  • Syslog 標頭:<13> 2022-09-14T15:03:04+00:00 fieldname fieldname - - -

  • JSON 格式的事件:{"timestamp": "2021-03-14T14:54:40.842152+0000","flow_id": 1885148860701096, "src_ip": "10.11.22.1","src_port": 51972,"dest_ip": "1.2.3.4","dest_port": 55291,"proto": "TCP"}

如要將 Syslog 標頭與原始記錄的 JSON 部分分開,請在「Syslog」Syslog欄位中使用下列範例運算式: %{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:msg}

  • 運算式的這個部分會識別 Syslog 標頭: %{TIMESTAMP\_ISO8601} %{WORD} %{WORD} ([- ]+)?
  • 運算式的這個部分會擷取原始記錄的 JSON 區段: %{GREEDYDATA:msg}

這個範例包含變數名稱 msg。您可以選擇變數名稱。 剖析器擴充功能會擷取原始記錄的 JSON 區段,並指派給 msg 變數。

在「目標」欄位中,輸入變數名稱 msg。儲存在 msg 變數中的值,會輸入至您在剖析器擴充功能中建立的資料欄位對應指示。

以原始記錄範例為例,以下區隔會輸入至資料對應指令:

{"timestamp": "2021-03-14T14:54:40.842152+0000","flow_id": 1885148860701096, "src_ip": "10.11.22.1","src_port": 51972,"dest_ip": "1.2.3.4","dest_port": 55291,"proto": "TCP"}

以下顯示已填寫的「Syslog」和「Target」欄位:

Syslog 擷取器欄位

下表提供更多範例,包括範例記錄、Syslog 擷取模式、Target 變數名稱和結果。

原始記錄範例 系統記錄檔欄位 目標欄位 結果
<13>1 2022-07-14T15:03:04+00:00 suricata suricata - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}" %{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:msg} msg field_mappings { field: "msg" value: "{\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}" }
<13>1 2022-07-14T15:03:04+00:00 suricata suricata - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\"} - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"} %{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:msg1} ([- ]+)?%{GREEDYDATA:msg2} msg2 field_mappings { field: "msg2" value: "{\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}" }
"<13>1 2022-07-14T15:03:04+00:00 suricata suricata - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\"} - - - {\"timestamp\": \"2021-03-14T14:54:40.842152+0000\",\"flow_id\": 1885148860701096,\"in_iface\": \"enp94s0\",\"event_type\": \"alert\",\"vlan\": 522,\"src_ip\": \"1.1.2.1\",\"src_port\": 51972,\"dest_ip\": \"1.2.3.4\",\"dest_port\": 55291,\"proto\": \"TCP\"}" %{TIMESTAMP_ISO8601} %{WORD} %{WORD} ([- ]+)?%{GREEDYDATA:message} ([- ]+)?%{GREEDYDATA:msg2} msg2 Error - message already exists in state and not overwritable.

進一步瞭解如何指派 UDM metadata.event_type 欄位

將 UDM metadata.event_type 欄位指派給 UDM 記錄時,系統會進行驗證,確保 UDM 記錄中包含必要的相關欄位。每個 UDM metadata.event_type 都需要一組不同的相關欄位,例如,沒有 userUSER_LOGIN 事件就沒有用。

如果缺少必要的相關欄位,UDM 驗證會傳回錯誤:

  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT"
  }

Grok 剖析器會傳回更詳細的錯誤:

  generic::unknown: 
  invalid event 0: LOG_PARSING_GENERATED_INVALID_EVENT: 
  "generic::invalid_argument: udm validation failed: target field is not set"

如要找出要指派的 UDM event_type 必填欄位,請使用下列資源:

  • Google SecOps 說明文件:UDM 使用指南 - 各事件類型的必要和選用 UDM 欄位

  • 第三方非官方資源:UDM 事件驗證

    如果 UDM 使用指南缺少詳細資料,本文會提供填入特定 UDM metadata.event_type 時所需的最低強制性 UDM 欄位,以補充官方文件。

    舉例來說,開啟文件並搜尋 GROUP_CREATION 事件類型。

    您應該會看到下列最低 UDM 欄位,以 UDM 物件的形式呈現:

    {
        "metadata": {
            "event_timestamp": "2023-07-03T13:01:10.957803Z",
            "event_type": "GROUP_CREATION"
        },
        "principal": {
            "user": {
                "userid": "pinguino"
            }
        },
        "target": {
            "group": {
                "group_display_name": "foobar_users"
            }
        }
    }
    

建立程式碼片段指令

使用程式碼片段方法時,您可以運用類似 Logstash 的語法,定義如何從原始記錄檔擷取及轉換值,並將這些值指派給 UDM 記錄中的 UDM 欄位。

使用程式碼片段建立剖析器擴充功能之前,請先完成下列章節:

定義剖析器擴充功能的後續步驟如下:

  1. 如需相關訣竅和最佳做法,請參閱「撰寫程式碼片段指令的訣竅和最佳做法」。
  2. 建立程式碼片段指令
  3. 提交程式碼片段指令

撰寫程式碼片段指令的訣竅與最佳做法

如果 Grok 模式有誤、重新命名或取代作業失敗,或是出現語法錯誤,程式碼片段指示可能會失敗。如需提示和最佳做法,請參閱下列文章:

建立程式碼片段操作說明

程式碼片段指令使用的語法和區段,與預設 (或自訂) 剖析器相同:

  • 第 1 節:從原始記錄中擷取資料。
  • 第 2 節。轉換擷取的資料。
  • 第 3 節。為一或多個 UDM 欄位指派值。
  • 第 4 節。將 UDM 事件欄位繫結至 @output 鍵。

如要使用程式碼片段方法建立剖析器擴充功能,請按照下列步驟操作:

  1. 在「剖析器擴充功能」頁面的「CBN 程式碼片段」面板中,輸入程式碼片段來建立剖析器擴充功能。
  2. 按一下「驗證」,驗證對應指示。

程式碼片段指令範例

以下範例說明程式碼片段。

以下是原始記錄的範例:

  {
      "insertId": "00000000",
      "jsonPayload": {
          ...section omitted for brevity...
          "packets_sent": "4",
          ...section omitted for brevity...
      },
      "timestamp": "2022-05-03T01:45:00.150614953Z"
  }

以下程式碼片段範例會將 jsonPayload.packets_sent 中的值對應至 network.sent_bytes UDM 欄位:

mutate {
 replace => {
    "jsonPayload.packets_sent" => ""
 }
}
filter {
    # Section 1. extract data from the raw JSON log
    json {
        source => "message"
        array_function => "split_columns"
        on_error => "_not_json"
    }
    if [_not_json] {
        drop {
            tag => "TAG_UNSUPPORTED"
        }
    } else {
        # Section 2. transform the extracted data
        if [jsonPayload][packets_sent] not in ["",0] {
            mutate {
                convert => {
                    "jsonPayload.packets_sent" => "uinteger"
                }
            }
            # Section 3. assign the value to a UDM field
            mutate {
                copy => {
                    "udm.network.sent_bytes" => "jsonPayload.packets_sent"
                }
                on_error => "_exception"
            }
            if ![_exception] {
                # Section 4. Bind the UDM fields to the @output key
                mutate {
                    merge => {
                        "@output" => "event"
                    }
                }
            }
        }
    }
}

提交程式碼片段指令

  1. 按一下「提交」即可儲存對應指示。

  2. Google SecOps 會驗證對應指示。

    • 如果驗證程序成功,狀態會變更為「有效」,且對應指令會開始處理傳入的記錄資料。
    • 如果驗證程序失敗,狀態會變更為「失敗」,且「原始記錄」欄位會顯示錯誤。

管理現有的剖析器擴充功能

您可以查看、編輯、刪除及控管現有剖析器擴充功能的存取權。

查看現有的剖析器擴充功能

  1. 在導覽列中,依序選取「SIEM 設定」 >「剖析器」
  2. 在剖析器清單中,找出要查看的剖析器 (記錄類型)。如果剖析器有剖析器擴充功能,名稱旁會顯示 EXTENSION 文字。
  3. 前往該列,然後依序點選「選單」 >「查看擴充功能」

    「View Custom/Prebuilt Parser」 >「Extension」分頁隨即顯示,其中包含剖析器擴充功能的詳細資料。摘要面板預設會顯示 LIVE 剖析器擴充功能。

編輯剖析器擴充功能

  1. 如要開啟「View Custom/Prebuilt Parser」 >「Extension」分頁標籤,請參閱「查看現有剖析器擴充功能」一文。

  2. 按一下「編輯擴充功能」按鈕,

    系統會顯示「剖析器擴充功能」頁面。

  3. 編輯剖析器擴充功能。

    • 如要取消編輯並捨棄變更,請按一下「捨棄草稿」

    • 如要隨時刪除剖析器擴充功能,請按一下「Delete Failed Extension」(刪除失敗的擴充功能)

    • 編輯剖析器擴充功能完成後,請按一下「提交」

      系統會執行驗證程序,驗證新設定。

刪除剖析器擴充功能

  1. 如「查看現有剖析器擴充功能」一文所述,開啟「View Custom/Prebuilt Parser」 >「Extension」分頁標籤

  2. 按一下「刪除擴充功能」按鈕。

控管剖析器擴充功能的存取權

根據預設,具備「管理員」角色的使用者可以存取剖析器擴充功能。 您可以控管哪些人可以查看及管理剖析器擴充功能。如要進一步瞭解如何管理使用者和群組,或指派角色,請參閱角色型存取權控管

下表匯總了 Google SecOps 的新角色。

功能 動作 說明
剖析器 刪除 刪除剖析器擴充功能。
剖析器 編輯 建立及編輯剖析器擴充功能。
剖析器 查看 查看剖析器擴充功能。

使用剖析器擴充功能移除 UDM 欄位對應

您可以使用剖析器擴充功能移除現有的 UDM 欄位對應。

  1. 依序點選「SIEM 設定」>「剖析器」
  2. 如要查看「剖析器擴充功能」頁面,請使用下列任一方法:
    • 如要查看現有擴充功能,請依序點選「選單」圖示 >「擴充剖析器」>「查看擴充功能」
    • 如要建立新的剖析器擴充功能,請依序點選「選單」圖示 >「擴充剖析器」>「建立擴充功能」
  3. 選取「撰寫程式碼片段」做為擴充方法,新增自訂程式碼片段,移除特定 UDM 欄位的值。

    如要使用現有擴充功能,請在「剖析器擴充功能」窗格中按一下「編輯」,然後新增程式碼片段。

    如需程式碼片段範例,請參閱「程式碼片段 - 移除現有對應」。

  4. 按照「提交程式碼片段指令」中的步驟提交擴充功能。

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