Recopila registros de auditoría de Linux y de sistemas AIX
Este analizador controla los registros de auditoría de Linux en formato SYSLOG y los transforma en UDM. Procesa mensajes de registro en formato JSON y texto sin formato, extrae campos con técnicas de análisis de grok, XML y JSON, y los asigna a los campos de la AUA 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 la UDM con campos adicionales, como security_result
y detalles de intermediarios.
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 una versión posterior, o bien 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: 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 el servicio 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, se encuentra 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 syslog 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
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 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 | Lógica |
---|---|---|
acct |
target.user.user_display_name |
El valor de acct del registro sin procesar se asigna al campo target.user.user_display_name en la 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 la 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 la 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 la 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 la 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 en cuestión. |
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 agrega 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 recopilación de registros y no se asigna al objeto IDM en la UDM. |
comm |
principal.application |
El nombre del comando (comm ) se asigna a principal.application . |
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 está asignado al objeto IDM en la 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 la AUA. |
exe |
principal.process.file.full_path , target.process.file.full_path |
La ruta de acceso ejecutable (exe ) se asigna a principal.process.file.full_path o target.process.file.full_path según el contexto. |
extensions.auth.type |
extensions.auth.type |
La lógica del analizador establece el tipo de autenticación según el 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 . |
insertId |
(Sin asignar) | Este campo no está asignado al objeto IDM en la UDM. |
jsonPayload.message |
(Procesado) | Este campo contiene el mensaje de registro principal en formato JSON y es procesado por 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 de la UDM o se agregan a additional.fields . |
logName |
(Sin asignar) | Este campo no está asignado al objeto IDM en la UDM. |
msg |
security_result.summary |
El mensaje (msg ) suele usarse para propagar el campo security_result.summary . |
network.application_protocol |
network.application_protocol |
Establecido por la lógica del analizador según el tipo de evento (p.ej., SSH, HTTP). |
network.direction |
network.direction |
Establecido por la lógica del analizador según el tipo de evento (p.ej., INBOUND, OUTBOUND). |
network.ip_protocol |
network.ip_protocol |
Es establecido por la lógica del analizador, por lo general, en TCP para eventos de SSH. |
network.session_id |
network.session_id |
Se asignan desde el campo ses o se derivan de otros campos. |
network.tls.cipher |
network.tls.cipher |
La información del algoritmo 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 según el contexto. |
ppid |
principal.process.parent_process.pid , target.process.parent_process.pid |
El ID del proceso superior (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 |
Es establecido por la lógica del analizador según el sistema operativo (p.ej., LINUX). |
principal.port |
principal.port |
Es el número de puerto asociado con el principal. |
principal.user.group_identifiers |
principal.user.group_identifiers |
Son los IDs de grupo asociados con el usuario principal. |
receiveTimestamp |
(Sin asignar) | Este campo es la marca de tiempo de recepción del registro y no está asignado al objeto IDM en la UDM. |
res |
security_result.action_details |
El resultado (res ) se asigna a security_result.action_details . |
resource.labels |
(Sin asignar) | Estas etiquetas están presentes en algunos registros sin procesar, pero no están asignadas al objeto IDM en la UDM. |
resource.type |
(Sin asignar) | Este campo está presente en algunos registros sin procesar, pero no está asignado al objeto IDM en la UDM. |
security_result.action |
security_result.action |
Establecido por la lógica del analizador según el campo res (p.ej., ALLOW, BLOCK). |
security_result.detection_fields |
security_result.detection_fields |
Varios campos del registro sin procesar se agregan como pares clave-valor a este array para proporcionar contexto. |
security_result.rule_id |
security_result.rule_id |
Es establecido por la lógica del analizador, a menudo en type_name para eventos de llamada al sistema. |
security_result.severity |
security_result.severity |
Establecido por la lógica del analizador según el nivel de gravedad en el 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 está asignado al objeto IDM en la UDM. |
subj |
(Procesado) | El campo Asunto (subj ) se procesa para extraer información del contexto de seguridad y del usuario. |
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 |
La línea de comandos del proceso de destino. |
target.resource.type |
target.resource.type |
Es el tipo de recurso de destino que establece la lógica del analizador (p.ej., 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 |
Son los IDs de grupo asociados con el usuario objetivo. |
target.user.userid |
target.user.userid |
El ID de usuario del objetivo |
textPayload |
(Procesado) | Es la carga útil de texto del registro que el analizador procesa para extraer varios campos. |
timestamp |
metadata.event_timestamp |
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 |
principal.user.userid , target.user.userid |
El ID de usuario (uid ) se asigna a principal.user.userid o target.user.userid según el contexto. |
Cambios
2024-05-08
- Cuando el valor no es "?", se asigna "field" a "field33" en "security_result.detection_fields".
- Cuando “type_name” es “CRYPTO_KEY_USER”, se asigna “exe” a “principal.process.file.full_path”.
- Cuando "type_name" es "CRYPTO_KEY_USER", se asigna "fp" a "network.tls.client.certificate.sha256".
- Cuando "type_name" es "CRYPTO_KEY_USER", se asigna "pid" a "principal.process.pid".
- Se agregaron patrones de Grok para analizar un nuevo patrón de registros.
- Se asignó "syslog-tag" a "security_result.detection_fields".
- Se asignó "inter_ip" a "intermediary.ip".
- Se asignó "inter_hostname" a "intermediary.hostname".
2024-05-02
- Cuando "type_name" es "USER_MGMT", se asigna "grp" a "target.group.group_display_name".
- Cuando "type_name" es "USER_MGMT", se cambió la asignación de "uid" de "principal.user.userid" a "target.user.userid".
- Cuando "type_name" sea "USER_MGMT" y "op" sea igual a "deleting-user-from-group", establece "metadata.event_type" en "GROUP_MODIFICATION".
- Cuando "type_name" es "USER_MGMT", se cambió la asignación de "exe" de "target.process.file.full_path" a "principal.process.file.full_path".
- Cuando "type_name" es "USER_MGMT", se asigna "id" a "about.user.userid".
2024-04-08
- Cuando "type_name" sea "ADD_USER", principal_user_present sea "true", target_user_present sea "true" y has_principal sea "true", establece "metadata.event_type" en "USER_CREATION".
- Cuando "type_name" es "USER_AUTH", se asigna "acct" a "target.user.user_display_name".
- Cuando "type_name" es "USER_AUTH", se asigna "uid" a "principal.user.userid".
- Cuando "type_name" no está en "ADD_USER","USER_AUTH","CRED_ACQ" y "USER_MGMT", se asignó "auid" a "about.user.userid".
- Cuando "type_name" es "ADD_USER", se asigna "auid" a "target.user.userid".
- Cuando "type_name" es "ADD_USER" o "USER_AUTH", se asigna "exe" a "principal.process.file.full_path".
- Cuando "type_name" es "ADD_USER", se asignan "op" y "id" a "security_result.summary".
- Cuando "type_name" es "USER_AUTH", se asignan "op" y "acct" a "security_result.summary".
2024-03-22
- Se agregó compatibilidad con el nuevo patrón de registros JSON.
- Se asignaron "labels.compute.googleapis.com/resource_name","jsonPayload._HOSTNAME", "CollectorHostName", "HOSTNAME" y "Computer" a "principal.hostname".
- Se asignó “HostIP” a “principal.ip”.
- Se asignaron "ProcessID" y "jsonPayload._PID" a "principal.process.pid".
- Se asignó "SyslogMessage" a "metadata.description".
- Se asignaron "TenantId", "_ItemId", "_Internal_WorkspaceResourceId", "_ResourceId" y "Facility" a "additional.fields".
- Se asignó "SeverityLevel" a "security_result.severity".
- Se asignó "SourceSystem" a "principal.platform".
- Se asignó "jsonPayload._COMM" a "principal.application".
- Se asignó "jsonPayload._EXE" a "target.process.file.full_path".
- Se asignó "jsonPayload._AUDIT_FIELD_FILE" a "target.file.full_path".
- Se asignó "jsonPayload._AUDIT_FIELD_HASH" a "target.file.hash".
- Se asignó "jsonPayload._AUDIT_SESSION" a "network.session_id".
- Se asignó "jsonPayload._PPID" a "principal.process.parent_process.pid".
- Se asignaron "jsonPayload._AUDIT_FIELD_A0", "jsonPayload._AUDIT_FIELD_A1", "jsonPayload._AUDIT_FIELD_A2", "jsonPayload._AUDIT_FIELD_A3", "jsonPayload._BOOT_ID" y "jsonPayload._AUDIT_FIELD_EXIT" a "security_result.detection_fields".
2023-11-27
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_LOGIN".
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_LOGOUT".
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_CREATION".
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_DELETION".
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_UNCATEGORIZED".
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_RESOURCE_ACCESS".
- Se agregó una verificación de validación para garantizar que "principal_user_present", "target_user_present" o "has_principal" sea verdadero antes de establecer "metadata.event_type" en "USER_CHANGE_PERMISSIONS".
- Cuando los detalles del usuario están presentes y no los detalles de la máquina principal, se cambió la asignación de "metadata.event_type" de "USER_CREATION" a "USER_UNCATEGORIZED".
- Cuando los detalles del usuario están presentes y no los detalles de la máquina principal, se cambió la asignación de "metadata.event_type" de "USER_DELETION" a "USER_UNCATEGORIZED".
2023-09-06
- Se agregó la asignación de "CMD" a "target.process.command_line" para "cron daemon(CROND)".
2023-06-20
- Mejora: Se agregaron o modificaron las siguientes asignaciones cuando type="ADD_USER" y "DEL_USER":
- Se modificó la asignación de "uid" de "target.user.userid" a "principal.user.userid".
- Se asignó "id" a "target.user.userid".
- Se asignó "ID" a "target.user.user_display_name".
- Se modificó la asignación de "UID" de "principal.user.userid" a "principal.user.user_display_name".
- Se modificó la asignación de "acct" de "principal.user.user_display_name" a "target.user.user_display_name" y "target.user.userid".
2023-06-09
- Mejora: Se modificó "event_type" de "USER_LOGIN" a "USER_CREATION" cuando "type=ADD_USER".
2023-04-17
- Mejora
- Se agregó la función gsub para reemplazar el carácter "GS - Separador de grupos", que interrumpe la construcción JSON.
2023-04-10
- Mejora
- Se agregaron los campos "gid", "euid", "egid", "suid", "fsuid", "sgid", "fsgid", "tty" y "items" a security_result.detection_fields.
- Además, se asignó "gid" a "principal.user.group_identifiers".
- Se asignó "euid" a "target.user.userid".
- Se asignó "egid" a "target.user.group_identifiers".
2023-03-27
- Mejora: Se agregó compatibilidad con "jsonPayload" que contiene registros.
2023-02-28
- Se corrigió un error: Se mejoró el analizador para convertir una cadena codificada en hexadecimal a ASCII.
2023-02-09
- Mejora: Se modificó grok para los registros que contienen "type=PATH" para recuperar el nombre de host correcto de los registros.
2023-01-24
- Mejora:
- Se analizó el registro con eventType como "tac_plus".
- Se agregaron condiciones para asignar diferentes event_types "NETWORK_CONNECTION", "NETWORK_HTTP", "USER_LOGIN".
2022-12-02
- Mejora:
- Se asignó "user_name" a "principal.user.userid".
- Se agregó la verificación condicional para "dst_ip" y "dst_port".
2022-10-31
- Mejora:
- Se mejoró el analizador para analizar el registro con type=ADD_USER, USER_MGMT, DEL_USER.
- Se agregaron verificaciones nulas para "principal_hostname".
- Se agregaron verificaciones on_error para "principal.process.file.full_path", "type_syscall_props.key", "type_syscall_props.arch" y "msg2".
- Se agregaron verificaciones condicionales para asignar a event_type="FILE_OPEN", "USER_UNCATEGORIZED", "STATUS_UPDATE" y "USER_DELETION".
- Se asignó "principal_user_userid" a "principal.user.userid".
2022-11-16
- Mejora:
- Se mejoró "GENERIC_EVENT" a "STATUS_UPDATE" para los tipos de registros que contienen "Registros de acceso".
2022-10-14
- Mejora:
- Se migró el analizador de clientes al analizador predeterminado.
2022-10-13
- Mejora: Se asignó "vendor_name" a "Linux".
- Se asignó "product_name" a "AuditD".
- Se analizaron los registros que contienen "ProxySG" y se asignó "ip" a "target.ip" y "port" a "target.port" siempre que fue posible.
- Se modificó "event_type" de "GENERIC_EVENT" a "STATUS_UPDATE".
- Se modificó la asignación de "intermediary.hostname" a "principal.hostname".
2022-07-28
- Mejora:
- Se asignó el campo "auid" a "about.user.userid".
- Se asignó el campo "AUID" a "about.user.user_display_name".
- Se asignó el campo "proctitle" a "target.process.file.full_path".
- Se mejoró el analizador para analizar el registro con type=DAEMON_END, CRYPTO_SESSION, CONFIG_CHANGE, PROCTITLE, USER_ERR, CRYPTO_KEY_USER.
- Se agregó la verificación condicional para laddr, addr, cipher, pfs, direction, acct, pid, ppid, cmd, exe, ses.
2022-06-17
- Mejora: Se asignaron o modificaron los siguientes campos:
- Se cambió la asignación de "auid" de "security_result.about.user.userid" a "about.user.userid".
- Se cambió "event_type" para type=SYSCALL de "SYSTEM_AUDIT_LOG_UNCATEGORIZED" a "USER_UNCATEGORIZED".
- Se asignó "success" a "security_result.summary".
- Se asignaron "syscall", "exit", "tty", "a0", "a1", "a2" y "a3" a "security_result.about.labels".
- Se descartaron los registros en formato ASCII.
2022-06-14
- mejora
- Se mejoró el analizador para analizar el tipo de registros USER_CMD.
- Se asignó el campo "cmd" a "principal.process.command_line".
- Se asignó el campo "ses" a "network.session_id".
- Se asignó el campo "res" a "security_result.action" y "security_result.action_details".
- Se asignaron los campos "auid" y "cwd" a "security_result.detection_fields".
2022-04-26
- mejora
- Se aumentó el porcentaje de análisis a través del análisis de todos los registros sin analizar.