10.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 valorSYSCALL
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.
-
un sello de tiempo y un ID único del registro en la forma
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 comandoausearch
, utilice la opción-i
o--interpret
para convertir automáticamente los valores hexadecimales en sus equivalentes legibles para el ser humano. El valorc000003e
se interpreta comox86_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 sistemaopen
. Tenga en cuenta que la utilidadausyscall
le permite convertir los números de las llamadas al sistema en sus equivalentes legibles para el ser humano. Utilice el comandoausyscall --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 manualausyscall
(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
aa3
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 utilidadausearch
. 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 comobash
. pid=3538
-
El campo
pid
registra el ID del proceso (PID). En este caso,3538
era el PID del procesocat
. 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 comandosu - 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 comandoausearch -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 comandocat
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
esCWD
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
esPATH
. Un evento de Auditoría contiene un registro de tipoPATH
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 tipoSYSCALL
, se trata el registro actual. Este número está basado en cero; un valor de0
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 inodo409248
:# 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 comandostat
en el campost_mode
. Consulte la página de manualstat(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 valorPROCTITLE
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 comandoausearch
, utilice la opción-i
o--interpret
para convertir automáticamente los valores hexadecimales en sus equivalentes legibles para el ser humano. El valor636174002F6574632F7373682F737368645F636F6E666967
se interpreta comocat /etc/ssh/sshd_config
.