收集指紋記錄

剖析器版本:1.0

支援的國家/地區:

本文說明如何設定 Fingerprint (舊稱 FingerprintJS),透過 Webhook 將記錄檔推送至 Google Security Operations。

Fingerprint 是裝置智慧平台,提供訪客識別和詐欺偵測功能。這項服務會產生專屬訪客 ID,並提供智慧信號,包括機器人偵測、VPN 偵測、無痕模式偵測和其他裝置智慧洞察資料。透過 FingerprintJS JavaScript 代理程式識別訪客時,Webhook 可以將識別事件資料即時傳送至 Google Security Operations。

事前準備

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

  • Google SecOps 執行個體
  • 支援 Webhook 的 FingerprintJS 帳戶
  • 存取 Google Cloud 控制台 (用於建立 API 金鑰)
  • 網站或應用程式上安裝的 FingerprintJS JavaScript 代理程式

在 Google SecOps 中建立 Webhook 動態饋給

建立動態饋給

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 在下一個頁面中,按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 FingerprintJS Identification Events)。
  5. 選取「Webhook」做為「來源類型」
  6. 選取「FingerprintJS」做為「記錄類型」
  7. 點選「下一步」
  8. 指定下列輸入參數的值:
    • 分割分隔符 (選填):留空。每個 Webhook 要求都包含單一識別事件。
    • 資產命名空間資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤。
  9. 點選「下一步」
  10. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)

產生並儲存密鑰

建立動態饋給後,您必須產生驗證用的密鑰:

  1. 在動態饋給詳細資料頁面中,按一下「產生密鑰」
  2. 對話方塊會顯示密鑰。
  3. 複製並妥善儲存密鑰。

重要事項:密鑰只會顯示一次,之後便無法擷取,如果遺失,就必須產生新的密鑰。

取得動態消息端點網址

  1. 前往動態消息的「詳細資料」分頁。
  2. 在「端點資訊」部分,複製「動態消息端點網址」
  3. 網址格式為:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. 請儲存這個網址,以供後續步驟使用。

  5. 按一下 [完成]

建立 Google Cloud API 金鑰

Chronicle 需要 API 金鑰才能進行驗證。在 Google Cloud 控制台中建立受限制的 API 金鑰。

建立 API 金鑰

  1. 前往 Google Cloud 控制台的「憑證」頁面
  2. 選取專案 (與 Chronicle 執行個體相關聯的專案)。
  3. 依序按一下「建立憑證」>「API 金鑰」
  4. 系統會建立 API 金鑰,並顯示在對話方塊中。
  5. 按一下「編輯 API 金鑰」即可限制金鑰。

限制 API 金鑰

  1. 在「API 金鑰」設定頁面中:
    • 名稱:輸入描述性名稱 (例如 Chronicle FingerprintJS Webhook API Key)。
  2. 在「API 限制」下方:
    1. 選取「Restrict key」(限制金鑰)
    2. 在「選取 API」下拉式選單中,搜尋並選取「Google SecOps API」 (或「Chronicle API」)。
  3. 按一下 [儲存]
  4. 複製頁面頂端「API key」(API 金鑰) 欄位中的 API 金鑰值。
  5. 安全地儲存 API 金鑰。

設定 FingerprintJS Webhook

建構 Webhook 網址

  • 合併 Chronicle 端點網址和 API 金鑰:

    <ENDPOINT_URL>?key=<API_KEY>
    
    • 範例:

      https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
      

在 FingerprintJS 資訊主頁中建立 Webhook

  1. 登入 FingerprintJS 資訊主頁
  2. 前往「資訊主頁」>「Webhook」
  3. 按一下 [Add Webhook]
  4. 請提供下列設定詳細資料:
    • 網址:貼上上述包含 API 金鑰的完整端點網址。
    • 環境 (選用):如果選取環境,Webhook 只會回報相符環境的事件。如要接收來自所有環境的事件,請將這個欄位留空。
    • 基本驗證 (選用):如要新增其他驗證方式,請展開「基本驗證」。如要整合 Chronicle,您可以將這個欄位留空,因為驗證作業會透過 API 金鑰和私密金鑰處理。
  5. 按一下「建立 Webhook」
  6. 成功建立 Webhook 後,系統會顯示「已建立 Webhook」的成功訊息。
  7. 重要事項:如果您使用 Webhook 簽章 (僅限企業方案),請複製並儲存成功訊息視窗中顯示的加密金鑰。金鑰只會顯示一次。

將 Chronicle 密鑰新增至 webhook

建立 Webhook 時,FingerprintJS 不支援自訂 HTTP 標頭。您必須在 Webhook 網址中新增 Chronicle 密鑰做為查詢參數。

  • 更新 webhook 網址,加入密鑰:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
    • 範例:

      https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
      

