Recopila registros de EDR de Carbon Black

Compatible con:

En este documento, se explica cómo recopilar registros de EDR de Carbon Black desde entornos de nube y locales con AWS S3. El analizador extrae campos de mensajes en formato JSON, CSV o syslog, los normaliza y los asigna a la UDM. Controla varios tipos de eventos de Carbon Black, como conexiones de red, eventos de procesos, modificaciones de archivos, cambios de registro y hits de IOC, y enriquece los datos con información de inteligencia sobre amenazas y del dispositivo cuando está disponible.

Antes de comenzar

Asegúrate de tener lo siguiente:

  • Una instancia de Google SecOps configurada
  • Acceso con privilegios a AWS IAM y S3
  • Acceso con privilegios a la EDR de Carbon Black en la nube o en las instalaciones

Configura EDR de Carbon Black On-Prem

Configura el bucket de Amazon S3 para las instalaciones on-premise

  1. Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket
  2. Guarda el Nombre y la Región del bucket para usarlos más adelante.
  3. Crea un usuario siguiendo esta guía: Cómo crear un usuario de IAM.
  4. Selecciona el Usuario creado.
  5. Selecciona la pestaña Credenciales de seguridad.
  6. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  7. Selecciona Servicio de terceros como Caso de uso.
  8. Haz clic en Siguiente.
  9. Opcional: Agrega una etiqueta de descripción.
  10. Haz clic en Crear clave de acceso.
  11. Haz clic en Descargar archivo CSV para guardar la Clave de acceso y la Clave de acceso secreta para usarlas más tarde.
  12. Haz clic en Listo.
  13. Selecciona la pestaña Permisos.
  14. Haz clic en Agregar permisos en la sección Políticas de permisos.
  15. Selecciona Agregar permisos.
  16. Selecciona Adjuntar políticas directamente.
  17. Busca y selecciona la política AmazonS3FullAccess.
  18. Haz clic en Siguiente.
  19. Haz clic en Agregar permisos.

Instala cb-event-forwarder en el servidor de EDR local

  1. Instala el repositorio CbOpenSource si aún no está presente:

    cd /etc/yum.repos.d
    curl -O https://opensource.carbonblack.com/release/x86_64/CbOpenSource.repo
    
  2. Instala el RPM con YUM:

    yum install cb-event-forwarder
    
  3. Si usas EDR 7.1.0 o una versión posterior, ejecuta la siguiente secuencia de comandos para establecer los permisos adecuados que necesita EDR:

    /usr/share/cb/integrations/event-forwarder/cb-edr-fix-permissions.sh
    

Configura cb-event-forwarder para que genere registros JSON

  1. Abre el archivo de configuración:

    sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
    
  2. Modifica los siguientes 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
    
  3. Guarda y sal con el teclado:

    • Ctrl + X, luego Y y, por último, Intro.
  4. Inicia cb-event-forwarder:

    sudo systemctl enable cb-event-forwarder
    sudo systemctl restart cb-event-forwarder
    sudo systemctl status cb-event-forwarder
    

Configura el reenviador de eventos de Carbon Black Cloud para S3

Crea un bucket de AWS S3

  1. Accede a la consola de administración de AWS.
  2. Asegúrate de que la región de AWS coincida con la del reenviador de eventos:
    1. En la página AWS Console, busca la región.
    2. Usa el menú desplegable para seleccionar la región correcta de tu reenviador de eventos.
    3. En la siguiente lista, se indica la región de AWS aplicable para cada URL de EDR de Carbon Black.
      • "instance-alias".my.carbonblack.io: Región: US East (N. Virginia) (us-east-1)
      • "instance-alias".my.cbcloud.de: Región: Europa (Frankfurt) (eu-central-1)
      • "instance-alias".my.cbcloud.sg Región: Asia-Pacífico (Singapur) (ap-southeast-1)
  3. Selecciona Servicios.
  4. Ve a la consola de S3.
  5. Haz clic en Crear bucket para abrir el asistente Crear bucket.
    1. En Nombre del bucket, ingresa un nombre único para tu bucket (por ejemplo, CB-EDR).
    2. Asegúrate de que la Región se establezca de forma predeterminada en la que seleccionaste antes.
    3. Actualiza los parámetros predeterminados de Bloquear acceso público para permitir el acceso público (esto es necesario para transferir los registros a Google SecOps).
    4. Selecciona Crear bucket.

