Recoger registros de acceso remoto seguro de BeyondTrust

Disponible en:

En este documento se explica cómo recoger registros de BeyondTrust Secure Remote Access mediante Bindplane. El analizador controla dos formatos syslog. El primer formato usa pares clave-valor en un mensaje estructurado, mientras que el segundo usa campos delimitados por barras verticales. El analizador extrae los campos relevantes de ambos formatos y los asigna al UDM. También clasifica los tipos de eventos en función de las palabras clave extraídas y gestiona la lógica específica de los eventos de inicio y cierre de sesión, así como de los tipos de autenticación.

Antes de empezar

  • Asegúrate de que tienes una instancia de Google Security Operations.
  • Asegúrate de usar Windows 2016 o una versión posterior, o un host Linux con systemd.
  • Si se ejecuta a través de un proxy, asegúrate de que los puertos del cortafuegos estén abiertos.
  • Asegúrate de tener acceso privilegiado a BeyondTrust Secure Remote Access.

Obtener el archivo de autenticación de ingestión de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtener el ID de cliente de Google SecOps

  1. Inicia sesión en 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.

Instalar el agente de Bindplane

Instalación de ventanas

  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 un terminal con privilegios de superusuario 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

Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. Busca el archivo config.yaml. Normalmente, 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. Sustituye el puerto y la dirección IP según sea necesario en tu infraestructura.

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

  5. Actualiza /path/to/ingestion-authentication-file.json a la ruta en la que se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión 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 Servicios o introducir el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar la asistencia remota de BeyondTrust

  1. Inicia sesión en la interfaz web de BeyondTrust.
  2. Selecciona Appliance > Seguridad > Administración de appliance.
  3. En la sección Syslog, haga lo siguiente:
    • Formato de mensaje: selecciona Formato BSD antiguo.
    • Servidor syslog remoto: introduce 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 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 distinguir entre mayúsculas y minúsculas), metadata.event_type se asigna a USER_LOGIN. Si eventName es logout (sin distinguir entre mayúsculas y minúsculas), metadata.event_type se asigna a USER_LOGOUT. De lo contrario, si eventName no está vacío, se le asigna el valor USER_UNCATEGORIZED a metadata.event_type. Si eventName está vacío y el mensaje coincide con el segundo patrón de grok, metadata.event_type se asigna a GENERIC_EVENT. Si eventName está vacío y el mensaje coincide con el primer patrón grok, metadata.event_type se asigna a GENERIC_EVENT. Si srcUid, userid o who no están vacíos, metadata.event_type se asigna a USER_CHANGE_PERMISSIONS. Si deviceHost o site no están vacíos, metadata.event_type se asigna a USER_UNCATEGORIZED. De lo contrario, metadata.event_type se asigna a 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 rellenar metadata.product_event_type con 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 rellenar metadata.product_event_type con 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 se asignan a varios campos de UDM en función de sus claves (por ejemplo, eventName, when, who, who_ip, site, target, status, reason).
kvdata Varios campos de UDM El campo kvdata se analiza en pares clave-valor, que se asignan a varios campos de UDM en función de sus claves (por ejemplo, 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 mediante patrones 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 distinguir entre mayúsculas y minúsculas), security_result.action se asigna a BLOCK. De lo contrario, security_result.action se asigna a 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 sustituye por Representative Console y web/login se sustituye por Web/Login.
target extensions.auth.type Si target es rep_client, extensions.auth.type se define como MACHINE. Si target es web/login, extensions.auth.type se define como SSO. De lo contrario, extensions.auth.type se asigna a AUTHTYPE_UNSPECIFIED.
timestamp metadata.event_timestamp El timestamp del registro sin procesar se usa como alternativa si no están presentes ni 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 a partir del 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 es BEYONDTRUST_REMOTE_ACCESS.
(Lógica del analizador) metadata.product_name El nombre del producto es BeyondTrust Secure Remote Access.
(Lógica del analizador) metadata.vendor_name El nombre del proveedor es BeyondTrust.
(Lógica del analizador) security_result.summary El valor se obtiene mediante el formato User %{eventName}.
(Lógica del analizador) extensions.auth.mechanism Si method contiene using password, el mecanismo se define como USERNAME_PASSWORD. Si method contiene using elevate, el mecanismo se define como REMOTE.

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.