如要更新 Webhook 網址,請按照下列步驟操作:

  1. 在 FingerprintJS 資訊主頁中,依序前往「Dashboard」(資訊主頁) >「Webhooks」(Webhook)
  2. 在表格中找出網路鉤子,然後按一下「編輯」圖示。
  3. 在「URL」欄位中,更新包含 API 金鑰和私密金鑰的完整網址。
  4. 按一下「編輯 Webhook」

測試 Webhook

  1. 在 FingerprintJS 資訊主頁中,依序前往「Dashboard」(資訊主頁) >「Webhooks」(Webhook)
  2. 在表格中找出所需 Webhook。
  3. 按一下「傳送測試事件」
  4. 等待系統確認測試事件已成功傳送。
  5. 確認網路鉤子顯示成功傳送狀態。

驗證方法參考資料

Chronicle 網頁掛鉤動態消息支援多種驗證方法。FingerprintJS Webhook 會使用查詢參數進行驗證。

查詢參數方法

FingerprintJS 在建立 Webhook 時不支援自訂 HTTP 標頭,因此必須將憑證附加至網址。

  • 網址格式:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
    • 範例:

      https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
      
  • 要求格式:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
      "visitorId": "3HNey93AkBW6CRbxV6xP",
      "requestId": "1708102555327.NLOjmg",
      "timestamp": 1582299576512
    }
    

UDM 對應表

