Recoger registros de sistemas Linux auditd y AIX
Este analizador gestiona los registros de auditoría de Linux en formato SYSLOG y los transforma en UDM. Procesa mensajes de registro con formato JSON y de texto sin formato, extrae campos mediante técnicas de análisis grok, XML y JSON, y los asigna a los campos de UDM adecuados en función del tipo de evento. El analizador también gestiona formatos de registro de auditoría específicos de sistemas AIX y enriquece el UDM con campos adicionales, como security_result
y detalles intermedios.
Antes de empezar
- Asegúrate de que tienes una instancia de Google Security Operations.
- Asegúrate de que tienes acceso de superusuario al host de Auditd.
- Asegúrate de que has instalado rsyslog en el host de Auditd.
- Asegúrate de tener un host Windows 2012 SP2 o 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
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en 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.
Instalar el agente de Bindplane
- 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
- 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
- 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
- Accede al equipo en el 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: auditd raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Reinicia el agente Bindplane para aplicar los cambios con el siguiente comando:
sudo systemctl bindplane restart
Exportar Syslog desde Auditd
- Accede a la máquina desde la que quieras exportar los registros de auditoría.
Abre el archivo de configuración de Auditd (normalmente se encuentra en
/etc/audit/auditd.conf
).sudo vi /etc/audit/auditd.conf
Busca o añade las siguientes líneas para configurar auditd:
active = yes output = syslog log_format = ENRICHED dispatcher = /sbin/audispd
Opcional: Especifica la instalación de Syslog. Añade o modifica la siguiente línea en auditd.conf
:
```none
syslog_facility = LOG_AUTHPRIV
```
Abre el archivo de configuración de audispd (normalmente se encuentra en
/etc/audisp/plugins.d/syslog.conf
):sudo vi /etc/audisp/plugins.d/syslog.conf
Busca o añade las siguientes líneas para configurar audispd:
active = yes direction = out path = builtin_syslog type = builtin args = LOG_INFO format = string
Reinicia el servicio Auditd para aplicar los cambios:
sudo systemctl restart auditd
Usa una herramienta como
tail
para monitorizar el syslog y verificar que se están enviando los registros de Auditd:tail -f /var/log/syslog | grep auditd # Follow syslog and filter for auditd messages (path may vary depending on your system)
Edita el
rsyslog.conf
o crea una configuración personalizada:sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
Para añadir una regla para reenviar registros, sigue estos pasos:
if $programname == 'auditd' then @@<Bindplane_Agent>:<Bindplane_Port>
- Usa
@
para UDP o@@
para TCP - Sustituye
<BindPlane_Agent>
por la IP o el nombre de host de tu servidor. - Sustituye
<BindPlane_Port>
por el puerto de tu servidor.
Reinicia el servicio rsyslog para aplicar los cambios:
sudo systemctl restart rsyslog
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Observación |
---|---|---|
acct |
target.user.user_display_name |
El valor de acct del registro sin procesar se asigna al campo target.user.user_display_name del UDM. Representa la cuenta asociada al evento. |
addr |
principal.ip |
El valor de addr del registro sin procesar se asigna al campo principal.ip del UDM. Representa la dirección IP de la entidad principal implicada en el evento. |
additional.fields |
additional.fields |
Los campos adicionales de los pares clave-valor o las etiquetas analizados se añaden a la matriz additional.fields del UDM. |
agent.googleapis.com/log_file_path |
(Sin asignar) | Esta etiqueta está presente en algunos registros sin procesar, pero no está asignada al objeto IDM en el UDM. |
algo |
(No se usa en este ejemplo) | Aunque está presente en el analizador y en algunos registros sin procesar, este campo no se usa en el ejemplo proporcionado y no aparece en el UDM final. |
application |
principal.application |
Se deriva del campo terminal del registro sin procesar o de otros campos, como exe , en función del tipo de registro. Representa la aplicación implicada. |
arch |
security_result.about.platform_version |
La arquitectura del campo arch del registro sin procesar se asigna a security_result.about.platform_version . |
auid |
about.user.userid , security_result.detection_fields.auid |
El ID de usuario de auditoría (auid ) se asigna a about.user.userid y se añade como campo de detección en security_result . |
cmd |
target.process.command_line |
El comando del campo cmd del registro sin procesar se asigna a target.process.command_line . |
collection_time |
(Sin asignar) | Este campo es la hora de recogida del registro y no se asigna al objeto IDM en el UDM. |
comm |
principal.application |
El nombre del comando (comm ) se asigna a principal.application . |
COMMAND |
target.process.command_line |
|
compute.googleapis.com/resource_name |
principal.hostname |
El nombre de recurso de esta etiqueta se asigna a principal.hostname . |
create_time |
(Sin asignar) | Este campo no está asignado al objeto IDM en el UDM. |
cwd |
security_result.detection_fields.cwd |
El directorio de trabajo actual (cwd ) se añade como campo de detección en security_result . |
data |
(Procesado) | El campo data contiene el mensaje de registro principal y el analizador lo procesa para extraer varios campos. No se asigna directamente a un solo campo de UDM. |
exe |
target.process.file.full_path |
La ruta del ejecutable (exe ) se asigna a target.process.file.full_path . |
extensions.auth.type |
extensions.auth.type |
La lógica del analizador define el tipo de autenticación en función del tipo de evento. Suele tener el valor MACHINE o AUTHTYPE_UNSPECIFIED . |
fp |
network.tls.client.certificate.sha256 |
La huella digital (fp ) se analiza para extraer el hash SHA256 y se asigna a network.tls.client.certificate.sha256 . |
_Item_Id |
metadata.product_log_id |
|
insertId |
(Sin asignar) | Este campo no está asignado al objeto IDM en el UDM. |
jsonPayload.message |
(Procesado) | Este campo contiene el mensaje de registro principal en formato JSON y lo procesa el analizador. |
key |
security_result.about.registry.registry_key |
El campo clave se ha asignado a security_result.about.registry.registry_key . |
labels |
(Procesado) | Las etiquetas del registro sin procesar se procesan y se asignan a varios campos de UDM o se añaden a additional.fields . |
logName |
(Sin asignar) | Este campo no está asignado al objeto IDM en el UDM. |
metadata.product_event_type |
SECCOMP | La curva de intercambio de claves se extrae del registro sin procesar y se asigna a este campo. |
msg |
security_result.summary |
El mensaje (msg ) se suele usar para rellenar el campo security_result.summary . |
network.application_protocol |
network.application_protocol |
Definido por la lógica del analizador en función del tipo de evento (por ejemplo, SSH o HTTP. |
network.direction |
network.direction |
Definido por la lógica del analizador en función del tipo de evento (por ejemplo, INBOUND, OUTBOUND). |
network.ip_protocol |
network.ip_protocol |
Definido por la lógica del analizador. Normalmente, se asigna el valor TCP a los eventos SSH. |
network.session_id |
network.session_id |
Asignado desde el campo ses o derivado de otros campos. |
network.tls.cipher |
network.tls.cipher |
La información de cifrado se extrae del registro sin procesar y se asigna a este campo. |
network.tls.curve |
network.tls.curve |
La curva de intercambio de claves se extrae del registro sin procesar y se asigna a este campo. |
pid |
principal.process.pid , target.process.pid |
El ID de proceso (pid ) se asigna a principal.process.pid o target.process.pid en función del contexto. |
ppid |
principal.process.parent_process.pid , target.process.parent_process.pid |
El ID de proceso superior (ppid ) se asigna a principal.process.parent_process.pid o target.process.parent_process.pid en función del contexto. |
principal.asset.hostname |
principal.asset.hostname |
Copiado de principal.hostname . |
principal.asset.ip |
principal.asset.ip |
Copiado de principal.ip . |
principal.platform |
principal.platform |
Definido por la lógica del analizador en función del sistema operativo (por ejemplo, LINUX). |
principal.port |
principal.port |
Número de puerto asociado a la entidad de seguridad. |
principal.user.group_identifiers |
principal.user.group_identifiers |
IDs de grupo asociados al usuario principal. |
process.name |
target.process.file.full_path |
|
receiveTimestamp |
(Sin asignar) | Este campo es la marca de tiempo de recepción del registro y no se asigna al objeto IDM en el UDM. |
res |
security_result.action_details |
El resultado (res ) se asigna a security_result.action_details . |
_Resource_Id |
target.resource.product_object_id |
|
resource.labels |
(Sin asignar) | Estas etiquetas están presentes en algunos registros sin procesar, pero no se asignan al objeto IDM en el modelo de datos unificado. |
resource.type |
(Sin asignar) | Este campo está presente en algunos registros sin procesar, pero no se asigna al objeto IDM en el UDM. |
security_result.action |
security_result.action |
Definido por la lógica del analizador en función del campo res (por ejemplo, PERMITIR o BLOQUEAR). |
security_result.detection_fields |
security_result.detection_fields |
Se añaden varios campos del registro sin procesar como pares clave-valor a esta matriz para proporcionar contexto. |
security_result.rule_id |
security_result.rule_id |
Definido por la lógica del analizador, a menudo en type_name para los eventos de llamadas al sistema. |
security_result.severity |
security_result.severity |
Definido por la lógica del analizador en función del nivel de gravedad del registro sin procesar. |
security_result.summary |
security_result.summary |
Un resumen del evento, que suele derivarse del campo msg u otros campos relevantes. |
ses |
network.session_id |
El ID de sesión (ses ) se asigna a network.session_id . |
source |
(Sin asignar) | Este campo contiene metadatos sobre la fuente de registro y no se asigna al objeto IDM en el UDM. |
subj |
(Procesado) | El campo de asunto (subj ) se procesa para extraer información sobre el contexto de seguridad y del usuario. |
syscall |
security_result.about.labels.Syscall |
El número de llamada al sistema se añade como etiqueta en security_result.about . |
target.administrative_domain |
target.administrative_domain |
El dominio del usuario objetivo. |
target.group.group_display_name |
target.group.group_display_name |
Nombre del grupo objetivo. |
target.ip |
target.ip |
La dirección IP del destino. |
target.port |
target.port |
Número de puerto asociado al destino. |
target.process.command_line |
target.process.command_line |
La línea de comandos del proceso de destino. |
target.resource.type |
target.resource.type |
El tipo de recurso de destino, definido por la lógica del analizador (por ejemplo, CREDENTIAL, SETTING). |
target.user.attribute.permissions |
target.user.attribute.permissions |
Permisos relacionados con el usuario de destino. |
target.user.group_identifiers |
target.user.group_identifiers |
IDs de grupo asociados al usuario de destino. |
target.user.userid |
target.user.userid |
ID de usuario del objetivo. |
TenantId |
metadata.product_deployment_id |
|
textPayload |
(Procesado) | La carga útil de texto del registro, procesada por el analizador para extraer varios campos. |
timestamp |
metadata.event_timestamp |
Marca de tiempo del evento. |
tty |
security_result.about.labels.tty |
El tty se añade como etiqueta en security_result.about . |
type |
metadata.product_event_type |
El tipo de evento (type ) se asigna a metadata.product_event_type . |
uid |
target.user.userid |
El ID de usuario (uid ) se asigna a target.user.userid . |
Referencia de delta de asignación de UDM
El 23 de septiembre del 2025, Google SecOps lanzó una nueva versión del analizador de Okta, que incluye cambios significativos en la asignación de campos de registro de Okta a campos de UDM y en la asignación de tipos de eventos.
Delta de asignación de campos de registro
En la siguiente tabla se muestra el delta de asignación de los campos de registro de Okta a UDM expuestos antes del 23 de septiembre del 2025 y posteriormente (se indican en las columnas Asignación antigua y Asignación actual, respectivamente).
Campo de registro | Asignación antigua | Asignación actual | Registro de ejemplo de referencia |
---|---|---|---|
1.1.1.1 (dirección IP) |
src.ip |
principal.ip |
"<163>Apr 10 09:00:05 hostname.com sshd[3318513]: Accepted password for abc from 1.1.1.1 port 33988 ssh2" ("<163>10 de abril, 09:00:05 hostname.com sshd[3318513]: Contraseña aceptada para abc desde 1.1.1.1 puerto 33988 ssh2") |
1.1.1.1 (dirección IP) |
principal.ip |
target.ip |
"<29>Oct 5 08:37:16 abc ProxySG: E0000 Access Log HTTP (main): Connecting to server 1.1.1.1 on port 4433.(0) NORMAL_EVENT alog_stream_http.cpp 261" |
abc (usuario) |
principal.user.userid |
target.user.userid |
"<85>Feb 27 08:26:55 offozcav login: FAILED LOGIN 1 FROM ::ffff:1.1.1.1 FOR abc, Authentication failure\r\n\r\n" ("<85>27 de febrero, 08:26:55 offozcav login: FAILED LOGIN 1 FROM ::ffff:1.1.1.1 FOR abc, Authentication failure\r\n\r\n") |
abc.abc (usuario) |
principal.user.userid |
target.user.userid |
"<86>Feb 27 08:29:19 offozcav login: LOGIN ON pts/43 BY abc.abc FROM\r\n\r\n::ffff:1.1.1.1" |
COMMAND |
principal.process.command_line |
target.process.command_line |
"<85>Sep 24 14:33:59 abc sudo: abc : \r\nTTY=unknown ; PWD=/abc ; USER=abc ; COMMAND=/sbin/iptables -t nat -nL \r\n--line-number" |
exe |
target.process.file.full_path |
principal.process.file.full_path |
|
_ItemId |
additional.fields |
metadata.product_log_id |
|
metadata.product_event_type |
PATH |
SECCOMP |
|
process.name |
principal.process.file.full_path |
target.process.file.full_path |
|
_ResourceId |
additional.fields |
target.resource.product_object_id |
|
TenantId |
additional.fields |
metadata.product_deployment_id |
|
uid |
principal.user.userid |
target.user.userid |
|
USER |
principal.user.user_display_name |
target.user.userid |
"<85>Sep 24 14:33:59 abc sudo: abc : \r\nTTY=unknown ; PWD=/abc ; USER=abc ; COMMAND=/sbin/iptables -t nat -nL \r\n--line-number" |
user |
principal.user.userid |
target.user.userid |
"29>Jan 16 11:28:00 san-auth-1-irl2 tac_plus[17329]: login failure: user 1.1.1.1 (1.1.1.1) vty0" |
user |
principal.user.userid |
target.user.userid |
"<87>Jul 15 10:27:01 xpgjrconfdb01 crond[1045]: pam_unix(crond:account): expired password for user root (password aged)" ("<87>15 de julio a las 10:27:01 xpgjrconfdb01 crond[1045]: pam_unix(crond:account): contraseña caducada del usuario root [contraseña antigua]") |
Delta de asignación de tipos de eventos
Varios eventos que antes se clasificaban como genéricos ahora se clasifican correctamente con tipos de eventos significativos.
En la siguiente tabla se muestra la diferencia en la gestión de los tipos de eventos de Okta antes del 23 de septiembre del 2025 y después (se indican en las columnas event_type antiguo y event_type actual, respectivamente).
eventType del registro | Old event_type | Current event_type |
---|---|---|
aix_event_type=CRON_Start |
USER_LOGIN |
PROCESS_LAUNCH |
CRYPTO_KEY_USER |
NETWORK_CONNECTION |
USER_LOGIN |
FILE_Mknod |
USER_LOGIN |
FILE_CREATION |
FILE_Rename |
USER_LOGIN |
FILE_MODIFICATION |
FILE_Stat |
USER_LOGIN |
FILE_OPEN |
FILE_Unlink |
USER_LOGIN |
FILE_DELETION |
FS_Chabc |
USER_LOGIN |
PROCESS_UNCATEGORIZED |
FS_Mkdir |
USER_LOGIN |
FILE_CREATION |
FS_Rmdir |
USER_LOGIN |
FILE_DELETION |
PROC_Execute |
USER_LOGIN |
PROCESS_LAUNCH |
type=ANOM_ABEND |
STATUS_UPDATE |
PROCESS_TERMINATION |
type=ANOM_PROMISCUOUS |
SETTING_MODIFICATION |
|
type=CRED_REFR |
USER_LOGIN |
USER_CHANGE_PERMISSIONS |
type=PROCTILE |
PROCESS_UNCATEGORIZED |
PROCESS_LAUNCH |
type=SERVICE_START |
USER_RESOURCE_ACCESS |
SERVICE_START |
type=SERVICE_STOP |
USER_RESOURCE_ACCESS |
SERVICE_STOP |
type=USER_ACCT |
USER_LOGIN/SETTING_MODIFICTION |
USER_LOGIN |
type=USER_MGMT |
SETTING_MODIFICATION/GROUP_MODIFICATION |
GROUP_MODIFICATION |
USER_ERR |
USER_LOGOUT |
USER_LOGIN |
Cambios adicionales
- Se ha eliminado la asignación duplicada de
res
desecurity_result.description
. Se registra ensecurity_result.action_details
. - Se ha quitado el
auditd_msg_data
innecesario de los campos adicionales. - Se ha eliminado el
auditd_msg_data
innecesario desecurity_result.summary
. - El
type=ADD_USER
, se ha eliminado la asignación duplicada deacct
atarget.user.display_name
. Ya está asignado entarget.user.userid
. - Se ha eliminado la asignación duplicada de
comm
deprincipal.process.command_line
yprincipal.process.file.names
. Se registra enprincipal.application
. - Se ha eliminado la asignación duplicada de
target.hostname
cuando el valor está enprincipal
. - Se ha eliminado la asignación innecesaria codificada de
target.resource.type
aSETTING
. - Se han quitado las asignaciones de etiquetas de información, ya que están obsoletas.
- Se ha corregido la asignación: ahora las IPs se dirigen a
principal.ip
, no aprincipal.hostname
. - Se ha corregido la repetición de los eventos generados.
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.