Atlassian Bitbucket-Protokolle erfassen

Unterstützt in:

Übersicht

Dieser Parser extrahiert Felder aus Atlassian Bitbucket-JSON-Logs und ordnet sie dem UDM zu. Er unterstützt verschiedene Protokollformate und füllt Haupt- oder Zielentitäten anhand verfügbarer Felder wie IP-Adressen, Nutzer-IDs und Asset-Informationen aus. Außerdem werden Ereignisse anhand von Netzwerk- und Nutzeraktivitäten kategorisiert und die Daten mit Sicherheitsbefunden angereichert, sofern vorhanden. Der Parser priorisiert agentRealtimeInfo vor agentDetectionInfo beim Ausfüllen von Feldern.

Hinweise

  • Sie benötigen eine Google SecOps-Instanz.
  • Sie benötigen Lese- und Schreibzugriff auf ein Repository.

Feed in Google SecOps für die Aufnahme der Atlassian Bitbucket-Logs konfigurieren

  1. Gehen Sie zu SIEM-Einstellungen > Feeds.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Atlassian Bitbucket-Protokolle.
  4. Wählen Sie als Quelltyp Webhook aus.
  5. Wählen Sie Atlassian Bitbucket als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
    • Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B. \n.
    • Asset-Namespace: der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  8. Klicken Sie auf Weiter.
  9. Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
  10. Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
  11. Kopieren und speichern Sie den geheimen Schlüssel. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen Secret-Schlüssel generieren. Dadurch wird der vorherige Secret-Schlüssel jedoch ungültig.
  12. Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
  13. Klicken Sie auf Fertig.

API-Schlüssel für den Webhook-Feed erstellen

  1. Rufen Sie die Google Cloud Console > Anmeldedaten auf.

    Zu den Anmeldedaten

  2. Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.

  3. Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.

Endpunkt-URL angeben

  1. Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
  2. Aktiviere die Authentifizierung, indem du den API-Schlüssel und den geheimen Schlüssel als Teil der benutzerdefinierten Kopfzeile im folgenden Format angibst:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Empfehlung: Geben Sie den API-Schlüssel als Header an, anstatt ihn in der URL anzugeben. Wenn Ihr Webhook-Client keine benutzerdefinierten Header unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mithilfe von Suchparametern im folgenden Format angeben:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Ersetzen Sie Folgendes:

  • ENDPOINT_URL: die URL des Feedendpunkts.
  • API_KEY: Der API-Schlüssel für die Authentifizierung bei Google Security Operations.
  • SECRET: den geheimen Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.

Webhook in Atlassian Bitbucket erstellen

  1. Rufen Sie in Bitbucket die Repository-Einstellungen auf.
  2. Klicken Sie unter Workflow auf Webhooks.
  3. Klicken Sie auf Add webhook (Webhook hinzufügen).
  4. Konfigurieren Sie die folgenden Felder:
    • Titel: Geben Sie einen aussagekräftigen Namen an, z. B. Google SecOps.
    • URL: Geben Sie die URL des Endpunkts der Google SecOps API ein.
    • Status: Legen Sie Aktiv fest.
    • Trigger: Wählen Sie die relevanten Ereignisse aus.
  5. Klicken Sie auf Speichern.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
