收集被動式 DNS 記錄
本文說明如何使用 Google Cloud Storage V2,將被動式 DNS 記錄檔擷取至 Google Security Operations。
被動式 DNS 是 DNS 智慧資料來源,可擷取 DNS 解析記錄,用於威脅分析和網域調查。由於資料通常會以檔案形式收集及儲存,因此您必須將這些檔案上傳至 Google Cloud Storage (GCS) bucket,然後設定 Google SecOps 資訊提供,以便擷取這些檔案。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體。
- 已啟用 Cloud Storage API 的 Google Cloud 雲端專案。
- 建立及管理 GCS 值區的權限。
- 管理 Google Cloud Storage 值區的 IAM 政策的權限。
- 存取被動式 DNS 資料檔案 (例如 DNSDB、Farsight 或其他被動式 DNS 供應商)。
- 以支援格式 (例如 JSON 或 CSV) 匯出的被動式 DNS 資料。
建立 Google Cloud Storage bucket
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 passive-dns-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取最接近 Google SecOps 執行個體的位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或資料保留政策 點選「建立」。
設定將被動式 DNS 資料自動匯出至 GCS
被動式 DNS 資料通常可從 DNS 智慧型供應商 (例如 Farsight DNSDB、DomainTools 或 Cisco Umbrella Investigate) 匯出檔案取得。如要確保 GCS 中的資料為最新狀態,請使用下列其中一種方法設定自動匯出管道。
方法 1:搭配 Cloud Build 使用 Cloud Scheduler (建議)
使用 Cloud Scheduler 觸發的 Cloud Build,執行從供應商擷取被動 DNS 資料並寫入 GCS 的容器化工作。
為匯出工作建立服務帳戶:
- 在 GCP 控制台中,依序前往「IAM 與管理」>「服務帳戶」。
- 按一下「Create Service Account」(建立服務帳戶)。
- 請提供下列設定詳細資料:
- 服務帳戶名稱:輸入
passive-dns-export-sa - 服務帳戶說明:輸入
Service account for automated Passive DNS data export to GCS
- 服務帳戶名稱:輸入
- 按一下「建立並繼續」。
- 新增下列角色:
- Storage 物件管理員 (將檔案寫入 GCS)
- Cloud Build 編輯者 (執行 Cloud Build 工作)
- 按一下 [完成]。
建立 Cloud Build 建構設定檔 (
cloudbuild.yaml):steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | apt-get update && apt-get install -y curl jq # Fetch Passive DNS data from your provider # Replace with the actual API call for your provider # Example for Farsight DNSDB: TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) curl -s -H "X-API-Key: $${PDNS_API_KEY}" \ "https://api.dnsdb.info/dnsdb/v2/lookup/rrset/name/*.example.com" \ -o /workspace/passive_dns_$${TIMESTAMP}.json # Upload to GCS gcloud storage cp /workspace/passive_dns_$${TIMESTAMP}.json \ gs://${_BUCKET_NAME}/passive-dns/ substitutions: _BUCKET_NAME: 'passive-dns-logs'將 API 金鑰儲存為 Secret Manager 密鑰:
- 在 GCP 控制台中,依序前往「Security」(安全性) >「Secret Manager」。
- 點選「建立密鑰」。
- 輸入
pdns-api-key做為密鑰名稱。 - 輸入被動式 DNS 供應商 API 金鑰做為密鑰值。
- 點選「建立」。
建立 Cloud Scheduler 工作來觸發建構作業:
- 前往 GCP 主控台的「Cloud Scheduler」。
- 點選「建立工作」。
請提供下列設定詳細資料:
設定 值 名稱 passive-dns-export-daily區域 選取與 GCS bucket 相同的區域 頻率 0 3 * * *(每天世界標準時間凌晨 3 點)時區 世界標準時間 (建議) 目標類型 HTTP 網址 https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsHTTP 方法 POST 驗證標頭 新增 OAuth 權杖 服務帳戶 passive-dns-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com點選「建立」。
選項 2:Storage 移轉服務 (適用於地端資料儲存庫)
如果被動式 DNS 資料儲存在地端部署的檔案系統,請搭配使用 Storage 移轉服務和移轉代理程式。
- 在 GCP Console 中,前往 Storage 移轉服務。
- 按一下 [Create transfer job] (建立移轉工作)。
- 選取「POSIX 檔案系統」做為來源。
- 按照操作說明,在可存取被動式 DNS 資料檔案的機器上安裝 Storage Transfer Agent。
設定轉移工作:
設定 值 來源目錄 包含被動式 DNS 資料檔案的目錄路徑 目的地 bucket passive-dns-logs目的地路徑 passive-dns/排定郵件傳送時間 設定週期性排程 (例如每日) 點選「建立」。
擷取 Google SecOps 服務帳戶
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Passive DNS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「被動式 DNS」做為「記錄類型」。
- 按一下「取得服務帳戶」。
系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Buckets」。
- 點按 bucket 名稱 (例如
passive-dns-logs)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)。 - 指派角色:選取「Storage 物件檢視者」。
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如
按一下 [儲存]。
設定 Google SecOps 動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Passive DNS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「被動式 DNS」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI:
gs://passive-dns-logs/passive-dns/- 請將
passive-dns-logs替換成您的 GCS bucket 名稱。 - 將
passive-dns替換為您設定的前置字串路徑。
- 請將
來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
刪除已轉移的檔案和空白目錄:成功轉移檔案後,刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| 主機名稱 | intermediary.hostname | 直接複製值 |
| timestamp_s | metadata.event_timestamp | 剖析為 UNIX 時間戳記 |
| metadata.event_type | 設為「NETWORK_DNS」 | |
| network.application_protocol | 設為「DNS」 | |
| 解答 | network.dns.answers.data | 移除結尾點後,答案的值 |
| ttl | network.dns.answers.ttl | 已轉換為整數 |
| 類別 | network.dns.questions.class | 對應至數值 (IN 為 1、CH 為 3、HS 為 4) |
| 查詢 | network.dns.questions.name | 從查詢中移除尾隨點後的值 |
| 類型 | network.dns.questions.type | 使用 DNS 類型對應,從類型 (大寫) 對應至數值 |
| 用戶端 | principal.ip | 直接複製值 |
| 伺服器 | target.ip | 直接複製值 |
| metadata.product_name | 設為「被動式 DNS」 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。