viernes, 19 de junio de 2015

Jugando con Linux Audit System Parte I

Linux Audit System es un componente extra que viene en el kernel de Linux hace ya algunos años y provee la capacidad de obtener información sobre el sistema que podría ser relevante desde el punto de vista de la seguridad. Basicamente, a partir de un conjunto de reglas, es capaz de generar logs ante determinados eventos del sistema. Pero OJO!, Linux Audit System no es un mecanismo de control como SELINUX, sino un mecanismo de reporte.

Algunas de los detalles que podemos obtener con Linux Audit System son:
  • Fecha, hora, resultado y tipo de un evento.
  • Asociación del evento con el usuario que lo inició.
  • Registro de uso de los mecanismo de autenticación.
  • Modificaciones de los propios archivos de configuración de audit.
  • etc
Algunos de los casos de uso mas comunes donde se puede aplicar Linux Audit System son:
  • Vigilar el acceso a determinados archivos
  • Vigilar el uso de determinadas syscalls
  • Registrar los comandos ejecutados por un usuario:
  • Registrar eventos de seguridad del sistema: eventos como los ingresos de contraseña incorrecta pueden ser registrados por audit.
  • Monitoreo de actividades de red: iptables puede comunicarse con audit y generar eventos.

¿Cómo está formado?

Linux System Audit se divide en dos partes, las utilidades de espacio de usuario y el procesamiento de las syscalls en el espacio kernel.

Los componentes en espacio de kernel reciben las syscalls del espacio de usuario y las pasan por unos filtros (user, task y exit). Una vez que la syscall fue filtrada es procesada por otro filtro, llamado Exclude, donde a partir de las reglas de audit se envía o no al Audito Daemon para continuar su procesamiento.

Los componentes en espacio de usuario como el Audit Daemon recolectan la información del kernel y generan los registros correspondientes. Además de Audit Daemon, hay otros utilitarios que forman parte de las herramientas en espacio de usuario como:
  • auditcl: permite comunicarse con los componentes en el kernel para su configuración.
  • ausearch: herramienta para la búsqueda de registros en los logs generados por audit
  • audisp: interactúa con el audit daemon y puede enviar eventos a otras aplicaciones.
  • aureport: herramienta para generar reportes a partir de los logs obtenidos.
  • etc.

¿Cómo saber si mi kernel soporta Linux System Audit?

Lo mas probable es que si xD, pero por si las moscas podes corroborarlo a partir de la configuración del kernel que estás corriendo, por ejemplo de la siguiente manera:

juan@moon:~$ uname -r
3.13.0-49-generic

juan@moon:~$ grep CONFIG_AUDIT /boot/config-`uname -r`
CONFIG_AUDIT_ARCH=y
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_WATCH=y
CONFIG_AUDIT_TREE=y
juan@moon:~$


Si todas estas opciones se encuentran en Y significa que el kernel tiene compilado Linux Audit System.

¿Cómo instalar las herramientas de espacio de usuario?

Exacto, incluso si el kernel soporta Linux Audit aún faltan las herramientas de espacio de usuario. La disponibilidad y el nombre de los paquetes va a depender bastante de cada distribución, pero los clásicos serían:

yum install audit
apt-get install auditd

De acuerdo al sistema operativo será necesario o no activar auditd como servicio.

root@ubuntu:/home/juan# service auditd status
 * auditd is running.
root@ubuntu:/home/juan#


Comandos básicos

Antes de pasar a las reglas que van a gobernar el comportamiento de auditd vamos a ver el comando esencial para controlarlo, auditctl. Algunos de los flags mas interesantes de auditctl son
  • -b NUM: número de buffers disponibles para audit system. Si los buffers se llenan se evaluará la flag de error para ver qué hacer.
  • -f [0-2]: esta opción permite definir el comportamiento del kernel ante un evento adverso como backlog limit alcanzado, problema de comunicación entre con audit daemon, etc. La opción 2 generará un kernel panic.
  • -e [0-2]: este flag permite 0-deshabilitar temporalmente system audit, 1-habilita system audit nuevamente, 2-bloquea la configuración de system audit, cualquier intento por cambiar la configuración será denegado y registrado. Solo reiniciando se puede salir de esa situación.
  • -s: reporta el estado del kernel audit system, mostrará como fueron configuradas las otras flags.
root@ubuntu:/home/juan# auditctl -s
AUDIT_STATUS: enabled=1 flag=1 pid=1396 rate_limit=0 backlog_limit=320 lost=0 backlog=0
root@ubuntu:/home/juan#  


A partir de la salida anterior, vemos que por defecto audit se encuentra habilitado pero no bloqueado, que ante una condición crítica se imprimirá la condición con printk. El pid que se puede ver es el del audit daemon que se encuentra corriendo. El resto de los parámetros se pueden ver desde el man xD, man auditctl.

En la próxima entrada, agregaremos reglas!

No hay comentarios:

Publicar un comentario