Configura el bucket de S3 para permitir que el reenviador de eventos escriba eventos

  1. Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
  2. Selecciona el Usuario creado.
  3. Selecciona la pestaña Credenciales de seguridad.
  4. Haz clic en Crear clave de acceso en la sección Claves de acceso.
  5. Selecciona Servicio de terceros como Caso de uso.
  6. Haz clic en Siguiente.
  7. Opcional: Agrega una etiqueta de descripción.
  8. Haz clic en Crear clave de acceso.
  9. Haz clic en Descargar archivo CSV para guardar la Clave de acceso y la Clave de acceso secreta para usarlas más tarde.
  10. Haz clic en Listo.
  11. Selecciona la pestaña Permisos.
  12. Haz clic en Agregar permisos en la sección Políticas de permisos.
  13. Selecciona Agregar permisos.
  14. Selecciona Adjuntar políticas directamente.
  15. Busca la política AmazonS3FullAccess.
  16. Selecciona la política.
  17. Haz clic en Siguiente.
  18. Haz clic en Agregar permisos.

Configura el reenvío de eventos en la consola de EDR

  1. Accede a VMware Carbon Black Cloud.
  2. Ve a la pestaña Redireccionamiento de eventos.
  3. Habilita los eventos que deseas que el producto suba a S3.
  4. Ve a Output and Type y configúralo como S3.
  5. Proporciona el nombre del bucket de S3 en el siguiente formato <region>:<bucket-name> (por ejemplo, us-east-1:cb-edr).
  6. Selecciona el archivo upload AWS credentials en formato INI.
  7. El siguiente es un ejemplo de un perfil:

    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
    AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Default region name [None]: us-east-1
    
  8. Haz clic en Guardar y reinicia el servicio para que se apliquen los cambios.

Configura un feed en Google SecOps para transferir los registros de EDR de Carbon Black

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de EDR de Carbon Black).
  4. Selecciona Amazon S3 como el Tipo de fuente.
  5. Selecciona Carbon Black EDR como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:

    • Región: Es la región en la que se encuentra el bucket de Amazon S3.
    • URI de S3: Es el URI del bucket.
      • s3:/BUCKET_NAME
        • Reemplaza BUCKET_NAME por el nombre real del bucket.
    • URI es un: Selecciona URI_TYPE según la configuración del flujo de registros (Archivo único | Directorio | Directorio que incluye subdirectorios).
    • Opciones de eliminación de fuentes: Selecciona la opción de eliminación según tus preferencias.
    • ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
    • Clave de acceso secreta: Es la clave secreta del usuario con acceso al bucket de S3.
    • Espacio de nombres de recursos: Es el espacio de nombres de recursos.
    • Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
  8. Haz clic en Siguiente.

  9. Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
