Fingerprint-Logs erfassen

Parserversion:1.0

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Fingerprint (ehemals FingerprintJS) so konfigurieren, dass Logs über Webhooks an Google Security Operations gesendet werden.

Fingerprint ist eine Plattform für Geräteinformationen, die Funktionen zur Besucheridentifizierung und Betrugserkennung bietet. Sie generiert eindeutige Besucher-IDs und liefert intelligente Signale, darunter Bot-Erkennung, VPN-Erkennung, Erkennung des Inkognitomodus und andere Erkenntnisse zu Geräteinformationen. Wenn ein Besucher über den FingerprintJS JavaScript-Agent identifiziert wird, können Webhooks die Daten des Identifizierungsereignisses in Echtzeit an Google Security Operations senden.

Hinweis

Folgende Voraussetzungen müssen erfüllt sein:

  • Eine Google SecOps-Instanz
  • FingerprintJS-Konto mit Webhook-Unterstützung
  • Zugriff auf die Google Cloud Console (zum Erstellen von API-Schlüsseln)
  • FingerprintJS JavaScript-Agent auf Ihrer Website oder in Ihrer Anwendung installiert

Webhook-Feed in Google SecOps erstellen

Feed erstellen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. FingerprintJS Identification Events.
  5. Wählen Sie Webhook als Quelltyp aus.
  6. Wählen Sie FingerprintJS als Logtyp aus.
  7. Klicken Sie auf Weiter.
  8. Geben Sie Werte für die folgenden Eingabeparameter an:
    • Trennzeichen für Aufteilung (optional): Lassen Sie das Feld leer. Jede Webhook-Anfrage enthält ein einzelnes Identifizierungsereignis.
    • Asset-Namespace: Der Asset-Namespace.
    • Aufnahme-Labels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
  9. Klicken Sie auf Weiter.
  10. Prüfen Sie die Konfiguration des neuen Feeds auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

Secret-Schlüssel generieren und speichern

Nachdem Sie den Feed erstellt haben, müssen Sie einen Secret-Schlüssel für die Authentifizierung generieren:

  1. Klicken Sie auf der Feed-Detailseite auf Secret-Schlüssel generieren.
  2. In einem Dialogfeld wird der Secret-Schlüssel angezeigt.
  3. Kopieren und speichern Sie den Secret-Schlüssel an einem sicheren Ort.

Wichtig: Der Secret-Schlüssel wird nur einmal angezeigt und kann später nicht mehr abgerufen werden. Wenn Sie ihn verlieren, müssen Sie einen neuen Secret-Schlüssel generieren.

Feed-Endpunkt-URL abrufen

  1. Rufen Sie den Tab Details des Feeds auf.
  2. Kopieren Sie im Abschnitt Endpunktinformationen die Feed-Endpunkt-URL.
  3. Das URL-Format lautet:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    Dabei ist {region} die Region Ihrer Google SecOps-Instanz (z. B. us, europe oder asia-southeast1) und {parent} der Ressourcenpfad im Format projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>.

  4. Speichern Sie diese URL für die nächsten Schritte.

  5. Klicken Sie auf Fertig.

Google Cloud-API-Schlüssel erstellen

Für Chronicle ist ein API-Schlüssel zur Authentifizierung erforderlich. Erstellen Sie in der Google Cloud Console einen eingeschränkten API-Schlüssel.

API-Schlüssel erstellen

  1. Rufen Sie in der Google Cloud Console die Seite „Anmeldedaten“ auf.
  2. Wählen Sie Ihr Projekt aus (das Projekt, das mit Ihrer Chronicle-Instanz verknüpft ist).
  3. Klicken Sie auf Anmeldedaten erstellen > API-Schlüssel.
  4. Ein API-Schlüssel wird erstellt und in einem Dialogfeld angezeigt.
  5. Klicken Sie auf API-Schlüssel bearbeiten , um den Schlüssel einzuschränken.