agentComputerName principal.hostname Aus agentRealtimeInfo.agentComputerName übernommen.
agentDetectionInfo.accountId metadata.product_deployment_id In String umgewandelt. Wird verwendet, wenn agentRealtimeInfo.accountId nicht vorhanden ist.
agentDetectionInfo.accountName metadata.product_name Wird verwendet, wenn agentRealtimeInfo.accountName nicht vorhanden ist.
agentDetectionInfo.agentDomain principal.administrative_domain Direkt zugeordnet.
agentDetectionInfo.agentIpV4 target.ip Aus dem JSON-Array extrahiert und in das Feld target.ip eingefügt.
agentDetectionInfo.agentIpV6 principal.ip Aus dem JSON-Array extrahiert und in das Feld principal.ip eingefügt.
agentDetectionInfo.agentLastLoggedInUserName principal.user.userid Wird geparst, um die Nutzer-ID und die Domain (falls vorhanden) zu extrahieren. Wenn keine Domain vorhanden ist, wird sie direkt principal.user.userid zugeordnet.
agentDetectionInfo.agentOsName principal.platform_version, principal.asset.platform_software.platform_version Wird verwendet, wenn agentRealtimeInfo.agentOsName nicht vorhanden ist.
agentDetectionInfo.agentOsRevision principal.platform_patch_level, principal.asset.platform_software.platform_patch_level Wird verwendet, wenn agentRealtimeInfo.agentOsRevision nicht vorhanden ist.
agentDetectionInfo.agentRegisteredAt principal.asset.first_discover_time Wird als ISO 8601-Zeitstempel geparst.
agentDetectionInfo.agentUuid principal.asset_id, principal.asset.asset_id Wird verwendet, wenn agentRealtimeInfo.agentUuid nicht vorhanden ist. Muss mit „agentUuid:“ beginnen.
agentDetectionInfo.agentVersion metadata.product_version Wird verwendet, wenn agentRealtimeInfo.agentVersion nicht vorhanden ist.
agentDetectionInfo.externalIp target.ip Direkt zugeordnet.
agentDetectionInfo.groupId principal.user.group_identifiers Wird in das Feld eingefügt, wenn es nicht leer oder „-“ ist. Wird verwendet, wenn agentRealtimeInfo.groupId nicht vorhanden ist.
agentDetectionInfo.groupName principal.group.group_display_name Wird verwendet, wenn agentRealtimeInfo.groupName nicht vorhanden ist.
agentDetectionInfo.siteId additional.fields Als Schlüssel/Wert-Paar mit dem Schlüssel „agentDetectionInfo.siteId“ hinzugefügt. Wird verwendet, wenn agentRealtimeInfo.siteId nicht vorhanden ist.
agentDetectionInfo.siteName additional.fields Wird als Schlüssel/Wert-Paar mit dem Schlüssel „agentDetectionInfo.siteName“ hinzugefügt. Wird verwendet, wenn agentRealtimeInfo.siteName nicht vorhanden ist.
agentRealtimeInfo.accountId metadata.product_deployment_id In String umgewandelt.
agentRealtimeInfo.accountName metadata.product_name Direkt zugeordnet.
agentRealtimeInfo.agentComputerName principal.hostname, principal.asset.hostname Direkt zugeordnet.
agentRealtimeInfo.agentId principal.asset_id, principal.asset.asset_id Muss mit „agentId:“ beginnen.
agentRealtimeInfo.agentMachineType principal.asset.category Direkt zugeordnet.
agentRealtimeInfo.agentOsName principal.platform_version, principal.asset.platform_software.platform_version Direkt zugeordnet.
agentRealtimeInfo.agentOsRevision principal.platform_patch_level, principal.asset.platform_software.platform_patch_level Direkt zugeordnet.
agentRealtimeInfo.agentOsType principal.asset.platform_software.platform, principal.platform Wird basierend auf dem Wert WINDOWS, MAC oder LINUX zugeordnet.
agentRealtimeInfo.agentUuid principal.asset_id, principal.asset.asset_id Direkt zugeordnet. Muss mit „agentUuid:“ beginnen.
agentRealtimeInfo.agentVersion metadata.product_version Direkt zugeordnet.
agentRealtimeInfo.groupId principal.user.group_identifiers Wird mit dem Feld zusammengeführt, wenn es nicht leer oder „-“ ist.
agentRealtimeInfo.groupName principal.group.group_display_name Direkt zugeordnet.
agentRealtimeInfo.siteId additional.fields Als Schlüssel/Wert-Paar mit dem Schlüssel „agentDetectionInfo.siteId“ hinzugefügt.
agentRealtimeInfo.siteName additional.fields Wird als Schlüssel/Wert-Paar mit dem Schlüssel „agentDetectionInfo.siteName“ hinzugefügt.
associatedItems.0.id principal.resource.id Direkt zugeordnet.
associatedItems.0.name principal.resource.name Direkt zugeordnet.
associatedItems.0.typeName principal.resource.resource_subtype Direkt zugeordnet.
authorAccountId principal.user.userid Direkt zugeordnet.
category metadata.product_event_type Direkt zugeordnet. Wenn das Attribut nicht vorhanden ist und die Nachricht „Bedrohungen“ enthält, setzen Sie es auf „Bedrohungen“.
id metadata.product_log_id In String umgewandelt.
indicators.0.description security_result.description Direkt zugeordnet.
objectItem.id additional.fields Wird als Schlüssel/Wert-Paar mit dem Schlüssel „objectItem.id“ hinzugefügt.
objectItem.name additional.fields Als Schlüssel/Wert-Paar mit dem Schlüssel „objectItem.name“ hinzugefügt.
objectItem.typeName additional.fields Wird als Schlüssel/Wert-Paar mit dem Schlüssel „objectItem.typeName“ hinzugefügt.
remoteAddress principal.ip Direkt zugeordnet.
summary security_result.summary Direkt zugeordnet.
threatInfo.classification security_result.category_details Direkt zugeordnet. Wird auch zur Bestimmung von security_result.category verwendet.
threatInfo.collectionId metadata.ingestion_labels Wird als Schlüssel/Wert-Paar mit dem Schlüssel „alert_aggregation_value“ hinzugefügt.
threatInfo.confidenceLevel security_result.confidence_details Direkt zugeordnet. Wird auch zur Bestimmung von security_result.confidence verwendet.
threatInfo.createdAt metadata.collected_timestamp Wird als ISO 8601-Zeitstempel geparst.
threatInfo.detectionEngines metadata.ingestion_labels key und title jedes Elements werden als Schlüssel/Wert-Paare hinzugefügt.
threatInfo.fileExtensionType target.process.file.mime_type Direkt zugeordnet.
threatInfo.filePath target.file.full_path Direkt zugeordnet.
threatInfo.fileSize target.file.size In einen String und dann in eine vorzeichenlose Ganzzahl umgewandelt.
threatInfo.identifiedAt event_timestamp Wird als ISO 8601-Zeitstempel geparst.
threatInfo.maliciousProcessArguments principal.process.command_line Direkt zugeordnet. Wird auch im Feld security_result.summary verwendet, wenn summary nicht vorhanden ist.
threatInfo.md5 target.file.md5 Direkt zugeordnet.
threatInfo.originatorProcess target.process.parent_process.file.full_path Direkt zugeordnet. Wird auch im Feld security_result.summary verwendet, wenn summary nicht vorhanden ist.
threatInfo.processUser target.user.userid Direkt zugeordnet.
threatInfo.sha1 target.file.sha1 Direkt zugeordnet.
threatInfo.sha256 target.file.sha256 Direkt zugeordnet.
threatInfo.storyline principal.process.product_specific_process_id Beginnt mit „ID:“.
threatInfo.threatId security_result.threat_id Direkt zugeordnet.
threatInfo.threatName security_result.threat_name, target.file.names Direkt zugeordnet und mit target.file.names zusammengeführt. Wird auch im Feld security_result.summary verwendet, wenn summary nicht vorhanden ist. Legen Sie zuerst „GENERIC_EVENT“ fest. Wurde in „NETWORK_UNCATEGORIZED“, „STATUS_UPDATE“ oder „USER_UNCATEGORIZED“ geändert, je nachdem, ob eine Haupt- und Ziel-IP-Adresse/ein Haupt- und Ziel-Hostname/ein Haupt- und Zielnutzer vorhanden ist. Aus dem Feld event.type kopiert Legen Sie „Atlassian Bitbucket“ fest. Legen Sie zuerst „Atlassian Bitbucket“ fest. Kann durch agentRealtimeInfo.accountName oder agentDetectionInfo.accountName überschrieben werden.
timestamp metadata.event_timestamp, timestamp Direkt zugeordnet.

Änderungen

2023-06-12

  • Neu erstellter Parser.