Recopila registros de sistemas Linux auditd y AIX
Este analizador controla 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 con técnicas de análisis de grok, XML y JSON, y los asigna a los campos de UDM adecuados según el tipo de evento. El analizador también controla formatos específicos de registros de auditoría de sistemas AIX y enriquece el UDM con campos adicionales, como security_result
y detalles intermedios.
Antes de comenzar
- Asegúrate de tener una instancia de Google Security Operations.
- Asegúrate de tener acceso raíz al host de Auditd.
- Asegúrate de haber instalado rsyslog en el host de Auditd.
- Asegúrate de tener un host de Windows 2012 SP2 o posterior, o bien un host de Linux con systemd.
- Si ejecutas la herramienta 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 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 la instalación en 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
- En esta guía de instalación, encontrarás opciones de instalación adicionales.
Configura el agente de Bindplane para que ingiera Syslog y lo envíe 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: auditd 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 con el siguiente comando:
sudo systemctl bindplane restart
Cómo exportar Syslog desde Auditd
- Accede a la máquina desde la que deseas exportar los registros de auditoría.
Abre el archivo de configuración de Auditd (por lo general, se encuentra en
/etc/audit/auditd.conf
).sudo vi /etc/audit/auditd.conf
Busca o agrega las siguientes líneas para configurar auditd:
active = yes output = syslog log_format = ENRICHED dispatcher = /sbin/audispd
Opcional: Especifica la instalación de Syslog: Agrega o modifica la siguiente línea en auditd.conf
:
```none
syslog_facility = LOG_AUTHPRIV
```
Abre el archivo de configuración de audispd (por lo general, ubicado en
/etc/audisp/plugins.d/syslog.conf
):sudo vi /etc/audisp/plugins.d/syslog.conf
Busca o agrega las siguientes líneas para configurar audispd:
active = yes direction = out path = builtin_syslog type = builtin args = LOG_INFO format = string
Reinicia el servicio de Auditd para aplicar los cambios:
sudo systemctl restart auditd
Usa una herramienta como
tail
para supervisar el registro del sistema y verificar que se envíen 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 archivo
rsyslog.conf
o crea una configuración personalizada:sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
Agrega una regla para reenviar registros:
if $programname == 'auditd' then @@<Bindplane_Agent>:<Bindplane_Port>
- Usa
@
para UDP o@@
para TCP - Reemplaza
<BindPlane_Agent>
por la dirección IP o el nombre de host de tu servidor. - Reemplaza
<BindPlane_Port>
por el puerto de tu servidor.
Reinicia el servicio de 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 en el UDM. Representa la cuenta asociada con el evento. |
addr |
principal.ip |
El valor de addr del registro sin procesar se asigna al campo principal.ip en el UDM. Representa la dirección IP de la principal involucrada en el evento. |
additional.fields |
additional.fields |
Los campos adicionales de los pares clave-valor o las etiquetas analizados se agregan al array additional.fields en el UDM. |
agent.googleapis.com/log_file_path |
(Sin asignar) | Esta etiqueta está presente en algunos registros sin procesar, pero no se asigna al objeto IDM en el UDM. |
algo |
(No se usa en este ejemplo) | Si bien 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 en el registro sin procesar o de otros campos, como exe , según el tipo de registro. Representa la aplicación involucrada. |
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 del usuario de auditoría (auid ) se asigna a about.user.userid y se agrega como un 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 recopilación 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 del recurso de esta etiqueta se asigna a principal.hostname . |
create_time |
(Sin asignar) | Este campo no se asigna al objeto IDM en el UDM. |
cwd |
security_result.detection_fields.cwd |
El directorio de trabajo actual (cwd ) se agrega como un 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 de acceso del archivo ejecutable (exe ) se asigna a target.process.file.full_path . |
extensions.auth.type |
extensions.auth.type |
El tipo de autenticación lo establece la lógica del analizador en función del tipo de evento. A menudo, se establece en 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 se asigna 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 de clave se asigna a security_result.about.registry.registry_key . |
labels |
(Procesado) | Las etiquetas del registro sin procesar se procesan y se asignan a varios campos del UDM o se agregan a additional.fields . |
logName |
(Sin asignar) | Este campo no se asigna 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 completar el campo security_result.summary . |
network.application_protocol |
network.application_protocol |
La lógica del analizador la establece según el tipo de evento (p.ej., SSH, HTTP). |
network.direction |
network.direction |
La lógica del analizador la establece según el tipo de evento (p.ej., INBOUND, OUTBOUND). |
network.ip_protocol |
network.ip_protocol |
Lo establece la lógica del analizador, por lo general, en TCP para los eventos de SSH. |
network.session_id |
network.session_id |
Se asigna desde el campo ses o se deriva de otros campos. |
network.tls.cipher |
network.tls.cipher |
La información de la cifra 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 del proceso (pid ) se asigna a principal.process.pid o target.process.pid según el contexto. |
ppid |
principal.process.parent_process.pid , target.process.parent_process.pid |
El ID del proceso principal (ppid ) se asigna a principal.process.parent_process.pid o target.process.parent_process.pid según el contexto. |
principal.asset.hostname |
principal.asset.hostname |
Se copió desde principal.hostname . |
principal.asset.ip |
principal.asset.ip |
Se copió desde principal.ip . |
principal.platform |
principal.platform |
La lógica del analizador la establece según el sistema operativo (p.ej., LINUX). |
principal.port |
principal.port |
Número de puerto asociado a la principal. |
principal.user.group_identifiers |
principal.user.group_identifiers |
Son los IDs de grupo asociados con el 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 UDM. |
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 |
El analizador sintáctico lo establece según la lógica del campo res (p.ej., PERMITIR, BLOQUEAR). |
security_result.detection_fields |
security_result.detection_fields |
Se agregan varios campos del registro sin procesar como pares clave-valor a este array para proporcionar contexto. |
security_result.rule_id |
security_result.rule_id |
Establecido por la lógica del analizador, a menudo en type_name para los eventos de llamadas al sistema. |
security_result.severity |
security_result.severity |
La lógica del analizador la establece según el nivel de gravedad del registro sin procesar. |
security_result.summary |
security_result.summary |
Es un resumen del evento que, a menudo, se deriva del campo msg o de 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 del contexto del usuario y de seguridad. |
syscall |
security_result.about.labels.Syscall |
El número de llamada al sistema se agrega como una etiqueta dentro de security_result.about . |
target.administrative_domain |
target.administrative_domain |
Es el dominio del usuario objetivo. |
target.group.group_display_name |
target.group.group_display_name |
Es el nombre del grupo objetivo. |
target.ip |
target.ip |
Es la dirección IP del objetivo. |
target.port |
target.port |
Es el número de puerto asociado con el destino. |
target.process.command_line |
target.process.command_line |
Es la línea de comandos del proceso de destino. |
target.resource.type |
target.resource.type |
Es el tipo de recurso de destino, establecido por la lógica del analizador (p.ej., CREDENTIAL, SETTING). |
target.user.attribute.permissions |
target.user.attribute.permissions |
Son los permisos relacionados con el usuario objetivo. |
target.user.group_identifiers |
target.user.group_identifiers |
Son los IDs de grupo asociados con el usuario objetivo. |
target.user.userid |
target.user.userid |
Es el ID de usuario del objetivo. |
TenantId |
metadata.product_deployment_id |
|
textPayload |
(Procesado) | Es la carga útil de texto del registro, que el analizador procesa para extraer varios campos. |
timestamp |
metadata.event_timestamp |
Es la marca de tiempo del evento. |
tty |
security_result.about.labels.tty |
El TTY se agrega como una etiqueta dentro de 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 del delta de asignación del UDM
El 23 de septiembre de 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 cambios en la asignación de tipos de eventos.
Delta de la asignación de campos de registro
En la siguiente tabla, se muestra el delta de asignación para los campos de registro de Okta a UDM expuestos antes del 23 de septiembre de 2025 y posteriormente (se enumeran en las columnas Asignación anterior y Asignación actual, respectivamente).
Campo de registro | Asignación anterior | Asignación actual | Ejemplo de registro 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" |
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" |
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)" |
Delta de la asignación de tipos de eventos
Varios eventos que antes se clasificaban como eventos genéricos ahora se clasifican correctamente con tipos de eventos significativos.
En la siguiente tabla, se muestra el delta para el control de los tipos de eventos de Okta antes del 23 de septiembre de 2025 y después de esa fecha (se indican en las columnas Old event_type y Current event-type, respectivamente).
eventType del registro | event_type anterior | event_type actual |
---|---|---|
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 quitó la asignación duplicada de
res
desecurity_result.description
. Se captura ensecurity_result.action_details
. - Se quitó el
auditd_msg_data
innecesario de los campos adicionales. - Se quitó el
auditd_msg_data
innecesario desecurity_result.summary
. - Cuando es
type=ADD_USER
, se quitó la asignación duplicada deacct
atarget.user.display_name
. Ya está mapeado entarget.user.userid
. - Se quitó la asignación duplicada de
comm
deprincipal.process.command_line
yprincipal.process.file.names
. Se captura enprincipal.application
. - Se quitó la asignación duplicada de
target.hostname
cuando el valor está enprincipal
. - Se quitó la asignación innecesaria codificada de
target.resource.type
aSETTING
. - Se quitaron las asignaciones de etiquetas de Acerca de porque ya no están disponibles.
- Se corrigió la asignación: Las IPs ahora se enrutan a
principal.ip
, no aprincipal.hostname
. - Se corrigió la repetición de los eventos que se generan.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.