剖析器擴充功能
本文說明如何建立剖析器擴充功能,從原始記錄資料中擷取欄位,並將這些欄位對應至 Google Security Operations 平台中的目標 UDM (Unified Data Model) 欄位。
這份文件概述剖析器擴充功能的建立程序:
- 建立剖析器擴充功能。
- 必要條件和限制。
- 找出原始記錄資料中的來源欄位。
- 選取適當的目的地 UDM 欄位。
-
定義剖析器擴充功能包括設計剖析邏輯,以篩選原始記錄檔資料、轉換資料,並將資料對應至目標 UDM 欄位。Google SecOps 提供兩種建立剖析器擴充功能的做法:
- 使用無程式碼 (對應資料欄位) 方法建立剖析器擴充功能。
- 使用程式碼片段方法建立剖析器擴充功能。
各種記錄格式和情境的剖析器擴充功能建立範例。舉例來說,您可以使用 JSON 建立無程式碼範例,並使用程式碼片段處理複雜邏輯或非 JSON 格式 (CSV、XML、Syslog)。
建立剖析器擴充功能
剖析器擴充功能提供彈性的方式,可擴充現有預設 (和自訂) 剖析器的功能。剖析器擴充功能提供彈性方式,可擴充現有預設 (或自訂) 剖析器的功能,不必取代這些剖析器。您可以透過擴充功能自訂剖析器管道,方法是新增剖析邏輯、擷取及轉換欄位,以及更新或移除 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 天內已擷取原始記錄資料。這項資料應包含您打算擷取或用於篩選記錄的欄位樣本。這項資訊會用於驗證新的資料對應指示。
開始使用
建立剖析器擴充功能前,請先完成下列步驟:
-
確認記錄類型有有效的剖析器。如果尚未有剖析器,請建立自訂剖析器。
-
找出要從原始記錄中擷取的欄位。
-
選取適當的對應 UDM 欄位,以對應擷取的原始記錄欄位。
-
選擇任一擴充功能方法 (資料對應方法) 來建立剖析器擴充功能。
確認必要條件
請確認您要擴充的記錄類型有作用中的剖析器,如以下各節所述:
確認記錄類型有有效的剖析器
請確定您要擴充的記錄類型有有效的預設 (或自訂) 剖析器。
在下列清單中搜尋記錄類型:
-
- 如果記錄類型有預設剖析器,請確保剖析器處於啟用狀態。
- 如果記錄類型沒有預設剖析器,請確認記錄類型有自訂剖析器。
-
- 如果記錄類型沒有預設剖析器,請確認記錄類型有自訂剖析器。
確認記錄類型有自訂剖析器
如要確認記錄類型是否有自訂剖析器,請按照下列步驟操作:
- 在導覽列中,依序選取「SIEM 設定」 >「剖析器」。
在「剖析器」表格中,搜尋要擴充的記錄檔類型。
- 如果該記錄類型尚未有預設或自訂剖析器,請按一下「建立剖析器」,然後按照「根據對應指示建立自訂剖析器」一文中的步驟操作。
- 如果該記錄類型已有自訂剖析器,請確認剖析器處於啟用狀態。
確認記錄類型已啟用剖析器
如要檢查記錄類型是否已啟用剖析器,請執行下列步驟:
- 在導覽列中,依序選取「SIEM 設定」 >「剖析器」。
在「剖析器」表格中,搜尋要擴充的記錄檔類型。
如果記錄類型的剖析器未啟用,請啟用:
找出要從原始記錄檔擷取的欄位
分析要從中擷取資料的原始記錄,找出預設 (或自訂) 剖析器未擷取的欄位。請注意預設 (或自訂) 剖析器如何擷取原始記錄欄位,並將其對應至相應的 UDM 欄位。
如要找出要從原始記錄中擷取的特定欄位,可以使用搜尋工具找出這些欄位:
如要存取搜尋工具,請依序前往「調查」>「SIEM 搜尋」。在搜尋查詢前輸入 raw=。詳情請參閱「進行原始記錄搜尋」。
如要使用舊版搜尋工具,請按一下「SIEM 搜尋」頁面頂端的「前往舊版搜尋」。詳情請參閱「使用原始記錄掃描功能搜尋原始記錄」。
如要進一步瞭解如何搜尋原始記錄,請參閱:
選取適當的 UDM 欄位
現在您已找出要擷取的特定目標欄位,可以將這些欄位對應至相應的目的地 UDM 欄位。在原始記錄來源欄位和目的地 UDM 欄位之間建立明確的對應關係。您可以將資料對應至任何支援標準資料類型或重複欄位的 UDM 欄位。
選擇正確的 UDM 欄位
下列資源可協助簡化程序:
- 熟悉主要的 UDM 概念
- 瞭解現有剖析器使用的資料對應
- 使用 UDM 查詢工具,找出與來源欄位相符的潛在 UDM 欄位。
- 「剖析器資料對應的重要 UDM 欄位」指南包含 UDM 結構定義最常用欄位的摘要和說明。
- 整合式資料模型欄位清單包含所有 UDM 欄位及其說明。清單中的「重複」標籤會標示重複欄位。
- 避免發生錯誤的重要 UDM 注意事項
熟悉 UDM 的主要概念
-
UDM 結構定義會說明儲存資料的所有可用屬性。每筆 UDM 記錄都會說明事件或實體。資料會儲存在不同欄位,視記錄描述的是「事件」還是「實體」而定。
- UDM 事件物件會儲存環境中發生的動作相關資料。原始事件記錄會說明裝置 (例如防火牆或網頁 Proxy) 記錄的動作。
- UDM 實體物件會儲存 UDM 事件中參與者或實體的相關資料,例如環境中的資產、使用者或資源。
UDM 名詞: 名詞代表 UDM 事件中的參與者或實體。舉例來說,名詞可以是執行事件所描述活動的裝置或使用者。名詞也可以是事件所描述活動的目標裝置或使用者。
UDM 名詞 說明 principal
負責發起事件中所述動作的實體。 target
動作的接收者或對象。在防火牆連線中,接收連線的機器就是目標。 src
主體執行的來源實體。舉例來說,如果使用者將檔案從一部電腦複製到另一部電腦,檔案和原始電腦就會以 src 表示。 intermediary
在事件中擔任中介角色的任何實體,例如 Proxy 伺服器。這類外掛程式可以影響動作,例如封鎖或變更要求。 observer
負責監控及回報事件,但不會直接與流量互動的實體。例如網路入侵偵測系統或安全資訊與事件管理系統。 about
不屬於上述類別的任何其他事件相關實體。例如電子郵件附件,或在程序啟動期間載入的 DLL。 在實務上,主體和目標名詞物件最常使用。此外,請注意,上述說明是名詞的建議用法。實際用量可能會因預設或自訂基礎剖析器的實作方式而異。
瞭解現有剖析器使用的資料對應
建議您先瞭解預設 (或自訂) 剖析器使用的現有資料對應,也就是原始記錄來源欄位與目的地 UDM 欄位之間的對應。
如要查看原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應:
- 在導覽列中,依序選取「SIEM 設定」 >「剖析器」。
- 在「剖析器」表格中,搜尋要擴充的記錄檔類型。
前往該列,然後依序點按「選單」
>「查看」。「剖析器程式碼」分頁會顯示原始記錄來源欄位與現有預設 (或自訂) 剖析器中使用的目的地 UDM 欄位之間的資料對應。
使用 UDM 查詢工具
使用 UDM 查詢工具,找出與原始記錄來源欄位相符的 UDM 欄位。
Google SecOps 提供 UDM 查詢工具,可協助您快速找出目的地 UDM 欄位。如要存取 UDM 查詢工具,請依序前往「調查」>「SIEM 搜尋」。
如要瞭解如何使用 UDM 查詢工具,請參閱下列主題:
UDM 查詢工具範例
舉例來說,如果原始記錄中有一個名為「packets」的來源欄位,請使用 UDM 查詢工具找出名稱中含有「packets」的潛在目的地 UDM 欄位:
依序點選「調查」>「SIEM 搜尋」。
在「SIEM Search」(SIEM 搜尋) 頁面的「Look up UDM fields by value」(按照值查詢 UDM 欄位) 欄位中輸入「packets」,然後按一下「UDM Lookup」(UDM 查詢)。
系統會開啟「UDM Lookup」對話方塊。搜尋工具會依「欄位名稱」或「欄位值」比對 UDM 欄位:
- 依欄位名稱查詢 - 系統會比對您輸入的文字字串與含有該文字的欄位名稱。
- 依欄位值查詢 - 將您輸入的值與儲存的記錄資料中包含該值的欄位進行比對。
在「UDM Lookup」(UDM 查詢) 對話方塊中,選取「UDM Fields」(UDM 欄位)。
搜尋功能會顯示潛在 UDM 欄位的清單,這些欄位的 UDM 欄位名稱中含有「packets」文字。
逐一點選每個資料列,即可查看各 UDM 欄位的說明。
避免發生錯誤的重要 UDM 注意事項
- 外觀相似的欄位:UDM 的階層式結構可能會導致欄位名稱相似。如需相關指引,請參閱預設剖析器。詳情請參閱「瞭解現有剖析器使用的資料對應」。
- 任意欄位對應:針對未直接對應至 UDM 欄位的資料,使用
additional
物件。詳情請參閱「將任意欄位對應至 UDM」。 - 重複欄位:在程式碼片段中使用重複欄位時,請務必謹慎。取代整個物件可能會覆寫原始資料。 使用無程式碼方法可進一步控管重複欄位。詳情請參閱「進一步瞭解重複欄位選取器」。
- UDM 事件類型適用的必要 UDM 欄位:將 UDM
metadata.event_type
欄位指派給 UDM 記錄時,每個event_type
都需要在 UDM 記錄中提供一組不同的相關欄位。詳情請參閱「進一步瞭解如何指派 UDMmetadata.event_type
欄位」。 - 基本剖析器問題:剖析器擴充功能無法修正基本剖析器的錯誤。基礎剖析器是建立 UDM 記錄的預設 (或自訂) 剖析器。請考慮強化剖析器擴充功能、修改基本剖析器,或預先篩選記錄等選項。
將任意欄位對應至 UDM
如果找不到合適的標準 UDM 欄位來儲存資料,請使用 additional
物件,將資料儲存為自訂鍵/值組合。即使 UDM 記錄沒有相符的 UDM 欄位,您還是能將重要資訊儲存在 UDM 記錄中。
選擇剖析器擴充功能定義方法
選擇剖析器擴充功能定義方法之前,請先完成下列章節:
接下來,請開啟「剖析器擴充功能」頁面,然後選取要用來定義剖析器擴充功能的擴充功能方法:
開啟剖析器擴充功能頁面
您可以在「剖析器擴充功能」頁面定義新的剖析器擴充功能。
您可以透過下列方式開啟「剖析器擴充功能」頁面:從「設定」選單、從「原始記錄搜尋」,或從舊版「原始記錄搜尋」:
從「設定」選單開啟
如要從「設定」選單開啟「剖析器擴充功能」頁面,請按照下列步驟操作:
在導覽列中,依序選取「SIEM 設定」 >「剖析器」。
「剖析器」表格會依記錄檔類型顯示預設剖析器清單。
找到要延長的記錄類型,然後依序點選「選單」圖示
「建立擴充功能」。「剖析器擴充功能」頁面隨即開啟。
從原始記錄檔搜尋開啟
如要從「原始記錄搜尋」開啟「剖析器擴充功能」頁面,請按照下列步驟操作:
- 依序點選「調查」>「SIEM 搜尋」。
- 在搜尋欄位中,將
raw =
前置字元加到搜尋引數,並將搜尋字詞放在引號內。例如:raw = "example.com"
。 - 按一下「執行搜尋」。 結果會顯示在「原始記錄」面板中。
- 在「原始記錄」面板中,按一下記錄 (資料列)。 系統會顯示「事件檢視」面板。
- 在「Event View」面板中,按一下「Raw Log」分頁。 系統會顯示原始記錄。
依序點選「管理剖析器」>「建立擴充功能」 >「下一步」。
「剖析器擴充功能」頁面隨即開啟。
從舊版原始記錄搜尋開啟
如要從舊版「原始記錄搜尋」開啟「剖析器擴充功能」頁面,請按照下列步驟操作:
- 使用舊版「原始記錄」搜尋功能,搜尋與要剖析的記錄類似的記錄。
- 從「事件」>「時間軸」面板中選取事件。
- 展開「事件資料」面板。
依序點選「管理剖析器」>「建立擴充功能」>「下一步」。
「剖析器擴充功能」頁面隨即開啟。
剖析器擴充功能頁面
頁面會顯示「原始記錄」和「擴充功能定義」面板:
「原始記錄」面板:
系統會顯示所選記錄類型的原始記錄資料範例。 如果您是從「原始記錄搜尋」開啟頁面,範例資料就是搜尋結果。您可以使用「View as」(查看為) 選單 (RAW、JSON、CSV、XML 等) 和「Wrap Text」(換行) 核取方塊,設定範例格式。
確認顯示的原始記錄資料樣本可代表剖析器擴充功能將處理的記錄。
按一下「預覽 UDM 輸出內容」,即可查看範例原始記錄資料的 UDM 輸出內容。
「擴充功能定義」面板:
您可以透過兩種對應指示方法定義剖析器擴充功能:對應資料欄位 (免程式碼) 或編寫程式碼片段。您無法在同一個剖析器擴充功能中同時使用這兩種方法。
視您選擇的方法而定,您可以指定要從傳入的原始記錄中擷取的來源記錄資料欄位,並將這些欄位對應至相應的 UDM 欄位,也可以編寫程式碼片段來執行這些工作及其他作業。
選取擴充功能做法
在「剖析器擴充功能」頁面的「擴充功能定義」面板中,選取「擴充功能方法」欄位,然後選擇下列其中一種方法來建立剖析器擴充功能:
對應資料欄位 (無程式碼) 方法:
這個方法可讓您指定原始記錄中的欄位,並將這些欄位對應至目的地 UDM 欄位。
這個方法適用於下列原始記錄格式:
- 原生 JSON、原生 XML 或 CSV。
- Syslog 標頭加上原生 JSON、原生 XML 或 CSV。您可以為下列格式的原始記錄建立資料欄位類型對應指示:
JSON
、XML
、CSV
、SYSLOG + JSON
、SYSLOG + XML
和SYSLOG + CSV
。
請參閱下一個步驟的「建立無程式碼 (地圖資料欄位) 指示」。
編寫程式碼片段方法:
這種做法可讓您使用類似 Logstash 的語法指定指令,從原始記錄中擷取及轉換值,並將這些值指派給 UDM 記錄中的 UDM 欄位。
請參閱下一個步驟:建立程式碼片段操作說明。
建立無程式碼 (地圖資料欄位) 指示
免程式碼方法 (也稱為「對應資料欄位」方法) 可讓您指定原始記錄欄位的路徑,並將這些欄位對應至相應的目標 UDM 欄位。
使用免程式碼方法建立剖析器擴充功能前,請先完成下列章節:
定義剖析器擴充功能的後續步驟如下:
設定「重複欄位」選取器
在「擴充功能定義」面板的「重複欄位」欄位中,設定剖析器擴充功能應如何將值儲存至重複欄位 (支援值陣列的欄位,例如 principal.ip
):
- 附加值:新擷取的值會附加至 UDM 陣列欄位中儲存的現有值集。
- 取代值:新擷取的值會取代 UDM 陣列欄位中現有的值集,這些值先前是由預設剖析器儲存。
「重複欄位」選取器中的設定不會影響非重複欄位。
詳情請參閱「進一步瞭解重複欄位選取工具」。
為每個欄位定義資料對應指示
為要從原始記錄中擷取的每個欄位定義資料對應指令。指令應指定原始記錄中的來源欄位路徑,並將其對應至目的地 UDM 欄位。
如果「原始記錄」面板中顯示的原始記錄樣本包含 Syslog 標頭,則會顯示「Syslog」和「目標」欄位。(部分記錄格式不含 Syslog 標頭,例如原生 JSON、原生 XML 或 CSV)。
Google SecOps 需要 Syslog 和「目標」欄位,才能預先處理 Syslog 標頭,並擷取記錄的結構化部分。
定義下列欄位:
Syslog:這是使用者定義的模式,可預先處理原始記錄,並將系統記錄標頭與結構化部分分開。
使用 Grok 和規則運算式指定擷取模式,找出 Syslog 標頭和原始記錄訊息。詳情請參閱「定義 Syslog 擷取器欄位」。
目標:Syslog 欄位中的變數名稱,用於儲存記錄的結構化部分。
在擷取模式中指定變數名稱,用來儲存記錄的結構化部分。
以下分別是「Syslog」和「目標」欄位的擷取模式和變數名稱範例。
在「Syslog」和「目標」欄位中輸入值後,請按一下「驗證」按鈕。
驗證程序會檢查語法和剖析錯誤,然後傳回下列任一項目:
- 成功:系統會顯示資料對應欄位。定義剖析器擴充功能的其餘部分。
- 失敗:系統會顯示錯誤訊息。請先修正錯誤情況再繼續。
視需要定義前置條件指令。
前置條件指令會將靜態值與原始記錄中的欄位比對,找出剖析器擴充功能要處理的原始記錄子集。如果傳入的原始記錄符合前提條件,剖析器擴充功能就會套用對應指令。如果值不相符,剖析器擴充功能就不會套用對應指令。
填寫下列欄位:
- 前置條件欄位:原始記錄中的欄位 ID,內含要比較的價值。如果記錄資料格式為 JSON 或 XML,請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入欄位位置。
- 先決條件運算子:選取
EQUALS
或NOT EQUALS
。 - 先決條件值:這個靜態值會與原始記錄中的先決條件欄位進行比較。
如需前置條件指令的另一個範例,請參閱「無程式碼 - 使用前置條件值擷取欄位」。
將原始記錄檔資料欄位對應至目的地 UDM 欄位:
原始資料欄位:如果記錄資料格式為 JSON (例如:
jsonPayload.connection.dest_ip
) 或 XML (例如:/Event/Reason-Code
),請輸入欄位的完整路徑;如果資料格式為 CSV,請輸入資料欄位置 (注意:索引位置從 1 開始)。目的地欄位:輸入用來儲存值的完整 UDM 欄位名稱,例如
udm.metadata.collected_timestamp.seconds
。
如要繼續新增更多欄位,請按一下「新增」,然後輸入下一個欄位的所有對應指示詳細資料。
如需其他欄位對應範例,請參閱「無程式碼 - 擷取欄位」。
提交並啟用剖析器擴充功能
為要從原始記錄中擷取的所有欄位定義資料對應指示後,請提交並啟用剖析器擴充功能。
按一下「提交」,儲存並驗證對應指示。
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:
|
在套用擴充功能前,預先建構的剖析器產生的事件。
metadata:{event_timestamp:{} ... principal:{ip:"1.1.1.1"}}}
套用擴充功能後的輸出內容。
|
替換值 | {"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 輸出內容
|
進一步瞭解 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 擷取模式、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
都需要一組不同的相關欄位,例如,沒有 user
的 USER_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 欄位。
使用程式碼片段建立剖析器擴充功能之前,請先完成下列章節:
定義剖析器擴充功能的後續步驟如下:
- 如需相關訣竅和最佳做法,請參閱「撰寫程式碼片段指令的訣竅和最佳做法」。
- 建立程式碼片段指令
- 提交程式碼片段指令
撰寫程式碼片段指令的訣竅與最佳做法
如果 Grok 模式有誤、重新命名或取代作業失敗,或是出現語法錯誤,程式碼片段指示可能會失敗。如需提示和最佳做法,請參閱下列文章:
建立程式碼片段操作說明
程式碼片段指令使用的語法和區段,與預設 (或自訂) 剖析器相同:
- 第 1 節:從原始記錄中擷取資料。
- 第 2 節。轉換擷取的資料。
- 第 3 節。為一或多個 UDM 欄位指派值。
- 第 4 節。將 UDM 事件欄位繫結至
@output
鍵。
如要使用程式碼片段方法建立剖析器擴充功能,請按照下列步驟操作:
- 在「剖析器擴充功能」頁面的「CBN 程式碼片段」面板中,輸入程式碼片段來建立剖析器擴充功能。
- 按一下「驗證」,驗證對應指示。
程式碼片段指令範例
以下範例說明程式碼片段。
以下是原始記錄的範例:
{
"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"
}
}
}
}
}
}
提交程式碼片段指令
按一下「提交」即可儲存對應指示。
Google SecOps 會驗證對應指示。
- 如果驗證程序成功,狀態會變更為「有效」,且對應指令會開始處理傳入的記錄資料。
- 如果驗證程序失敗,狀態會變更為「失敗」,且「原始記錄」欄位會顯示錯誤。
管理現有的剖析器擴充功能
您可以查看、編輯、刪除及控管現有剖析器擴充功能的存取權。
查看現有的剖析器擴充功能
- 在導覽列中,依序選取「SIEM 設定」 >「剖析器」。
- 在剖析器清單中,找出要查看的剖析器 (記錄類型)。如果剖析器有剖析器擴充功能,名稱旁會顯示
EXTENSION
文字。 前往該列,然後依序點選「選單」
>「查看擴充功能」。「View Custom/Prebuilt Parser」 >「Extension」分頁隨即顯示,其中包含剖析器擴充功能的詳細資料。摘要面板預設會顯示
LIVE
剖析器擴充功能。
編輯剖析器擴充功能
如要開啟「View Custom/Prebuilt Parser」 >「Extension」分頁標籤,請參閱「查看現有剖析器擴充功能」一文。
按一下「編輯擴充功能」按鈕,
系統會顯示「剖析器擴充功能」頁面。
編輯剖析器擴充功能。
如要取消編輯並捨棄變更,請按一下「捨棄草稿」。
如要隨時刪除剖析器擴充功能,請按一下「Delete Failed Extension」(刪除失敗的擴充功能)。
編輯剖析器擴充功能完成後,請按一下「提交」。
系統會執行驗證程序,驗證新設定。
刪除剖析器擴充功能
如「查看現有剖析器擴充功能」一文所述,開啟「View Custom/Prebuilt Parser」 >「Extension」分頁標籤。
按一下「刪除擴充功能」按鈕。
控管剖析器擴充功能的存取權
根據預設,具備「管理員」角色的使用者可以存取剖析器擴充功能。 您可以控管哪些人可以查看及管理剖析器擴充功能。如要進一步瞭解如何管理使用者和群組,或指派角色,請參閱角色型存取權控管。
下表匯總了 Google SecOps 的新角色。
功能 | 動作 | 說明 |
---|---|---|
剖析器 | 刪除 | 刪除剖析器擴充功能。 |
剖析器 | 編輯 | 建立及編輯剖析器擴充功能。 |
剖析器 | 查看 | 查看剖析器擴充功能。 |
使用剖析器擴充功能移除 UDM 欄位對應
您可以使用剖析器擴充功能移除現有的 UDM 欄位對應。
- 依序點選「SIEM 設定」>「剖析器」。
- 如要查看「剖析器擴充功能」頁面,請使用下列任一方法:
- 如要查看現有擴充功能,請依序點選「選單」圖示 >「查看擴充功能」。 >「擴充剖析器」
- 如要建立新的剖析器擴充功能,請依序點選「選單」圖示 >「建立擴充功能」。 >「擴充剖析器」
選取「撰寫程式碼片段」做為擴充方法,新增自訂程式碼片段,移除特定 UDM 欄位的值。
如要使用現有擴充功能,請在「剖析器擴充功能」窗格中按一下「編輯」,然後新增程式碼片段。
如需程式碼片段範例,請參閱「程式碼片段 - 移除現有對應」。
按照「提交程式碼片段指令」中的步驟提交擴充功能。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。