收集 DNSFilter 記錄
本文說明如何設定 DNSFilter,透過 HTTP 事件收集器 (HEC) 通訊協定,使用 Webhook 將記錄推送至 Google Security Operations。
DNSFilter 是一項採用 AI 技術的 DNS 安全性解決方案,可提供威脅防護、內容篩選和網路可視性。資料匯出功能可透過 HTTP 事件收集器 (HEC) API,自動將 DNS 查詢記錄資料匯出至 SIEM 平台,支援即時安全監控和法規遵循報告。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 具備管理員權限或更高等級的權限,可存取 DNSFilter 資訊主頁
- 啟用 DNSFilter 資料匯出加購功能 (適用於 Basic、Pro 和 Enterprise 方案,需額外付費)
- 存取 Google Cloud 控制台 (用於建立 API 金鑰)
在 Google SecOps 中建立 Webhook 動態饋給
建立動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
DNSFilter HEC Feed)。 - 選取「Webhook」做為「來源類型」。
- 選取「DNSFILTER」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- 分割分隔符 (選用):留空即可,因為每個 HEC 要求都包含格式正確的事件
- 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
- 點選「下一步」。
- 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
產生並儲存密鑰
建立動態饋給後,您必須產生用於驗證的密鑰:
- 在動態饋給詳細資料頁面中,按一下「產生密鑰」。
- 對話方塊會顯示密鑰。
複製並妥善儲存密鑰。
取得動態消息端點網址
- 前往動態消息的「詳細資料」分頁。
- 在「端點資訊」部分,複製「動態消息端點網址」。
網址格式為:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate或
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate請儲存這個網址,以供後續步驟使用。
按一下 [完成]。
建立 Google Cloud API 金鑰
Google SecOps 需要 API 金鑰才能進行驗證。在 Google Cloud 控制台中建立受限制的 API 金鑰。
建立 API 金鑰
- 前往 Google Cloud 控制台的「憑證」頁面。
- 選取專案 (與 Google SecOps 執行個體相關聯的專案)。
- 依序按一下「建立憑證」>「API 金鑰」。
- 系統會建立 API 金鑰,並在對話方塊中顯示。
- 按一下「編輯 API 金鑰」即可限制金鑰。
限制 API 金鑰
- 在「API key」設定頁面中:
「Name」:輸入描述性名稱 (例如
Google SecOps DNSFilter Webhook API Key) - 在「API 限制」下方:
- 選取「Restrict key」(限制金鑰)。
- 在「選取 API」下拉式選單中,搜尋並選取「Google SecOps API」 (或「Chronicle API」)。
- 按一下 [儲存]。
- 從頁面頂端的「API key」(API 金鑰) 欄位複製 API 金鑰值。
安全儲存 API 金鑰。
設定 DNSFilter 資料匯出功能
建構 HEC 端點網址
合併 Google SecOps 端點網址和 API 金鑰,建立 HEC 網址:
<ENDPOINT_URL>?key=<API_KEY>範例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
在 DNSFilter 中設定資料匯出功能
- 登入 DNSFilter 資訊主頁。
- 依序前往「工具」>「資料匯出」。
- 在「Export Destination」(匯出目的地) 區段中,選取「HTTP Event Collector (HEC)」(HTTP 事件收集器 (HEC))。
- 在「HEC Configuration」(HEC 設定) 部分,輸入下列資訊:
- HTTP Event Collector URL:貼上上一個步驟中包含 API 金鑰的完整端點網址。
- 有效事件收集器權杖:貼上在建立 Google SecOps 動態饋給時產生的密鑰。
- 按一下 [Save Configuration] (儲存組態)。
DNSFilter 會測試連線,如果設定正確,就會顯示成功訊息。
驗證資料匯入作業
- 在 DNSFilter 資訊主頁中,依序前往「Tools」>「Data Export」。
- 確認「狀態」顯示為「有效」或「已連線」。
- 在 Google SecOps 控制台中,依序前往「SIEM Settings」(SIEM 設定) >「Feeds」(動態饋給)。
- 找到 DNSFilter 動態饋給,確認「狀態」顯示為「有效」。
- 按一下動態饋給名稱即可查看詳細資料。
- 查看「記錄擷取」指標,確認資料是否正常傳輸。
如要搜尋 DNSFilter 事件,請前往「搜尋」,然後執行下列查詢:
metadata.log_type = "DNSFILTER"
驗證方式參考資料
Google SecOps 網頁掛鉤動態消息支援多種驗證方法。DNSFilter HEC 整合功能採用混合方法。
使用的方法:混合 (網址 + 標頭)
DNSFilter 會在網址中傳送 API 金鑰,並在要求標頭中傳送密鑰 (HEC 權杖)。
要求格式:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json Authorization: Splunk <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
替代方法:自訂標頭
如果設定自訂應用程式將記錄傳送至 Google SecOps,建議使用這個方法,以提升安全性。
要求格式:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }優點:
- 網址中不會顯示 API 金鑰和密鑰
- 更安全 (標頭不會記錄在網路伺服器存取記錄中)
- 如果供應商支援,則為首選方法
驗證標頭名稱
Google SecOps 接受下列驗證標頭名稱:
API 金鑰:
x-goog-chronicle-auth(建議)X-Goog-Chronicle-Auth(不區分大小寫)
私密金鑰:
x-chronicle-auth(建議)X-Chronicle-Auth(不區分大小寫)Authorization: Splunk <TOKEN>(HEC 相容性)
Webhook 限制和最佳做法
要求限制
| 限制 | 值 |
|---|---|
| 要求大小上限 | 4 MB |
| 每秒查詢次數上限 (QPS) | 15,000 |
| 要求逾時 | 30 秒 |
| 重試行為 | 自動重試 (指數輪詢) |
最佳做法
- 監控匯出狀態:定期檢查 DNSFilter 資訊主頁中的資料匯出狀態,確保資料持續流動。
- API 金鑰輪替:定期輪替 Google Cloud API 金鑰,確保安全。
- 私密金鑰管理:安全儲存 Google SecOps 私密金鑰,並在遭盜用時重新產生。
- 資料保留:在 DNSFilter 和 Google SecOps 中設定適當的資料保留政策。
- 快訊設定:在 Google SecOps 中設定重要 DNS 安全性事件的快訊。
疑難排解
連線測試失敗
如果 DNSFilter 資料匯出設定測試失敗:
- 確認 HEC 網址正確無誤,且包含 API 金鑰參數。
- 確認已正確複製密鑰 (HEC 權杖),沒有多餘的空格。
- 確認 Google Cloud API 金鑰已啟用 Chronicle API 存取權。
- 確認 Google SecOps 動態饋給處於「有效」狀態。
- 檢查 DNSFilter 與 Google Cloud 端點之間的網路連線。
Google SecOps 中未顯示任何資料
如果連線成功,但沒有顯示任何資料:
- 確認 DNSFilter 部署作業是否產生 DNS 查詢。
- 檢查 DNSFilter 查詢記錄,確認流量正在處理中。
- 在 Google SecOps 中搜尋
metadata.log_type = "DNSFILTER",確認資料已擷取。 - 在 Google SecOps 中查看動態饋給「擷取的記錄」指標。
- 查看動態饋給的錯誤記錄,瞭解是否有任何擷取錯誤。
資料匯出作業傳回錯誤訊息
常見錯誤原因:
- 憑證無效:API 金鑰或密鑰有誤或已過期。
- 區域不符:Google SecOps 端點網址區域與執行個體不符。
- 權限:API 金鑰未啟用 Chronicle API 存取權。
- 網路問題:防火牆或 Proxy 封鎖輸出 HTTPS 連線。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| 時間 | metadata.collected_timestamp | 轉換時使用的日期格式:yyyy-MM-dd HH:mm:ss Z UTC |
| metadata.event_type | 如果 principal_ip_present、principal_hostname_present 或 principal_mac_present 為 true,則設為「STATUS_UPDATE」,否則設為「GENERIC_EVENT」 | |
| question_type | network.dns.questions | 使用 DNS 記錄類型對應將 question_type 轉換為 question.type,然後合併至陣列 |
| 程式碼 | network.dns.response_code | 使用 DNS 回應代碼對應轉換 |
| 通訊協定 | network.ip_protocol | 使用 IP 通訊協定對應轉換 |
| 用戶端 | principal.hostname | 直接複製值 |
| request_address、ip4、ip6、source_addresses | principal.ip | 從 request_address (擷取的 IP)、ip4 (擷取的 IP)、ip6 (擷取的 IP) 和從 source_addresses 陣列擷取的 IP 合併 |
| 區域 | principal.location.country_or_region | 直接複製值 |
| clientMac | principal.mac | 如果符合 MAC 規則運算式,系統會直接複製值 |
| clientID | principal.resource.product_object_id | 直接複製值 |
| 使用者名稱 | principal.user.user_display_name | 直接複製值 |
| user_id | principal.user.userid | 直接複製值 |
| code、original_code、clientType、collection、network_name、networkID、collectionID、policy、policyID、scheduled_policy、scheduled_policyID、sec_cats、sec_allow_cats、block_cats、block_allow_cats、threat、allowed、method、organization、organizationID、applicationID、application_name、application_categoryID、application_category_name | security_result.detection_fields | 以鍵/值組合形式,合併來自各種來源欄位的標籤 |
| 網域 | target.administrative_domain | 直接複製值 |
| fqdn | target.domain.name | 直接複製值 |
| metadata.product_name | 設為「DNSFILTER」 | |
| metadata.vendor_name | 設為「DNSFILTER」 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。