Coletar registros de EDR do Carbon Black

Compatível com:

Este documento explica como coletar registros de EDR do Carbon Black de ambientes on-prem e do Cloud usando o AWS S3. O analisador extrai campos de mensagens formatadas em JSON, CSV ou syslog, os normaliza e os mapeia para a UDM. Ele processa vários tipos de eventos do Carbon Black, incluindo conexões de rede, eventos de processo, modificações de arquivos, mudanças de registro e acertos de IOC, enriquecendo os dados com informações de inteligência de ameaças e do dispositivo, quando disponíveis.

Antes de começar

Certifique-se de que você:

  • Uma instância configurada do Google SecOps.
  • Acesso privilegiado ao AWS IAM e ao S3.
  • Acesso privilegiado ao EDR do Carbon Black na nuvem ou local.

Configurar o Carbon Black EDR local

Configurar o bucket do Amazon S3 para on-prem

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Criar um bucket.
  2. Salve o Nome e a Região do bucket para uso futuro.
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o Usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como o caso de uso.
  8. Clique em Próxima.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso futuro.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise e selecione a política AmazonS3FullAccess.
  18. Clique em Próxima.
  19. Clique em Adicionar permissões

Instalar o cb-event-forwarder no servidor EDR local

  1. Instale o repositório CbOpenSource se ele ainda não estiver presente:

    cd /etc/yum.repos.d
    curl -O https://opensource.carbonblack.com/release/x86_64/CbOpenSource.repo
    
  2. Instale o RPM usando o YUM:

    yum install cb-event-forwarder
    
  3. Se você estiver usando o EDR 7.1.0 ou mais recente, execute o script a seguir para definir as permissões adequadas necessárias pelo EDR:

    /usr/share/cb/integrations/event-forwarder/cb-edr-fix-permissions.sh
    

Configurar o cb-event-forwarder para gerar registros JSON

  1. Abra o arquivo de configuração:

    sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
    
  2. Modifique os seguintes parâmetros:

    [event_forwarder]
    output_format=json   # Enable JSON format
    output_type=s3       # Send logs to AWS S3
    s3_bucket_name=YOUR-S3-BUCKET-NAME
    s3_region=YOUR-S3-BUCKET-NAME
    s3_access_key_id=YOUR_AWS_ACCESS_KEY
    s3_secret_access_key=YOUR_AWS_SECRET_KEY
    s3_prefix=carbonblack/edr/logs
    
  3. Salve e saia usando o teclado:

    • Ctrl + X, depois Y e Enter.
  4. Inicie o cb-event-forwarder:

    sudo systemctl enable cb-event-forwarder
    sudo systemctl restart cb-event-forwarder
    sudo systemctl status cb-event-forwarder
    

Configurar o encaminhador de eventos do Carbon Black Cloud para o S3

Criar um bucket do AWS S3

  1. Faça login no console de Gerenciamento da AWS.
  2. Verifique se a região da AWS corresponde à do encaminhador de eventos:
    1. Na página AWS Console, localize a região.
    2. Use o menu suspenso para selecionar a região correta do encaminhador de eventos.
    3. A lista a seguir mostra a região da AWS aplicável para cada URL do Carbon Black EDR.
      • "instance-alias".my.carbonblack.io - Região: US East (N. Virgínia) (us-east-1)
      • "instance-alias".my.cbcloud.de - Região: Europa (Frankfurt) (eu-central-1)
      • "instance-alias".my.cbcloud.sg Região: Ásia-Pacífico (Singapura) (ap-southeast-1)
  3. Selecione Serviços.
  4. Acesse o console do S3.
  5. Clique em Criar bucket para abrir o assistente Criar bucket.
    1. Em Nome do bucket, insira um nome exclusivo para o bucket (por exemplo, CB-EDR).
    2. Verifique se a Região é a que você selecionou anteriormente.
    3. Atualize os padrões de Bloquear acesso público para permitir o acesso público. Isso é necessário para transferir os registros para o Google SecOps.
    4. Selecione Criar bucket.