API-Schlüssel einschränken

  1. Gehen Sie auf der Seite mit den API-Schlüssel -Einstellungen so vor:
    • Name: Geben Sie einen aussagekräftigen Namen ein, z. B. Chronicle FingerprintJS Webhook API Key.
  2. Gehen Sie unter API-Einschränkungen so vor:
    1. Wählen Sie Schlüssel einschränken aus.
    2. Suchen Sie im Drop-down-Menü APIs auswählen nach Google SecOps API (oder Chronicle API) und wählen Sie diese aus.
  3. Klicken Sie auf Speichern.
  4. Kopieren Sie den API-Schlüsselwert aus dem Feld API-Schlüssel oben auf der Seite.
  5. Speichern Sie den API-Schlüssel an einem sicheren Ort.

FingerprintJS-Webhook konfigurieren

Webhook-URL erstellen

  • Kombinieren Sie die Chronicle-Endpunkt-URL und den API-Schlüssel:

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

      https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...
      

Webhook im FingerprintJS-Dashboard erstellen

  1. Melden Sie sich im FingerprintJS-Dashboard an.
  2. Rufen Sie Dashboard > Webhooks auf.
  3. Klicken Sie auf Webhook hinzufügen.
  4. Geben Sie die folgenden Konfigurationsdetails an:
    • URL: Fügen Sie die vollständige Endpunkt-URL mit API-Schlüssel von oben ein.
    • Umgebung (optional): Wenn Sie eine Umgebung auswählen, werden in Ihrem Webhook nur Ereignisse aus einer entsprechenden Umgebung gemeldet. Lassen Sie das Feld leer, um Ereignisse aus allen Umgebungen zu erhalten.
    • Basisauthentifizierung (optional): Maximieren Sie Basisauthentifizierung , wenn Sie eine zusätzliche Authentifizierung hinzufügen möchten. Für die Chronicle-Integration können Sie dieses Feld leer lassen, da die Authentifizierung über den API-Schlüssel und den Secret-Schlüssel erfolgt.
  5. Klicken Sie auf Webhook erstellen.
  6. Ein Erfolgsmodal mit der Meldung Webhooks erstellt wird angezeigt.
  7. Wichtig: Wenn Sie Webhook-Signaturen verwenden (nur Enterprise-Plan), kopieren und speichern Sie den im Erfolgsmodal angezeigten Verschlüsselungsschlüssel. Der Schlüssel wird nur einmal angezeigt.

Chronicle-Secret-Schlüssel zum Webhook hinzufügen

FingerprintJS unterstützt beim Erstellen von Webhooks keine benutzerdefinierten HTTP-Header. Sie müssen den Chronicle-Secret-Schlüssel als Abfrageparameter in der Webhook-URL hinzufügen.

  • Aktualisieren Sie die Webhook-URL, um den Secret-Schlüssel einzufügen:

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

      https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
      

So aktualisieren Sie die Webhook-URL:

  1. Rufen Sie im FingerprintJS-Dashboard Dashboard > Webhooks auf.
  2. Suchen Sie in der Tabelle nach Ihrem Webhook und klicken Sie auf das Symbol Bearbeiten.
  3. Aktualisieren Sie das Feld URL mit der vollständigen URL, die sowohl den API-Schlüssel als auch den Secret-Schlüssel enthält.
  4. Klicken Sie auf Webhook bearbeiten.

Webhook testen

  1. Rufen Sie im FingerprintJS-Dashboard Dashboard > Webhooks auf.
  2. Suchen Sie in der Tabelle nach Ihrem Webhook.
  3. Klicken Sie auf Testereignis senden.
  4. Warten Sie auf die Bestätigung, dass das Testereignis gesendet wurde.
  5. Prüfen Sie, ob für den Webhook der Status „Erfolgreiche Bereitstellung“ angezeigt wird.

Referenz zu Authentifizierungsmethoden

