收集 Google Cloud DNS 威脅偵測工具記錄

支援的國家/地區:

本文說明如何使用 Google Cloud Storage V2,將 Google Cloud DNS Threat Detector 記錄檔擷取至 Google Security Operations。

DNS Armor 採用 Infoblox 技術,是一項全代管服務,可對 Google Cloud 工作負載提供 DNS 層級安全防護。這項服務的進階威脅偵測工具可在攻擊鏈的最早階段 (DNS 查詢),偵測惡意活動,且不會增加作業複雜度或效能負擔。偵測到威脅後,就能透過 Cloud Logging 取得可做為行動依據的洞察資料,深入瞭解 DNS 威脅。

在專案中啟用 DNS 威脅偵測工具後,DNS Armor 會將要傳至網際網路的 DNS 查詢記錄,妥當傳送至 Infoblox 提供的 Google Cloud 分析引擎。這個引擎會結合威脅情報動態消息和 AI 輔助行為分析,找出威脅。每當系統偵測到惡意活動,便會產生 DNS Armor 威脅記錄,然後傳回專案中並寫入 Cloud Logging,供您查看及採取行動。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體。
  • 已啟用 Cloud Storage API 的 GCP 專案。
  • 建立及管理 GCS 值區的權限。
  • 管理 Google Cloud Storage 值區的 IAM 政策的權限。
  • 專案已啟用 Network Security API。
  • 啟用 DNS 威脅偵測工具所需的 IAM 角色。
  • 查看 DNS 威脅記錄的權限:resourcemanager.projects.getresourcemanager.projects.listnetworksecurity.dnsThreatDetectors.getnetworksecurity.dnsThreatDetectors.list 或角色 roles/networksecurity.dnsThreatDetectorViewerroles/logging.viewer

建立 Google Cloud Storage 值區

  1. 前往 Google Cloud Console
  2. 選取專案或建立新專案。
  3. 在導覽選單中,依序前往「Cloud Storage」>「Bucket」
  4. 按一下「建立值區」
  5. 請提供下列設定詳細資料:

    設定
    為 bucket 命名 輸入全域不重複的名稱 (例如 dns-threat-detector-logs)
    位置類型 根據需求選擇 (區域、雙區域、多區域)
    位置 選取位置 (例如 us-central1)
    儲存空間級別 標準 (建議用於經常存取的記錄)
    存取控管 統一 (建議)
    保護工具 選用:啟用物件版本管理或保留政策
  6. 點選「建立」

建立 DNS 威脅偵測工具

本節說明如何建立 DNS 威脅偵測工具,監控虛擬私有雲網路中要傳至網際網路的惡意 DNS 活動。

每項專案只能啟用一項 DNS 威脅偵測工具。

使用 Google Cloud 控制台

  1. 前往 Google Cloud 控制台的「Advanced threat detection」(進階威脅偵測) 頁面。
  2. 按一下「Create DNS threat detector」(建立 DNS 威脅偵測工具)
  3. 輸入 DNS 威脅偵測工具的名稱。
  4. 選取「All VPC networks in the project」(專案中的所有虛擬私有雲網路)
  5. 點選「建立」

使用 gcloud 指令列工具

或者,您也可以使用 gcloud 指令建立 DNS 威脅偵測工具:

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--project=PROJECT_ID \
--provider="infoblox"

請替換: - my-dns-threat-detector:DNS 威脅偵測工具的名稱。 - PROJECT_ID:專案 ID。

設定 Cloud Logging,將 DNS 威脅偵測器記錄匯出至 GCS

DNS Armor 威脅記錄會寫入 Cloud Logging。您必須設定記錄接收器,才能將這些記錄檔匯出至 GCS bucket。

  1. Google Cloud 控制台中,依序前往「Logging」(記錄) >「Logs Router」(記錄檔路由器)
  2. 按一下「Create Sink」(建立接收器)
  3. 請提供下列設定詳細資料:
    • 接收器名稱:輸入描述性名稱 (例如 dns-threat-detector-to-gcs)。
    • 接收器說明:選填說明。
  4. 點選「下一步」
  5. 在「選取接收器服務」部分:
    • 接收器服務:選取「Cloud Storage bucket」(Cloud Storage 值區)
    • 選取 Cloud Storage bucket:從下拉式選單中選取 bucket (例如 dns-threat-detector-logs)。
  6. 點選「下一步」
  7. 在「選擇要納入接收器的記錄檔」部分,輸入下列篩選查詢:

    resource.type="networksecurity.googleapis.com/DnsThreatDetector"
    logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"
    

PROJECT_ID 替換為您的 GCP 專案 ID。

  1. 點選「下一步」
  2. 檢查設定,然後按一下「建立接收器」

使用 gcloud 指令列工具

或者,您也可以使用 gcloud 指令建立記錄接收器:

gcloud logging sinks create dns-threat-detector-to-gcs \
    gs://dns-threat-detector-logs \
    --log-filter='resource.type="networksecurity.googleapis.com/DnsThreatDetector" AND logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"' \
    --project=PROJECT_ID

