Recopilar registros de PAM de CyberArk

Disponible en:

Este código de analizador primero extrae campos de los mensajes syslog de CyberArk Privileged Access Manager (PAM) mediante expresiones regulares. A continuación, asigna los campos extraídos a un modelo de datos unificado (UDM), lo que enriquece los datos con contexto adicional y estandariza el tipo de evento en función de criterios específicos.

Antes de empezar

  • Asegúrate de que tienes una instancia de Google Security Operations.
  • Asegúrate de que usas 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.

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.

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

  1. Para instalar en Windows, ejecuta la siguiente secuencia de comandos:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Para instalar Linux, ejecuta la siguiente secuencia de comandos:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Puedes consultar otras opciones de instalación en esta guía de instalación.

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

  1. Accede al equipo en el que está instalado el agente de Bindplane.
  2. Edita el archivo config.yaml de la siguiente manera:

    receivers:
        tcplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: Cyberark_PAM
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Reinicia el agente de Bindplane para aplicar los cambios:

    sudo systemctl restart bindplane
    

Configurar la exportación de Syslog para CyberArk Vault

  1. Inicia sesión en el servidor de Vault.
  2. Abre el archivo de configuración dbparm.ini, que se encuentra en C:\Program Files (x86)\CyberArk\Vault\Server\dbparm.ini.
  3. Añade o modifica los siguientes parámetros:

    SyslogServer=<syslog_server_ip>
    SyslogPort=<syslog_server_port>
    SyslogProtocol=<TCP or UDP>
    SyslogFormat=Syslog
    
  4. Guarda el archivo dbparm.ini.

  5. Reinicia el servidor de Vault:

    net stop CyberArkVault
    net start CyberArkVault
    

Configurar la exportación de Syslog en PVWA

  1. Inicia sesión en el servidor PVWA.
  2. Abre el archivo Web.config, que se encuentra en C:\inetpub\wwwroot\PasswordVault\.
  3. Añade o modifica las siguientes claves:

    <add key="SyslogServer" value="<syslog_server_ip>" />
    <add key="SyslogPort" value="<syslog_server_port>" />
    <add key="SyslogProtocol" value="<TCP or UDP>" />
    <add key="SyslogFormat" value="Syslog" />
    
  4. Guarda los cambios en el archivo Web.config.

  5. Reinicia el servicio IIS:

    iisreset
    

