GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ejemplo simple de configuración auditada?

Auditd es una herramienta de monitoreo extraordinariamente poderosa. Como puede atestiguar cualquiera que lo haya visto alguna vez, la facilidad de uso es la principal debilidad. Configurar algo como auditd requiere mucho pensamiento bastante profundo sobre exactamente qué es lo que necesita una auditoría en el sistema específico en cuestión. En la pregunta, se decidió por un servidor web como nuestro sistema de ejemplo, lo cual es bueno porque es específico.

En aras del argumento, supongamos que existe una división formal entre los servidores web de prueba/desarrollo y los servidores web de producción donde los desarrolladores web hacen todo su trabajo en los sistemas de prueba/desarrollo y los cambios en el entorno de producción se realizan en una implementación controlada.

Entonces, haciendo esas suposiciones bastante grandes y centrándonos en el sistema de producción, podemos ponernos manos a la obra. Mirando la recomendación auditada en el punto de referencia CIS para RHEL5, podemos comenzar a desarrollar el siguiente conjunto de reglas sugerido:

-a exit,always -S unlink -S rmdir
-a exit,always -S stime.*
-a exit,always -S setrlimit.*
-w /etc/group -p wa 
-w /etc/passwd -p wa 
-w /etc/shadow -p wa 
-w /etc/sudoers -p wa
-b 1024
-e 2

Esto hará que los registros se escriban cada vez que salgan las llamadas al sistema rmdir, unlink, stime o setrlimit. Esto debería permitirnos saber si alguien intenta eliminar archivos o jugar con los tiempos. También configuramos controles de archivos específicos en los archivos que definen grupos, usuarios, contraseñas y acceso a sudo. En lugar de mirar las llamadas al sistema para cada uno de esos registros de auditoría, se escribirá cada vez que uno de esos archivos sea:

  1. abierto con los modos O_WRONLY u O_RDWR
  2. se cambia un atributo

Como ya asumimos que estamos hablando de un servidor web de producción, recomendaría agregar la línea:

-w /var/www -p wa

Esto observará recursivamente todos los archivos bajo el /var/www árbol de directorios.

Ahora podemos ver la razón de la suposición de "ambiente controlado" hecha anteriormente. Entre el monitoreo de todos los archivos en la raíz web, así como todos los eventos de desvinculación o rmdir, esto podría ser prohibitivamente ruidoso en un entorno de desarrollo. Si podemos anticipar los cambios en el sistema de archivos, como durante las ventanas de mantenimiento o los eventos de implementación, podemos filtrar este ruido de manera más razonable.

Combinando todo esto en un solo archivo coherente, querríamos /etc/audit/audit.rules parecerse

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

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

-a exit,always -S unlink -S rmdir
-a exit,always -S stime.*
-a exit,always -S setrlimit.*
-w /var/www -p wa
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow -p wa
-w /etc/sudoers -p wa

# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2

Actualización:este artículo es una buena explicación de las reglas de auditoría y brinda ejemplos para cada evento que desee registrar:

CÓMO_configurar_la_auditoría_del_sistema_auditoría

Consulte el informe de errores aquí:

https://github.com/gds-operations/puppet-auditd/pull/1

Proporcionan un archivo de ejemplo muy largo que contiene muchos cambios importantes que se pueden realizar en un sistema. Copiado a continuación para mayor comodidad (con ligeras modificaciones):

## Remove any existing rules
-D

## Buffer Size
## Feel free to increase this if the machine panic's
-b 8192

## Failure Mode
## Possible values are 0 (silent), 1 (printk, print a failure message),
## and 2 (panic, halt the system).
-f 1

## Audit the audit logs.
## successful and unsuccessful attempts to read information from the
## audit records; all modifications to the audit trail
-w /var/log/audit/ -k auditlog

## Auditd configuration
## modifications to audit configuration that occur while the audit
## collection functions are operating.
-w /etc/audit/ -p wa -k auditconfig
-w /etc/libaudit.conf -p wa -k auditconfig
-w /etc/audisp/ -p wa -k audispconfig

## Monitor for use of audit management tools
-w /sbin/auditctl -p x -k audittools
-w /sbin/auditd -p x -k audittools

## special files
-a exit,always -F arch=b32 -S mknod -S mknodat -k specialfiles
-a exit,always -F arch=b64 -S mknod -S mknodat -k specialfiles

## Mount operations
-a exit,always -F arch=b32 -S mount -S umount -S umount2 -k mount
-a exit,always -F arch=b64 -S mount -S umount2 -k mount

## changes to the time
##
-a exit,always -F arch=b32 -S adjtimex -S settimeofday -S stime -S clock_settime -k time
-a exit,always -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time

## Use stunnel
-w /usr/sbin/stunnel -p x -k stunnel

## cron configuration & scheduled jobs
-w /etc/cron.allow -p wa -k cron
-w /etc/cron.deny -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /etc/cron.daily/ -p wa -k cron
-w /etc/cron.hourly/ -p wa -k cron
-w /etc/cron.monthly/ -p wa -k cron
-w /etc/cron.weekly/ -p wa -k cron
-w /etc/crontab -p wa -k cron
-w /var/spool/cron/crontabs/ -k cron

