Recopila registros de Delinea Secret Server
En este documento, se explica cómo recopilar registros de Secret Server de Delinea (anteriormente Thycotic). El analizador transforma los registros sin procesar en un formato estructurado que cumple con el UDM de Google Security Operations. Primero, extrae campos clave, como marcas de tiempo, tipos de eventos y la información del usuario. Luego, usa lógica condicional basada en el tipo de evento específico para asignar los datos a los campos de la AUA adecuados y, en última instancia, enriquece los datos para el análisis en Google SecOps.
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 Delinea.
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: udplog: # Replace with your specific IP and port listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Path to the ingestion authentication file creds: '/path/to/your/ingestion-auth.json' # Your Chronicle customer ID customer_id: 'your_customer_id' endpoint: malachiteingestion-pa.googleapis.com ingestion_labels: log_type: SYSLOG namespace: thycotic raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog 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 Delinea Secret Server para enviar registros con Syslog
- Accede a Delinea Secret Server con credenciales de administrador.
- Ve a Administrador > Configuración.
- Haz clic en Editar.
- Selecciona la casilla de verificación Habilitar el registro de Syslog/CEF y especifica los siguientes detalles:
- Servidor de syslog/CEF: Ingresa la dirección IP de tu Bindplane.
- Protocolo Syslog/CEF: Selecciona UDP o TCP (según la configuración de Bindplane).
- Puerto de Syslog/CEF: Ingresa el número de puerto en el que se configuró Bindplane para escuchar.
- Haz clic en Guardar.
Asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
Account_Domain | event1.idm.read_only_udm.principal.domain | El valor se toma del campo "Account_Domain" en el campo "msg" del registro sin procesar. |
Por usuario | event1.idm.read_only_udm.principal.user.userid | El valor se toma del campo "Por usuario" en el campo "msg" del registro sin procesar. |
ID del contenedor | event1.idm.read_only_udm.principal.asset.asset_id | El valor se toma del campo "Container Id" en el campo "msg" del registro sin procesar y tiene el prefijo "container_id:". |
Nombre del contenedor | event1.idm.read_only_udm.principal.resource.name | El valor se toma del campo "Nombre del contenedor" en el campo "msg" del registro sin procesar. |
cs2 | event1.idm.read_only_udm.additional.fields[].value.string_value | El valor se toma del campo "cs2" en el campo "msg" del registro sin procesar. |
cs3 | event1.idm.read_only_udm.target.file.full_path | El valor se toma del campo "cs3" en el campo "msg" del registro sin procesar. |
cs4 | event1.idm.read_only_udm.principal.user.user_display_name | El valor se toma del campo "cs4" en el campo "msg" del registro sin procesar. |
Detalles | event1.idm.read_only_udm.additional.fields[].value.string_value | El valor se toma del campo “Detalles” en el campo “msg” del registro sin procesar. |
fname | event1.idm.read_only_udm.target.file.full_path | El valor se toma del campo "fname" en el campo "msg" del registro sin procesar. |
Host | event1.idm.read_only_udm.principal.hostname, event1.idm.read_only_udm.principal.asset.hostname | El valor se toma del campo "Host" en el campo "msg" del registro sin procesar. |
Nombre del elemento | event1.idm.read_only_udm.target.user.userid | El valor se toma del campo "Item Name" en el campo "msg" del registro sin procesar. |
event1.idm.read_only_udm.additional.fields[].key | El valor está codificado como "fname". | |
event1.idm.read_only_udm.additional.fields[].key | El valor está codificado como "Grupo o usuario". | |
event1.idm.read_only_udm.additional.fields[].key | El valor está codificado como "Detalles". | |
event1.idm.read_only_udm.additional.fields[].key | El valor está codificado como "type_id". | |
event1.idm.read_only_udm.extensions.auth.type | El valor está codificado como "MACHINE". | |
event1.idm.read_only_udm.metadata.description | El valor se toma del campo "thycotic_event", que se extrae del registro sin procesar con un patrón de grok. | |
event1.idm.read_only_udm.metadata.event_timestamp.seconds | El valor se obtiene del campo "rt" si está presente, de lo contrario, del campo "ts". Ambos campos se extraen del registro sin procesar con patrones de grok. | |
event1.idm.read_only_udm.metadata.event_type | El valor se determina en función del campo "thycotic_event" y otras condiciones. Por ejemplo, si "thycotic_event" es "USER - LOGIN", el tipo de evento se establece en "USER_LOGIN". | |
event1.idm.read_only_udm.metadata.log_type | El valor está codificado en "THYCOTIC". | |
event1.idm.read_only_udm.metadata.product_event_type | El valor se toma del campo "thycotic_event", que se extrae del registro sin procesar con un patrón grok. | |
event1.idm.read_only_udm.metadata.product_log_id | El valor se toma del campo "action_id", que se extrae del registro sin procesar con un patrón grok. | |
event1.idm.read_only_udm.metadata.product_name | El valor se toma del campo "device_product", que se extrae del registro sin procesar con un patrón grok. Si el campo está vacío, el valor se codifica en "Secret Server". | |
event1.idm.read_only_udm.metadata.product_version | El valor se toma del campo "device_version", que se extrae del registro sin procesar con un patrón grok. | |
event1.idm.read_only_udm.metadata.vendor_name | El valor está codificado como “Thycotic”. | |
event1.idm.read_only_udm.network.ip_protocol | El valor se establece en "TCP" si el campo "input.type" es "tcp". | |
event1.idm.read_only_udm.observer.application | El valor se toma del campo "agent.type" si está presente; de lo contrario, se codifica en "Secret Server". | |
event1.idm.read_only_udm.observer.asset_id | El valor se establece en "ID de agente:" concatenado con el campo "agent.id". | |
event1.idm.read_only_udm.observer.hostname | El valor se toma del campo "agent.hostname" si está presente, de lo contrario, del campo "server". | |
event1.idm.read_only_udm.observer.platform_version | El valor se toma del campo "agent.version". | |
event1.idm.read_only_udm.observer.user.userid | El valor se toma del campo "agent.name". | |
event1.idm.read_only_udm.principal.asset.asset_id | El valor se establece en "ID:" concatenado con el campo "host.id". | |
event1.idm.read_only_udm.principal.asset.hardware.cpu_platform | El valor se toma del campo "host.architecture". | |
event1.idm.read_only_udm.principal.asset.hostname | El valor se toma del campo "server" si está presente, de lo contrario, del campo "host.hostname". | |
event1.idm.read_only_udm.principal.asset.ip | El valor se toma del campo "src" si está presente, de lo contrario, del campo "src_ip". | |
event1.idm.read_only_udm.principal.hostname | El valor se toma del campo "host.hostname" si está presente, de lo contrario, del campo "server". | |
event1.idm.read_only_udm.principal.ip | El valor se toma del campo "src" si está presente, de lo contrario, del campo "src_ip" o del campo "host.ip". | |
event1.idm.read_only_udm.principal.mac | El valor se toma del campo "host.mac". | |
event1.idm.read_only_udm.principal.platform | El valor se establece en "LINUX" si el campo "host_os_platform" es "centos"; de lo contrario, se establece en el valor en mayúsculas del campo "host_os_platform". | |
event1.idm.read_only_udm.principal.platform_patch_level | El valor se toma del campo "host.os.kernel". | |
event1.idm.read_only_udm.principal.platform_version | El valor se toma del campo "host.os.version". | |
event1.idm.read_only_udm.principal.port | El valor se toma del campo "src_port", que se extrae del campo "log.source.address" con un patrón grok. | |
event1.idm.read_only_udm.principal.user.user_display_name | El valor se toma del campo "cs4" en el campo "msg" del registro sin procesar. | |
event1.idm.read_only_udm.principal.user.userid | El valor se toma del campo "suser" en el campo "msg" del registro sin procesar o del campo "Por usuario" si "thycotic_event" es "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" o "USER - EDIT". | |
event1.idm.read_only_udm.security_result.action | El valor se toma del campo "Action" en el campo "msg" del registro sin procesar. También se puede establecer en "ALLOW" o "BLOCK" según el valor de "thycotic_event". | |
event1.idm.read_only_udm.security_result.description | El valor se toma del campo "temp_message", que contiene la parte restante del campo "msg" después de extraer otros campos. | |
event1.idm.read_only_udm.security_result.severity | El valor se determina en función del campo "syslog_severity". Por ejemplo, si "syslog_severity" contiene "error" o "warning", la gravedad se establece en "HIGH". Si "thycotic_event" es "Registro del sistema", la gravedad se establece en "INFORMATIONAL". | |
event1.idm.read_only_udm.security_result.severity_details | El valor se toma del campo "syslog_severity". | |
event1.idm.read_only_udm.target.file.full_path | Para construir el valor, se concatenan los campos "cs3" y "fname" con un separador "/" si ambos campos están presentes. Si solo hay un campo, el valor se toma de ese campo. | |
event1.idm.read_only_udm.target.resource.product_object_id | El valor se toma del campo "type_id". | |
event1.idm.read_only_udm.target.user.userid | El valor se toma del campo "item_name" en el campo "msg" del registro sin procesar o del campo "Item Name" si "thycotic_event" es "USER - LOGIN", "USER - LOGOUT", "USER - LOGINFAILURE" o "USER - EDIT". | |
events.timestamp.seconds | El valor se obtiene del campo "rt" si está presente, de lo contrario, del campo "ts". Ambos campos se extraen del registro sin procesar con patrones de grok. | |
rt | event1.idm.read_only_udm.metadata.event_timestamp.seconds | El valor se toma del campo "rt" en el campo "msg" del registro sin procesar y se usa para establecer la marca de tiempo del evento. |
src | event1.idm.read_only_udm.principal.asset.ip, event1.idm.read_only_udm.principal.ip | El valor se toma del campo "src" en el campo "msg" del registro sin procesar. |
src_ip | event1.idm.read_only_udm.principal.asset.ip, event1.idm.read_only_udm.principal.ip | El valor se toma del campo "src_ip", que se extrae del campo "log.source.address" con un patrón grok. |
Cambios
2024-06-04
- Se mejoró el análisis de registros sin analizar.
- Se asignaron los campos "Host" y "servidor" a los campos de la UDM relacionados con el nombre de host.
- Se asignaron "Container_Id" y "Container_name" a los campos de la AUA relacionados con los nombres de los recursos y los activos.
2023-09-22
- Se ajustó la lógica de análisis para controlar mejor los registros sin analizar.
- Se agregó el manejo de errores para los campos "rt" y "ts".
12-06-2023
- Se actualizó la lógica de análisis para admitir un nuevo formato de registro.
- Se asignaron los campos "fname", "cs2" y "details" a los campos de la AUA para obtener información adicional y un resumen de los resultados de seguridad.
2022-08-01
- Se agregó compatibilidad con el análisis de registros en formato JSON.
- Se asignaron varios campos de los registros JSON a sus campos de la AUA correspondientes, incluidos los campos relacionados con la información del dispositivo y del agente, las direcciones IP, los detalles del host, la información de la plataforma y la gravedad de la seguridad.
- Se agregó el análisis de registros con el tipo "SECRET - SECRETPASSWORDCHANGEFAILURE".
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.