記錄欄位 UDM 對應 邏輯
rawDeviceAttributes.architecture.value、rawDeviceAttributes.audio.value、rawDeviceAttributes.colorDepth.value、rawDeviceAttributes.colorGamut.value、rawDeviceAttributes.contrast.value、rawDeviceAttributes.cookiesEnabled.value、rawDeviceAttributes.deviceMemory.value、rawDeviceAttributes.fonts.value、rawDeviceAttributes.forcedColors.value、rawDeviceAttributes.hardwareConcurrency.value、rawDeviceAttributes.hdr.value、rawDeviceAttributes.indexedDB.value、rawDeviceAttributes.localStorage.value、rawDeviceAttributes.math.value、rawDeviceAttributes.monochrome.value、rawDeviceAttributes.openDatabase.value、rawDeviceAttributes.pdfViewerEnabled.value、rawDeviceAttributes.reducedMotion.value、rawDeviceAttributes.screenFrame.value、rawDeviceAttributes.screenResolution.value、rawDeviceAttributes.sessionStorage.value、rawDeviceAttributes.touchSupport.value.maxTouchPoints、rawDeviceAttributes.languages.value、rawDeviceAttributes.vendorFlavors.value、rawDeviceAttributes.fontPreferences.value.apple、rawDeviceAttributes.fontPreferences.value.default、rawDeviceAttributes.fontPreferences.value.min、rawDeviceAttributes.fontPreferences.value.mono、rawDeviceAttributes.fontPreferences.value.sans、rawDeviceAttributes.fontPreferences.value.serif、rawDeviceAttributes.fontPreferences.value.system additional.fields 從來源欄位建立的標籤合併而來
has_principal、has_target、has_target_resource metadata.event_type 如果 has_principal 和 has_target 為 true,則設為「NETWORK_CONNECTION」;如果 has_target_resource 為 true,則設為「USER_RESOURCE_ACCESS」;如果 has_principal 為 true,則設為「STATUS_UPDATE」;否則設為「GENERIC_EVENT」
source_type metadata.product_event_type 直接複製值
requestId metadata.product_log_id 直接複製值
browserDetails.userAgent network.http.parsed_user_agent 從 browserDetails.userAgent 剖析
browserDetails.browserName network.http.parsed_user_agent.browser 直接複製值
browserDetails.browserFullVersion network.http.parsed_user_agent.browser_version 直接複製值
browserDetails.device network.http.parsed_user_agent.device 直接複製值
network.http.parsed_user_agent.family 設為「USER_DEFINED」
browserDetails.os network.http.parsed_user_agent.os 直接複製值
browserDetails.clientReferrer network.http.referral_url 直接複製值
browserDetails.userAgent、userAgent network.http.user_agent 如果 userAgent 不是空白,則為 userAgent 的值,否則為 browserDetails.userAgent
tag.session network.session_id 直接複製值
rawDeviceAttributes.vendor.value principal.administrative_domain 直接複製值
ip principal.asset.ip 直接複製值
ip principal.ip 直接複製值
ipInfo.v4.geolocation.city.name principal.location.city 直接複製值
ipInfo.v4.geolocation.country.name principal.location.country_or_region 直接複製值
ipInfo.v4.geolocation.latitude principal.location.region_coordinates.latitude 已轉換為浮點數
ipInfo.v4.geolocation.longitude principal.location.region_coordinates.longitude 已轉換為浮點數
browserDetails.osVersion、rawDeviceAttributes.platform.value principal.platform_version 如果 rawDeviceAttributes.platform.value 不為空白,則為該值,否則為 browserDetails.osVersion
ipInfo.v4.asn.asn、ipInfo.v4.asn.network、ipInfo.v4.asn.name、ipInfo.v4.geolocation.accuracyRadius、ipInfo.v4.geolocation.continent.name、ipInfo.v4.geolocation.timezone、ipInfo.v4.geolocation.subdivisions.isoCode、ipInfo.v4.geolocation.subdivisions.name principal.resource.attribute.labels 從來源欄位建立的標籤合併而來
bot.result、browserDetails.browserMajorVersion、confidence.score、confidence.revision、developerTools.result、highActivity.result、incognito、ipBlocklist.result、ipBlocklist.details.attackSource、ipBlocklist.details.emailSpam、visitorFound、visitorId、tag.request、privacySettings.result、proxy.result、suspectScore.result、tor.result、virtualMachine.result、tampering.anomalyScore、tampering.antiDetectBrowser、tampering.result、vpn.confidence、vpn.originCountry、vpn.originTimezone、vpn.result、vpn.methods.auxiliaryMobile、vpn.methods.osMismatch、vpn.methods.publicVPN、vpn.methods.timezoneMismatch、velocity.distinctCountry.intervals.1h、velocity.distinctCountry.intervals.24h、velocity.distinctCountry.intervals.5m、velocity.distinctIp.intervals.1h、velocity.distinctIp.intervals.24h、velocity.distinctIp.intervals.5m、velocity.events.intervals.1h、velocity.events.intervals.24h、velocity.events.intervals.5m、velocity.ipEvents.intervals.1h、velocity.ipEvents.intervals.24h、velocity.ipEvents.intervals.5m、rawDeviceAttributes.webGlBasics.value.renderer、rawDeviceAttributes.webGlBasics.value.rendererUnmasked、rawDeviceAttributes.webGlBasics.value.vendorUnmasked、rawDeviceAttributes.webGlBasics.value.shadingLanguageVersion、rawDeviceAttributes.webGlExtensions.value.contextAttributes、rawDeviceAttributes.webGlExtensions.value.extensions、rawDeviceAttributes.webGlExtensions.value.extensionParameters、rawDeviceAttributes.webGlExtensions.value.parameters、rawDeviceAttributes.webGlExtensions.value.shaderPrecisions、rawDeviceAttributes.mathML.value.bottom、rawDeviceAttributes.mathML.value.top、rawDeviceAttributes.mathML.value.left、rawDeviceAttributes.mathML.value.right、rawDeviceAttributes.mathML.value.width、rawDeviceAttributes.mathML.value.height、rawDeviceAttributes.mathML.value.font、rawDeviceAttributes.mathML.value.x、rawDeviceAttributes.mathML.value.y、rawDeviceAttributes.emoji.value.bottom、rawDeviceAttributes.emoji.value.top、rawDeviceAttributes.emoji.value.left、rawDeviceAttributes.emoji.value.right、rawDeviceAttributes.emoji.value.width、rawDeviceAttributes.emoji.value.height、rawDeviceAttributes.emoji.value.font、rawDeviceAttributes.emoji.value.x、rawDeviceAttributes.emoji.value.y、rawDeviceAttributes.canvas.value.Geometry、rawDeviceAttributes.canvas.value.Text、rawDeviceAttributes.canvas.value.Winding security_result.detection_fields 從來源欄位建立的標籤合併而來
rawDeviceAttributes.webGlBasics.value.vendor target.administrative_domain 直接複製值
ipInfo.v6.address target.asset.ip 直接複製值
ipInfo.v6.address target.ip 直接複製值
ipInfo.v6.geolocation.city.name target.location.city 直接複製值
ipInfo.v6.geolocation.country.name target.location.country_or_region 直接複製值
ipInfo.v6.geolocation.latitude target.location.region_coordinates.latitude 已轉換為浮點數
ipInfo.v6.geolocation.longitude target.location.region_coordinates.longitude 已轉換為浮點數
路徑 target.path 直接複製值
rawDeviceAttributes.webGlBasics.value.version target.platform_version 直接複製值
ipInfo.v6.asn.asn、ipInfo.v6.asn.network、ipInfo.v6.asn.name、ipInfo.v6.geolocation.accuracyRadius、ipInfo.v6.geolocation.continent.name、ipInfo.v6.geolocation.timezone、ipInfo.v6.geolocation.subdivisions.isoCode、ipInfo.v6.geolocation.subdivisions.name target.resource.attribute.labels 從來源欄位建立的標籤合併而來
網址 target.url 直接複製值
metadata.product_name 設為「FINGERPRINT_JS」
metadata.vendor_name 設為「FINGERPRINT_JS」

變更記錄

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

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