請將: - dns-threat-detector-logs:替換為您的 GCS bucket 名稱。 - PROJECT_ID:您的 GCP 專案 ID。

擷取 Google SecOps 服務帳戶

Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。

在 Google SecOps 中設定資訊提供,以便擷取 Google Cloud DNS 威脅偵測器記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 GCP DNS Threat Detector Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「Google Cloud DNS Threat Detector」做為「記錄類型」

  7. 按一下「取得服務帳戶」

  8. 系統會顯示不重複的服務帳戶電子郵件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. 複製這個電子郵件地址,後續步驟會用到。

  10. 點選「下一步」

  11. 指定下列輸入參數的值:

    • 儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:

      gs://dns-threat-detector-logs/
      

      取代:

      • dns-threat-detector-logs:您的 GCS bucket 名稱。
    • 來源刪除選項:根據偏好選取刪除選項:
      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
    • 檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。
    • 資產命名空間資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤。
  12. 點選「下一步」

  13. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)

將 IAM 權限授予 Google SecOps 服務帳戶

Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 按一下 bucket 名稱 (例如 dns-threat-detector-logs)。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
    • 指派角色:選取「Storage 物件檢視者」
  6. 按一下 [儲存]

UDM 對應表

記錄欄位 UDM 對應 邏輯
record.jsonPayload.dnsQuery.responseCode、record.jsonPayload.dnsQuery.authAnswer、record.jsonPayload.dnsQuery.queryTime、record.jsonPayload.partnerId、record.jsonPayload.detectionTime、record.logName additional.fields 複製到加法對應中的值,然後合併為對應項目 (如果值不是空白,則為 value.string_value)
record.receiveTimestamp metadata.collected_timestamp 剖析為 ISO8601 時間戳記
metadata.event_type 如有主體和目標,則設為「NETWORK_CONNECTION」;如有主體,則設為「STATUS_UPDATE」;否則設為「GENERIC_EVENT」
record.timestamp metadata.event_timestamp 剖析為 ISO8601 時間戳記
record.insertId metadata.product_log_id 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.rdata network.dns.answers 值會複製到 answer.data,然後合併為陣列 (如果不是空白)
record.jsonPayload.dnsQuery.queryName、record.jsonPayload.dnsQuery.queryType network.dns.questions 從 queryName 取得 questions.name,從 queryType 字串對應至整數的 questions.type,然後在不為空白時合併為陣列
record.jsonPayload.dnsQuery.responseCode network.dns.response_code 使用預先定義的資料表,將字串對應至整數
record.jsonPayload.dnsQuery.protocol network.ip_protocol 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.sourceIp principal.asset.ip 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.sourceIp principal.ip 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.location principal.location.country_or_region 如果值不是空白,則直接複製
record.resource.labels.location principal.location.name 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.vmProjectNumber、record.jsonPayload.dnsQuery.projectNumber principal.resource.attribute.labels 將值複製到加法對應,然後合併為對應項目 (如果不是空白)
record.jsonPayload.dnsQuery.vmInstanceId principal.resource.id 如果值不是空白,則直接複製
record.resource.labels.id principal.resource.product_object_id 如果值不是空白,則直接複製
record.resource.type principal.resource.type 如果值不是空白,則直接複製
security_result 從建構的 security_result 地圖合併
record.jsonPayload.threatInfo.confidence security_result.confidence 如果比對結果為 (?i)Low,則對應至 LOW_CONFIDENCE;如果為 (?i)Medium,則對應至 MEDIUM_CONFIDENCE;如果為 (?i)High,則對應至 HIGH_CONFIDENCE
record.jsonPayload.threatInfo.threatDescription security_result.description 如果值不是空白,則直接複製
record.jsonPayload.threatInfo.threatIndicatorType、record.jsonPayload.threatInfo.threatIndicator、record.jsonPayload.threatInfo.threatFeed、record.jsonPayload.threatInfo.category、record.jsonPayload.threatInfo.type、record.jsonPayload.threatInfo.threat、record.jsonPayload.threatInfo.severity、record.resource.labels.resource_container security_result.detection_fields 將值複製到加法對應,然後合併為對應項目 (如果不是空白)
record.severity security_result.severity 如果 (?i)Low,則對應至 LOW;如果 (?i)(Informational|Info),則對應至 INFORMATIONAL;如果 (?i)Medium,則對應至 MEDIUM;如果 (?i)Critical,則對應至 CRITICAL;如果 (?i)High,則對應至 HIGH
record.jsonPayload.threatInfo.threatId security_result.threat_id 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.destinationIp target.asset.ip 如果值不是空白,則直接複製
record.jsonPayload.dnsQuery.destinationIp target.ip 如果值不是空白,則直接複製
metadata.vendor_name 設為「Google Cloud」
metadata.product_name 設為「Google Cloud DNS Threat Detector」

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