Configurar o bucket do S3 para permitir que o encaminhador de eventos grave eventos

  1. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  2. Selecione o Usuário criado.
  3. Selecione a guia Credenciais de segurança.
  4. Clique em Criar chave de acesso na seção Chaves de acesso.
  5. Selecione Serviço de terceiros como o caso de uso.
  6. Clique em Próxima.
  7. Opcional: adicione uma tag de descrição.
  8. Clique em Criar chave de acesso.
  9. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso futuro.
  10. Clique em Concluído.
  11. Selecione a guia Permissões.
  12. Clique em Adicionar permissões na seção Políticas de permissões.
  13. Selecione Adicionar permissões.
  14. Selecione Anexar políticas diretamente.
  15. Pesquise a política AmazonS3FullAccess.
  16. Selecione a política.
  17. Clique em Próxima.
  18. Clique em Adicionar permissões

Configurar o encaminhamento de eventos no console do EDR

  1. Faça login no VMware Carbon Black Cloud.
  2. Acesse a guia Encaminhador de eventos.
  3. Ative os eventos que você quer que o produto faça upload para o S3.
  4. Acesse Saída e tipo e defina como S3.
  5. Informe o nome do bucket do S3 no seguinte formato <region>:<bucket-name> (por exemplo, us-east-1:cb-edr).
  6. Selecione o arquivo upload AWS credentials no formato INI.
  7. Confira a seguir um exemplo de perfil:

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
    AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Default region name [None]: us-east-1
    
  8. Clique em Salvar e reinicie o serviço para que as mudanças entrem em vigor.

Configurar um feed no Google SecOps para processar os registros de EDR do Carbon Black

  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, Logs do Carbon Black EDR).
  4. Selecione Amazon S3 como o Tipo de origem.
  5. Selecione Carbon Black EDR como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:

    • Região: a região em que o bucket do Amazon S3 está localizado.
    • URI do S3: o URI do bucket.
      • s3:/BUCKET_NAME
        • Substitua BUCKET_NAME pelo nome real do bucket.
    • URI é um: selecione o URI_TYPE de acordo com a configuração do fluxo de registro (Arquivo único | Diretório | Diretório que inclui subdiretórios).
    • Opções de exclusão da origem: selecione a opção de exclusão de acordo com sua preferência.
    • ID da chave de acesso: a chave de acesso do usuário com acesso ao bucket do S3.
    • Chave de acesso secreta: a chave secreta do usuário com acesso ao bucket do S3.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
  8. Clique em Próxima.

  9. Revise a configuração do novo feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
