Sistema de auditoría en Linux

El Framework Audit escucha los eventos reportados por el Kernel y los escribe en un fichero de log basándose en unas reglas predefinidas.

En las distribuciones basadas en RedHat vienen preinstalados los paquetes (audit y audit-libs) y en las distribuciones basadas en Debian habrá que instalarlo con el siguiente comando:

# apt-get install auditd audispd-plugins

Esta auditoria no proporciona seguridad extra al sistema, pero permite recolectar información que puede ser determinante para descubrir cualquier violación de las políticas de seguridad establecidas para nuestros servidores.

El sistema de auditoria está diseñado para cumplir los requisitos de varios estándares de seguridad a nivel mundial como son:

  • Controlled Access Protection Profile (CAPP)
  • Labeled Security Protection Profile (LSPP)
  • Rule Set Base Access Control (RSBAC)
  • National Industrial Security Program Operating Manual (NISPOM)
  • Federal Information Security Management Act (FISMA)
  • Payment Card Industry — Data Security Standard (PCI-DSS)
  • Security Technical Implementation Guides (STIG)

La configuración básica del Framework se realiza a través de dos ficheros:

  • conf: Es el fichero de configuración del demonio que gestiona la auditoria (auditd), en él se configuran parámetros como ubicación del archivo de registro, el tamaño máximo del fichero, su rotación, el formato de registro…etc. El archivo se ubica en /etc/audit
  • rules: Es donde se configura los eventos que tiene que ser auditados, son las reglas para recopilar información específica del kernel. El archivo se ubica en /etc/audit/rules.d

 Dentro de las reglas de auditoria encontramos tres tipos:

  • Reglas de control: Son las que permiten modificar el comportamiento del sistema de auditoría.
  • Reglas del sistema de archivos: Auditan el acceso a ficheros y directorios.
  • Reglas de llamadas del sistema: Son la que registran las llamadas al sistema por cualquier programa o proceso.

En el directorio /etc/audit/rules.d podemos agregar más archivos de reglas, como por ejemplo el archivo de reglas (https://github.com/linux-audit/audit-userspace/blob/master/rules/30-pci-dss-v31.rules) para cumplir la normativa PCI-DSS.

El sistema de auditoria también permite que aplicaciones externas accedan y usen el demonio auditd en tiempo real, el directorio /etc/audit/plugins.d contiene la configuración de acceso de estos programas externos o también llamados plugins.

Los elementos que contiene el sistema audit:

  • auditd: Es el demonio responsable que escribir en el log los mensajes de auditoría que son generados por el interfaz de auditoria del kernel por una aplicación o la actividad del sistema.
  • auditctl: Utilidad que controla el sistema de auditoria. Determina que eventos van a registrarse.
  • aureport: Utilidad que permite crear informes personalizados del registro de auditoría.
  • ausearch: Utilidad para buscar registros en el fichero de log.
  • audispd: Es el Audit Dispacher Daemon y es usado para enviar notificaciones de eventos a otras aplicaciones (plugins)
  • autrace: Registra la actividad de procesos de forma individual.
  • aulast: Muestra los últimos logins en el sistema de forma similar al comando last, pero basándose en los ficheros de log de la auditoria.
  • aulastlog: Muestra los últimos logins en el sistema de forma similar al comando lastlog, pero basándose en los ficheros de log de la auditoria.

El esquema básico del funcionamiento de audit es el siguiente:

 

Las líneas discontinuas representas elementos de control entre componentes

En una instalación por defecto del sistema audit no viene ninguna regla configurada (ver el fichero /var/audit/rules.d/audit.rules), a pesar de no tener reglas audit audita varios aspectos relacionados con el sistema como son login realizados en el sistema. En cualquier momento podremos ver las reglas cargadas a través del siguiente comando:

# auditctl -l

En caso que tengamos alguna regla cargada, se pueden eliminar usando auditctl con el parámetro -D”, aunque no será de forma permanente ya que para hacerlo deberíamos modificar los ficheros de reglas. Las reglas para que sean persistentes deben crearse en el directorio /etc/audit/rules.d, por defecto modificaremos el fichero principal de reglas audit.rules.

En los siguientes puntos veremos un ejemplo a auditoria de un archivo y como ver el registro que genera.

Auditar un archivo

En este ejemplo monitorizamos la escritura y ejecución de un script llamado /opt/programa.sh. Para ello añadiríamos al fichero audit.rules la siguiente línea:

-w /opt/programa.sh  -p wx -k alerta_programa

Dónde las opciones son:

  • -w: Es el archivo o directorio a vigilar
  • -p:  Los parámetros que se auditaran:
    • r = lectura
    • w = escritura
    • x = ejecución
    • a = cambio de atributo
  • -k: Identificación de la regla

Si queremos auditarlo directamente, sin ser persistente los cambios, utilizaremos directamente el comando auditctl:

# auditctl -w /opt/programa.sh  -p wa –k alerta_programa

Una vez configurada la auditoria comprobaremos su funcionamiento, para ello iniciaremos con el usuario “bob” y ejecutaremos el programa /opt/programa.sh. Una vez ejecutado el programa comprobamos que se ha creado un registro en el fichero de auditoria /var/log/audit/audit.log:

También comprobamos que al editarlo (con el usuario root) queda registro, incluyendo el programa con el que ha sido editado:

Buscar logs en la auditoria

El framework audit dispone de los programas aureport y ausearch para ayudarnos a crear informes y buscar en el log los registros.

Con el comando aureport podemos ver directamente, sin reglas definidas, los logins realizados en el sistema:

# aureport –au

O los fallos del sistema:

# aureport --failed

Siguiendo con el ejemplo anterior donde hemos auditado el programa /opt/programa.sh y a través del comando aureport con la opción “-k” podremos ver todos los registros de la reglas establecidas:

# aureport –k

Usando el comando ausearch también podemos ver el registro de auditoria, por ejemplo si buscamos por el pid del evento:

# ausearch -p 17196

Ambos comandos tienen muchas opciones que solucionaran cualquier requisito de auditoria del sistema.