Atlassian Bitbucket-Protokolle erfassen
Ü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
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Atlassian Bitbucket-Protokolle.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie Atlassian Bitbucket als Logtyp aus.
- Klicken Sie auf Weiter.
- 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.
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
- Klicken Sie auf Weiter.
- Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
- Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- 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.
- Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
API-Schlüssel für den Webhook-Feed erstellen
Rufen Sie die Google Cloud Console > Anmeldedaten auf.
Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.
Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
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
- Rufen Sie in Bitbucket die Repository-Einstellungen auf.
- Klicken Sie unter Workflow auf Webhooks.
- Klicken Sie auf Add webhook (Webhook hinzufügen).
- 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.
- 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.