Recopila registros de BeyondTrust Secure Remote Access
En este documento, se explica cómo recopilar registros de acceso remoto seguro de BeyondTrust con Bindplane. El analizador controla dos formatos de syslog. El primer formato usa pares clave-valor dentro de un mensaje estructurado, mientras que el segundo usa campos delimitados por barras verticales. El analizador extrae los campos pertinentes de ambos formatos y los asigna al UDM. También categoriza los tipos de eventos según las palabras clave extraídas y controla la lógica específica para los eventos de acceso y cierre de sesión, y los tipos de autenticación.
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 ejecutas la herramienta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
- Asegúrate de tener acceso con privilegios a un acceso remoto seguro de BeyondTrust.
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a SIEM Settings > Collection Agents.
- 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 SIEM Settings > Profile.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instalación en 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 en 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 the port and IP address as required listen_address: "0.0.0.0:514" 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: BEYONDTRUST_REMOTE_ACCESS 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 Cómo obtener el archivo de autenticación de la transferencia de datos 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 de Servicios o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura la asistencia remota de BeyondTrust
- Accede a la IU web de BeyondTrust.
- Selecciona Appliance > Security > Appliance administration.
- En la sección Syslog, haz lo siguiente:
- Formato del mensaje: Selecciona Formato BSD heredado.
- Servidor syslog remoto: Ingresa la dirección IP y el puerto de Bindplane.
- Haz clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
datetime |
metadata.event_timestamp |
La marca de tiempo se analiza a partir del campo datetime con el formato RFC3 339 si el campo when no está presente. |
deviceHost |
target.hostname |
El valor de deviceHost se asigna directamente a target.hostname . |
dstHost |
target.ip |
El valor de dstHost se asigna directamente a target.ip después de validarse como una dirección IP válida. |
dstPriv |
additional.fields.[key=dstPriv].value.string_value |
El valor de dstPriv se coloca en el campo additional con la clave dstPriv . |
dstUid |
target.user.userid |
El valor de dstUid se asigna directamente a target.user.userid . |
dstUser |
target.user.user_display_name |
El valor de dstUser se asigna directamente a target.user.user_display_name . |
eventName |
metadata.event_type |
Si eventName es login (sin distinción entre mayúsculas y minúsculas), metadata.event_type se establece en USER_LOGIN . Si eventName es logout (sin distinción entre mayúsculas y minúsculas), metadata.event_type se establece en USER_LOGOUT . De lo contrario, si eventName no está vacío, metadata.event_type se establece en USER_UNCATEGORIZED . Si eventName está vacío y el mensaje coincide con el segundo patrón de Grok, metadata.event_type se establece en GENERIC_EVENT . Si eventName está vacío y el mensaje coincide con el primer patrón de grok, metadata.event_type se establece en GENERIC_EVENT . Si srcUid , userid o who no están vacíos, metadata.event_type se establece en USER_CHANGE_PERMISSIONS . Si deviceHost o site no están vacíos, metadata.event_type se establece en USER_UNCATEGORIZED . De lo contrario, metadata.event_type se establece en GENERIC_EVENT . |
event_name |
additional.fields.[key=event_name].value.string_value |
El valor de event_name se coloca en el campo additional con la clave event_name . |
event_name |
metadata.product_event_type |
El valor de event_name se usa junto con el campo id para completar metadata.product_event_type en el formato [ id] - event_name``. |
externalKeyLabel |
additional.fields.[key=externalKeyLabel].value.string_value |
El valor de externalKeyLabel se coloca en el campo additional con la clave externalKeyLabel . |
id |
metadata.product_event_type |
El valor de id se usa junto con el campo event_name para completar metadata.product_event_type en el formato [ id] - event_name``. |
jumpGroupId |
additional.fields.[key=jumpGroupId].value.string_value |
El valor de jumpGroupId se coloca en el campo additional con la clave jumpGroupId . |
jumpGroupName |
additional.fields.[key=jumpGroupName].value.string_value |
El valor de jumpGroupName se coloca en el campo additional con la clave jumpGroupName . |
jumpGroupType |
additional.fields.[key=jumpGroupType].value.string_value |
El valor de jumpGroupType se coloca en el campo additional con la clave jumpGroupType . |
jumpointId |
additional.fields.[key=jumpointId].value.string_value |
El valor de jumpointId se coloca en el campo additional con la clave jumpointId . |
jumpointName |
additional.fields.[key=jumpointName].value.string_value |
El valor de jumpointName se coloca en el campo additional con la clave jumpointName . |
kv_data |
Varios campos de UDM | El campo kv_data se analiza en pares clave-valor, que luego se asignan a varios campos del UDM según sus claves (p.ej., eventName , when , who , who_ip , site , target , status , reason ). |
kvdata |
Varios campos de UDM | El campo kvdata se analiza en pares clave-valor, que luego se asignan a varios campos del UDM según sus claves (p.ej., msg , srcUser , srcUid , srcHost , dstUser , dstUid , dstHost , sessionId , jumpointId , jumpointName , jumpGroupId , jumpGroupName , jumpGroupType , externalKeyLabel , dstPriv ). |
message |
Varios campos de UDM | El campo message se analiza con patrones de Grok para extraer varios campos, que luego se asignan a campos de UDM. |
msg |
metadata.description |
El valor de msg se asigna directamente a metadata.description . |
product_event_type |
metadata.product_event_type |
El valor de product_event_type se asigna directamente a metadata.product_event_type . |
product_log_id |
metadata.product_log_id |
El valor de product_log_id se asigna directamente a metadata.product_log_id . |
process_id |
principal.process.pid |
El valor de process_id se asigna directamente a principal.process.pid . |
reason |
security_result.description |
El valor de reason se asigna directamente a security_result.description . |
segment_number |
additional.fields.[key=segment_number].value.string_value |
El valor de segment_number se coloca en el campo additional con la clave segment_number . |
sessionId |
network.session_id |
El valor de sessionId se asigna directamente a network.session_id . |
site |
target.hostname |
El valor de site se asigna directamente a target.hostname . |
site_id |
additional.fields.[key=site_id].value.string_value |
El valor de site_id se coloca en el campo additional con la clave site_id . |
srcHost |
principal.ip |
El valor de srcHost se asigna directamente a principal.ip después de validarse como una dirección IP válida. |
srcUid |
principal.user.userid |
El valor de srcUid se asigna directamente a principal.user.userid . |
srcUser |
principal.user.user_display_name |
El valor de srcUser se asigna directamente a principal.user.user_display_name . |
status |
security_result.action |
Si status es failure (sin distinción entre mayúsculas y minúsculas), security_result.action se establece en BLOCK . De lo contrario, security_result.action se establece en ALLOW . |
status |
security_result.action_details |
El valor de status se asigna directamente a security_result.action_details . |
target |
target.application |
El valor de target se asigna directamente a target.application . rep_client se reemplaza por Representative Console y web/login se reemplaza por Web/Login . |
target |
extensions.auth.type |
Si target es rep_client , extensions.auth.type se establece en MACHINE . Si target es web/login , extensions.auth.type se establece en SSO . De lo contrario, extensions.auth.type se establece en AUTHTYPE_UNSPECIFIED . |
timestamp |
metadata.event_timestamp |
El timestamp del registro sin procesar se usa como resguardo si no están presentes datetime ni when . |
total_segments |
additional.fields.[key=total_segments].value.string_value |
El valor de total_segments se coloca en el campo additional con la clave total_segments . |
device_product |
additional.fields.[key=device_product].value.string_value |
El valor de device_product se coloca en el campo additional con la clave device_product . |
device_vendor |
additional.fields.[key=device_vendor].value.string_value |
El valor de device_vendor se coloca en el campo additional con la clave device_vendor . |
device_version |
metadata.product_version |
El valor de device_version se asigna directamente a metadata.product_version . |
when |
metadata.event_timestamp |
Si está presente, la marca de tiempo se analiza desde el campo when con el formato UNIX. |
who |
principal.user.userid |
Si el campo who coincide con el patrón de regex, el userid extraído se asigna a principal.user.userid . De lo contrario, todo el campo who se asigna a principal.user.userid . |
who |
principal.user.user_display_name |
Si el campo who coincide con el patrón de regex, el user_display_name extraído se asigna a principal.user.user_display_name . |
who_ip |
principal.ip |
El valor de who_ip se asigna directamente a principal.ip . |
(Lógica del analizador) | metadata.log_type |
El tipo de registro está establecido en BEYONDTRUST_REMOTE_ACCESS . |
(Lógica del analizador) | metadata.product_name |
El nombre del producto se establece en BeyondTrust Secure Remote Access . |
(Lógica del analizador) | metadata.vendor_name |
El nombre del proveedor se establece en BeyondTrust . |
(Lógica del analizador) | security_result.summary |
El valor se deriva con el formato User %{eventName} . |
(Lógica del analizador) | extensions.auth.mechanism |
Si method contiene using password , el mecanismo se establece en USERNAME_PASSWORD . Si method contiene using elevate , el mecanismo se establece en REMOTE . |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.