Skip to content

Auditoría de Linux con Auditd

Referencia: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/auditing-the-system_security-hardening#understanding-audit-log-files_auditing-the-system

Introducción

Auditd es un daemon que se ejecuta en segundo plano y genera logs sobre diferentes actividades realizadas en el sistema operativo de Linux.

Objetivos

En este laboratorio, aprenderá a:

  • Instalar los paquetes de auditoría
  • Gestionar el servicio de auditoría
  • Crear reglas de auditoría
  • Buscar en los logs de auditoría

Requisitos

  • Un sistema con Red Hat Enterprise Linux instalado
  • Un usuario con permisos sudo

Instalación del paquete de auditoría (realizar en student-X-servera)

Compruebe que el paquete está instalado.

sudo dnf list installed "audit"
De lo contrario instalarlo.
sudo dnf install -y audit

El archivo de configuración predeterminado se encuentra en /etc/audit/auditd.conf.

Gestión del servicio de auditoría

Inicie el servicio auditd.

Compruebe el estado actual.

sudo systemctl status auditd
Salida:
Redirecting to /bin/systemctl status auditd.service
● auditd.service - Security Auditing Service
     Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; preset: enabled)
     Active: active (running) since Wed XXX-XX-XX 19:27:47 UTC; 2h 42min ago
       Docs: man:auditd(8)
             https://github.com/linux-audit/audit-documentation
   Main PID: 601 (auditd)
      Tasks: 4 (limit: 23117)
     Memory: 7.8M
        CPU: 127ms
     CGroup: /system.slice/auditd.service
             ├─601 /sbin/auditd
             └─603 /usr/sbin/sedispatch

...
La salida muestra que el servicio está running y enabled.

Inicie y active el servicio.

sudo service auditd start
sudo systemctl enable auditd

Activación y desactivación temporales

La utilidad de control de auditoría, auditctl, interactúa con el componente de auditoría del núcleo para gestionar reglas y controlar muchos valores y parámetros del proceso de generación de eventos.

Compruebe el estado del subsistema de auditoría del núcleo.

sudo auditctl -s
Salida ejemplo:
    enabled 1
    failure 1
    pid 601
    rate_limit 0
    backlog_limit 8192
    lost 0
    backlog 0
    backlog_wait_time 60000
    backlog_wait_time_actual 0
    loginuid_immutable 0 unlocked
Desactive temporalmente auditd.
sudo auditctl -e 0  # desactivado
Active temporalmente auditd.
sudo auditctl -e 1  # activado

Operaciones auditd (utilice el comando service):

Comando Descripción
service auditd stop Detiene el servicio auditd.
service auditd restart Reinicia el servicio auditd.
service auditd reload o service auditd force-reload Recarga la configuración desde el archivo /etc/audit/auditd.conf.
service auditd rotate Rota los archivos de log ubicados en el directorio /var/log/audit/.
service auditd resume Reanuda el registro de eventos de auditoría si fue suspendido, por ejemplo por falta de espacio en disco.
service auditd condrestart o service auditd try-restart Reinicia auditd solo si ya se está ejecutando.
service auditd status Muestra el estado actual del servicio auditd.

Localizar registros y reglas

Por defecto, Red Hat Enterprise Linux almacena los logs de auditoría en /var/log/audit/audit.log.

Las reglas de auditoría se encuentran en /etc/audit/audit.rules. El sistema genera el juego de reglas por defecto del archivo /etc/audit/rules.d/audit.rules.

Consultar las reglas por defecto.

sudo cat /etc/audit/audit.rules # Reglas generadas del archivo /etc/audit/rules.d/audit.rules
Salida:
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

Consultar configuración de reglas.

sudo cat /etc/audit/rules.d/audit.rules
Salida:
## First rule - delete all
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192

## This determine how long to wait in burst of events
--backlog_wait_time 60000

## Set failure mode to syslog
-f 1

Reglas de auditoría

Utilice el programa auditctl para controlar el comportamiento, obtener estado y agregar o suprimir reglas.

Agregue una regla de auditoría que registre cualquier intento de leer o modificar el archivo /etc/ssh/sshd_config.

Agregar una regla de monitoreo de sshd_config:

sudo -i
auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config
Opción Descripción
-w Crea un reloj (watch) en la ruta especificada.
-p Define los permisos que disparan el reloj: r (read), w (write), x (execute), a (attribute change).
-k Define un filtro de clave que identifica de forma única los registros de auditoría producidos por una regla.

Muestre las reglas.

auditctl -l

Generar un acceso al archivo Identificar el evento en el log de auditoria.

cat /var/log/audit/audit.log
Validar las últimas lineas del log.
tail /var/log/audit/audit.log
Observará 4 registros similares a:
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

Explorando el Registro

