Raccogliere i log di Fingerprint

Versione parser: 1.0

Supportato in:

Questo documento spiega come configurare Fingerprint (in precedenza FingerprintJS) per inviare i log a Google Security Operations utilizzando i webhook.

Fingerprint è una piattaforma di intelligence sui dispositivi che fornisce funzionalità di identificazione dei visitatori e di rilevamento delle frodi. Genera identificatori visitatore unico e fornisce segnali intelligenti, tra cui il rilevamento di bot, VPN e della modalità di navigazione in incognito, nonché altre informazioni di intelligence sui dispositivi. Quando un visitatore viene identificato tramite l'agente JavaScript FingerprintJS, i webhook possono inviare i dati degli eventi di identificazione a Google Security Operations in tempo reale.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Account FingerprintJS con supporto webhook
  • Accesso a Google Cloud Console (per la creazione della chiave API)
  • Agente JavaScript FingerprintJS installato sul tuo sito web o sulla tua applicazione

Creare un feed webhook in Google SecOps

Creare il feed

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, FingerprintJS Identification Events).
  5. Seleziona Webhook come Tipo di origine.
  6. Seleziona FingerprintJS come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:
    • Delimitatore di divisione (facoltativo): lascia vuoto. Ogni richiesta webhook contiene un singolo evento di identificazione.
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
  9. Fai clic su Avanti.
  10. Esamina la nuova configurazione del feed nella schermata Finalizza, quindi fai clic su Invia.

Generare e salvare la chiave segreta

Dopo aver creato il feed, devi generare una chiave segreta per l'autenticazione:

  1. Nella pagina dei dettagli del feed, fai clic su Genera chiave segreta.
  2. Viene visualizzata una finestra di dialogo con la chiave segreta.
  3. Copia e salva la chiave segreta in modo sicuro.

Importante: la chiave segreta viene visualizzata una sola volta e non può essere recuperata in un secondo momento. Se la perdi, devi generare una nuova chiave segreta.

Recuperare l'URL dell'endpoint del feed

  1. Vai alla scheda Dettagli del feed.
  2. Nella sezione Informazioni sull'endpoint, copia l'URL dell'endpoint del feed.
  3. Il formato dell'URL è:

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

    o

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Salva questo URL per i passaggi successivi.

  5. Fai clic su Fine.

Creare una chiave API Google Cloud

Chronicle richiede una chiave API per l'autenticazione. Crea una chiave API limitata nella Google Cloud Console.

Creare la chiave API

  1. Vai alla pagina Credenziali di Google Cloud Console.
  2. Seleziona il tuo progetto (il progetto associato alla tua istanza Chronicle).
  3. Fai clic su Crea credenziali > Chiave API.
  4. Viene creata una chiave API e visualizzata in una finestra di dialogo.
  5. Fai clic su Modifica chiave API per limitare la chiave.

Limitare la chiave API

  1. Nella pagina delle impostazioni della chiave API :
    • Nome: inserisci un nome descrittivo (ad esempio, Chronicle FingerprintJS Webhook API Key).
  2. In Limitazioni API:
    1. Seleziona Limita chiave.
    2. Nel menu a discesa Seleziona API, cerca e seleziona API Google SecOps (o API Chronicle).
  3. Fai clic su Salva.
  4. Copia il valore della chiave API dal campo Chiave API nella parte superiore della pagina.
  5. Salva la chiave API in modo sicuro.

Configurare il webhook FingerprintJS

Costruire l'URL webhook

  • Combina l'URL dell'endpoint Chronicle e la chiave API:

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

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

Creare un webhook nella dashboard FingerprintJS

  1. Accedi alla dashboard FingerprintJS.
  2. Vai a Dashboard > Webhook.
  3. Fai clic su Aggiungi webhook.
  4. Fornisci i seguenti dettagli di configurazione:
    • URL: incolla l'URL dell'endpoint completo con la chiave API di sopra.
    • Ambiente (facoltativo): se selezioni un ambiente, il webhook segnalerà solo gli eventi di un ambiente corrispondente. Lascia vuoto per ricevere eventi da tutti gli ambienti.
    • Autenticazione di base (facoltativo): espandi Autenticazione di base se vuoi aggiungere un'autenticazione aggiuntiva. Per l'integrazione di Chronicle, puoi lasciare questo campo vuoto, poiché l'autenticazione viene gestita tramite la chiave API e la chiave segreta.
  5. Fai clic su Crea webhook.
  6. Viene visualizzata una finestra modale di successo con il messaggio Webhook creati.
  7. Importante: se utilizzi le firme webhook (solo piano Enterprise), copia e salva la chiave di crittografia mostrata nella finestra modale di successo. La chiave viene visualizzata una sola volta.

