Mengumpulkan log Sidik Jari

Versi Parser: 1.0

Didukung di:

Dokumen ini menjelaskan cara mengonfigurasi Fingerprint (sebelumnya FingerprintJS) untuk mengirim log ke Google Security Operations menggunakan webhook.

Fingerprint adalah platform kecerdasan perangkat yang menyediakan kemampuan identifikasi pengunjung dan deteksi penipuan. Layanan ini menghasilkan ID pengunjung unik dan memberikan sinyal cerdas termasuk deteksi bot, deteksi VPN, deteksi mode incognito, dan insight kecerdasan perangkat lainnya. Saat pengunjung diidentifikasi melalui agen JavaScript FingerprintJS, webhook dapat mengirimkan data peristiwa identifikasi ke Google Security Operations secara real time.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Akun FingerprintJS dengan dukungan webhook
  • Akses ke Konsol Google Cloud (untuk pembuatan kunci API)
  • Agen JavaScript FingerprintJS diinstal di situs atau aplikasi Anda

Membuat feed webhook di Google SecOps

Buat feed

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed (misalnya, FingerprintJS Identification Events).
  5. Pilih Webhook sebagai Jenis sumber.
  6. Pilih FingerprintJS sebagai Jenis log.
  7. Klik Berikutnya.
  8. Tentukan nilai untuk parameter input berikut:
    • Pemisah pemisahan (opsional): Biarkan kosong. Setiap permintaan webhook berisi satu peristiwa identifikasi.
    • Namespace aset: Namespace aset.
    • Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini.
  9. Klik Berikutnya.
  10. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Buat dan simpan kunci rahasia

Setelah membuat feed, Anda harus membuat kunci rahasia untuk autentikasi:

  1. Di halaman detail feed, klik Buat Kunci Rahasia.
  2. Dialog akan menampilkan kunci rahasia.
  3. Salin dan simpan kunci rahasia dengan aman.

Penting: Kunci rahasia hanya ditampilkan satu kali dan tidak dapat diambil lagi. Jika Anda kehilangan kunci tersebut, Anda harus membuat kunci rahasia baru.

Mendapatkan URL endpoint feed

  1. Buka tab Detail untuk feed tersebut.
  2. Di bagian Endpoint Information, salin Feed endpoint URL.
  3. Format URL-nya adalah:

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

    atau

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Simpan URL ini untuk langkah berikutnya.

  5. Klik Done.

Membuat kunci Google Cloud API

Chronicle memerlukan kunci API untuk autentikasi. Buat kunci API yang dibatasi di Konsol Google Cloud.

Buat kunci API

  1. Buka halaman Kredensial Konsol Google Cloud.
  2. Pilih project Anda (project yang terkait dengan instance Chronicle Anda).
  3. Klik Create credentials > API key.
  4. Kunci API dibuat dan ditampilkan dalam dialog.
  5. Klik Edit API key untuk membatasi kunci.

Membatasi kunci API

  1. Di halaman setelan kunci API:
    • Name: Masukkan nama deskriptif (misalnya, Chronicle FingerprintJS Webhook API Key).
  2. Di bagian Pembatasan API:
    1. Pilih Restrict key.
    2. Di drop-down Select APIs, telusuri dan pilih Google SecOps API (atau Chronicle API).
  3. Klik Simpan.
  4. Salin nilai kunci API dari kolom kunci API di bagian atas halaman.
  5. Simpan kunci API dengan aman.

Konfigurasi webhook FingerprintJS

Buat URL webhook

  • Gabungkan URL endpoint Chronicle dan kunci API:

    <ENDPOINT_URL>?key=<API_KEY>
    
    • Contoh:

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

Membuat webhook di Dasbor FingerprintJS

  1. Login ke Dasbor FingerprintJS.
  2. Buka Dasbor > Webhook.
  3. Klik Tambahkan webhook.
  4. Berikan detail konfigurasi berikut:
    • URL: Tempelkan URL endpoint lengkap dengan kunci API dari atas.
    • Lingkungan (opsional): Jika Anda memilih lingkungan, webhook hanya akan melaporkan peristiwa dari lingkungan yang cocok. Biarkan kosong untuk menerima peristiwa dari semua lingkungan.
    • Autentikasi dasar (opsional): Perluas Autentikasi dasar jika Anda ingin menambahkan autentikasi tambahan. Untuk integrasi Chronicle, Anda dapat membiarkannya kosong karena autentikasi ditangani melalui kunci API dan kunci rahasia.
  5. Klik Create Webhook.
  6. Modal keberhasilan menampilkan Webhook dibuat.
  7. Penting: Jika Anda menggunakan tanda tangan webhook (khusus paket Enterprise), salin dan simpan kunci enkripsi yang ditampilkan di modal keberhasilan. Kunci hanya ditampilkan satu kali.

