Recopila registros de EDR de Carbon Black
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
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket
- Guarda el Nombre y la Región del bucket para usarlos más adelante.
- Crea un usuario siguiendo esta guía: Cómo crear un usuario de IAM.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la Clave de acceso y la Clave de acceso secreta para usarlas más tarde.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Instala cb-event-forwarder en el servidor de EDR local
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
Instala el RPM con YUM:
yum install cb-event-forwarder
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
Abre el archivo de configuración:
sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
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
Guarda y sal con el teclado:
- Ctrl + X, luego Y y, por último, Intro.
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
- Accede a la consola de administración de AWS.
- Asegúrate de que la región de AWS coincida con la del reenviador de eventos:
- En la página AWS Console, busca la región.
- Usa el menú desplegable para seleccionar la región correcta de tu reenviador de eventos.
- 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)
- Selecciona Servicios.
- Ve a la consola de S3.
- Haz clic en Crear bucket para abrir el asistente Crear bucket.
- En Nombre del bucket, ingresa un nombre único para tu bucket (por ejemplo, CB-EDR).
- Asegúrate de que la Región se establezca de forma predeterminada en la que seleccionaste antes.
- 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).
- Selecciona Crear bucket.
Configura el bucket de S3 para permitir que el reenviador de eventos escriba eventos
- Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la Clave de acceso y la Clave de acceso secreta para usarlas más tarde.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura el reenvío de eventos en la consola de EDR
- Accede a VMware Carbon Black Cloud.
- Ve a la pestaña Redireccionamiento de eventos.
- Habilita los eventos que deseas que el producto suba a S3.
- Ve a Output and Type y configúralo como S3.
- Proporciona el nombre del bucket de S3 en el siguiente formato
<region>:<bucket-name>
(por ejemplo,us-east-1:cb-edr
). - Selecciona el archivo upload AWS credentials en formato INI.
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
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
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de EDR de Carbon Black).
- Selecciona Amazon S3 como el Tipo de fuente.
- Selecciona Carbon Black EDR como el Tipo de registro.
- Haz clic en Siguiente.
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.
- Reemplaza
- 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.
Haz clic en Siguiente.
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.