action security_result.detection_fields[?key == 'action'].value El valor del campo action del registro sin procesar.
cb_server intermediary.hostname El valor del campo cb_server del registro sin procesar.
cb_version metadata.product_version El valor del campo cb_version del registro sin procesar.
child_pid target.process.pid (para eventos ingress.event.childproc) El valor del campo child_pid del registro sin procesar cuando type es ingress.event.childproc.
child_process_guid target.process.product_specific_process_id (para eventos ingress.event.childproc) "CB" concatenado con el valor del campo child_process_guid del registro sin procesar cuando type es ingress.event.childproc.
child_username target.user.userid (para eventos ingress.event.childproc) El valor del campo child_username del registro sin procesar cuando type es ingress.event.childproc.
childproc_guid target.process.product_specific_process_id (para eventos endpoint.event.procstart) "CB" concatenado con el valor del campo childproc_guid del registro sin procesar cuando type es endpoint.event.procstart.
childproc_hash.0 target.process.file.md5 (para eventos endpoint.event.procstart) El primer elemento del array childproc_hash del registro sin procesar cuando type es endpoint.event.procstart.
childproc_hash.1 target.process.file.sha256 (para eventos endpoint.event.procstart) El segundo elemento del array childproc_hash del registro sin procesar cuando type es endpoint.event.procstart.
childproc_name target.process.file.full_path (para eventos endpoint.event.procstart) El valor del campo childproc_name del registro sin procesar cuando type es endpoint.event.procstart.
childproc_pid target.process.pid (para eventos endpoint.event.procstart) El valor del campo childproc_pid del registro sin procesar cuando type es endpoint.event.procstart.
childproc_publisher.0.name security_result.detection_fields[?key == 'childproc_publisher_name'].value (para eventos endpoint.event.procstart) "childproc_publisher_name": Se concatena con el valor de childproc_publisher.0.name del registro sin procesar cuando type es endpoint.event.procstart.
childproc_publisher.0.state security_result.detection_fields[?key == 'childproc_publisher_state'].value (para eventos endpoint.event.procstart) "childproc_publisher_state": Se concatena con el valor de childproc_publisher.0.state del registro sin procesar cuando type es endpoint.event.procstart.
childproc_reputation security_result.detection_fields[?key == 'childproc_reputation'].value (para eventos endpoint.event.procstart) Es el valor del campo childproc_reputation del registro sin procesar cuando type es endpoint.event.procstart.
childproc_username target.user.userid (para eventos endpoint.event.procstart) El valor del campo childproc_username del registro sin procesar cuando type es endpoint.event.procstart.
clientIp principal.ip, principal.asset.ip El valor del campo clientIp del registro sin procesar.
cmdline target.process.command_line (para eventos feed.query.hit.process y feed.storage.hit.process), additional.fields[?key == 'cmdline_*'].value.string_value (para eventos watchlist.storage.hit.process) Es el valor del campo cmdline del registro sin procesar cuando type es feed.query.hit.process o feed.storage.hit.process. En el caso de los eventos watchlist.storage.hit.process, se almacena en additional.fields con la clave "cmdline_*".
command_line target.process.command_line (para eventos ingress.event.procstart) El valor del campo command_line del registro sin procesar cuando type es ingress.event.procstart.
comms_ip intermediary.ip El valor del campo comms_ip del registro sin procesar.
computer_name principal.hostname, principal.asset.hostname El valor del campo computer_name del registro sin procesar.
crossproc_api additional.fields[?key == 'crossproc_api'].value.string_value (para eventos endpoint.event.apicall) Es el valor del campo crossproc_api del registro sin procesar cuando type es endpoint.event.apicall.
crossproc_guid additional.fields[?key == 'crossproc_guid'].value.string_value (para eventos endpoint.event.crossproc) Es el valor del campo crossproc_guid del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_hash.0 additional.fields[?key == 'crossproc_md5'].value.string_value (para eventos endpoint.event.crossproc) El primer elemento del array crossproc_hash del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_hash.1 additional.fields[?key == 'crossproc_sha256'].value.string_value (para eventos endpoint.event.crossproc) El segundo elemento del array crossproc_hash del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_name target.process.file.full_path (para eventos endpoint.event.crossproc) Es el valor del campo crossproc_name del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_publisher.0.name security_result.detection_fields[?key == 'crossproc_publisher_name'].value (para eventos endpoint.event.crossproc) "crossproc_publisher_name": Se concatena con el valor de crossproc_publisher.0.name del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_publisher.0.state security_result.detection_fields[?key == 'crossproc_publisher_state'].value (para eventos endpoint.event.crossproc) "crossproc_publisher_state": Se concatena con el valor de crossproc_publisher.0.state del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_reputation additional.fields[?key == 'crossproc_reputation'].value.string_value (para eventos endpoint.event.crossproc) Es el valor del campo crossproc_reputation del registro sin procesar cuando type es endpoint.event.crossproc.
crossproc_target additional.fields[?key == 'crossproc_target'].value.string_value (para eventos endpoint.event.crossproc) El valor del campo crossproc_target del registro sin procesar cuando type es endpoint.event.crossproc. Se convierte en una cadena "true" o "false".

Cambios