## user, group, password databases
-w /etc/group -p wa -k etcgroup
-w /etc/passwd -p wa -k etcpasswd
-w /etc/gshadow -k etcgroup
-w /etc/shadow -k etcpasswd
-w /etc/security/opasswd -k opasswd

## monitor usage of passwd
-w /usr/bin/passwd -p x -k passwd_modification

#Monitor for use of tools to change group identifiers
-w /usr/sbin/groupadd -p x -k group_modification
-w /usr/sbin/groupmod -p x -k group_modification
-w /usr/sbin/addgroup -p x -k group_modification
-w /usr/sbin/useradd -p x -k user_modification
-w /usr/sbin/usermod -p x -k user_modification
-w /usr/sbin/adduser -p x -k user_modification

## login configuration and information
-w /etc/login.defs -p wa -k login
-w /etc/securetty -p wa -k login
-w /var/log/faillog -p wa -k login
-w /var/log/lastlog -p wa -k login
-w /var/log/tallylog -p wa -k login

## network configuration
-w /etc/hosts -p wa -k hosts
-w /etc/network/ -p wa -k network

## system startup scripts
-w /etc/inittab -p wa -k init
-w /etc/init.d/ -p wa -k init
-w /etc/init/ -p wa -k init

## library search paths
-w /etc/ld.so.conf -p wa -k libpath

## local time zone
-w /etc/localtime -p wa -k localtime

## kernel parameters
-w /etc/sysctl.conf -p wa -k sysctl

## modprobe configuration
-w /etc/modprobe.conf -p wa -k modprobe

## pam configuration
-w /etc/pam.d/ -p wa -k pam
-w /etc/security/limits.conf -p wa  -k pam
-w /etc/security/pam_env.conf -p wa -k pam
-w /etc/security/namespace.conf -p wa -k pam
-w /etc/security/namespace.init -p wa -k pam

## GDS specific secrets
-w /etc/puppet/ssl -p wa -k puppet_ssl

## postfix configuration
-w /etc/aliases -p wa -k mail
-w /etc/postfix/ -p wa -k mail

## ssh configuration
-w /etc/ssh/sshd_config -k sshd

## changes to hostname
-a exit,always -F arch=b32 -S sethostname -k hostname
-a exit,always -F arch=b64 -S sethostname -k hostname

## changes to issue
-w /etc/issue -p wa -k etcissue
-w /etc/issue.net -p wa -k etcissue

## this was to noisy currently.
# log all commands executed by an effective id of 0 aka root.
-a exit,always -F arch=b64 -F euid=0 -S execve -k rootcmd
-a exit,always -F arch=b32 -F euid=0 -S execve -k rootcmd

## Capture all failures to access on critical elements
-a exit,always -F arch=b64 -S open -F dir=/etc -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/bin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/sbin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/usr/bin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/usr/sbin -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/var -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/home -F success=0 -k unauthedfileacess
-a exit,always -F arch=b64 -S open -F dir=/srv -F success=0 -k unauthedfileacess

## Monitor for use of process ID change (switching accounts) applications
-w /bin/su -p x -k priv_esc
-w /usr/bin/sudo -p x -k priv_esc
-w /etc/sudoers -p rw -k priv_esc

## Monitor usage of commands to change power state
-w /sbin/shutdown -p x -k power
-w /sbin/poweroff -p x -k power
-w /sbin/reboot -p x -k power
-w /sbin/halt -p x -k power

## Make the configuration immutable
-e 2

Te estás acercando un poco a la pregunta de la manera incorrecta. Debe decidir qué desea registrar y averiguar cómo hacerlo. Generar un montón de archivos de registro es genial y todo eso, pero si nunca los mira o no sabe lo que está buscando, simplemente desperdicia tiempo y espacio.

Al decidir qué registrar, debe identificar qué comportamiento le interesa y luego descubrir cómo registrar esa actividad. Una buena manera de comenzar a hacer esto sería leer acerca de AppArmor y leer detenidamente la página de manual de auditctl. luego aprenda qué llamadas al sistema están disponibles aprendiendo a programar para Unix e identifique las llamadas que pueden ser de su interés. Es realmente una empresa bastante grande. Sé que esta es una respuesta un poco simplista y no proporciona "aquí hay un script de shell que registrará todo lo que le importa en su servidor", pero la razón por la que esas respuestas no existen es que, bueno, cada situación es diferente por lo que no es posible dar una respuesta de "talla única".

En el lugar (ciertamente grande) donde trabajo, tenemos un equipo completo de personas que se dedican solo al registro del sistema, sin mencionar los diversos equipos de administración y seguridad que contribuyen. Este no es un tema menor. :/


Linux
  1. Prueba simple de correo PHP

  2. Archivo de configuración de la base de datos de Magento 2

  3. Copia de seguridad de archivos de configuración

  4. Cómo escribir su propio módulo kernel de Linux con un ejemplo simple

  5. Servidor Apache HTTP:directivas de configuración más utilizadas

Ejemplos simples de CGI y Apache en Ubuntu Linux

Fortalecimiento de la configuración de SSH

Configuración de usuario

Configuración de Webmin

Configuración PHP

La mejor configuración de PHP-FPM:cálculo fácil y simple