收集 DHS IOC 記錄
剖析器版本:1.0
本文說明如何使用 Google Cloud Storage V2,將美國國土安全部 (DHS) IOC 記錄檔擷取至 Google Security Operations。
美國國土安全部 (DHS) 會透過自動指標共用 (AIS) 計畫發布威脅情報,以 STIX/TAXII 格式提供入侵指標,例如惡意 IP 位址、網域、網址和檔案雜湊。由於 AIS 會以可下載的 STIX 組合形式提供 IOC 資料,因此您必須將這些檔案匯出至 Google Cloud Storage (GCS) bucket,然後設定 Google SecOps 動態饋給來擷取這些檔案。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已啟用 Cloud Storage API 的 Google Cloud 專案
- 建立及管理 GCS bucket 的權限
- 管理 Google Cloud Storage 值區 IAM 政策的權限
- 有效的 DHS AIS 參與者帳戶,可存取 TAXII 伺服器或 AIS 入口網站
- 用於 TAXII 伺服器驗證的 AIS 用戶端憑證和私密金鑰檔案
建立 Google Cloud Storage bucket
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 dhs-ioc-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取最接近 Google SecOps 執行個體的位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
設定將 DHS IOC 資料自動匯出至 GCS
DHS 會透過 AIS TAXII 伺服器,以 STIX 格式發布 IOC 資料。設定自動化管道,依排程提取指標並直接寫入 GCS。
方法 1:搭配 Cloud Build 使用 Cloud Scheduler (建議)
使用 Cloud Scheduler 觸發的 Cloud Build,執行容器化工作,從 AIS TAXII 伺服器擷取 STIX 組合,並寫入 GCS。
將 AIS 用戶端憑證和金鑰儲存在 Secret Manager:
- 在 GCP 控制台中,依序前往「Security」(安全性) >「Secret Manager」。
- 點選「建立密鑰」。
- 建立兩個密鑰:
- 名稱:
ais-client-cert,值:AIS 用戶端憑證 PEM 檔案的內容。 - 名稱:
ais-client-key,值:AIS 用戶端私密金鑰 PEM 檔案的內容。
- 名稱:
為匯出工作建立服務帳戶:
- 在 GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「Create Service Account」(建立服務帳戶)。
- 請提供下列設定詳細資料:
- 服務帳戶名稱:輸入
dhs-ioc-export-sa - 服務帳戶說明:輸入
Service account for automated DHS IOC export to GCS
- 服務帳戶名稱:輸入
- 按一下「建立並繼續」。
- 新增下列角色:
- Storage 物件管理員 (將檔案寫入 GCS)
- Cloud Build 編輯者 (執行 Cloud Build 工作)
- Secret Manager 密鑰存取者 (讀取 AIS 憑證)
- 按一下 [完成]。
建立 Cloud Build 建構設定檔 (
cloudbuild.yaml):steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | apt-get update && apt-get install -y curl # Retrieve AIS certificates from Secret Manager gcloud secrets versions access latest --secret=ais-client-cert > /tmp/ais-cert.pem gcloud secrets versions access latest --secret=ais-client-key > /tmp/ais-key.pem # Fetch IOC data from AIS TAXII server TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) FROM=$(date -u -d '-60 minutes' +"%Y-%m-%dT%H:%M:%SZ") curl -s --cert /tmp/ais-cert.pem --key /tmp/ais-key.pem \ -H "Accept: application/taxii+json;version=2.1" \ "https://ais2.cisa.dhs.gov/taxii2/ais2/collections/${_COLLECTION_ID}/objects?added_after=$${FROM}" \ -o /workspace/dhs_ioc_$${TIMESTAMP}.json # Upload to GCS gcloud storage cp /workspace/dhs_ioc_$${TIMESTAMP}.json \ gs://${_BUCKET_NAME}/ioc-data/ # Clean up certificates rm -f /tmp/ais-cert.pem /tmp/ais-key.pem substitutions: _BUCKET_NAME: 'dhs-ioc-logs' _COLLECTION_ID: 'YOUR_AIS_COLLECTION_ID'建立 Cloud Scheduler 工作來觸發建構作業:
- 前往 GCP 主控台的「Cloud Scheduler」。
- 點選「建立工作」。
請提供下列設定詳細資料:
設定 值 名稱 dhs-ioc-export-hourly區域 選取與 GCS bucket 相同的區域 頻率 0 * * * *(每小時)時區 世界標準時間 (建議) 目標類型 HTTP 網址 https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsHTTP 方法 POST 驗證標頭 新增 OAuth 權杖 服務帳戶 dhs-ioc-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com點選「建立」。
選項 2:使用 Cron 的 Compute Engine VM (替代方案)
如果無法使用 Cloud Build,請使用小型 Compute Engine VM 搭配 cron 工作,擷取 IOC 資料並寫入 GCS。
建立 Compute Engine VM:
- 在 GCP 主控台中,前往「Compute Engine」>「VM 執行個體」。
- 點選「建立執行個體」。
- 選取小型機型 (例如
e2-micro)。 - 在「身分及 API 存取權」下方,選取具有「Storage 物件管理員」角色的服務帳戶。
- 點選「建立」。
透過 SSH 連線至 VM,然後建立匯出指令碼 (
/opt/dhs-ioc/export.sh):#!/usr/bin/env bash set -euo pipefail TAXII_URL="https://ais2.cisa.dhs.gov/taxii2" API_ROOT="ais2" COLLECTION_ID="YOUR_AIS_COLLECTION_ID" CERT="/etc/ais/client-cert.pem" KEY="/etc/ais/client-key.pem" BUCKET="dhs-ioc-logs" TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) FROM=$(date -u -d '-60 minutes' +"%Y-%m-%dT%H:%M:%SZ") curl -s --cert "$CERT" --key "$KEY" \ -H "Accept: application/taxii+json;version=2.1" \ "${TAXII_URL}/${API_ROOT}/collections/${COLLECTION_ID}/objects?added_after=${FROM}" \ -o "/tmp/dhs_ioc_${TIMESTAMP}.json" gcloud storage cp "/tmp/dhs_ioc_${TIMESTAMP}.json" "gs://${BUCKET}/ioc-data/" rm -f "/tmp/dhs_ioc_${TIMESTAMP}.json"將指令碼設為可執行狀態,並透過 cron 安排執行時間:
chmod +x /opt/dhs-ioc/export.sh (crontab -l ; echo "0 * * * * /opt/dhs-ioc/export.sh >> /var/log/dhs-ioc-export.log 2>&1") | crontab -
擷取 Google SecOps 服務帳戶
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
DHS IOC Feed)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「國土安全部」做為「記錄類型」。
- 按一下「取得服務帳戶」。
系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Buckets」。
- 點按 bucket 名稱 (例如
dhs-ioc-logs)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)。 - 指派角色:選取「Storage 物件檢視者」。
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如
按一下 [儲存]。
設定 Google SecOps 動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
DHS IOC Feed)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「國土安全部」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI:
gs://dhs-ioc-logs/ioc-data/- 請將
dhs-ioc-logs替換為您的 GCS bucket 名稱。 - 將
ioc-data替換為您設定的前置字串路徑。
- 請將
來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| entity.application | 應用程式名稱或 ID | |
| observable_id | entity.asset.asset_id | 資產 ID |
| object_id | entity.asset.product_object_id | 產品物件 ID |
| hash_value | entity.file.md5 | 檔案的 MD5 雜湊 |
| hash_value | entity.file.sha1 | 檔案的 SHA1 雜湊 |
| hash_value | entity.file.sha256 | 檔案的 SHA256 雜湊 |
| file_size | entity.file.size | 檔案大小 (以位元組為單位) |
| fuzzy_hash_value | entity.file.ssdeep | 檔案的 SSDEEP 雜湊值 |
| file_path | entity.file.full_path | 完整檔案路徑 |
| ip_address_value | entity.ip | IP 位址 |
| 國家/地區 | entity.location.country_or_region | 國家/地區 |
| administrativeArea | entity.location.state | 州或省 |
| 通訊埠 | entity.port | 通訊埠編號 |
| file_name_label | entity.resource.attribute.labels | 資源的屬性標籤 |
| 網址 | entity.url | 網址 |
| organisationInfo | entity.user.department | 部門 |
| email_address、email | entity.user.email_addresses | 電子郵件地址 |
| organisationName | entity.user.userid | 使用者 ID |
| ioc.domain_and_ports.domain | 網域名稱 | |
| indicator_type、confidence_value | ioc.feed_name | 動態饋給名稱 |
| ip_address_value、target_ip | ioc.ip_and_ports.ip_address | IP 位址 |
| 通訊埠 | ioc.ip_and_ports.ports | 通訊埠 |
| description、desc1、ttp_description | metadata.description | 說明 |
| entity_type | metadata.entity_type | 實體類型 |
| start_time | metadata.interval.start_time | 間隔的開始時間 |
| object_id | metadata.product_entity_id | 產品實體 ID |
| sightings_count_label | metadata.source_labels | 來源標籤 |
| security_result_data、ttp_security_result | metadata.threat | 威脅資訊 |
| metadata.vendor_name | 供應商或公司名稱 | |
| metadata.product_name | 產品名稱 | |
| address_label、subject_label、file_label | security_result.about.labels | 安全性結果的標籤 |
| indicator_type | security_result_data.category_details | 類別詳細資料 |
| desc1 | security_result_data.description | 說明 |
| confidence_value | security_result_data.severity | 嚴重性等級 |
| host、domain_name | target.hostname | 目標主機名稱 |
| target_ip | target.ip | 目標 IP 位址 |
| domain_name | target.url | 目標網址 |
| malware_category | ttp_security_result.category_details | TTP 的類別詳細資料 |
| ttp_id_label | ttp_security_result.detection_fields | TTP 的偵測欄位 |
| ttp_description | ttp_security_result.description | 戰術、技術和程序說明 |
| ttp_summary | ttp_security_result.summary | TTP 摘要 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。