Menambahkan kunci rahasia Chronicle ke webhook

FingerprintJS tidak mendukung header HTTP kustom selama pembuatan webhook. Anda harus menambahkan kunci rahasia Chronicle sebagai parameter kueri di URL webhook.

  • Perbarui URL webhook untuk menyertakan kunci rahasia:

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

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

Untuk memperbarui URL webhook:

  1. Di Dasbor FingerprintJS, buka Dashboard > Webhooks.
  2. Temukan webhook Anda dalam tabel, lalu klik ikon Edit.
  3. Perbarui kolom URL dengan URL lengkap yang mencakup kunci API dan kunci rahasia.
  4. Klik Edit webhook.

Menguji webhook

  1. Di Dasbor FingerprintJS, buka Dashboard > Webhooks.
  2. Temukan webhook Anda di tabel.
  3. Klik Send test event.
  4. Tunggu konfirmasi bahwa peristiwa pengujian berhasil dikirim.
  5. Pastikan webhook menampilkan status pengiriman berhasil.

Referensi metode autentikasi

Feed webhook Chronicle mendukung beberapa metode autentikasi. Webhook FingerprintJS menggunakan parameter kueri untuk autentikasi.

Metode parameter kueri

FingerprintJS tidak mendukung header HTTP kustom selama pembuatan webhook, sehingga kredensial harus ditambahkan ke URL.

  • Format URL:

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

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

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

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
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 Digabungkan dari label yang dibuat dari kolom sumber
has_principal, has_target, has_target_resource metadata.event_type Ditetapkan ke "NETWORK_CONNECTION" jika has_principal dan has_target benar, atau "USER_RESOURCE_ACCESS" jika has_target_resource benar, atau "STATUS_UPDATE" jika has_principal benar, atau "GENERIC_EVENT"
source_type metadata.product_event_type Nilai disalin secara langsung
requestId metadata.product_log_id Nilai disalin secara langsung
browserDetails.userAgent network.http.parsed_user_agent Diuraikan dari browserDetails.userAgent
browserDetails.browserName network.http.parsed_user_agent.browser Nilai disalin secara langsung
browserDetails.browserFullVersion network.http.parsed_user_agent.browser_version Nilai disalin secara langsung
browserDetails.device network.http.parsed_user_agent.device Nilai disalin secara langsung
network.http.parsed_user_agent.family Tetapkan ke "USER_DEFINED"
browserDetails.os network.http.parsed_user_agent.os Nilai disalin secara langsung
browserDetails.clientReferrer network.http.referral_url Nilai disalin secara langsung
browserDetails.userAgent, userAgent network.http.user_agent Nilai dari userAgent jika tidak kosong, atau browserDetails.userAgent
tag.session network.session_id Nilai disalin secara langsung
rawDeviceAttributes.vendor.value principal.administrative_domain Nilai disalin secara langsung
ip principal.asset.ip Nilai disalin secara langsung
ip principal.ip Nilai disalin secara langsung
ipInfo.v4.geolocation.city.name principal.location.city Nilai disalin secara langsung
ipInfo.v4.geolocation.country.name principal.location.country_or_region Nilai disalin secara langsung
ipInfo.v4.geolocation.latitude principal.location.region_coordinates.latitude Dikonversi ke float
ipInfo.v4.geolocation.longitude principal.location.region_coordinates.longitude Dikonversi ke float
browserDetails.osVersion, rawDeviceAttributes.platform.value principal.platform_version Nilai dari rawDeviceAttributes.platform.value jika tidak kosong, atau 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 Digabungkan dari label yang dibuat dari kolom sumber
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 Digabungkan dari label yang dibuat dari kolom sumber
rawDeviceAttributes.webGlBasics.value.vendor target.administrative_domain Nilai disalin secara langsung
ipInfo.v6.address target.asset.ip Nilai disalin secara langsung
ipInfo.v6.address target.ip Nilai disalin secara langsung
ipInfo.v6.geolocation.city.name target.location.city Nilai disalin secara langsung
ipInfo.v6.geolocation.country.name target.location.country_or_region Nilai disalin secara langsung
ipInfo.v6.geolocation.latitude target.location.region_coordinates.latitude Dikonversi ke float
ipInfo.v6.geolocation.longitude target.location.region_coordinates.longitude Dikonversi ke float
jalur target.path Nilai disalin secara langsung
rawDeviceAttributes.webGlBasics.value.version target.platform_version Nilai disalin secara langsung
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 Digabungkan dari label yang dibuat dari kolom sumber
url target.url Nilai disalin secara langsung
metadata.product_name Tetapkan ke "FINGERPRINT_JS"
metadata.vendor_name Tetapkan ke "FINGERPRINT_JS"

Log Perubahan

Melihat Log Perubahan untuk parser ini

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.