Recolha registos do Atlassian Bitbucket
Vista geral
Este analisador extrai campos dos registos JSON do Atlassian Bitbucket e mapeia-os para o UDM. Processa vários formatos de registos, preenche entidades principais ou de destino com base em campos disponíveis, como endereços IP, IDs de utilizadores e informações de recursos. Também categoriza os eventos com base na atividade de rede e do utilizador, e enriquece os dados com conclusões de segurança, se presentes. O analisador dá prioridade a agentRealtimeInfo
em relação a agentDetectionInfo
ao preencher campos.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado a um repositório no interior.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do Atlassian Bitbucket).
- Selecione Webhook como o Tipo de origem.
- Selecione Atlassian Bitbucket como o Tipo de registo.
- Clicar em Seguinte.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
\n
. - Espaço de nomes do recurso: o espaço de nomes do recurso.
- Etiquetas de carregamento: a etiqueta aplicada aos eventos deste feed.
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
- Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
- No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
- Clique em Concluído.
Crie uma chave da API para o feed de webhook
Aceda à Google Cloud consola > Credenciais.
Clique em Criar credenciais e, de seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do ponto final
- Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave da API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendação: especifique a chave da API como um cabeçalho em vez de a especificar no URL. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua o seguinte:
ENDPOINT_URL
: o URL do ponto final do feed.API_KEY
: a chave da API para autenticar no Google Security Operations.SECRET
: a chave secreta que gerou para autenticar o feed.
Crie um webhook no Atlassian Bitbucket
- No Bitbucket, aceda às definições do repositório.
- Clique em Webhooks em Fluxo de trabalho.
- Clique em Adicionar webhook.
- Configure os seguintes campos:
- Título: forneça um nome descritivo (por exemplo, Google SecOps).
- URL: introduza o URL do ponto final da API Google SecOps.
- Estado: definido como Ativo.
- Acionadores: selecione os eventos relevantes.
- Clique em Guardar.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
agentComputerName |
principal.hostname |
Preenchido a partir de agentRealtimeInfo.agentComputerName . |
agentDetectionInfo.accountId |
metadata.product_deployment_id |
Convertido em string. Usado se agentRealtimeInfo.accountId não estiver presente. |
agentDetectionInfo.accountName |
metadata.product_name |
Usado se agentRealtimeInfo.accountName não estiver presente. |
agentDetectionInfo.agentDomain |
principal.administrative_domain |
Mapeado diretamente. |
agentDetectionInfo.agentIpV4 |
target.ip |
Extraído da matriz JSON e unido no campo target.ip . |
agentDetectionInfo.agentIpV6 |
principal.ip |
Extraído da matriz JSON e unido no campo principal.ip . |
agentDetectionInfo.agentLastLoggedInUserName |
principal.user.userid |
Analisado para extrair o ID do utilizador e o domínio (se estiverem presentes). Se não existir um domínio, o mapeamento é feito diretamente para principal.user.userid . |
agentDetectionInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Usado se agentRealtimeInfo.agentOsName não estiver presente. |
agentDetectionInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Usado se agentRealtimeInfo.agentOsRevision não estiver presente. |
agentDetectionInfo.agentRegisteredAt |
principal.asset.first_discover_time |
Analisado como uma indicação de tempo ISO8601. |
agentDetectionInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Usado se agentRealtimeInfo.agentUuid não estiver presente. Com o prefixo "agentUuid:". |
agentDetectionInfo.agentVersion |
metadata.product_version |
Usado se agentRealtimeInfo.agentVersion não estiver presente. |
agentDetectionInfo.externalIp |
target.ip |
Mapeado diretamente. |
agentDetectionInfo.groupId |
principal.user.group_identifiers |
Unido ao campo se não estiver vazio ou for "-". Usado se agentRealtimeInfo.groupId não estiver presente. |
agentDetectionInfo.groupName |
principal.group.group_display_name |
Usado se agentRealtimeInfo.groupName não estiver presente. |
agentDetectionInfo.siteId |
additional.fields |
Adicionado como um par de chave-valor com a chave "agentDetectionInfo.siteId". Usado se agentRealtimeInfo.siteId não estiver presente. |
agentDetectionInfo.siteName |
additional.fields |
Adicionado como um par de chave-valor com a chave "agentDetectionInfo.siteName". Usado se agentRealtimeInfo.siteName não estiver presente. |
agentRealtimeInfo.accountId |
metadata.product_deployment_id |
Convertido em string. |
agentRealtimeInfo.accountName |
metadata.product_name |
Mapeado diretamente. |
agentRealtimeInfo.agentComputerName |
principal.hostname , principal.asset.hostname |
Mapeado diretamente. |
agentRealtimeInfo.agentId |
principal.asset_id , principal.asset.asset_id |
Com o prefixo "agentId:". |
agentRealtimeInfo.agentMachineType |
principal.asset.category |
Mapeado diretamente. |
agentRealtimeInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Mapeado diretamente. |
agentRealtimeInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Mapeado diretamente. |
agentRealtimeInfo.agentOsType |
principal.asset.platform_software.platform , principal.platform |
Mapeado para WINDOWS, MAC ou LINUX com base no valor. |
agentRealtimeInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Mapeado diretamente. Com o prefixo "agentUuid:". |
agentRealtimeInfo.agentVersion |
metadata.product_version |
Mapeado diretamente. |
agentRealtimeInfo.groupId |
principal.user.group_identifiers |
Unido ao campo se não estiver vazio ou for "-". |
agentRealtimeInfo.groupName |
principal.group.group_display_name |
Mapeado diretamente. |
agentRealtimeInfo.siteId |
additional.fields |
Adicionado como um par de chave-valor com a chave "agentDetectionInfo.siteId". |
agentRealtimeInfo.siteName |
additional.fields |
Adicionado como um par de chave-valor com a chave "agentDetectionInfo.siteName". |
associatedItems.0.id |
principal.resource.id |
Mapeado diretamente. |
associatedItems.0.name |
principal.resource.name |
Mapeado diretamente. |
associatedItems.0.typeName |
principal.resource.resource_subtype |
Mapeado diretamente. |
authorAccountId |
principal.user.userid |
Mapeado diretamente. |
category |
metadata.product_event_type |
Mapeado diretamente. Se não estiver presente e a mensagem contiver "ameaças", defina como "Ameaças". |
id |
metadata.product_log_id |
Convertido em string. |
indicators.0.description |
security_result.description |
Mapeado diretamente. |
objectItem.id |
additional.fields |
Adicionado como um par de chave-valor com a chave "objectItem.id". |
objectItem.name |
additional.fields |
Adicionado como um par de chave-valor com a chave "objectItem.name". |
objectItem.typeName |
additional.fields |
Adicionado como um par de chave-valor com a chave "objectItem.typeName". |
remoteAddress |
principal.ip |
Mapeado diretamente. |
summary |
security_result.summary |
Mapeado diretamente. |
threatInfo.classification |
security_result.category_details |
Mapeado diretamente. Também é usado para determinar security_result.category . |
threatInfo.collectionId |
metadata.ingestion_labels |
Adicionado como um par de chave-valor com a chave "alert_aggregation_value". |
threatInfo.confidenceLevel |
security_result.confidence_details |
Mapeado diretamente. Também é usado para determinar security_result.confidence . |
threatInfo.createdAt |
metadata.collected_timestamp |
Analisado como uma indicação de tempo ISO8601. |
threatInfo.detectionEngines |
metadata.ingestion_labels |
Os elementos key e title de cada elemento são adicionados como pares de chave-valor. |
threatInfo.fileExtensionType |
target.process.file.mime_type |
Mapeado diretamente. |
threatInfo.filePath |
target.file.full_path |
Mapeado diretamente. |
threatInfo.fileSize |
target.file.size |
Convertido em string e, em seguida, em número inteiro sem sinal. |
threatInfo.identifiedAt |
event_timestamp |
Analisado como uma indicação de tempo ISO8601. |
threatInfo.maliciousProcessArguments |
principal.process.command_line |
Mapeado diretamente. Também é usado no campo security_result.summary se summary não estiver presente. |
threatInfo.md5 |
target.file.md5 |
Mapeado diretamente. |
threatInfo.originatorProcess |
target.process.parent_process.file.full_path |
Mapeado diretamente. Também é usado no campo security_result.summary se summary não estiver presente. |
threatInfo.processUser |
target.user.userid |
Mapeado diretamente. |
threatInfo.sha1 |
target.file.sha1 |
Mapeado diretamente. |
threatInfo.sha256 |
target.file.sha256 |
Mapeado diretamente. |
threatInfo.storyline |
principal.process.product_specific_process_id |
Com o prefixo "ID:". |
threatInfo.threatId |
security_result.threat_id |
Mapeado diretamente. |
threatInfo.threatName |
security_result.threat_name , target.file.names |
Mapeado e unido diretamente em target.file.names . Também é usado no campo security_result.summary se summary não estiver presente. Inicialmente, é definido como "GENERIC_EVENT". Alterado para "NETWORK_UNCATEGORIZED", "STATUS_UPDATE" ou "USER_UNCATEGORIZED" com base na presença do principal e do IP/nome de anfitrião/utilizador de destino. Copiado do campo event.type . Definido como "Atlassian Bitbucket". Inicialmente, está definido como "Atlassian Bitbucket". Pode ser substituído por agentRealtimeInfo.accountName ou agentDetectionInfo.accountName . |
timestamp |
metadata.event_timestamp , timestamp |
Mapeado diretamente. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.