Recopila registros de auditoría de Linux y de sistemas AIX

Compatible con:

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

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia.

Obtén el ID de cliente de Google SecOps

  1. Accede a 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.

Instala el agente de BindPlane

  1. 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
  2. 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
  3. 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

  1. Accede a la máquina en la que está instalado 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: auditd
            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 con el siguiente comando: sudo systemctl bindplane restart

Cómo exportar Syslog desde Auditd

  1. Accede a la máquina desde la que deseas exportar los registros de auditoría.
  2. Abre el archivo de configuración de Auditd (por lo general, se encuentra en /etc/audit/auditd.conf).

    sudo vi /etc/audit/auditd.conf
    
  3. 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
```
  1. 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
    
  2. Busca o agrega las siguientes líneas para configurar audispd:

    active = yes
    direction = out
    path = builtin_syslog
    type = builtin
    args = LOG_INFO
    format = string
    
  3. Reinicia el servicio de Auditd para aplicar los cambios:

    sudo systemctl restart auditd
    
  4. 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)
    
  5. Edita el rsyslog.conf o crea una configuración personalizada:

    sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
    
  6. 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.
  7. 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.