Product SiteDocumentation Site

14.3. Supervisión: prevención, detección, disuasión

La monitorización es una parte integral de cualquier política de seguridad por varias razones. Entre ellas, que el objetivo de la seguridad generalmente no se limita a garantizar la confidencialidad de los datos, sino que también incluye garantizar la disponibilidad de los servicios. Por tanto, es imprescindible comprobar que todo funciona como se espera y detectar de manera oportuna cualquier desvío en la conducta o cambio en la calidad de los servicios prestados. Monitorizar la actividad puede ayudar con la detección de intentos de intrusión y permitir una reacción rápida antes que ocurran graves consecuencias. Esta sección revisa algunas de las herramientas que puede utilizar para monitorizar varios aspectos de un sistema Debian. Como tal, esto completa la sección dedicada a la monitorización genérica del sistema en el Capítulo 12, Administración avanzada.

14.3.1. Monitorización de los registros con logcheck

El programa logcheck monitoriza los archivos de registro, de forma predeterminada, cada hora. Envía los mensajes de registro inusuales en correos electrónicos al administrador para su posterior análisis.
La lista de archivos a monitorizar se almacena en /etc/logcheck/logcheck.logfiles; los valores predeterminados funcionan bien si no modificó completamente el archivo /etc/syslog.conf.
logcheck puede funcionar en una de tres modalidades más o menos detalladas: paranoid, server y workstation. El primero es muy detallado y, probablemente, debería restringirlo a servidores específicos como firewalls. El segundo (y predeterminado) es el modo recomendado para la mayoría de los servidores. El ultimo está diseñado para estaciones de trabajo y es aún más conciso (filtra la mayoría de los mensajes).
En los tres casos, probablemente debería personalizar logcheck para excluir algunos mensajes adicionales (dependiendo de los servicios instalados) a menos que el administrador realmente desee recibir a cada hora correos electrónicos enormes y poco interesantes. Dado que el mecanismo de selección de mensajes es bastante complejo, /usr/share/doc/logcheck-database/README.logcheck-database.gz es una lectura — aunque difícil — necesaria.
Las reglas aplicadas se puede dividir en varios tipos:
  • aquellas que clasifican un mensaje como un intento de intrusión — «cracking» (almacenado en un archivo en el directorio /etc/logcheck/cracking.d/);
  • aquellas que cancelan esta clasificación (/etc/logcheck/cracking.ignore.d/);
  • aquellos que clasifican un mensaje como una alerta de seguridad (/etc/logcheck/violations.d/);
  • aquellos que cancelan esta clasificación (/etc/logcheck/violations.ignore.d/);
  • finalmente, aquellas que son aplicadas a los mensajes restantes (considerados como eventos del sistema).
Siempre se indicará un evento de sistema a menos que una regla en alguno de los directorios en /etc/logcheck/ignore.d.{paranoid,server,workstation}/ indique que el evento debe ser ignorado. Por supuesto, sólo se tomarán en cuenta los directorios que corresponden a los niveles de detalle igual o mayor al modo de funcionamiento seleccionado.

14.3.2. Monitorización de actividad

14.3.2.1. En tiempo real

top es una herramienta interactiva que muestra una lista de los procesos en ejecución. La ordenación predeterminada es según la cantidad de procesador utilizada y se puede obtener mediante la tecla P. Entre otros criterios de ordenación podemos encontrar: según la cantidad de memoria ocupada (tecla M), según el tiempo total de uso de procesador (tecla T) y según el identificador de proceso (tecla N). La tecla k permite matar un proceso ingresando su identificador de proceso. La tecla r permite ejecutar renice sobre un proceso, es decir: cambiar su prioridad.
Cuando el sistema aparenta estar sobrecargado, top es una herramienta excelente para ver qué procesos estan compitiendo por el tiempo de procesador o consumiendo demasiada memoria. En particular, a menudo es interesante comprobar si los procesos que están consumiendo los recursos se corresponden con los servicios reales que la máquina debe albergar. Por ejemplo, un proceso desconocido ejecutándose como el usuario www-data debería llamar su atención y ser investigado puesto que posiblemente sea algún tipo de software instalado y ejecutado en el sistema a través de una vulnerabilidad en una aplicación web.
top es una herramienta muy flexible y su página de manual detalla cómo personalizar su presentación y adaptarla a las necesidades y hábitos particulares.
Las herramientas gráficas gnome-system-monitor y qps son similares al programa top y proporcionan aproximandamente las mismas prestaciones.

