Coletar registros do Bitbucket da Atlassian

Compatível com:

Visão geral

Esse analisador extrai campos dos registros JSON do Bitbucket da Atlassian e os mapeia para o UDM. Ele processa vários formatos de registro, preenche entidades principais ou de destino com base nos campos disponíveis, como endereços IP, IDs de usuário e informações de recursos. Ele também categoriza eventos com base na rede e na atividade do usuário e enriquece os dados com descobertas de segurança, se houver. O analisador prioriza agentRealtimeInfo em vez de agentDetectionInfo ao preencher campos.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado a um repositório.

Configurar um feed no Google SecOps para processar os registros do Bitbucket da Atlassian

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Atlassian Bitbucket Logs).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione Atlassian Bitbucket como o Tipo de registro.
  6. Clique em Próxima.
  7. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
  11. Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta anterior obsoleta.
  12. Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
  13. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse o console do Google Cloud > Credenciais.

    Ir para Credenciais

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

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

Especificar o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. Ative a autenticação especificando a chave de 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 de API como um cabeçalho em vez de especificar no URL. Se o cliente do webhook não tiver suporte a cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Substitua:

  • ENDPOINT_URL: o URL do endpoint do feed.
  • API_KEY: a chave de API para autenticação no Google Security Operations.
  • SECRET: a chave secreta que você gerou para autenticar o feed.

Criar um webhook no Atlassian Bitbucket

  1. No Bitbucket, acesse as configurações do repositório.
  2. Clique em Webhooks em Fluxo de trabalho.
  3. Clique em Add webhook.
  4. Configure os seguintes campos:
    • Título: informe um nome descritivo (por exemplo, Google SecOps).
    • URL: insira o URL do endpoint da API Google SecOps.
    • Status: definido como Ativo.
    • Acionadores: selecione os eventos relevantes.
  5. Clique em Salvar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
agentComputerName principal.hostname Preenchido 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ídos da matriz JSON e mesclados no campo target.ip.
agentDetectionInfo.agentIpV6 principal.ip Extraídos da matriz JSON e mesclados no campo principal.ip.
agentDetectionInfo.agentLastLoggedInUserName principal.user.userid Analisado para extrair o ID do usuário e o domínio (se houver). Se não houver um domínio, ele será mapeado 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 um carimbo de data/hora ISO8601.
agentDetectionInfo.agentUuid principal.asset_id, principal.asset.asset_id Usado se agentRealtimeInfo.agentUuid não estiver presente. Prefixado com "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 É mesclada no campo se não estiver vazia ou "-". É usada 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 Prefixado com "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. Prefixado com "agentUuid:".
agentRealtimeInfo.agentVersion metadata.product_version Mapeado diretamente.
agentRealtimeInfo.groupId principal.user.group_identifiers Se não estiver vazio ou "-", será mesclada ao campo.
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 "threats", defina como "Threats".
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 um carimbo de data/hora ISO8601.
threatInfo.detectionEngines metadata.ingestion_labels O key e o 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 depois em número inteiro sem sinal.
threatInfo.identifiedAt event_timestamp Analisado como um carimbo de data/hora 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 Prefixado com "ID:".
threatInfo.threatId security_result.threat_id Mapeado diretamente.
threatInfo.threatName security_result.threat_name, target.file.names Mapeado e mesclado diretamente em target.file.names. Também é usado no campo security_result.summary se summary não estiver presente. Defina como "GENERIC_EVENT" inicialmente. Mudança para "NETWORK_UNCATEGORIZED", "STATUS_UPDATE" ou "USER_UNCATEGORIZED" com base na presença do principal e do IP/nome de host/usuário de destino. Copiado do campo event.type. Defina como "Atlassian Bitbucket". Defina como "Atlassian Bitbucket" inicialmente. Pode ser substituído por agentRealtimeInfo.accountName ou agentDetectionInfo.accountName.
timestamp metadata.event_timestamp, timestamp Mapeado diretamente.

Alterações

2023-06-12

  • Parser recém-criado.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.