Recopila registros de PAM de CyberArk
Este código del analizador primero extrae campos de los mensajes de syslog de CyberArk Privileged Access Manager (PAM) con expresiones regulares. Luego, asigna los campos extraídos a un modelo de datos unificado (UDM), enriquece los datos con contexto adicional y estandariza el tipo de evento según criterios específicos.
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.
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.
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
- Para la instalación de Windows, ejecuta la siguiente secuencia de comandos:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Para la instalación de 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
- Puedes encontrar opciones de instalación adicionales en esta guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
- Accede a la máquina en la que está instalado BindPlane.
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
Reinicia el agente de BindPlane para aplicar los cambios:
sudo systemctl restart bindplane
Configura la exportación de Syslog para CyberArk Vault
- Accede al servidor de Vault.
- Abre el archivo de configuración
dbparm.ini
, que se encuentra enC:\Program Files (x86)\CyberArk\Vault\Server\dbparm.ini
. Agrega o modifica los siguientes parámetros:
SyslogServer=<syslog_server_ip> SyslogPort=<syslog_server_port> SyslogProtocol=<TCP or UDP> SyslogFormat=Syslog
Guarda el archivo
dbparm.ini
.Reinicia el servidor de Vault:
net stop CyberArkVault net start CyberArkVault
Configura la exportación de Syslog en PVWA
- Accede al servidor de PVWA.
- Abre el archivo
Web.config
, que se encuentra enC:\inetpub\wwwroot\PasswordVault\
. Agrega 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" />
Guarda los cambios en el archivo
Web.config
.Reinicia el servicio de IIS:
iisreset
Cómo configurar la exportación de Syslog en PTA
- Accede al servidor de PTA mediante SSH.
- Abre el archivo
application.properties
, que se encuentra en/opt/cta/config/application.properties
. Agrega o modifica las siguientes líneas:
syslog.server.ip=<syslog_server_ip> syslog.server.port=<syslog_server_port> syslog.protocol=<TCP or UDP>
Guarda el archivo
application.properties
.Reinicia el servicio de 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. |
ducha | 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 . |
nombre | metadata.event_type | Se usa para determinar 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, FILE_DELETION. Si no se encuentra ninguna coincidencia, y has_principal es verdadero y has_target es falso, event_type se establece en STATUS_UPDATE. De lo contrario, el valor predeterminado es 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: INFORMACIÓN, 4: ERROR, 5: CRÍTICO. |
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. |
estado | additional.fields.value.string_value | Se asigna directamente desde el campo status . |
Suser | principal.user.userid | Se asignó desde el campo suser . Si duser está vacío, se considera el ID de usuario objetivo. |
hora | metadata.event_timestamp.seconds | Se asignan directamente desde el campo time después de convertirlos al formato de marca de tiempo. |
hora | metadata.event_timestamp.nanos | Se asignan directamente desde el campo time después de convertirlos 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”. |
versión | metadata.product_version | Se asigna directamente desde el campo version . |
metadata.log_type | Está codificado en "CYBERARK_PAM". | |
extensions.auth.mechanism | Establece el valor en "USERNAME_PASSWORD" si event_type es "USER_LOGIN". |
Cambios
2024-05-05
- Sin embargo, el analizador se creó recientemente.