Chronicle-Webhook-Feeds unterstützen mehrere Authentifizierungsmethoden. FingerprintJS-Webhooks verwenden Abfrageparameter zur Authentifizierung.

Methode mit Abfrageparametern

FingerprintJS unterstützt beim Erstellen von Webhooks keine benutzerdefinierten HTTP-Header. Daher müssen Anmeldedaten an die URL angehängt werden.

  • URL-Format :

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

      https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
      
  • Anfrageformat :

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

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
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 Zusammengeführt aus Labels, die aus Quellfeldern erstellt wurden
has_principal, has_target, has_target_resource metadata.event_type Auf „NETWORK_CONNECTION“ festgelegt, wenn has_principal und has_target „true“ sind, andernfalls auf „USER_RESOURCE_ACCESS“, wenn has_target_resource „true“ ist, andernfalls auf „STATUS_UPDATE“, wenn has_principal „true“ ist, andernfalls auf „GENERIC_EVENT“
source_type metadata.product_event_type Wert direkt kopiert
requestId metadata.product_log_id Wert direkt kopiert
browserDetails.userAgent network.http.parsed_user_agent Aus browserDetails.userAgent geparst
browserDetails.browserName network.http.parsed_user_agent.browser Wert direkt kopiert
browserDetails.browserFullVersion network.http.parsed_user_agent.browser_version Wert direkt kopiert
browserDetails.device network.http.parsed_user_agent.device Wert direkt kopiert
network.http.parsed_user_agent.family Auf „USER_DEFINED“ festgelegt
browserDetails.os network.http.parsed_user_agent.os Wert direkt kopiert
browserDetails.clientReferrer network.http.referral_url Wert direkt kopiert
browserDetails.userAgent, userAgent network.http.user_agent Wert aus userAgent, falls nicht leer, andernfalls browserDetails.userAgent
tag.session network.session_id Wert direkt kopiert
rawDeviceAttributes.vendor.value principal.administrative_domain Wert direkt kopiert
ip principal.asset.ip Wert direkt kopiert
ip principal.ip Wert direkt kopiert
ipInfo.v4.geolocation.city.name principal.location.city Wert direkt kopiert
ipInfo.v4.geolocation.country.name principal.location.country_or_region Wert direkt kopiert
ipInfo.v4.geolocation.latitude principal.location.region_coordinates.latitude In Gleitkommazahl konvertiert
ipInfo.v4.geolocation.longitude principal.location.region_coordinates.longitude In Gleitkommazahl konvertiert
browserDetails.osVersion, rawDeviceAttributes.platform.value principal.platform_version Wert aus rawDeviceAttributes.platform.value, falls nicht leer, andernfalls 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 Zusammengeführt aus Labels, die aus Quellfeldern erstellt wurden
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 Zusammengeführt aus Labels, die aus Quellfeldern erstellt wurden
rawDeviceAttributes.webGlBasics.value.vendor target.administrative_domain Wert direkt kopiert
ipInfo.v6.address target.asset.ip Wert direkt kopiert
ipInfo.v6.address target.ip Wert direkt kopiert
ipInfo.v6.geolocation.city.name target.location.city Wert direkt kopiert
ipInfo.v6.geolocation.country.name target.location.country_or_region Wert direkt kopiert
ipInfo.v6.geolocation.latitude target.location.region_coordinates.latitude In Gleitkommazahl konvertiert
ipInfo.v6.geolocation.longitude target.location.region_coordinates.longitude In Gleitkommazahl konvertiert
path target.path Wert direkt kopiert
rawDeviceAttributes.webGlBasics.value.version target.platform_version Wert direkt kopiert
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 Zusammengeführt aus Labels, die aus Quellfeldern erstellt wurden
url target.url Wert direkt kopiert
metadata.product_name Auf „FINGERPRINT_JS“ festgelegt
metadata.vendor_name Auf „FINGERPRINT_JS“ festgelegt

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten