收集 F5 Shape 記錄

剖析器版本:1.0

支援語言:

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

F5 Distributed Cloud Bot Defense (前身為 Shape Security) 可識別並防範惡意機器人,保護應用程式免於自動化攻擊。Bot Defense 會使用 JavaScript 和原生 Mobile SDK,從用戶端瀏覽器和行動裝置收集遙測資料,並在要求送達應用程式前檢查這些資料。這項服務提供整合式資訊主頁和報表,可查看分析流量的詳細資訊,包括安全性事件、存取記錄和稽核記錄。

事前準備

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

  • Google SecOps 執行個體
  • 已啟用 Cloud Storage API 的 GCP 專案
  • 建立及管理 GCS bucket 的權限
  • 管理 Google Cloud Storage 值區 IAM 政策的權限
  • F5 Distributed Cloud Console 的特殊存取權
  • 具有 Multi-Cloud Network Connect 或 Shared Configuration 服務存取權的 F5 Distributed Cloud 帳戶

建立 Google Cloud Storage bucket

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

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

產生 F5 Shape API 憑證

F5 Distributed Cloud 使用 API 憑證 (mTLS) 或 API 權杖進行驗證。建議使用 API 憑證來提升安全性。

建立 API 憑證

  1. 登入 F5 Distributed Cloud Console
  2. 在管理中心首頁中,選取「管理」
  3. 在左側導覽選單中,依序前往「個人管理」>「憑證」
  4. 點選「Add Credentials」
  5. 在「Metadata」(中繼資料) 專區中,輸入憑證的「Name」(名稱),例如 secops-integration
  6. 在「憑證類型」清單中,選取「API 憑證」
  7. 輸入「密碼」,然後在「確認密碼」欄位中確認密碼。
  8. 從日曆清單中選取「到期日」

  9. 按一下「下載」,即可產生並下載 .p12 檔案格式的憑證。

  10. 請妥善儲存下載的憑證檔案和密碼,以備後續使用。

在 F5 Distributed Cloud 中建立 GCP Cloud 憑證

F5 Distributed Cloud 需要 Google Cloud 服務帳戶憑證,才能將記錄寫入 GCS bucket。

建立 Google Cloud 服務帳戶

  1. GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)
  2. 按一下「Create Service Account」(建立服務帳戶)
  3. 提供下列設定詳細資料:
    • 「服務帳戶名稱」:輸入 f5-xc-log-writer (或您偏好的名稱)。
    • 服務帳戶說明:輸入 Service account for F5 Distributed Cloud to write logs to GCS
  4. 按一下「建立並繼續」
  5. 在「將專案存取權授予這個服務帳戶」部分:
    1. 按一下「選擇角色」
    2. 搜尋並選取「Storage 物件管理員」
  6. 按一下「繼續」
  7. 按一下 [完成]

授予 GCS 值區的 IAM 權限

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 按一下 bucket 名稱 (例如 f5-xc-logs)。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 提供下列設定詳細資料:
    • 新增主體:輸入服務帳戶電子郵件地址 (例如 f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com)。
    • 指派角色:選取「Storage 物件管理員」
  6. 按一下 [儲存]

建立服務帳戶金鑰

  1. GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)
  2. 找到服務帳戶 (例如 f5-xc-log-writer),然後按一下。
  3. 前往「金鑰」分頁標籤。
  4. 依序點選「新增金鑰」>「建立新的金鑰」
  5. 選取「JSON」做為金鑰類型。
  6. 點選「建立」
  7. 系統會自動下載 JSON 金鑰檔案。請妥善保存這個檔案。

將 Google Cloud 雲端憑證新增至 F5 Distributed Cloud

  1. F5 Distributed Cloud Console 的首頁中,選取「Multi-Cloud Network Connect」(多雲網路連線) 或「Shared Configuration」(共用設定)
  2. 在左側導覽選單中,依序前往「管理」>「網站管理」>「雲端憑證」
  3. 按一下「新增雲端憑證」
  4. 在「Metadata」(中繼資料) 區段中,輸入「Name」(名稱),例如 gcp-secops-logs
  5. 在「Cloud Credentials Type」清單中,選取「GCP Credentials」
  6. 在「GCP 憑證」部分,按一下「設定」
  7. 在「服務帳戶金鑰」部分:
    1. 在「Secret Type」清單中選取「Blindfolded Secret」
    2. 在「動作」清單中,選取「Blindfold New Secret」
    3. 在「政策類型」清單中選取「內建」
    4. 在「Secret to Blindfold」欄位中,貼上您下載的 JSON 金鑰檔案所有內容。
  8. 按一下「套用」
  9. 按一下「儲存並結束」

設定 GCS 的全域記錄接收器

F5 Distributed Cloud Global Log Receiver 會以 NDJSON 格式 (以換行符號分隔的 JSON) 將記錄串流至 GCS,每 5 分鐘一次。

建立全域記錄接收器

  1. F5 Distributed Cloud Console 的首頁中,選取「Multi-Cloud Network Connect」(多雲網路連線) 或「Shared Configuration」(共用設定)
    • 如為 Multi-Cloud Network Connect:依序前往「管理」>「記錄管理」>「全域記錄接收器」
    • 如要使用共用設定,請依序前往「管理」> 全域記錄接收器
  2. 按一下「新增全域記錄接收器」
  3. 在「Metadata」(中繼資料) 區段中,輸入「Name」(名稱),例如 secops-gcs-receiver
  4. 視需要新增「標籤」和「說明」
  5. 在「記錄類型」清單中,選取要收集的記錄類型:

    • 要求記錄:負載平衡器的 HTTP 存取記錄
    • 安全性事件:Bot Defense 和 WAF 安全性事件
    • 稽核記錄:設定和管理稽核記錄
    • DNS 請求記錄:DNS 查詢記錄
  6. 從「記錄訊息選取」清單中:

    • 如果使用 Multi-Cloud Network Connect 服務,請選取「Select logs from current namespace」(從目前的命名空間選取記錄) (系統命名空間)。
    • 如果使用「共用設定」服務,請選擇下列其中一個選項:
      • 選取目前命名空間的記錄:只傳送共用命名空間的記錄。
      • 選取所有命名空間的記錄:傳送所有命名空間的記錄。
      • 選取特定命名空間中的記錄:輸入特定命名空間名稱,然後按一下「新增項目」即可新增更多。
  7. 從「接收器設定」清單中,選取「GCP Bucket」

  8. 在「GCP Bucket」(GCP Bucket) 區段中,提供下列設定:

    • 「GCP Bucket Name」(GCP bucket 名稱):輸入 GCS bucket 名稱 (例如 f5-xc-logs)。
    • GCP Cloud 憑證:從清單中選取您建立的 Cloud 憑證 (例如 gcp-secops-logs)。

調整進階設定 (選用)

  1. 按一下「顯示進階欄位」切換鈕。
  2. 在「批次選項」部分,設定下列選項 (選用):

    • 批次逾時選項:選取「逾時秒數」並輸入值 (預設值:300 秒)。
    • 批次最多事件:選取「最多事件」,然後輸入介於 32 到 2000 之間的值 (選用)。
    • 批次位元組:選取「最大位元組」,然後輸入介於 4096 和 1048576 之間的值 (預設值:10485760 位元組 / 10 MB)。

完成並測試設定

  1. 按一下「儲存並結束」,即可建立全域記錄接收器。
  2. 在「Global Log Receiver」(全域記錄接收器) 清單中,找出您的接收器 (例如 secops-gcs-receiver)。
  3. 在「動作」欄中,按一下三個點 ...,然後選取「測試連線」
  4. 等待測試完成。如果看到成功訊息,表示連線正常運作。

  5. 確認記錄檔是否寫入 GCS:

    1. 前往 GCP Console 的「Cloud Storage」>「Buckets」頁面。
    2. 按一下 bucket 名稱 (例如 f5-xc-logs)。
    3. 5 到 10 分鐘內,您應該會看到建立的資料夾,結構如下:
      • 每日資料夾:YYYY-MM-DD/
      • 每小時子資料夾:YYYY-MM-DD/HH/
      • 記錄檔:YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz

設定防火牆許可清單

F5 Distributed Cloud 需要在防火牆中允許特定 IP 範圍,才能傳送記錄。

將下列 IP 位址範圍新增至防火牆的許可清單:

  • 193.16.236.64/29
  • 185.160.8.152/29

擷取 Google SecOps 服務帳戶

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

