Collecter les journaux Atlassian Bitbucket
Présentation
Cet analyseur extrait des champs des journaux JSON Atlassian Bitbucket et les met en correspondance avec l'UDM. Il gère différents formats de journaux, renseigne les entités principales ou cibles en fonction des champs disponibles, tels que les adresses IP, les ID utilisateur et les informations sur les composants. Il catégorise également les événements en fonction de l'activité du réseau et des utilisateurs, et enrichit les données avec les résultats de sécurité, le cas échéant. L'analyseur donne la priorité à agentRealtimeInfo
par rapport à agentDetectionInfo
lors du remplissage des champs.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à un dépôt.
Configurer un flux dans Google SecOps pour ingérer les journaux Atlassian Bitbucket
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux Atlassian Bitbucket).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Atlassian Bitbucket comme Type de journal.
- Cliquez sur Suivant.
- Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
- Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple
\n
. - Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé appliqué aux événements de ce flux.
- Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
- Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
- Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais cette action rend l'ancienne clé secrète obsolète.
- Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
- Cliquez sur OK.
Créer une clé API pour le flux webhook
Accédez à la console Google Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Limitez l'accès de la clé API à l'API Google Security Operations.
Spécifier l'URL du point de terminaison
- Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recommandation: Spécifiez la clé API en tant qu'en-tête plutôt que dans l'URL. Si votre client webhook n'est pas compatible avec les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Remplacez les éléments suivants :
ENDPOINT_URL
: URL du point de terminaison du flux.API_KEY
: clé API permettant de s'authentifier auprès de Google Security Operations.SECRET
: clé secrète que vous avez générée pour authentifier le flux.
Créer un webhook dans Atlassian Bitbucket
- Dans Bitbucket, accédez aux paramètres du dépôt.
- Cliquez sur Webhooks sous Workflow (Workflow).
- Cliquez sur Add webhook (Ajouter un Webhook).
- Configurez les champs suivants :
- Titre: indiquez un nom descriptif (par exemple, Google SecOps).
- URL: saisissez l'URL du point de terminaison de l'API Google SecOps.
- État: définissez-le sur Actif.
- Déclencheurs: sélectionnez les événements pertinents.
- Cliquez sur Enregistrer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
agentComputerName |
principal.hostname |
Renseigné à partir de agentRealtimeInfo.agentComputerName . |
agentDetectionInfo.accountId |
metadata.product_deployment_id |
Converti en chaîne. Utilisé si agentRealtimeInfo.accountId n'est pas présent. |
agentDetectionInfo.accountName |
metadata.product_name |
Utilisé si agentRealtimeInfo.accountName n'est pas présent. |
agentDetectionInfo.agentDomain |
principal.administrative_domain |
Mappage direct. |
agentDetectionInfo.agentIpV4 |
target.ip |
Extrait du tableau JSON et fusionné dans le champ target.ip . |
agentDetectionInfo.agentIpV6 |
principal.ip |
Extrait du tableau JSON et fusionné dans le champ principal.ip . |
agentDetectionInfo.agentLastLoggedInUserName |
principal.user.userid |
Analyse pour extraire l'ID utilisateur et le domaine (le cas échéant). En l'absence de domaine, mappé directement sur principal.user.userid . |
agentDetectionInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Utilisé si agentRealtimeInfo.agentOsName n'est pas présent. |
agentDetectionInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Utilisé si agentRealtimeInfo.agentOsRevision n'est pas présent. |
agentDetectionInfo.agentRegisteredAt |
principal.asset.first_discover_time |
Analyse en tant que code temporel ISO8601. |
agentDetectionInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Utilisé si agentRealtimeInfo.agentUuid n'est pas présent. Préfixé par "agentUuid:". |
agentDetectionInfo.agentVersion |
metadata.product_version |
Utilisé si agentRealtimeInfo.agentVersion n'est pas présent. |
agentDetectionInfo.externalIp |
target.ip |
Mappage direct. |
agentDetectionInfo.groupId |
principal.user.group_identifiers |
Fusionné dans le champ s'il n'est pas vide ou ne correspond pas à "-". Utilisé si agentRealtimeInfo.groupId n'est pas présent. |
agentDetectionInfo.groupName |
principal.group.group_display_name |
Utilisé si agentRealtimeInfo.groupName n'est pas présent. |
agentDetectionInfo.siteId |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteId". Utilisé si agentRealtimeInfo.siteId n'est pas présent. |
agentDetectionInfo.siteName |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteName". Utilisé si agentRealtimeInfo.siteName n'est pas présent. |
agentRealtimeInfo.accountId |
metadata.product_deployment_id |
Converti en chaîne. |
agentRealtimeInfo.accountName |
metadata.product_name |
Mappage direct. |
agentRealtimeInfo.agentComputerName |
principal.hostname , principal.asset.hostname |
Mappage direct. |
agentRealtimeInfo.agentId |
principal.asset_id , principal.asset.asset_id |
Préfixé par "agentId:". |
agentRealtimeInfo.agentMachineType |
principal.asset.category |
Mappage direct. |
agentRealtimeInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Mappage direct. |
agentRealtimeInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Mappage direct. |
agentRealtimeInfo.agentOsType |
principal.asset.platform_software.platform , principal.platform |
Mappé sur WINDOWS, MAC ou LINUX en fonction de la valeur. |
agentRealtimeInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Mappage direct. Préfixé par "agentUuid:". |
agentRealtimeInfo.agentVersion |
metadata.product_version |
Mappage direct. |
agentRealtimeInfo.groupId |
principal.user.group_identifiers |
Fusionné dans le champ s'il n'est pas vide ou s'il contient "-". |
agentRealtimeInfo.groupName |
principal.group.group_display_name |
Mappage direct. |
agentRealtimeInfo.siteId |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteId". |
agentRealtimeInfo.siteName |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "agentDetectionInfo.siteName". |
associatedItems.0.id |
principal.resource.id |
Mappage direct. |
associatedItems.0.name |
principal.resource.name |
Mappage direct. |
associatedItems.0.typeName |
principal.resource.resource_subtype |
Mappage direct. |
authorAccountId |
principal.user.userid |
Mappage direct. |
category |
metadata.product_event_type |
Mappage direct. Si elle n'est pas présente et que le message contient "menaces", définissez-la sur "Menaces". |
id |
metadata.product_log_id |
Converti en chaîne. |
indicators.0.description |
security_result.description |
Mappage direct. |
objectItem.id |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "objectItem.id". |
objectItem.name |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "objectItem.name". |
objectItem.typeName |
additional.fields |
Ajouté en tant que paire clé-valeur avec la clé "objectItem.typeName". |
remoteAddress |
principal.ip |
Mappage direct. |
summary |
security_result.summary |
Mappage direct. |
threatInfo.classification |
security_result.category_details |
Mappage direct. Utilisé également pour déterminer security_result.category . |
threatInfo.collectionId |
metadata.ingestion_labels |
Ajouté en tant que paire clé-valeur avec la clé "alert_aggregation_value". |
threatInfo.confidenceLevel |
security_result.confidence_details |
Mappage direct. Utilisé également pour déterminer security_result.confidence . |
threatInfo.createdAt |
metadata.collected_timestamp |
Analysé en tant que code temporel ISO 8601. |
threatInfo.detectionEngines |
metadata.ingestion_labels |
Les key et title de chaque élément sont ajoutés sous forme de paires clé-valeur. |
threatInfo.fileExtensionType |
target.process.file.mime_type |
Mappage direct. |
threatInfo.filePath |
target.file.full_path |
Mappage direct. |
threatInfo.fileSize |
target.file.size |
Converti en chaîne, puis en entier sans signature. |
threatInfo.identifiedAt |
event_timestamp |
Analyse en tant que code temporel ISO8601. |
threatInfo.maliciousProcessArguments |
principal.process.command_line |
Mappage direct. Utilisé également dans le champ security_result.summary si summary n'est pas présent. |
threatInfo.md5 |
target.file.md5 |
Mappage direct. |
threatInfo.originatorProcess |
target.process.parent_process.file.full_path |
Mappage direct. Utilisé également dans le champ security_result.summary si summary n'est pas présent. |
threatInfo.processUser |
target.user.userid |
Mappage direct. |
threatInfo.sha1 |
target.file.sha1 |
Mappage direct. |
threatInfo.sha256 |
target.file.sha256 |
Mappage direct. |
threatInfo.storyline |
principal.process.product_specific_process_id |
Préfixé par "ID:". |
threatInfo.threatId |
security_result.threat_id |
Mappage direct. |
threatInfo.threatName |
security_result.threat_name , target.file.names |
Mappage direct et fusion dans target.file.names . Utilisé également dans le champ security_result.summary si summary n'est pas présent. Définissez-le initialement sur "GENERIC_EVENT". Remplacement par "NETWORK_UNCATEGORIZED", "STATUS_UPDATE" ou "USER_UNCATEGORIZED" en fonction de la présence d'un principal et d'une adresse IP/d'un nom d'hôte/d'un utilisateur cibles. Copié à partir du champ event.type . Définissez-le sur "Atlassian Bitbucket". Définissez-le initialement sur "Atlassian Bitbucket". Peut être remplacé par agentRealtimeInfo.accountName ou agentDetectionInfo.accountName . |
timestamp |
metadata.event_timestamp , timestamp |
Mappage direct. |
Modifications
2023-06-12
- Analyseur nouvellement créé.