Red Hat Training

A Red Hat training course is available for RHEL 8

37.5. Comprensión de los archivos de registro de auditoría

Por defecto, el sistema de Auditoría almacena las entradas de registro en el archivo /var/log/audit/audit.log; si se activa la rotación de registros, los archivos audit.log rotados se almacenan en el mismo directorio.

Añada la siguiente regla de auditoría para registrar cada intento de lectura o modificación del archivo /etc/ssh/sshd_config:

# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config

Si el demonio auditd se está ejecutando, por ejemplo, el siguiente comando crea un nuevo evento en el archivo de registro de auditoría:

$ cat /etc/ssh/sshd_config

Este evento en el archivo audit.log tiene el siguiente aspecto:

type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287):  cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0  nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967

El evento anterior consta de cuatro registros, que comparten el mismo sello de tiempo y número de serie. Los registros siempre comienzan con la palabra clave type=. Cada registro consta de varios name=value pares separados por un espacio en blanco o una coma. A continuación se presenta un análisis detallado del suceso anterior:

Primer disco

type=SYSCALL
El campo type contiene el tipo de registro. En este ejemplo, el valor SYSCALL especifica que este registro fue activado por una llamada del sistema al kernel.
msg=audit(1364481363.243:24287):

El campo msg registra:

  • un sello de tiempo y un ID único del registro en la forma audit(time_stamp:ID). Varios registros pueden compartir la misma marca de tiempo e ID si se generaron como parte del mismo evento de auditoría. El sello de tiempo utiliza el formato de tiempo Unix - segundos desde las 00:00:00 UTC del 1 de enero de 1970.
  • varios pares de eventos específicos name=value proporcionados por el kernel o las aplicaciones del espacio de usuario.
arch=c000003e
El campo arch contiene información sobre la arquitectura de la CPU del sistema. El valor, c000003e, está codificado en notación hexadecimal. Cuando busque registros de auditoría con el comando ausearch, utilice la opción -i o --interpret para convertir automáticamente los valores hexadecimales en sus equivalentes legibles para el ser humano. El valor c000003e se interpreta como x86_64.
syscall=2
El campo syscall registra el tipo de llamada al sistema que se envió al kernel. El valor, 2, puede ser comparado con su equivalente legible por humanos en el archivo /usr/include/asm/unistd_64.h. En este caso, 2 es la llamada al sistema open. Tenga en cuenta que la utilidad ausyscall le permite convertir los números de las llamadas al sistema en sus equivalentes legibles para el ser humano. Utilice el comando ausyscall --dump para mostrar un listado de todas las llamadas al sistema junto con sus números. Para más información, consulte la página de manual ausyscall(8).
success=no
El campo success registra si la llamada al sistema registrada en ese evento concreto tuvo éxito o fracasó. En este caso, la llamada no tuvo éxito.
exit=-13

El campo exit contiene un valor que especifica el código de salida devuelto por la llamada al sistema. Este valor varía según la llamada al sistema. Puede interpretar el valor a su equivalente legible para humanos con el siguiente comando:

# ausearch --interpret --exit -13

Tenga en cuenta que el ejemplo anterior asume que su registro de auditoría contiene un evento que falló con el código de salida -13.

a0=7fffd19c5592, a1=0, a2=7fffd19c5592, a3=a
Los campos a0 a a3 registran los cuatro primeros argumentos, codificados en notación hexadecimal, de la llamada al sistema en este evento. Estos argumentos dependen de la llamada al sistema que se utilice; pueden ser interpretados por la utilidad ausearch.
items=1
El campo items contiene el número de registros auxiliares PATH que siguen al registro syscall.
ppid=2686
El campo ppid registra el ID del proceso padre (PPID). En este caso, 2686 era el PPID del proceso padre como bash.
pid=3538
El campo pid registra el ID del proceso (PID). En este caso, 3538 era el PID del proceso cat.
auid=1000
El campo auid registra el ID de usuario de la auditoría, es decir, el loginuid. Este ID se asigna a un usuario al iniciar la sesión y es heredado por todos los procesos, incluso cuando la identidad del usuario cambia, por ejemplo, al cambiar de cuenta de usuario con el comando su - john.
uid=1000
El campo uid registra el ID del usuario que inició el proceso analizado. El ID de usuario puede ser interpretado en nombres de usuario con el siguiente comando ausearch -i --uid UID.
gid=1000
El campo gid registra el ID del grupo del usuario que inició el proceso analizado.
euid=1000
El campo euid registra el ID de usuario efectivo del usuario que inició el proceso analizado.
suid=1000
En el campo suid se registra el ID del usuario que inició el proceso analizado.
fsuid=1000
El campo fsuid registra el ID de usuario del sistema de archivos del usuario que inició el proceso analizado.
egid=1000
El campo egid registra el ID de grupo efectivo del usuario que inició el proceso analizado.
sgid=1000
En el campo sgid se registra el ID del grupo del usuario que inició el proceso analizado.
fsgid=1000
El campo fsgid registra el ID del grupo del sistema de archivos del usuario que inició el proceso analizado.
tty=pts0
El campo tty registra el terminal desde el que se invocó el proceso analizado.
ses=1
El campo ses registra el ID de la sesión desde la que se invocó el proceso analizado.
comm="cat"
El campo comm registra el nombre de la línea de comandos que se utilizó para invocar el proceso analizado. En este caso, se utilizó el comando cat para activar este evento de Auditoría.
exe="/bin/cat"
El campo exe registra la ruta del ejecutable que se utilizó para invocar el proceso analizado.
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
El campo subj registra el contexto SELinux con el que el proceso analizado fue etiquetado en el momento de la ejecución.
key="sshd_config"
El campo key registra la cadena definida por el administrador asociada a la regla que generó este evento en el registro de auditoría.