14.3.2.2. Historial

La carga del procesador, el tráfico de red y el espacio libre en disco son datos que varían constantemente. A menudo es útil disponer de un historial con su evolución para determinar cómo se utiliza exáctamente la máquina.
Existen muchas herramientas dedicadas para esta tarea. La mayoría puede obtener datos a través de SNMP (protocolo simple de gestión de red: «Simple Network Management Protocol») para centralizar esta información. Un beneficio adicional es que permite recoger datos de elementos de red que pueden no ser equipos de propósito general, tal como switches o routers dedicados.
Este libro habla de Munin con cierto detalle (ver la Sección 12.4.1, “Configuración de Munin” como parte del Capítulo 12: “Administración avanzada. Debian también proporciona una herramienta similar: cacti. Su despliegue es algo más complejo puesto que se basa exclusivamente en SNMP. A pesar de que dispone de una interfaz web, entender los conceptos involucrados en la configuración requiere de todas formas un poco de esfuerzo. Debería considerar como prerequisito leer la documentación HTML (/usr/share/doc/cacti/html/index.html).

14.3.3. Detección de cambios

Una vez que el sistema está instalado y configurado, dejando al margen las actualizaciones de seguridad, normalmente no hay razón para que los archivos y directorios cambien con excepción de los datos. Por lo tanto, es interesante asegurarse que efectivamente los archivos no cambian: debería investigar cualquier cambio inesperado. Esta sección presenta algunas herramientas capaces de monitorizar archivos y advertir al administrador en caso de que se produzca algún cambio inesperado (o simplemente enumerar estos cambios).

14.3.3.1. Auditoría de paquetes: debsums y sus límites

debsums es una herramienta interesante ya que permite buscar qué archivos instalados han sido modificados (potencialmente por un atacante), pero debe tratarse con prudencia. En primer lugar, porque no todos los paquetes de Debian proporcionan las huellas digitales requeridas por este programa (si existen, se encuentran en /var/lib/dpkg/info/paquete.md5sums). Como recordatorio: una huella digital es un valor, a menudo un número (aunque pueda estar en notación hexadecimal), que contiene un tipo de firma de los contenidos de un archivo. Se calcula esta firma mediante un algoritmo (MD5 o SHA1 son ejemplos muy conocidos) que más o menos garantizan que incluso el cambio más pequeño en el contenido de un archivo implica un cambio en su huella digital; esto es conocido como «efecto avalancha». Esto permite que una simple huella digital numérica sirva como patrón para comprobar si se alteró el contenido de un archivo. Estos algoritmos no son reversibles; en otras palabra, para la mayoría de ellos, conocer la huella digital no permite averiguar los contenidos correspondientes. Los avances matemáticos recientes parece que debilitan la verdad absoluta de estos principios, pero por el momento su uso no se ha puesto en cuestón, ya que crear distintos contenidos que produzcan la misma huella todavía parece una tarea muy complicada.
Adicionalmente, se almacenan los archivos md5sums en el disco duro; por lo tanto un atacante meticuloso actualizará estos archivos para que contengan las nuevas sumas de control de los archivos sustituidos.
El primer inconveniente se puede evitar haciendo que debsums base sus comprobaciones en un paquete .deb en lugar de confiar en el archivo md5sums. Pero esto requiere descargar previamente los archivos .deb correspondientes:
# apt-get --reinstall -d install `debsums -l`
[ ... ]
# debsums -p /var/cache/apt/archives -g
También conviene notar que, en su configuración predeterminada, debsums genera automáticamente los archivos md5sums faltantes cada vez que instale un paquete utilizando APT.
Puede evitar el otro problema de forma similar: simplemente debe basar la comprobación en un archivo .deb impoluto. Debido a que esto implica disponer de los archivos .deb de todos los paquetes instalados, y además estar seguros de su integridad, la forma más sencilla es obtenerlos de una réplica Debian. Esta operación puede ser lenta y tediosa y, por lo tanto, no debe considerarse como una técnica proactiva a utilizar de forma regular.
# apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
# debsums -p /var/cache/apt/archives --generate=all
Sepa que este ejemplo utiliza el programa grep-status del paquete dctrl-tools que no se instala de forma predeterminada.

14.3.3.2. Monitorización de archivos: AIDE

La herramienta AIDE (entorno avanzado de detección de intrusión: «Advanced Intrusion Detection Environment») permite comprobar la integridad de los archivos y detectar cualquier cambio frente a una imagen guardada previamente del sistema válido. Se almacena esta imagen como una base de datos (/var/lib/aide/aide.db) que contiene la información relevante de todos los archivos del sistema (huella digital, permisos, marcas temporales, etc.). Se inicializa esta base de datos con aideinit; luego se la utiliza diariamente (por el script /etc/cron.daily/aide) para comprobar que nada importante haya cambiado. Cuando se detectan cambios, AIDE los almacena en archivos de registro (/var/log/aide/*.log) y envía lo encontrado en un email al administrador.
Puede utilizar numerosas opciones en el archivo /etc/default/aide para configurar el comportamiento del paquete aide. Se almacena la configuración de AIDE en sí en /etc/aide/aide.conf y /etc/aide/aide.conf.d/ (de hecho, sólo update-aide.conf utiliza estos archivos para generar /var/lib/aide/aide.conf.autogenerated). La configuración indica qué propiedades se deben comprobar. Por ejemplo, el contenidos de los archivos de registro cambia continuamente, y se puede ignorar estos cambios mientras que los permisos de los archivos permanezcan inalterados, pero tanto el contenido como los permisos de los programas ejecutables debe permanecer constante. Aunque no es excesivamente compleja, la sintaxis de la configuración no es del todo intuitiva y, por lo tanto, recomendamos leer su página de manual aide.conf(5).
Cada día se genera una nueva versión de la base de datos en /var/lib/aide/aide.db.new; si todos los cambios registrados son legítimos, puede utilizarla para reemplazar la base de datos de referencia.

14.3.4. Detección de intrusiones (IDS/NIDS)

snort (del paquete Debian con el mismo nombre) es un NIDS — un sistema de detección de intrusiones de red («Network Intrusion Detection System»). Su función es escuchar la red y tratar de detectar intentos de infiltración y/o actos hostiles (inclusive ataques de denegación de servicio). Todos estos eventos son registrados y diariamente se envía un email al administrador con un resumen de las últimas 24 horas.
Su configuración requiere describir el rango de direcciones que cubre la red local. En la práctica, esto significa el conjunto de potenciales objetivos de los ataques. Se pueden configurar otros parámentros importantes mediante dpkg-reconfigure snort, incluyendo la interfaz de red a monitorizar. A menudo será eth0 para una conexión Ethernet, pero existen otras posibilidades como ppp0 para una línea ADSL o PSTN (red pública de telefonía conmutada: «Public Switched Telephone Network», es decir un confiable y antiguo módem), o incluso wlan0 para algunas tarjetas de red inalámbricas.
El archivo de configuración (/etc/snort/snort.conf) de snort es muy largo, y los abundantes comentarios describen cada directiva de forma detallada. Para aprovecharlo al máximo, deberá leerlo completamente y adaptarlo a la situación local. Por ejemplo, al indicar qué máquina alberga qué servicio puede limitar el número de incidentes que snort reportará, puesto que un ataque de denegación de servicio a un equipo de escritorio es mucho menos crítico que uno dirigido a un servidor DNS. Otra directiva interesante permite almacenar las asociaciones entre direcciones IP y direcciones MAC (que identifican de forma unívoca a una tarjeta de red), lo que permite detectar ataques de tipo «ARP spoofing» en los que una máquina comprometida intenta suplantar la identidad de otra, por ejemplo un servidor sensible.