取得服務帳戶電子郵件地址

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 F5 Distributed Cloud Bot Defense)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「F5_SHAPE」做為「記錄類型」
  7. 按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:

    secops-12345678@secops-gcp-prod.iam.gserviceaccount.com
    
  8. 複製電子郵件地址,以便在下一步中使用。

  9. 點選「下一步」

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

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

      gs://f5-xc-logs/
      
      • 請將 f5-xc-logs 替換成實際的 GCS 值區名稱。
      • 如果您在全域記錄接收器中設定了特定前置字元,請將其納入路徑 (例如 gs://f5-xc-logs/bot-defense/)。
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。

    • 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。

    • 資產命名空間資產命名空間

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  11. 點選「下一步」

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

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

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

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

UDM 對應表

記錄欄位 UDM 對應 邏輯
msg.requestHeaders.Proxy-Client-IP、msg.requestHeaders.WF-Forwarded-For、msg.requestHeaders.X-Forwarded-For、msg.requestHeaders.wl-proxy-client-ip、msg.hashedUserAgent、msg.transactionId、msg.hashedUsername、msg.dcgShapeFailedOn、ShapeShifterId、eventType、eventId、latRequest、latResponse、latTotal、latRspWait、count、latEccWait additional.fields 從不同欄位建立的標籤合併而來
中介 中介 如果值不是空白,則直接複製
說明 metadata.description 直接複製值
target、has_principal_machine metadata.event_type 如果目標 != "",則設為 NETWORK_HTTP;如果 has_principal_machine == true,則設為 STATUS_UPDATE;否則設為 GENERIC_EVENT
應用程式 network.application_protocol 值已轉換為大寫
requestMethod、msg.method network.http.method 如果 requestMethod 不是空白,則為 requestMethod 的值,否則為 msg.method
requestClientApplication, msg.requestHeaders.User-Agent network.http.parsed_user_agent 如果 requestClientApplication 不為空白,則為該值;否則為 msg.requestHeaders.User-Agent,並轉換為剖析後的使用者代理程式
requestContext、msg.requestHeaders.Referer network.http.referral_url 如果 requestContext 不為空白,則為該值,否則為 msg.requestHeaders.Referer
msg.sseResponseCode, prCode network.http.response_code 如果 msg.sseResponseCode 不是空白,則為該值,否則為 prCode,並轉換為整數
requestClientApplication, msg.requestHeaders.User-Agent network.http.user_agent 如果 requestClientApplication 不為空白,則為該值,否則為 msg.requestHeaders.User-Agent
requestHeader.x-shape-src-virtual observer.ip 直接複製值
主體 主體 直接複製值
msg.host principal.asset.hostname 直接複製值
src、msg.src、msg.trueClientIP、requestHeader.X-Forwarded-For principal.asset.ip 如果 src 不是空白,則為 src 的值;否則為 msg.src;否則為 msg.trueClientIP;否則為 X-Forwarded-For 中的第一個 IP (如果 != src)
msg.host principal.hostname 直接複製值
src、msg.src、msg.trueClientIP、requestHeader.X-Forwarded-For principal.ip 如果 src 不是空白,則為 src 的值;否則為 msg.src;否則為 msg.trueClientIP;否則為 X-Forwarded-For 中的第一個 IP (如果 != src)
msg.requestHeaders principal.resource.attribute.labels 從 msg.requestHeaders 中的鍵/值組合合併
msg.uri principal.url 直接複製值
security_result security_result 直接複製值
deviceExternalId security_result.about.asset_id 直接複製值
flowLabel、agentLabel、requestHeader.Content-Length、requestHeader.Content-Type、requestHeader.Accept、requestHeader.Accept-Encoding、browserType、accountInfo、requestHeader.Via、asn、tid、ctag、requestHeader.Cache-Control、transactionResult security_result.about.labels 從不同欄位建立的標籤合併而來
act, msg.transactionResult security_result.action 如果 act 符合 PASS 且為 isAttack,則設為 ALLOW,否則設為 UNKNOWN_ACTION;如果 msg.transactionResult == Success,則設為 ALLOW,如果為 Failure,則設為 BLOCK
act, msg.transactionResult security_result.action_details 如果 act 不是空白,則為 act 的值,否則為 msg.transactionResult
嚴重性 security_result.severity 如果為 Error、error、warning,請設為 HIGH;如果符合 critical,請設為 CRITICAL;如果為 notice,請設為 MEDIUM;如果為 information、info、INFO,請設為 LOW
嚴重性 security_result.severity_details 直接複製值
attackCause security_result.threat_name 直接複製值
目標 目標 直接複製值
appName target.application 直接複製值
dst、msg.dst target.asset.ip 如果 dst 不是空白,則為 dst 的值,否則為 msg.dst
dhost target.hostname 直接複製值
dst、msg.dst target.ip 如果 dst 不是空白,則為 dst 的值,否則為 msg.dst
countryName target.location.country_or_region 直接複製值
dpt target.port 已轉換為整數
msg.responseHeaders target.resource.attribute.labels 從 msg.responseHeaders 中的鍵/值組合合併
要求 target.url 直接複製值
requestHeader.X-Forwarded-For intermediary.ip 設為 X-Forwarded-For 陣列中的後續 IP
metadata.product_name 設為「形狀」
metadata.vendor_name 設為「F5」
requestHeaders_id_array.User-Agent network.http.user_agent 從變更記錄對應
requestHeaders_id_array.Referer network.http.referral_url 從變更記錄對應
requestHeaders_id_array.Proxy-Client-IP", "requestHeaders_id_array.WF-Forwarded-For", "requestHeaders_id_array.X-Forwarded-For", and "requestHeaders_id_array.wl-proxy-client-ip additional.fields 從變更記錄對應

變更記錄

查看這個剖析器的變更記錄

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