Coletar registros de fluxo 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 delimitadores diferentes e enriquecendo os dados com mais contexto, como gravidade e tipos de evento. Ele também realiza transformações específicas para determinados tipos de evento 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.
- Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com
systemd
. - Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
- Confira 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.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
Receber o ID de 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 raiz 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 processar o Syslog e enviar ao Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está 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 Notepad).
- 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 real do cliente. - Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de transferência 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 Services ou digite 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 > Selecionar chaves.
- Clique em Adicionar novo cliente de API.
- Na seção Escopos da API, selecione Fluxos de eventos e ative a opção Ler.
- Clique em Adicionar.
- Copie e salve o ID do cliente, a chave secreta do cliente e o URL de base.
Instalar o conector do SIEM do Falcon
- Faça o download do pacote de instalação do 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 de SIEM do Falcon:
/opt/crowdstrike/
. - Serviço:
/etc/init.d/cs.falconhoseclientd/
.
- Conector de SIEM do Falcon:
Configurar o conector SIEM para encaminhar eventos ao Bindplane
- Faça login na máquina com o conector SIEM instalado como 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 valorclient_id
copiado da etapa anterior.client_secret:
: o valor declient_secret
copiado da etapa anterior.send_to_syslog_server: true
: ativar o push para o servidor Syslog.host:
: o IP ou o 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 é 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 é 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 |
É usada 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ídos do campo userName usando uma expressão regular e mapeados para principal.administrative_domain . |
duser |
principal.user.userid |
Se presente, o valor de duser substitui o campo usrName e é 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 em letras 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 que os hifens são substituídos 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 é mapeado para principal.user.userid ou target.user.userid , dependendo do eventType . Se for um endereço de e-mail, ele também será adicionado ao respectivo campo email_addresses . |
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 . |
(Parser Logic) | extensions.auth.mechanism |
Defina como "USERNAME_PASSWORD" se eventType for "saml2Assert" ou "twoFactorAuthenticate". |
(Parser Logic) | extensions.auth.type |
Defina como "AUTHTYPE_UNSPECIFIED" se eventType for "assert" ou "userAuthenticate". |
(Parser Logic) | 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. |
(Parser Logic) | metadata.event_type |
Determinado com base no eventType e em outros campos. O padrão é "GENERIC_EVENT" e pode ser alterado para "USER_LOGIN", "GROUP_MODIFICATION", "GROUP_DELETION", "SERVICE_STOP", "SERVICE_START" ou "USER_UNCATEGORIZED". |
(Parser Logic) | target.resource.type |
Defina como "GROUP" se eventType for "remove_group", "update_group" ou "delete_group". |
Alterações
2025-01-10
Melhoria:
- Quando "OperationBlocked" é "true", "security_result.action" é mapeado para "BLOCK".
- Quando "OperationBlocked" é "false", "security_result.action" é mapeado para "ALLOW".
- Quando "event_type" é "IdentityProtectionEvent", "event_data.IncidentDescription" é mapeado para "security_result.summary".
- Quando "event_type" é "IdentityProtectionEvent", "event_data.SeverityName" é mapeado para "security_result.severity".
2025-01-09
Melhoria:
- "event_data.Technique" foi associado a "security_result.rule_name".
- "event_data.CommandLine" foi associado a "target.process.command_line".
- Se "event_data.IOCType" for "ipv4", mapeie "event_data.IOCValue" para "target.ip" e "target.asset.ip".
- Se "event_data.IOCType" for "hash_sha256", mapeie "event_data.IOCValue" para "target.file.sha256".
2024-12-12
Melhoria:
- "event.SeverityName" foi mapeado para "security_result.severity".
- "event.Description" foi associado a "security_result.summary".
- "security_result.action" mapeado com base em "event.PatternDispositionFlags.OperationBlocked".
2024-10-29
Melhoria:
- Adição de suporte ao formato JSON de registros.
- "request" foi mapeado para "network.http.referral_url".
- "networkDetectionType" foi mapeado para "security_result.detection_fields".
2022-07-18
Melhoria:
- Adicionamos o seguinte mapeamento para os registros de formato LEEF:
- O campo "version" mapeado para "metadata.product_version".
- O campo "usrName" e "userName" para "principal.user.email_addresses", se for um e-mail, ou mapeado para "principal.user.userid".
- O campo "severityName" é mapeado para "security_result.severity".
- O campo "cat" é mapeado para "security_result.category_details".
- O campo "incidentType" mapeado para "security_result.summary".
- O campo "falconHostLink" foi mapeado para "security_result.about.url".
- O campo "numberOfCompromisedEntities" é mapeado para "security_result.detection_fields[n]".
- O campo "identityProtectionIncidentId" foi mapeado para "security_result.detection_fields[n]".
- O campo "numbersOfAlerts" é mapeado para "security_result.detection_fields[n]".
- O campo "state" é mapeado para "security_result.detection_fields[n]".
- Adicionamos o seguinte mapeamento para os registros de formato CEF:
- O campo "version" mapeado para "metadata.product_version".
- O campo "deviceCustomDate1" foi mapeado para "metadata.event_type".
- O campo "msg" é mapeado para "metadata.description".
- O campo "cs1" é mapeado para "security_result.summary" se o valor de "cs1Label" for "incidentType". Caso contrário, ele é mapeado para "security_result.detection_fields[n]".
- O campo "cs2" foi mapeado para "security_result.detection_fields[n]".
- O campo "cs3" foi mapeado para "security_result.detection_fields[n]".
- O campo "cs1" é mapeado para "security_result.about.url" se o valor de "cs4Label" for "falconHostLink". Caso contrário, ele é mapeado para "security_result.detection_fields[n]".
- O campo "cn1" foi mapeado para "security_result.detection_fields[n]".
- O campo "cn2" foi mapeado para "security_result.detection_fields[n]".
- O campo "cn3" é mapeado para "security_result.detection_fields[n]".
- O campo "duser" para "principal.user.email_addresses" se for um e-mail, ou mapeado para "principal.user.userid".
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.