Recopila registros de BeyondTrust Secure Remote Access

Compatible con:

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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. 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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. 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

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación de Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. 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

Configura el agente de Bindplane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. 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.
    2. Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. 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
    
  3. Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.

  4. Reemplaza <customer_id> por el ID de cliente real.

  5. 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

  1. Accede a la IU web de BeyondTrust.
  2. Selecciona Appliance > Security > Appliance administration.
  3. 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.
  4. 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 a additional.fields.
  • Se asignó event_name a additional.fields.
  • Se asignó device_product a additional.fields.
  • Se asignó externalKeyLabel a additional.fields.
  • Se asignó dstPriv a additional.fields.
  • Se asignó filePath a target.file.full_path.
  • Se asignó fsize a target.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.