Configurar la exportación de Syslog en PTA

  1. Accede al servidor PTA mediante SSH.
  2. Abre el archivo application.properties, que se encuentra en /opt/cta/config/application.properties.
  3. Añade o modifica las siguientes líneas:

    syslog.server.ip=<syslog_server_ip>
    syslog.server.port=<syslog_server_port>
    syslog.protocol=<TCP or UDP>
    
  4. Guarda el archivo application.properties.

  5. Reinicia el servicio PTA para aplicar los cambios:

    sudo service pta restart
    

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
actuar metadata.description Se asigna directamente desde el campo act.
cn1 additional.fields.value.string_value Se asigna directamente desde el campo cn1 cuando cn1Label no está vacío.
cn1Label additional.fields.key Se asigna directamente desde el campo cn1Label cuando cn1 no está vacío.
cn2 additional.fields.value.string_value Se asigna directamente desde el campo cn2 cuando cn2Label no está vacío.
cn2Label additional.fields.key Se asigna directamente desde el campo cn2Label cuando cn2 no está vacío.
cs1 additional.fields.value.string_value Se asigna directamente desde el campo cs1 cuando cs1Label no está vacío.
cs1Label additional.fields.key Se asigna directamente desde el campo cs1Label cuando cs1 no está vacío.
cs2 additional.fields.value.string_value Se asigna directamente desde el campo cs2 cuando cs2Label no está vacío.
cs2Label additional.fields.key Se asigna directamente desde el campo cs2Label cuando cs2 no está vacío.
cs3 additional.fields.value.string_value Se asigna directamente desde el campo cs3 cuando cs3Label no está vacío.
cs3Label additional.fields.key Se asigna directamente desde el campo cs3Label cuando cs3 no está vacío.
cs4 additional.fields.value.string_value Se asigna directamente desde el campo cs4 cuando cs4Label no está vacío.
cs4Label additional.fields.key Se asigna directamente desde el campo cs4Label cuando cs4 no está vacío.
cs5 additional.fields.value.string_value Se asigna directamente desde el campo cs5 cuando cs5Label no está vacío.
cs5Label additional.fields.key Se asigna directamente desde el campo cs5Label cuando cs5 no está vacío.
dhost target.hostname Se asigna desde el campo dhost si no es una dirección IP. Si dhost está vacío, se asigna desde shost (IP o nombre de host).
dhost target.asset.hostname Se asigna desde el campo dhost si no es una dirección IP. Si dhost está vacío, se asigna desde shost (IP o nombre de host).
dhost target.ip Se asigna desde el campo dhost si es una dirección IP.
dhost target.asset.ip Se asigna desde el campo dhost si es una dirección IP.
duser target.user.userid Se asigna directamente desde el campo duser.
dvc intermediary.ip Se asigna desde el campo dvc si es una dirección IP.
externalId metadata.product_log_id Se asigna directamente desde el campo externalId.
fname target.file.full_path Se asigna directamente desde el campo fname.
name metadata.event_type Se usa para determinar el event_type en función de la combinación de los campos name, shost y dhost. Valores posibles: USER_CHANGE_PASSWORD, FILE_READ, USER_LOGIN, FILE_OPEN y FILE_DELETION. Si no se encuentra ninguna coincidencia y has_principal es true y has_target es false, event_type se define como STATUS_UPDATE. De lo contrario, se asigna el valor predeterminado GENERIC_EVENT.
prin_hostname principal.hostname Se asigna directamente desde el campo prin_hostname. Si está vacío, se asigna desde shost si shost no es una dirección IP.
prin_hostname principal.asset.hostname Se asigna directamente desde el campo prin_hostname. Si está vacío, se asigna desde shost si shost no es una dirección IP.
prin_ip principal.ip Se asigna directamente desde el campo prin_ip. Si está vacío, se asigna desde shost si shost es una dirección IP.
prin_ip principal.asset.ip Se asigna directamente desde el campo prin_ip. Si está vacío, se asigna desde shost si shost es una dirección IP.
producto metadata.product_name Se asigna directamente desde el campo product. Si no está presente en el registro, el valor predeterminado es "PAM".
reason security_result.description Se asigna directamente desde el campo reason.
gravedad security_result.severity Se asigna desde el campo severity según la siguiente lógica: 1-3: INFORMATIONAL, 4: ERROR, 5: CRITICAL.
shost principal.hostname Se asigna a prin_hostname si prin_hostname está vacío y shost no es una dirección IP.
shost principal.asset.hostname Se asigna a prin_hostname si prin_hostname está vacío y shost no es una dirección IP.
shost principal.ip Se asigna a prin_ip si prin_ip está vacío y shost es una dirección IP.
shost principal.asset.ip Se asigna a prin_ip si prin_ip está vacío y shost es una dirección IP.
shost target.hostname Se asigna a target.hostname si dhost está vacío y shost no es una dirección IP.
shost target.asset.hostname Se asigna a target.hostname si dhost está vacío y shost no es una dirección IP.
shost target.ip Se asigna a target.ip si dhost está vacío y shost es una dirección IP.
shost target.asset.ip Se asigna a target.ip si dhost está vacío y shost es una dirección IP.
status additional.fields.value.string_value Se asigna directamente desde el campo status.
suser principal.user.userid Asignado desde el campo suser. Si duser está vacío, se considera el ID de usuario de destino.
Tiempo metadata.event_timestamp.seconds Se asigna directamente desde el campo time después de convertirlo al formato de marca de tiempo.
Tiempo metadata.event_timestamp.nanos Se asigna directamente desde el campo time después de convertirlo al formato de marca de tiempo.
vendor metadata.vendor_name Se asigna directamente desde el campo vendor. Si no está presente en el registro, el valor predeterminado es "CYBERARK".
version metadata.product_version Se asigna directamente desde el campo version.
metadata.log_type Codificado como "CYBERARK_PAM".
extensions.auth.mechanism Se asigna el valor "USERNAME_PASSWORD" si event_type es "USER_LOGIN".

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