action security_result.detection_fields[?key == 'action'].value O valor do campo action do registro bruto.
cb_server intermediary.hostname O valor do campo cb_server do registro bruto.
cb_version metadata.product_version O valor do campo cb_version do registro bruto.
child_pid target.process.pid (para eventos ingress.event.childproc) O valor do campo child_pid do registro bruto quando o type é ingress.event.childproc.
child_process_guid target.process.product_specific_process_id (para eventos ingress.event.childproc) "CB:" concatenado com o valor do campo child_process_guid do registro bruto quando o type é ingress.event.childproc.
child_username target.user.userid (para eventos ingress.event.childproc) O valor do campo child_username do registro bruto quando o type é ingress.event.childproc.
childproc_guid target.process.product_specific_process_id (para eventos endpoint.event.procstart) "CB:" concatenado com o valor do campo childproc_guid do registro bruto quando o type é endpoint.event.procstart.
childproc_hash.0 target.process.file.md5 (para eventos endpoint.event.procstart) O primeiro elemento da matriz childproc_hash do registro bruto quando o type é endpoint.event.procstart.
childproc_hash.1 target.process.file.sha256 (para eventos endpoint.event.procstart) O segundo elemento da matriz childproc_hash do registro bruto quando o type é endpoint.event.procstart.
childproc_name target.process.file.full_path (para eventos endpoint.event.procstart) O valor do campo childproc_name do registro bruto quando o type é endpoint.event.procstart.
childproc_pid target.process.pid (para eventos endpoint.event.procstart) O valor do campo childproc_pid do registro bruto quando o type é endpoint.event.procstart.
childproc_publisher.0.name security_result.detection_fields[?key == 'childproc_publisher_name'].value (para eventos endpoint.event.procstart) "childproc_publisher_name:" concatenado com o valor de childproc_publisher.0.name do registro bruto quando type é endpoint.event.procstart.
childproc_publisher.0.state security_result.detection_fields[?key == 'childproc_publisher_state'].value (para eventos endpoint.event.procstart) "childproc_publisher_state:" concatenado com o valor de childproc_publisher.0.state do registro bruto quando o type é endpoint.event.procstart.
childproc_reputation security_result.detection_fields[?key == 'childproc_reputation'].value (para eventos endpoint.event.procstart) O valor do campo childproc_reputation do registro bruto quando o type é endpoint.event.procstart.
childproc_username target.user.userid (para eventos endpoint.event.procstart) O valor do campo childproc_username do registro bruto quando o type é endpoint.event.procstart.
clientIp principal.ip, principal.asset.ip O valor do campo clientIp do registro bruto.
cmdline target.process.command_line (para eventos feed.query.hit.process e feed.storage.hit.process) e additional.fields[?key == 'cmdline_*'].value.string_value (para eventos watchlist.storage.hit.process) O valor do campo cmdline do registro bruto quando o type é feed.query.hit.process ou feed.storage.hit.process. Para eventos watchlist.storage.hit.process, ele é armazenado em additional.fields com a chave "cmdline_*".
command_line target.process.command_line (para eventos ingress.event.procstart) O valor do campo command_line do registro bruto quando o type é ingress.event.procstart.
comms_ip intermediary.ip O valor do campo comms_ip do registro bruto.
computer_name principal.hostname, principal.asset.hostname O valor do campo computer_name do registro bruto.
crossproc_api additional.fields[?key == 'crossproc_api'].value.string_value (para eventos endpoint.event.apicall) O valor do campo crossproc_api do registro bruto quando o type é endpoint.event.apicall.
crossproc_guid additional.fields[?key == 'crossproc_guid'].value.string_value (para eventos endpoint.event.crossproc) O valor do campo crossproc_guid do registro bruto quando o type é endpoint.event.crossproc.
crossproc_hash.0 additional.fields[?key == 'crossproc_md5'].value.string_value (para eventos endpoint.event.crossproc) O primeiro elemento da matriz crossproc_hash do registro bruto quando o type é endpoint.event.crossproc.
crossproc_hash.1 additional.fields[?key == 'crossproc_sha256'].value.string_value (para eventos endpoint.event.crossproc) O segundo elemento da matriz crossproc_hash do registro bruto quando o type é endpoint.event.crossproc.
crossproc_name target.process.file.full_path (para eventos endpoint.event.crossproc) O valor do campo crossproc_name do registro bruto quando o type é endpoint.event.crossproc.
crossproc_publisher.0.name security_result.detection_fields[?key == 'crossproc_publisher_name'].value (para eventos endpoint.event.crossproc) "crossproc_publisher_name:" concatenado com o valor de crossproc_publisher.0.name do registro bruto quando o type é endpoint.event.crossproc.
crossproc_publisher.0.state security_result.detection_fields[?key == 'crossproc_publisher_state'].value (para eventos endpoint.event.crossproc) "crossproc_publisher_state:" concatenado com o valor de crossproc_publisher.0.state do registro bruto quando type é endpoint.event.crossproc.
crossproc_reputation additional.fields[?key == 'crossproc_reputation'].value.string_value (para eventos endpoint.event.crossproc) O valor do campo crossproc_reputation do registro bruto quando o type é endpoint.event.crossproc.
crossproc_target additional.fields[?key == 'crossproc_target'].value.string_value (para eventos endpoint.event.crossproc) O valor do campo crossproc_target do registro bruto quando o type é endpoint.event.crossproc. Convertido em uma string "true" ou "false".

Alterações

2024-05-13

  • O campo "alert_url" foi associado ao campo UDM "metadata.url_back_to_product".

2024-01-19

  • Foi adicionada uma verificação de valores nulos para "filemod_hash.0" e "filemod_hash.1" antes do mapeamento.