2024-05-13

  • Se asignó el campo "alert_url" al campo de la AUA "metadata.url_back_to_product".

2024-01-19

  • Se agregó una verificación de nulidad para "filemod_hash.0" y "filemod_hash.1" antes de la asignación.

2023-12-27

  • Se inicializaron "filemod_hash.0" y "filemod_hash.1" en nulo para analizar los registros sin analizar.

2023-10-26

  • Se agregó la función "gsub" para analizar los campos sin analizar.

2023-10-13

  • Se agregaron registros JSON nuevos mediante el bloque JSON.
  • Se quitó el código redundante de los 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" y "parent_hash.1".

2023-07-21

  • Se agregaron detalles de las tácticas y técnicas de MITRE ATT&CK a "security_result.attack_details".

24-3-2023

  • Se asignó el campo "protocol" a "network.ip_protocol".
  • Se agregó una verificación condicional nula para los campos "child_username", "child_pid" y "child_command_line".
  • Se cambió "metadata.event_type" de "GENERIC_EVENT" a "STATUS_UPDATE" cuando "principal.hostname" o "principal.ip" no son nulos.

2023-03-14

  • Corrección de errores:
  • Se asignaron los siguientes campos cuando el campo "type" es nulo:
  • Se asignó el campo "process_guid" a "principal.process.product_specific_process_id".
  • Se asignó el campo "device_external_ip" a "target.ip".
  • Se asignó el campo "device_os" a "principal.platform".
  • Se asignó el campo "device_group" a "principal.group.group_display_name".
  • Se asignó el campo "process_pid" a "principal.process.pid".
  • Se asignó el campo "process_path" a "principal.process.file.full_path".
  • Se asignó el campo "process_cmdline" a "principal.process.command_line".
  • Se asignó el campo "process_hash.0" a "principal.process.file.md5".
  • Se asignó el campo "principal.1" a "principal.process.file.sha256".
  • Se asignó el campo "process_username" a "principal.user.userid".
  • Se asignó el campo "clientIp" a "principal.ip".
  • Se asignó el campo "description" a "metadata.description".
  • Se asignó el campo "orgName" a "principal.administrative_domain".
  • Se asignaron los siguientes campos cuando el campo "ruleName" contiene "CYDERES":
  • Se asignó el campo "deviceInfo.internalIpAddress" a "principal.ip".
  • Se asignó el campo "deviceInfo.externalIpAddress" a "target.ip".
  • Se asignó el campo "ruleName" a "security_result.rule_name".
  • Se asignó el campo "deviceInfo.deviceType" a "principal.asset.platform_software.platform".
  • Se asignó el campo "domain" a "principal.administrative_domain".
  • Se asignó el campo "deviceInfo.groupName" a "principal.group.group_display_name".
  • Se asignó el campo "deviceInfo.deviceVersion" a "principal.asset.platform_software.platform_version".
  • Se asignó el campo "deviceInfo.deviceId" a "principal.asset.asset_id".
  • Se asignó el campo "eventId" a "additional.fields".
  • Se cambió "metadata.event_type" de "GENERIC_EVENT" a "NETWORK_CONNECTION" cuando "principal.ip" y "target.ip" no son nulos.
  • Se cambió "metadata.event_type" de "GENERIC_EVENT" a "STATUS_UPDATE" cuando "principal.ip" no es nulo.

2023-02-03

  • Se corrigió el error: Se asignó "filemod_hash" a "target.file" en lugar de "target.process.file".

2023-01-20

  • Se corrigió un error: Se dejó de propagar y asignar product_specific_process_id para los IDs de proceso vacíos.

2022-11-25

  • Se asignó "remote_ip" a "principal.ip" y "local_ip" a "target.ip" para los eventos TCP/UDP "entrantes".
  • Se asignó "remote_port" a "principal.port" y "local_port" a "target.port" para los eventos TCP/UDP "entrantes".

2022-10-06

  • Se migraron todos los analizadores específicos del cliente al analizador predeterminado.

2022-07-10

  • Se actualizó la asignación de "event_type" a "PROCESS_LAUNCH" para los registros de tipo "endpoint.event.'.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.