Coletar registros de stream do CrowdStrike Falcon
Este documento explica como coletar registros do CrowdStrike Falcon Stream usando o Bindplane. O analisador extrai pares de chave-valor e os mapeia para o modelo de dados unificado (UDM, na sigla em inglês), processando diferentes delimitadores e enriquecendo os dados com contexto adicional, como gravidade e tipos de eventos. Ele também realiza transformações específicas para determinados tipos de eventos e campos, como logins de usuários e resultados de segurança.
Antes de começar
- Verifique se você tem uma instância do Google Security Operations.
- Use o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Confirme se você tem acesso privilegiado ao console do CrowdStrike Falcon.
- Receba as credenciais da API para o Falcon Stream (ID e chave secreta do cliente).
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID do cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/Bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/Bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Outros recursos de instalação
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente do Bindplane para ingerir Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele fica no diretório/etc/Bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yaml
da seguinte forma:receivers: tcplog: # Replace the port and IP address as required listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: SYSLOG namespace: cs_stream raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
- Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
- Substitua
<customer_id>
pelo ID do cliente real. - Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart Bindplane-agent
Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindplaneAgent && net start BindplaneAgent
Configurar e receber uma chave de API do CrowdStrike
- Faça login no CrowdStrike Falcon com uma conta privilegiada.
- Acesse Menu > Suporte.
- Clique em Clientes de API > ChavesSelecionar.
- Clique em Adicionar novo cliente de API.
- Na seção Escopos de API, selecione Fluxos de eventos e ative a opção Leitura.
- Clique em Adicionar.
- Copie e salve o ID do cliente, a chave secreta do cliente e o URL de base.
Instalar o conector do Falcon SIEM
- Baixe o pacote de instalação RPM para seu sistema operacional.
Instalação do pacote:
Sistema operacional CentOS:
sudo rpm -Uvh <installer package>
Sistema operacional Ubuntu:
sudo dpkg -i <installer package>
Diretórios de instalação padrão:
- Conector do SIEM do Falcon:
/opt/crowdstrike/
. - Serviço:
/etc/init.d/cs.falconhoseclientd/
.
- Conector do SIEM do Falcon:
Configurar o conector do SIEM para encaminhar eventos ao Bindplane
- Faça login na máquina com o conector SIEM instalado como um usuário
sudo
. - Acesse o diretório
/opt/crowdstrike/etc/
. cs.falconhoseclient.leef.cfg
foi renomeado comocs.falconhoseclient.cfg
.- O conector SIEM usa a configuração
cs.falconhoseclient.cfg
por padrão.
- O conector SIEM usa a configuração
- Edite o arquivo
cs.falconhoseclient.cfg
e modifique ou defina os seguintes parâmetros:api_url:
: o URL base do CrowdStrike Falcon copiado da etapa anterior.app_id:
: qualquer string como identificador para conexão com a API Falcon Streaming. Por exemplo, defina comoapp_id: SECOPS-LEEF
.client_id:
: o valor declient_id
copiado da etapa anterior.client_secret:
: o valor declient_secret
copiado da etapa anterior.send_to_syslog_server: true
: ative o envio por push para o servidor Syslog.host:
: o IP ou nome do host do agente do Bindplane.port:
: a porta do agente do Bindplane.
- Salve o arquivo
cs.falconhoseclient.cfg
. Inicie o serviço do conector do SIEM:
Sistema operacional CentOS:
sudo service cs.falconhoseclientd start
Sistema operacional Ubuntu 16.04 ou mais recente:
sudo systemctl start cs.falconhoseclientd.service
Opcional: pare o serviço do conector do SIEM:
Sistema operacional CentOS:
sudo service cs.falconhoseclientd stop
Sistema operacional Ubuntu 16.04 ou mais recente:
sudo systemctl stop cs.falconhoseclientd.service
Opcional: reinicie o serviço do conector do SIEM:
Sistema operacional CentOS:
sudo service cs.falconhoseclientd restart
Sistema operacional Ubuntu 16.04 ou mais recente:
sudo systemctl restart cs.falconhoseclientd.service
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
cat |
security_result.category_details |
O valor do campo cat é mapeado diretamente para o campo security_result.category_details . |
commandLine |
target.process.command_line |
O valor do campo commandLine é mapeado diretamente para o campo target.process.command_line . |
cs1 |
security_result.summary |
Se cs1Label for "incidentType", o valor de cs1 será mapeado para security_result.summary . Caso contrário, ele será mapeado como um par de chave-valor em security_result.detection_fields com a chave de cs1Label e o valor de cs1 . |
cs1Label |
security_result.detection_fields.key |
Usado como a chave em security_result.detection_fields quando cs1 não é um tipo de incidente. |
cs2 |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave de cs2Label e o valor de cs2 . |
cs2Label |
security_result.detection_fields.key |
Usado como a chave em security_result.detection_fields com cs2 . |
cs3 |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave de cs3Label e o valor de cs3 . |
cs3Label |
security_result.detection_fields.key |
Usado como a chave em security_result.detection_fields com cs3 . |
cs4 |
security_result.about.url |
Se cs4Label for "falconHostLink", o valor de cs4 será mapeado para security_result.about.url . Caso contrário, ele será mapeado como um par de chave-valor em security_result.detection_fields com a chave de cs4Label e o valor de cs4 . |
cs4Label |
security_result.detection_fields.key |
Usado como a chave em security_result.detection_fields quando cs4 não é um falconHostLink. |
description |
metadata.description |
O valor do campo description é mapeado diretamente para o campo metadata.description . Se estiver vazio, incidentDescription , msg ou serviceName serão usados. |
devTime |
metadata.event_timestamp |
O valor do campo devTime é analisado e mapeado para o campo metadata.event_timestamp . |
deviceCustomDate1 |
metadata.event_timestamp |
Se devTime não estiver presente, o valor do campo deviceCustomDate1 será analisado e mapeado para o campo metadata.event_timestamp . |
domain |
principal.administrative_domain |
Extraído do campo userName usando uma expressão regular e mapeado para principal.administrative_domain . |
duser |
principal.user.userid |
Se estiver presente, o valor de duser vai substituir o campo usrName e será usado para preencher os campos do usuário. |
endpointName |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave "endpointName". |
eventType |
metadata.product_event_type |
O valor do campo eventType é mapeado diretamente para o campo metadata.product_event_type . |
falconHostLink |
security_result.about.url |
O valor do campo falconHostLink é mapeado diretamente para o campo security_result.about.url . |
filePath |
target.process.file.full_path |
O valor do campo filePath é mapeado diretamente para o campo target.process.file.full_path . |
identityProtectionIncidentId |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave "identityProtectionIncidentId". |
incidentDescription |
metadata.description |
Se description estiver vazio, o valor do campo incidentDescription será mapeado para o campo metadata.description . |
incidentType |
security_result.summary |
O valor do campo incidentType é mapeado diretamente para o campo security_result.summary . |
log_type |
metadata.log_type |
O valor do campo log_type é mapeado diretamente para o campo metadata.log_type . |
msg |
metadata.description |
Se description e incidentDescription estiverem vazios, o valor do campo msg será mapeado para o campo metadata.description . |
numbersOfAlerts |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave "numbersOfAlerts". |
numberOfCompromisedEntities |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave "numberOfCompromisedEntities". |
product |
metadata.product_name |
O valor do campo product é mapeado diretamente para o campo metadata.product_name . |
resource |
target.resource.name |
O valor do campo resource é mapeado diretamente para o campo target.resource.name . |
serviceName |
target.application |
O valor do campo serviceName é mapeado diretamente para o campo target.application . Também usado como substituto para metadata.description . |
severityName |
security_result.severity |
O valor do campo severityName é mapeado para o campo security_result.severity depois de ser convertido para maiúsculas. A lógica de mapeamento inclui conversões específicas para diferentes nomes de gravidade. |
sha256 |
target.file.sha256 |
O valor do campo sha256 é mapeado diretamente para o campo target.file.sha256 . |
src |
principal.ip |
O valor do campo src é mapeado diretamente para o campo principal.ip . |
srcMAC |
principal.mac |
O valor do campo srcMAC é mapeado diretamente para o campo principal.mac depois de substituir os hífens por dois-pontos. |
state |
security_result.detection_fields.value |
Mapeado como um par de chave-valor em security_result.detection_fields com a chave "state". |
success |
security_result.action |
Se success for "true", security_result.action será definido como "ALLOW". Se success for "false", security_result.action será definido como "BLOCK". |
userName |
principal.user.userid |
Se usrName não estiver presente, o valor do campo userName será usado para preencher os campos do usuário. O domínio é extraído se estiver presente. |
usrName |
principal.user.userid / target.user.userid |
Se presente, o valor do campo usrName será mapeado como principal.user.userid ou target.user.userid , dependendo do eventType . Se for um endereço de e-mail, ele também será adicionado ao campo email_addresses correspondente. |
vendor |
metadata.vendor_name |
O valor do campo vendor é mapeado diretamente para o campo metadata.vendor_name . |
version |
metadata.product_version |
O valor do campo version é mapeado diretamente para o campo metadata.product_version . |
(Lógica do analisador) | extensions.auth.mechanism |
Defina como "USERNAME_PASSWORD" se eventType for "saml2Assert" ou "twoFactorAuthenticate". |
(Lógica do analisador) | extensions.auth.type |
Defina como "AUTHTYPE_UNSPECIFIED" se eventType for "assert" ou "userAuthenticate". |
(Lógica do analisador) | metadata.event_timestamp |
O carimbo de data/hora do campo collection_time ou timestamp do registro bruto é usado como o carimbo de data/hora do evento. |
(Lógica do analisador) | metadata.event_type |
Determinado com base no eventType e em outros campos. O padrão é "GENERIC_EVENT", mas pode ser alterado para "USER_LOGIN", "GROUP_MODIFICATION", "GROUP_DELETION", "SERVICE_STOP", "SERVICE_START" ou "USER_UNCATEGORIZED". |
(Lógica do analisador) | target.resource.type |
Defina como "GROUP" se eventType for "remove_group", "update_group" ou "delete_group". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.