Recolha registos do Atlassian Bitbucket

Compatível com:

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:

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. No campo Nome do feed, introduza um nome para o feed (por exemplo, Registos do Atlassian Bitbucket).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Atlassian Bitbucket como o Tipo de registo.
  7. Clicar em Seguinte.
  8. 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.
  9. Clicar em Seguinte.
  10. Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
  11. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
  12. 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.
  13. 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.
  14. Clique em Concluído.

Crie uma chave da API para o feed de webhook

  1. Aceda à Google Cloud consola > Credenciais.

    Aceder a Credenciais

  2. Clique em Criar credenciais e, de seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especifique o URL do ponto final

  1. Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
  2. 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

  1. No Bitbucket, aceda às definições do repositório.
  2. Clique em Webhooks em Fluxo de trabalho.
  3. Clique em Adicionar webhook.
  4. 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.
  5. 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.