Coletar registros de EDR do Carbon Black
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
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Criar um bucket.
- Salve o Nome e a Região do bucket para uso futuro.
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o Usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como o caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso futuro.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise e selecione a política AmazonS3FullAccess.
- Clique em Próxima.
- Clique em Adicionar permissões
Instalar o cb-event-forwarder no servidor EDR local
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
Instale o RPM usando o YUM:
yum install cb-event-forwarder
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
Abra o arquivo de configuração:
sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
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
Salve e saia usando o teclado:
- Ctrl + X, depois Y e Enter.
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
- Faça login no console de Gerenciamento da AWS.
- Verifique se a região da AWS corresponde à do encaminhador de eventos:
- Na página AWS Console, localize a região.
- Use o menu suspenso para selecionar a região correta do encaminhador de eventos.
- 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)
- Selecione Serviços.
- Acesse o console do S3.
- Clique em Criar bucket para abrir o assistente Criar bucket.
- Em Nome do bucket, insira um nome exclusivo para o bucket (por exemplo, CB-EDR).
- Verifique se a Região é a que você selecionou anteriormente.
- 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.
- Selecione Criar bucket.
Configurar o bucket do S3 para permitir que o encaminhador de eventos grave eventos
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o Usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como o caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso futuro.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clique em Próxima.
- Clique em Adicionar permissões
Configurar o encaminhamento de eventos no console do EDR
- Faça login no VMware Carbon Black Cloud.
- Acesse a guia Encaminhador de eventos.
- Ative os eventos que você quer que o produto faça upload para o S3.
- Acesse Saída e tipo e defina como S3.
- Informe o nome do bucket do S3 no seguinte formato
<region>:<bucket-name>
(por exemplo,us-east-1:cb-edr
). - Selecione o arquivo upload AWS credentials no formato INI.
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
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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Logs do Carbon Black EDR).
- Selecione Amazon S3 como o Tipo de origem.
- Selecione Carbon Black EDR como o Tipo de registro.
- Clique em Próxima.
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.
- Substitua
- 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.
Clique em Próxima.
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.