Segundo disco

type=CWD

En el segundo registro, el valor del campo type es CWD

El propósito de este registro es registrar la ubicación del proceso actual en caso de que una ruta relativa termine siendo capturada en el registro PATH asociado. De esta manera se puede reconstruir la ruta absoluta.

msg=audit(1364481363.243:24287)
El campo msg contiene la misma marca de tiempo y valor de identificación que el valor del primer registro. El sello de tiempo utiliza el formato de tiempo Unix - segundos desde las 00:00:00 UTC del 1 de enero de 1970.
cwd="/home/user_name"
El campo cwd contiene la ruta del directorio en el que se invocó la llamada al sistema.

Tercer disco

type=PATH
En el tercer registro, el valor del campo type es PATH. Un evento de Auditoría contiene un registro de tipo PATH para cada ruta que se pasa a la llamada del sistema como un argumento. En este evento de auditoría, sólo se utilizó una ruta (/etc/ssh/sshd_config) como argumento.
msg=audit(1364481363.243:24287):
El campo msg contiene el mismo sello de tiempo y valor de identificación que el valor del primer y segundo registro.
item=0
El campo item indica de qué artículo, del total de artículos referenciados en el registro de tipo SYSCALL, se trata el registro actual. Este número está basado en cero; un valor de 0 significa que es el primer elemento.
name="/etc/ssh/sshd_config"
El campo name registra la ruta del archivo o directorio que se pasó a la llamada del sistema como argumento. En este caso, fue el archivo /etc/ssh/sshd_config.
inode=409248

El campo inode contiene el número de inodo asociado al archivo o directorio registrado en este evento. El siguiente comando muestra el archivo o directorio que está asociado con el número de inodo 409248:

find / -inum 409248 -print
/etc/ssh/sshd_config
dev=fd:00
El campo dev especifica el ID menor y mayor del dispositivo que contiene el archivo o directorio registrado en este evento. En este caso, el valor representa el dispositivo /dev/fd/0.
mode=0100600
El campo mode registra los permisos de los archivos o directorios, codificados en notación numérica tal y como los devuelve el comando stat en el campo st_mode. Consulte la página de manual stat(2) para obtener más información. En este caso, 0100600 puede interpretarse como -rw-------, lo que significa que sólo el usuario root tiene permisos de lectura y escritura en el archivo /etc/ssh/sshd_config.
ouid=0
El campo ouid registra el ID de usuario del propietario del objeto.
ogid=0
El campo ogid registra el ID del grupo del propietario del objeto.
rdev=00:00
El campo rdev contiene un identificador de dispositivo grabado sólo para archivos especiales. En este caso, no se utiliza ya que el archivo grabado es un archivo normal.
obj=system_u:object_r:etc_t:s0
El campo obj registra el contexto SELinux con el que el archivo o directorio registrado fue etiquetado en el momento de la ejecución.
nametype=NORMAL
El campo nametype registra la intención de la operación de cada registro de ruta en el contexto de una determinada syscall.
cap_fp=none
El campo cap_fp registra datos relacionados con la configuración de una capacidad permitida basada en el sistema de archivos del objeto de archivo o directorio.
cap_fi=none
El campo cap_fi registra datos relacionados con la configuración de una capacidad heredada basada en el sistema de archivos del objeto de archivo o directorio.
cap_fe=0
El campo cap_fe registra la configuración del bit efectivo de la capacidad basada en el sistema de archivos del objeto de archivo o directorio.
cap_fver=0
El campo cap_fver registra la versión de la capacidad basada en el sistema de archivos del objeto de archivo o directorio.

Cuarto disco

type=PROCTITLE
El campo type contiene el tipo de registro. En este ejemplo, el valor PROCTITLE especifica que este registro da la línea de comandos completa que desencadenó este evento de Auditoría, desencadenado por una llamada del sistema al kernel.
proctitle=636174002F6574632F7373682F737368645F636F6E666967
El campo proctitle registra la línea de comandos completa del comando que se utilizó para invocar el proceso analizado. El campo está codificado en notación hexadecimal para no permitir que el usuario influya en el analizador del registro de Auditoría. El texto se decodifica al comando que desencadenó este evento de Auditoría. Al buscar registros de Auditoría con el comando ausearch, utilice la opción -i o --interpret para convertir automáticamente los valores hexadecimales en sus equivalentes legibles para el ser humano. El valor 636174002F6574632F7373682F737368645F636F6E666967 se interpreta como cat /etc/ssh/sshd_config.