Cómo recopilar registros de transmisión de CrowdStrike Falcon
En este documento, se explica cómo recopilar registros de CrowdStrike Falcon Stream con Bindplane. El analizador extrae pares clave-valor y los asigna al modelo de datos unificado (UDM), controla diferentes delimitadores y enriquece los datos con contexto adicional, como la gravedad y los tipos de eventos. También realiza transformaciones específicas para ciertos tipos y campos de eventos, como los accesos de los usuarios y los resultados de seguridad.
Antes de comenzar
- Asegúrate de tener una instancia de Google Security Operations.
- Asegúrate de usar Windows 2016 o una versión posterior, o un host de Linux con
systemd
. - Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
- Asegúrate de tener acceso con privilegios a la consola de CrowdStrike Falcon.
- Obtén credenciales de API para Falcon Stream (ID de cliente y secreto del cliente).
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de Bindplane
Instalación de Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/Bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación de Linux
- Abre una terminal con privilegios de raíz o sudo.
Ejecuta el siguiente comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/Bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalación adicionales
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de Bindplane para transferir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- Ubica el archivo
config.yaml
. Por lo general, se encuentra en el directorio/etc/Bindplane-agent/
en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Ubica el archivo
Edita el archivo
config.yaml
de la siguiente manera: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
- Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
- Reemplaza
<customer_id>
por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.json
a la ruta de acceso en la que se guardó el archivo de autenticación en la sección Obtén el archivo de autenticación de transferencia de Google SecOps.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart Bindplane-agent
Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Services o ingresar el siguiente comando:
net stop BindplaneAgent && net start BindplaneAgent
Configura y obtén una clave de API de CrowdStrike
- Accede a CrowdStrike Falcon con una cuenta con privilegios.
- Ve a Menú > Asistencia.
- Haz clic en Clientes de API > KeysSelect.
- Haz clic en Agregar nuevo cliente de API.
- En la sección Alcances de la API, selecciona Event streams y, luego, habilita la opción Leer.
- Haz clic en Agregar.
- Copia y guarda el ID de cliente, el secreto del cliente y la URL base.
Instala el conector de SIEM de Falcon
- Descarga el paquete del instalador de RPM para tu sistema operativo.
Instalación de paquetes:
Sistema operativo CentOS:
sudo rpm -Uvh <installer package>
Sistema operativo Ubuntu:
sudo dpkg -i <installer package>
Directorios de instalación predeterminados:
- Falcon SIEM Connector:
/opt/crowdstrike/
- Servicio:
/etc/init.d/cs.falconhoseclientd/
.
- Falcon SIEM Connector:
Configura el conector de SIEM para que reenvíe eventos a Bindplane
- Accede a la máquina con el conector de SIEM instalado como usuario
sudo
. - Ve al directorio
/opt/crowdstrike/etc/
. - Se cambió el nombre de
cs.falconhoseclient.leef.cfg
acs.falconhoseclient.cfg
.- El conector de SIEM usa la configuración de
cs.falconhoseclient.cfg
de forma predeterminada.
- El conector de SIEM usa la configuración de
- Edita el archivo
cs.falconhoseclient.cfg
y modifica o establece los siguientes parámetros:api_url:
: Es la URL base de CrowdStrike Falcon que copiaste del paso anterior.app_id:
: Cualquier cadena como identificador para conectarse a la API de Falcon Streaming. Por ejemplo, configúralo comoapp_id: SECOPS-LEEF
.client_id:
: Es el valorclient_id
copiado del paso anterior.client_secret:
: Es el valorclient_secret
copiado del paso anterior.send_to_syslog_server: true
: Habilita el envío de notificaciones push al servidor Syslog.host:
: Es la IP o el nombre de host del agente de Bindplane.port:
: Es el puerto del agente de Bindplane.
- Guarda el archivo
cs.falconhoseclient.cfg
. Inicia el servicio del conector de SIEM:
Sistema operativo CentOS:
sudo service cs.falconhoseclientd start
Sistema operativo Ubuntu 16.04 o versiones posteriores:
sudo systemctl start cs.falconhoseclientd.service
Opcional: Detén el servicio del conector de SIEM:
Sistema operativo CentOS:
sudo service cs.falconhoseclientd stop
Sistema operativo Ubuntu 16.04 o versiones posteriores:
sudo systemctl stop cs.falconhoseclientd.service
Opcional: Reinicia el servicio del conector de SIEM:
Sistema operativo CentOS:
sudo service cs.falconhoseclientd restart
Sistema operativo Ubuntu 16.04 o versiones posteriores:
sudo systemctl restart cs.falconhoseclientd.service
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
cat |
security_result.category_details |
El valor del campo cat se asigna directamente al campo security_result.category_details . |
commandLine |
target.process.command_line |
El valor del campo commandLine se asigna directamente al campo target.process.command_line . |
cs1 |
security_result.summary |
Si cs1Label es "incidentType", el valor de cs1 se asigna a security_result.summary . De lo contrario, se asigna como un par clave-valor en security_result.detection_fields con la clave de cs1Label y el valor de cs1 . |
cs1Label |
security_result.detection_fields.key |
Se usa como clave en security_result.detection_fields cuando cs1 no es un tipo de incidente. |
cs2 |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave de cs2Label y el valor de cs2 . |
cs2Label |
security_result.detection_fields.key |
Se usa como clave en security_result.detection_fields junto con cs2 . |
cs3 |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave de cs3Label y el valor de cs3 . |
cs3Label |
security_result.detection_fields.key |
Se usa como clave en security_result.detection_fields junto con cs3 . |
cs4 |
security_result.about.url |
Si cs4Label es "falconHostLink", el valor de cs4 se asigna a security_result.about.url . De lo contrario, se asigna como un par clave-valor en security_result.detection_fields con la clave de cs4Label y el valor de cs4 . |
cs4Label |
security_result.detection_fields.key |
Se usa como clave en security_result.detection_fields cuando cs4 no es un falconHostLink. |
description |
metadata.description |
El valor del campo description se asigna directamente al campo metadata.description . Si está vacío, se usará incidentDescription , msg o serviceName . |
devTime |
metadata.event_timestamp |
El valor del campo devTime se analiza y se asigna al campo metadata.event_timestamp . |
deviceCustomDate1 |
metadata.event_timestamp |
Si no está presente devTime , el valor del campo deviceCustomDate1 se analiza y se asigna al campo metadata.event_timestamp . |
domain |
principal.administrative_domain |
Se extrae del campo userName con una expresión regular y se asigna a principal.administrative_domain . |
duser |
principal.user.userid |
Si está presente, el valor de duser reemplaza el campo usrName y, luego, se usa para completar los campos del usuario. |
endpointName |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave "endpointName". |
eventType |
metadata.product_event_type |
El valor del campo eventType se asigna directamente al campo metadata.product_event_type . |
falconHostLink |
security_result.about.url |
El valor del campo falconHostLink se asigna directamente al campo security_result.about.url . |
filePath |
target.process.file.full_path |
El valor del campo filePath se asigna directamente al campo target.process.file.full_path . |
identityProtectionIncidentId |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave "identityProtectionIncidentId". |
incidentDescription |
metadata.description |
Si description está vacío, el valor del campo incidentDescription se asigna al campo metadata.description . |
incidentType |
security_result.summary |
El valor del campo incidentType se asigna directamente al campo security_result.summary . |
log_type |
metadata.log_type |
El valor del campo log_type se asigna directamente al campo metadata.log_type . |
msg |
metadata.description |
Si description y incidentDescription están vacíos, el valor del campo msg se asigna al campo metadata.description . |
numbersOfAlerts |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave "numbersOfAlerts". |
numberOfCompromisedEntities |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave "numberOfCompromisedEntities". |
product |
metadata.product_name |
El valor del campo product se asigna directamente al campo metadata.product_name . |
resource |
target.resource.name |
El valor del campo resource se asigna directamente al campo target.resource.name . |
serviceName |
target.application |
El valor del campo serviceName se asigna directamente al campo target.application . También se usa como resguardo para metadata.description . |
severityName |
security_result.severity |
El valor del campo severityName se asigna al campo security_result.severity después de escribirse en mayúsculas. La lógica de asignación incluye conversiones específicas para diferentes nombres de gravedad. |
sha256 |
target.file.sha256 |
El valor del campo sha256 se asigna directamente al campo target.file.sha256 . |
src |
principal.ip |
El valor del campo src se asigna directamente al campo principal.ip . |
srcMAC |
principal.mac |
El valor del campo srcMAC se asigna directamente al campo principal.mac después de reemplazar los guiones por dos puntos. |
state |
security_result.detection_fields.value |
Se asigna como un par clave-valor en security_result.detection_fields con la clave "state". |
success |
security_result.action |
Si success es "true", security_result.action se establece en "ALLOW". Si success es “false”, security_result.action se establece en “BLOCK”. |
userName |
principal.user.userid |
Si usrName no está presente, se usa el valor del campo userName para propagar los campos de usuario. Se extrae el dominio si está presente. |
usrName |
principal.user.userid /target.user.userid |
Si está presente, el valor del campo usrName se asigna a principal.user.userid o target.user.userid según el eventType . Si es una dirección de correo electrónico, también se agrega al campo email_addresses correspondiente. |
vendor |
metadata.vendor_name |
El valor del campo vendor se asigna directamente al campo metadata.vendor_name . |
version |
metadata.product_version |
El valor del campo version se asigna directamente al campo metadata.product_version . |
(lógica del analizador) | extensions.auth.mechanism |
Establece el valor en "USERNAME_PASSWORD" si eventType es "saml2Assert" o "twoFactorAuthenticate". |
(lógica del analizador) | extensions.auth.type |
Se establece en "AUTHTYPE_UNSPECIFIED" si eventType es "assert" o "userAuthenticate". |
(lógica del analizador) | metadata.event_timestamp |
La marca de tiempo del campo collection_time o timestamp del registro sin procesar se usa como la marca de tiempo del evento. |
(lógica del analizador) | metadata.event_type |
Se determina en función de eventType y otros campos. El valor predeterminado es "GENERIC_EVENT" y se puede cambiar a "USER_LOGIN", "GROUP_MODIFICATION", "GROUP_DELETION", "SERVICE_STOP", "SERVICE_START" o "USER_UNCATEGORIZED". |
(lógica del analizador) | target.resource.type |
Establece el valor en "GROUP" si eventType es "remove_group", "update_group" o "delete_group". |
Cambios
2025-01-10
Mejora:
- Cuando "OperationBlocked" es "true", se asignó "security_result.action" a "BLOCK".
- Cuando "OperationBlocked" es "false", se asignó "security_result.action" a "ALLOW".
- Cuando "event_type" es "IdentityProtectionEvent", se asigna "event_data.IncidentDescription" a "security_result.summary".
- Cuando "event_type" es "IdentityProtectionEvent", se asigna "event_data.SeverityName" a "security_result.severity".
2025-01-09
Mejora:
- Se asignó "event_data.Technique" a "security_result.rule_name".
- Se asignó "event_data.CommandLine" a "target.process.command_line".
- Si "event_data.IOCType" es "ipv4", se asignó "event_data.IOCValue" a "target.ip" y "target.asset.ip".
- Si "event_data.IOCType" es "hash_sha256", se asigna "event_data.IOCValue" a "target.file.sha256".
2024-12-12
Mejora:
- Se asignó "event.SeverityName" a "security_result.severity".
- Se asignó "event.Description" a "security_result.summary".
- Se asignó "security_result.action" según "event.PatternDispositionFlags.OperationBlocked".
2024-10-29
Mejora:
- Se agregó compatibilidad con el formato JSON de los registros.
- Se asignó "request" a "network.http.referral_url".
- Se asignó "networkDetectionType" a "security_result.detection_fields".
2022-07-18
Mejora:
- Se agregó la siguiente asignación para los registros de formato LEEF:
- El campo "version" se asignó a "metadata.product_version".
- Los campos "usrName" y "userName" a "principal.user.email_addresses" si es un correo electrónico, de lo contrario, se asignan a "principal.user.userid".
- El campo "severityName" se asignó a "security_result.severity".
- El campo "cat" se asignó a "security_result.category_details".
- El campo "incidentType" se asignó a "security_result.summary".
- El campo "falconHostLink" se asignó a "security_result.about.url".
- El campo "numberOfCompromisedEntities" se asignó a "security_result.detection_fields[n]".
- El campo "identityProtectionIncidentId" se asignó a "security_result.detection_fields[n]".
- El campo "numbersOfAlerts" se asignó a "security_result.detection_fields[n]".
- El campo "state" se asignó a "security_result.detection_fields[n]".
- Se agregó la siguiente asignación para los registros de formato CEF:
- El campo "version" se asignó a "metadata.product_version".
- El campo "deviceCustomDate1" se asignó a "metadata.event_type".
- El campo "msg" se asignó a "metadata.description".
- El campo "cs1" se asigna a "security_result.summary" si el valor de "cs1Label" es "incidentType", de lo contrario, se asigna a "security_result.detection_fields[n]".
- El campo "cs2" se asignó a "security_result.detection_fields[n]".
- El campo "cs3" se asignó a "security_result.detection_fields[n]".
- El campo "cs1" se asigna a "security_result.about.url" si el valor de "cs4Label" es "falconHostLink"; de lo contrario, se asigna a "security_result.detection_fields[n]".
- El campo "cn1" se asignó a "security_result.detection_fields[n]".
- El campo "cn2" se asignó a "security_result.detection_fields[n]".
- El campo "cn3" se asignó a "security_result.detection_fields[n]".
- El campo "duser" a "principal.user.email_addresses" si es un correo electrónico, de lo contrario, se asigna a "principal.user.userid".
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.