Primer registro

Campo Descripción
type=SYSCALL Indica que el registro fue generado por una llamada al sistema (syscall).
msg=audit(...) Contiene la marca de tiempo y un ID único del evento en formato audit(timestamp:ID). Puede ser compartido entre varios registros relacionados.
arch Arquitectura de CPU en hexadecimal. c000003e equivale a x86_64. Puede interpretarse con ausearch -i.
syscall Número de syscall enviada al kernel. Ej. 2 = open. Puede traducirse con ausyscall --dump.
success Indica si la syscall fue exitosa (yes) o fallida (no).
exit Código de salida de la syscall. Puede analizarse con ausearch --interpret --exit <valor>.
a0a3 Primeros cuatro argumentos de la syscall en notación hexadecimal. Interpretables según la syscall específica.
items Número de registros PATH asociados que siguen a este SYSCALL.
ppid ID del proceso padre (ej. bash).
pid ID del proceso actual (ej. cat).
auid ID de auditoría (loginuid). Se asigna al iniciar sesión y se mantiene, incluso si se cambia de usuario.
uid ID de usuario que inició el proceso. Puede convertirse a nombre con ausearch -i --uid <uid>.
gid ID de grupo del usuario que inició el proceso.
euid ID de usuario efectivo.
suid ID de usuario seteado (set-user-ID).
fsuid ID de usuario en el sistema de archivos.
egid ID de grupo efectivo.
sgid ID de grupo seteado.
fsgid ID de grupo en el sistema de archivos.
tty Terminal desde la que se invocó el proceso (ej. pts0).
ses ID de sesión desde la cual se invocó el proceso.
comm Nombre del comando usado para invocar el proceso (ej. cat).
exe Ruta del ejecutable usado para invocar el proceso (ej. /bin/cat).
subj Contexto SELinux del proceso en el momento de su ejecución.
key Clave definida por el administrador, asociada a la regla de auditoría que generó este evento.

Nota: Las reglas creadas con auditctl son temporales. Para hacerlas permanentes, agréguelas a un archivo .rules en /etc/audit/rules.d/.

Segundo registro

Campo Descripción
type=CWD Indica que el tipo de registro es CWD (Current Working Directory). Se usa para registrar el directorio desde donde se ejecutó la llamada al sistema.
msg=audit(...) Marca de tiempo e ID del evento, igual que en el primer registro. Utiliza formato de tiempo Unix (epoch).
cwd Ruta del directorio de trabajo actual desde donde se invocó la llamada al sistema (ejemplo: /home/user_name).

Tercer registro

Campo Descripción
type=PATH Tipo de registro que indica una ruta (archivo o directorio) pasada como argumento a la llamada del sistema.
msg=audit(...) Marca de tiempo e ID del evento, igual que en los registros anteriores.
item Índice del ítem dentro del conjunto de ítems referenciados por la syscall (0 indica el primero).
name Ruta del archivo o directorio pasado a la syscall (ej. /etc/ssh/sshd_config).
inode Número de inodo del archivo. Puede identificarse el archivo con: find / -inum <inode>.
dev ID mayor y menor del dispositivo que contiene el archivo (fd:00 en este caso representa /dev/fd/0).
mode Permisos del archivo codificados en octal (0100600 = -rw-------). Solo root tiene permisos de lectura y escritura.
ouid UID del propietario del objeto (archivo o directorio).
ogid GID del grupo propietario del objeto.
rdev Identificador de dispositivo para archivos especiales. En este caso no se usa, ya que es un archivo regular.
obj Contexto SELinux del archivo o directorio registrado.
nametype Intención de la operación sobre la ruta (ej. NORMAL).
cap_fp Capacidad permitida del sistema de archivos asociada al objeto (none si no aplica).
cap_fi Capacidad heredada del sistema de archivos (none si no aplica).
cap_fe Bit de efectividad de la capacidad del sistema de archivos (0 si no se activa).
cap_fver Versión de la capacidad del sistema de archivos (0 si no aplica).

Cuarto registro

Campo Descripción
type=PROCTITLE Tipo de registro que proporciona la línea de comando completa que disparó el evento de auditoría, generada por una llamada al sistema (syscall).
proctitle Contiene la línea de comando completa en notación hexadecimal (ej. 636174002F6574632F7373682F737368645F636F6E666967). Se traduce a cat /etc/ssh/sshd_config.

Reglas permanentes

Para hacer la misma regla permanente, debe agregar el siguiente texto al archivo /etc/audit/rules.d/sshd_config.rules.

echo "-w /etc/ssh/sshd_config -p rwxa -k sshd_config" | sudo tee /etc/audit/rules.d/sshd_config.rules
Reiniciar el servicio (recuerde utilizar service).
service auditd restart