Nota:
- Este tutorial está disponible en un entorno de laboratorio gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por valores específicos de su entorno en la nube.
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:
- 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 Oracle Linux 8 instalado con la siguiente configuración:
- un usuario no raíz con permisos
sudo
- un usuario no raíz con permisos
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 comandoservice
garantiza la grabación del valorauid
. Utilice el comandosystemctl
solo con las accionesenable
ystatus
.
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 servicioauditd
. Un valorpid
de0
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:
-w
: crea un reloj en la ruta especificada.-p
: define los permisos [read,write,execute,attribute] que disparan el reloj.-k
: define un filtro de clave que identifica de forma única los registros de auditoría producidos por una regla.
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.