Recopila registros de BeyondTrust Secure Remote Access
En este documento, se explica cómo recopilar registros de BeyondTrust Secure Remote Access 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 tuberías. El analizador extrae los campos relevantes de ambos formatos y los asigna a la UDM. También realiza la categorización de tipos de eventos según las palabras clave extraídas y controla la lógica específica para los eventos de acceso y salida, 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 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 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 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 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 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 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 de 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 desde el campo datetime con el formato RFC3 339 si no está presente el campo when . |
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 que se valida 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 como 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 como 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] - nombre_del_evento``. |
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] - nombre_del_evento``. |
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 la AUA. |
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 que se valida 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 como 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 como MACHINE . Si target es web/login , extensions.auth.type se establece como SSO . De lo contrario, extensions.auth.type se establece como 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 |
La marca de tiempo se analiza desde el campo when con el formato UNIX, si está presente. |
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 se establece 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 obtiene 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 . |
Cambios
2022-09-30
Mejora:
- Se escribió grok para analizar los syslogs sin analizar.
- Se asignó
device_vendor
aadditional.fields
. - Se asignó
event_name
aadditional.fields
. - Se asignó
device_product
aadditional.fields
. - Se asignó
externalKeyLabel
aadditional.fields
. - Se asignó
dstPriv
aadditional.fields
. - Se asignó
filePath
atarget.file.full_path
. - Se asignó
fsize
atarget.file.size
.
2022-07-14
- Es un analizador creado recientemente.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.