Aggiungere la chiave segreta Chronicle al webhook

FingerprintJS non supporta le intestazioni HTTP personalizzate durante la creazione del webhook. Devi aggiungere la chiave segreta Chronicle come parametro di query nell'URL webhook.

  • Aggiorna l'URL webhook in modo da includere la chiave segreta:

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

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

Per aggiornare l'URL del webhook:

  1. Nella dashboard FingerprintJS, vai a Dashboard > Webhook.
  2. Trova il webhook nella tabella e fai clic sull'icona Modifica.
  3. Aggiorna il campo URL con l'URL completo, inclusi la chiave API e la chiave segreta.
  4. Fai clic su Modifica webhook.

Testare il webhook

  1. Nella dashboard FingerprintJS, vai a Dashboard > Webhook.
  2. Trova il webhook nella tabella.
  3. Fai clic su Invia evento di test.
  4. Attendi la conferma che l'evento di test sia stato inviato correttamente.
  5. Verifica che il webhook mostri uno stato di pubblicazione riuscita.

Riferimento ai metodi di autenticazione

I feed webhook di Chronicle supportano più metodi di autenticazione. I webhook FingerprintJS utilizzano parametri di ricerca per l'autenticazione.

Metodo dei parametri di query

FingerprintJS non supporta le intestazioni HTTP personalizzate durante la creazione del webhook, pertanto le credenziali devono essere aggiunte all'URL.

  • Formato URL:

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

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

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

Tabella di mapping UDM

Campo log Mapping UDM Logica
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 Unito dalle etichette create dai campi di origine
has_principal, has_target, has_target_resource metadata.event_type Impostato su "NETWORK_CONNECTION" se has_principal e has_target sono true, altrimenti "USER_RESOURCE_ACCESS" se has_target_resource è true, altrimenti "STATUS_UPDATE" se has_principal è true, altrimenti "GENERIC_EVENT"
source_type metadata.product_event_type Valore copiato direttamente
requestId metadata.product_log_id Valore copiato direttamente
browserDetails.userAgent network.http.parsed_user_agent Analizzato da browserDetails.userAgent
browserDetails.browserName network.http.parsed_user_agent.browser Valore copiato direttamente
browserDetails.browserFullVersion network.http.parsed_user_agent.browser_version Valore copiato direttamente
browserDetails.device network.http.parsed_user_agent.device Valore copiato direttamente
network.http.parsed_user_agent.family Impostato su "USER_DEFINED"
browserDetails.os network.http.parsed_user_agent.os Valore copiato direttamente
browserDetails.clientReferrer network.http.referral_url Valore copiato direttamente
browserDetails.userAgent, userAgent network.http.user_agent Valore da userAgent se non vuoto, altrimenti browserDetails.userAgent
tag.session network.session_id Valore copiato direttamente
rawDeviceAttributes.vendor.value principal.administrative_domain Valore copiato direttamente
ip principal.asset.ip Valore copiato direttamente
ip principal.ip Valore copiato direttamente
ipInfo.v4.geolocation.city.name principal.location.city Valore copiato direttamente
ipInfo.v4.geolocation.country.name principal.location.country_or_region Valore copiato direttamente
ipInfo.v4.geolocation.latitude principal.location.region_coordinates.latitude Convertito in float
ipInfo.v4.geolocation.longitude principal.location.region_coordinates.longitude Convertito in float
browserDetails.osVersion, rawDeviceAttributes.platform.value principal.platform_version Valore da rawDeviceAttributes.platform.value se non vuoto, altrimenti 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 Unito dalle etichette create dai campi di origine
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 Unito dalle etichette create dai campi di origine
rawDeviceAttributes.webGlBasics.value.vendor target.administrative_domain Valore copiato direttamente
ipInfo.v6.address target.asset.ip Valore copiato direttamente
ipInfo.v6.address target.ip Valore copiato direttamente
ipInfo.v6.geolocation.city.name target.location.city Valore copiato direttamente
ipInfo.v6.geolocation.country.name target.location.country_or_region Valore copiato direttamente
ipInfo.v6.geolocation.latitude target.location.region_coordinates.latitude Convertito in float
ipInfo.v6.geolocation.longitude target.location.region_coordinates.longitude Convertito in float
path target.path Valore copiato direttamente
rawDeviceAttributes.webGlBasics.value.version target.platform_version Valore copiato direttamente
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 Unito dalle etichette create dai campi di origine
url target.url Valore copiato direttamente
metadata.product_name Impostato su "FINGERPRINT_JS"
metadata.vendor_name Impostato su "FINGERPRINT_JS"

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.