Cómo recopilar registros de transmisión de CrowdStrike Falcon

Compatible con:

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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. 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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/Bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación de Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. 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

Configura el agente de Bindplane para transferir Syslog y enviarlo a Google SecOps

  1. 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).
  2. 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

  1. Accede a CrowdStrike Falcon con una cuenta con privilegios.
  2. Ve a Menú > Asistencia.
  3. Haz clic en Clientes de API > KeysSelect.
  4. Haz clic en Agregar nuevo cliente de API.
  5. En la sección Alcances de la API, selecciona Event streams y, luego, habilita la opción Leer.
  6. Haz clic en Agregar.
  7. Copia y guarda el ID de cliente, el secreto del cliente y la URL base.

Instala el conector de SIEM de Falcon

  1. Descarga el paquete del instalador de RPM para tu sistema operativo.
  2. Instalación de paquetes:

    • Sistema operativo CentOS:

      sudo rpm -Uvh <installer package>
      
    • Sistema operativo Ubuntu:

      sudo dpkg -i <installer package>
      
  3. Directorios de instalación predeterminados:

    • Falcon SIEM Connector: /opt/crowdstrike/
    • Servicio: /etc/init.d/cs.falconhoseclientd/.

Configura el conector de SIEM para que reenvíe eventos a Bindplane

  1. Accede a la máquina con el conector de SIEM instalado como usuario sudo.
  2. Ve al directorio /opt/crowdstrike/etc/.
  3. Se cambió el nombre de cs.falconhoseclient.leef.cfg a cs.falconhoseclient.cfg.
    • El conector de SIEM usa la configuración de cs.falconhoseclient.cfg de forma predeterminada.
  4. 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 como app_id: SECOPS-LEEF.
    • client_id:: Es el valor client_id copiado del paso anterior.
    • client_secret:: Es el valor client_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.
  5. Guarda el archivo cs.falconhoseclient.cfg.
  6. 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
      
  7. 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
      
  8. 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.