Nota:

Auditoría de Oracle Linux con Auditd

Introducción

Auditd es un daemon del sistema de espacio de usuario que se ejecuta en segundo plano y genera logs sobre diferentes actividades realizadas en Oracle Linux.

Este tutorial le guiará a través de la instalación, la configuración y el uso de auditd.

Objetivos

En este laboratorio, aprenderá a:

Requisitos

Instalación del paquete de auditoría

Nota: Al utilizar el entorno de prácticas gratuitas, consulte Aspectos básicos de las prácticas de Oracle Linux para obtener información sobre la conexión y otras instrucciones de uso.

Oracle Linux instala el paquete de auditoría por defecto.

Si aún no está conectado, abra un terminal y conéctese mediante ssh al sistema ol8-server.

ssh oracle@<ip_address_of_ol8-server>

Compruebe si el sistema preinstaló el paquete audit.

sudo dnf list installed "audit"

Si no está en el sistema, instálelo.

sudo dnf install -y audit

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

Gestión del servicio de auditoría

Una vez que se instale el paquete de auditoría, inicie el servicio auditd. Primero, compruebe el estado actual.

sudo systemctl status auditd

Resultado de ejemplo:

[oracle@ol8-server ~]$ sudo systemctl status auditd
* auditd.service - Security Auditing Service
   Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres>
   Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago
     Docs: man:auditd(8)
           https://github.com/linux-audit/audit-documentation
 Main PID: 1385 (auditd)
    Tasks: 2 (limit: 100140)
   Memory: 2.5M
   CGroup: /system.slice/auditd.service
           `-1385 /sbin/auditd

Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser>
lines 1-21/21 (END)

La salida muestra que el servicio es (running) y enabled.

El estado enabled indica que configuramos el servicio para que se inicie en el momento del inicio. Si no es así, inicie el servicio como usuario root para recopilar información de auditoría y escribirla en los logs.

Inicie el servicio.

sudo service auditd start

Configure auditd para que se inicie en el momento del inicio.

sudo systemctl enable auditd

Nota: La forma única de interactuar correctamente con el daemon auditd utiliza el comando service.

El comando service garantiza la grabación del valor auid. Utilice el comando systemctl solo con las acciones enable y status.

Activación y desactivación temporales de la auditoría

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

Resultado de ejemplo:

[oracle@ol8-server ~]$ sudo auditctl -s
enabled 1
failure 1
pid 1399
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked

Desactive temporalmente auditd.

sudo auditctl -e 0

Vuelva a activar auditd.

sudo auditctl -e 1

Nota: pid muestra el ID de proceso de servicio auditd. Un valor pid de 0 indica que el servicio no se está ejecutando.

El indicador de activación auditctl -e también acepta un valor de 2, que bloquea la configuración de auditoría.

Si la configuración de auditoría está bloqueada de esta manera, es necesario reiniciar para desbloquearla. Puede encontrar más detalles en man auditctl.

Localizar registros y reglas de auditoría

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

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

sudo cat /etc/audit/audit.rules
sudo cat /etc/audit/rules.d/audit.rules

Resultado de ejemplo:

## 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 con la utilidad de control 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.

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config

Donde:

Muestre la regla.

sudo auditctl -l

Las nuevas reglas se agregan a la parte inferior de la lista, pero también es posible agregarlas a la parte superior.

Compruebe si la nueva regla se ha agregado al archivo /etc/audit/audit.rules.

sudo cat /etc/audit/audit.rules

Resultado de ejemplo:

[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

La regla no aparece en el archivo. ¿Por qué no?

Las reglas creadas por auditctl no se agregan al archivo audit.rules. Por lo tanto, estos cambios son transitorios y no sobreviven a un reinicio del sistema.

Convierta la regla en permanente agregándola a un archivo de juego de reglas personalizado en /etc/audit/rules.d/my.rules. El formato de la regla agregada coincide con la sintaxis del comando auditctl sin utilizar auditctl. Las reglas se deben escribir por línea y combinarse para optimizar el rendimiento.

sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF

Muestre la regla.

sudo cat /etc/audit/rules.d/my.rules

Pruebe la regla.

cat /etc/ssh/sshd_config

El comando devuelve cat: /etc/ssh/sshd_config: Permission denied y genera el siguiente evento en audit.log.

sudo cat /var/log/audit/audit.log | grep sshd_config

Resultado de ejemplo:

type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" 
UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle"
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0OUID="root" OGID="root"

Buscar logs de auditoría

Otra forma de buscar los logs es utilizar el comando ausearch.

Obtenga la misma información con este comando.

sudo ausearch --key sshd_config

Resultado de ejemplo:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
time->Sat Apr  2 17:02:03 2022
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1
----
time->Sat Apr  2 18:19:43 2022
type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0
type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"

La salida de ausearch es más fácil de utilizar y leer en función del formato de salida. Podemos agregar la facilidad de lectura del log agregando la opción -i o --interpret. Esta opción interpreta las entidades numéricas en texto, como la conversión de uid en un nombre de cuenta.

sudo ausearch -i -k sshd_config

Resultado de ejemplo:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes 
----
type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config 
type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 
mode=file,600 ouid=root ogid=root 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 cap_frootid=0 
type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle 
type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission 
denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle 
gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/
usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config 

Para obtener más opciones de formato y formas de buscar en audit.log, consulte man ausearch.

Cargar reglas preconfiguradas

Oracle Linux proporciona un script que fusiona todos los archivos de reglas de auditoría de componentes que se encuentran en /etc/audit/rules.d. Después de la fusión, el nuevo archivo sustituye el /etc/audit/audit.rules existente. Esta secuencia de comandos está incorporada en el archivo de servicio auditd y se ejecuta cuando se inicia el servicio.

Compruebe si hay cambios de regla existentes para cargar.

sudo augenrules --check

Los estados de salida, Rules have changed and should be updated. Este cambio se debe a nuestro archivo my.rules creado anteriormente, ubicado en /etc/audit/rules.d.

Suprima la regla personalizada sshd_config agregada anteriormente para realizar un seguimiento sencillo de las nuevas adiciones de reglas.

sudo auditctl -D -k sshd_config

Fusione el archivo de reglas personalizadas my.rules.

sudo augenrules --load

Resultado de ejemplo:

[oracle@ol8-server ~]$ sudo augenrules --load
No rules
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000

Compruebe las reglas de auditoría activas.

sudo auditctl -l

Resultado de ejemplo:

[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l
-w /etc/ssh/sshd_config -p rwxa -k sshd_config

Agregue reglas adicionales a un nuevo archivo, new.rules.

Nota: Sólo augenrules lee y carga los archivos que terminan en .rules.

sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF

Cargue las nuevas reglas.

sudo augenrules --load

Vuelva a comprobar las reglas activas.

sudo auditctl -l

Las nuevas reglas se cargan y fusionan en el archivo audit.rules.

sudo cat /etc/audit/audit.rules

El sistema realizó una copia de seguridad del archivo /etc/audit/audit.rules.prev como parte de la fusión.

sudo ls -l /etc/audit

La información proporcionada por el sistema de auditoría de Oracle Linux ayuda con la detección de intrusiones.

Consulte las páginas man para ver las utilidades mostradas. A continuación, utilice lo aprendido para agregar reglas de auditoría personalizadas al sistema para eventos de registro específicos.

Para obtener más información

Ver otros recursos relacionados:

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.