2023-12-27

  • Inicialização de "filemod_hash.0" e "filemod_hash.1" como nulo para analisar os registros não analisados.

2023-10-26

  • A função "gsub" foi adicionada para analisar os campos não analisados.

2023-10-13

  • Novos registros JSON foram processados com a adição de um bloco JSON.
  • O código redundante foi removido dos campos "computer_name", "parent_name", "process_name", "pid", "process_path", "md5", "sha256", "process_guid", "parent_pid", "docs.0.process_pid", "cb_version", "process_hash.0", "process_hash.1", "parent_hash.0" e "parent_hash.1".

2023-07-21

  • Foram adicionados detalhes de tática e técnica do MITRE ATT&CK a "security_result.attack_details".

2023-03-24

  • O campo "protocol" foi mapeado para "network.ip_protocol".
  • Adição de uma verificação condicional nula para os campos "child_username", "child_pid" e "child_command_line".
  • A propriedade "metadata.event_type" foi alterada de "GENERIC_EVENT" para "STATUS_UPDATE" quando "principal.hostname" ou "principal.ip" não é nulo.

2023-03-14

  • Correção de bugs:
  • Mapeou os seguintes campos quando o campo "type" é nulo:
  • O campo "process_guid" foi mapeado para "principal.process.product_specific_process_id".
  • O campo "device_external_ip" foi mapeado para "target.ip".
  • O campo "device_os" foi mapeado para "principal.platform".
  • O campo "device_group" foi mapeado para "principal.group.group_display_name".
  • O campo "process_pid" foi mapeado para "principal.process.pid".
  • O campo "process_path" foi mapeado para "principal.process.file.full_path".
  • O campo "process_cmdline" foi mapeado para "principal.process.command_line".
  • O campo "process_hash.0" foi mapeado para "principal.process.file.md5".
  • O campo "principal.1" foi mapeado para "principal.process.file.sha256".
  • O campo "process_username" foi mapeado para "principal.user.userid".
  • O campo "clientIp" foi mapeado para "principal.ip".
  • O campo "description" foi mapeado para "metadata.description".
  • O campo "orgName" foi mapeado para "principal.administrative_domain".
  • Mapeou os seguintes campos quando o campo "ruleName" contém "CYDERES":
  • O campo "deviceInfo.internalIpAddress" foi mapeado para "principal.ip".
  • O campo "deviceInfo.externalIpAddress" foi mapeado para "target.ip".
  • O campo "ruleName" foi mapeado para "security_result.rule_name".
  • O campo "deviceInfo.deviceType" foi mapeado para "principal.asset.platform_software.platform".
  • O campo "domain" foi mapeado para "principal.administrative_domain".
  • O campo "deviceInfo.groupName" foi mapeado para "principal.group.group_display_name".
  • O campo "deviceInfo.deviceVersion" foi mapeado para "principal.asset.platform_software.platform_version".
  • O campo "deviceInfo.deviceId" foi mapeado para "principal.asset.asset_id".
  • O campo "eventId" foi mapeado para "additional.fields".
  • O "metadata.event_type" mudou de "GENERIC_EVENT" para "NETWORK_CONNECTION" quando "principal.ip" e "target.ip" não são nulos.
  • O "metadata.event_type" mudou de "GENERIC_EVENT" para "STATUS_UPDATE" quando "principal.ip" não é nulo.

2023-02-03

  • Correção de bug: mapeie "filemod_hash" para "target.file" em vez de "target.process.file".

2023-01-20

  • Correção de bugs: o preenchimento e o mapeamento de product_specific_process_id para IDs de processo vazios foram interrompidos.

2022-11-25

  • O "remote_ip" foi mapeado para "principal.ip" e o "local_ip" para "target.ip" para eventos TCP/UDP "Inbound".
  • "remote_port" foi mapeado para "principal.port" e "local_port" para "target.port" para eventos TCP/UDP "Inbound".

2022-10-06

  • Todos os analisadores específicos do cliente foram migrados para o analisador padrão.

2022-07-10

  • O mapeamento de "event_type" foi atualizado para "PROCESS_LAUNCH" nos registros do tipo "endpoint.event.'.".

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