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"
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
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
...
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
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
sudo auditctl -e 0 # desactivado
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
## 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
## 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
tail /var/log/audit/audit.log
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>. |
a0–a3 |
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
service).
service auditd restart