Abstract |
Esta es una guía breve para utilizar Tripwire en Linux. Se desarrolló en ambiente RedHat 7.1; sin embargo, debe ser útil en cualquier otro OS compatible. |
Para mejorar la seguridad de su sistema.
No existen los sistemas computacionales perfectos e invulnerables que desearíamos, y siempre estaremos expuestos a ataques. Más allá de todas las medidas preventivas que tomemos (firewalls, patches, políticas, etc.) siempre cabe la posibilidad de ser alcanzados por un hacker. Los ataques exitosos a través de la red típicamente involucran la modificación parcial del sistema mediante la alteración o reemplazo de ciertos archivos, lo cual suele ser empleado por el atacante para posteriormente tomar el control total del sistema.
Tripwire asume que todos los controles de seguridad han fallado, y que nuestro sistema ya ha sido alterado; al menos, parcialmente. Sin embargo, parte del arte de los atacantes consiste en no ser descubiertos, y para esto emplean diversas técnicas relativamente sofisticadas. Tripwire servirá para alertar al administrador de estos cambios (los cuales de otro modo podrían pasar desapercibidos por semanas o meses) a fin de tomar acciones con rapidez.
Para esto, Tripwire monitorea rutinariamente la integridad de una gran cantidad de archivos que tienden a ser blanco de los atacantes. Sin embargo, este proceso es pesado, y se suele ejecutar a intervalos; por ejemplo, diarios o interdiarios, aunque no hay ninguna restricción (salvo de recursos) para no lanzarlo cada media hora.
Descargue la versión open source de Tripwire del site www.tripwire.org. Elija la versión que corresponda mejor a su sistema operativo.
Tripwire normalmente se distribuye en un archivo RPM que viene empacado en formato TAR comprimido. En este último caso, usar:
# tar xvzf tripwire.tar.gz |
Ahora instálelo:
# rpm -ivh tripwire-2.3-47.i386.rpm |
Nota: En diversas distribuciones de Linux, incluyendo RedHat 7.2 y superiores, Tripwire ya está instalado, razón por la cual este paso puede no ser necesario.
Tripwire utiliza dos claves (que pueden ser palabras u oraciones) para almacenar su información. Una de ellas, la "site key" o "clave del site", se emplea para encriptar los archivos de configuración y de las políticas. La otra - la "local key" o "clave local", se usa para encriptar la información referida al estado de los archivos del sistema que se monitorean.
Ud. necesita estas dos claves para las tareas de administración de Tripwire. Estas se deben introducir tan pronto como se ha instalado Tripwire mediante el comando:
# /etc/tripwire/twinstall.sh |
La configuración de los archivos que van a ser monitoreados por Tripwire se mantiene en un gran archivo conocido como "archivo de políticas" (policy file.) Su manipulación es algo tediosa dada su extensión. Tripwire viene con un archivo que sirve de "plantilla" para ser modificado. Este archivo es: /etc/tripwire/twpol.txt.
Ud. puede modificarlo directamente con un editor de texto (aunque le aconsejo que guarde una copia sin modificar del mismo.)
Ahora haremos una observación de órden práctico y didáctico: Tripwire por lo general toma varios minutos en cada una de sus ejecuciones, y si Ud. nunca lo ha usado, probablemente le resultará desesperante aguardar mucho tiempo sin saber si las cosas están yendo bien o mal. Por este motivo yo sugiero que empecemos con una versión reducida (y casi inútil) del archivo de políticas. Una vez que Ud. comprenda el proceso completo, podrá retomar el archivo original y aprovecharlo.
Nuevamente va la advertencia: haga una copia de seguridad del archivo twpol.txt.
Para recortar el archivo proporcionado, simplemente use un editor de texto (como vi) y busque la sección "File System and Disk Administraton Programs" (que en el archivo que yo tengo, se ubica a partir de la línea 185.) Un extracto de esa sección es presentado aquí:
... ################################################ # # File System and Disk Administration Programs # # ################################################ ( rulename = "File System and Disk Administraton Programs", severity = $(SIG_HI) ) { /sbin/accton -> $(SEC_CRIT) ; /sbin/badblocks -> $(SEC_CRIT) ; /sbin/dosfsck -> $(SEC_CRIT) ; /sbin/e2fsck -> $(SEC_CRIT) ; /sbin/debugfs -> $(SEC_CRIT) ; /sbin/dumpe2fs -> $(SEC_CRIT) ; /sbin/dump -> $(SEC_CRIT) ; ... |
... ################################################ # # File System and Disk Administration Programs # # ################################################ ( rulename = "File System and Disk Administraton Programs", severity = $(SIG_HI) ) { /sbin/accton -> $(SEC_CRIT) ; /sbin/badblocks -> $(SEC_CRIT) ; /sbin/dosfsck -> $(SEC_CRIT) ; /sbin/e2fsck -> $(SEC_CRIT) ; } # AHORA AQUI TERMINA EL ARCHIVO. OBSERVE LA LLAVE DE CIERRE. |
... ################################################ # # File System and Disk Administration Programs # # ################################################ ( rulename = "File System and Disk Administraton Programs", severity = $(SIG_HI) ) { /sbin/accton -> $(SEC_CRIT) ; /sbin/badblocks -> $(SEC_CRIT) ; /sbin/dosfsck -> $(SEC_CRIT) ; /sbin/e2fsck -> $(SEC_CRIT) ; # ARCHIVO DE PRUEBA INEXISTENTE AÑADIDO. OBSERVE QUE ESTA # UBICADO ANTES DE LA LLAVE DE CIERRE /sbin/lechuga -> $(SEC_CRIT) ; } # AHORA AQUI TERMINA EL ARCHIVO |
Cuando el archivo de políticas contiene todo lo que pretendemos monitorear, es menester "instalarlo". En realidad Tripwire usa una versión compilada y encriptada de este archivo, que se almacena en /etc/tripwire/tw.pol. Para generarlo (y regenerarlo cuantas veces se necesite), usar:
# twadmin -m P /etc/tripwire/twpol.txt |
Una vez configurado e instalado el archivo de políticas, Tripwire necesita recolectar la información actual de los archivos que debe monitorear. Dicha información se almacena en una base de datos especial generada mediante el comando:
# tripwire -m i 2> /tmp/mensajes |
Borre el archivo /tmp/mensajes cuando hayan desaparecido todos los errores.
Ahora que Tripwire está correctamente configurado con su base de datos, es el momento de verificar la integridad del filesystem. Esto se consigue con el comando:
# tripwire -m c |
Si por algún motivo algunos de los archivos monitoreados son modificados (por ejemplo, por una actualización en el software) entonces debemos reconstruir la base de datos como se vió en el paso anterior, a fin de que no aparezcan discrepancias con el estado actual del filesystem en las próximas verificaciones.
Si deseamos dejar de monitorear ciertos archivos o iniciar el monitoreo de otros, entonces debemos configurar el archivo de políticas (twpol.txt) como se vió anteriormente, y reinstalarlo. Después, se volverá a generar la base de datos del filesystem. Este proceso lamentablemente puede ser muy tedioso cuando hay muchos archivos por monitorear.
Ahora que Ud. ha probado la correcta ejecución de Tripwire, debemos programar su ejecución automática. Se aconseja una frecuencia diaria, aunque el administrador es libre de usar otro esquema. En RedHat 7.1, la ejecución diaria de tripwire se efectúa fácilmente creando un archivo en el directorio /etc/cron.daily (por ejemplo, /etc/cron.daily/tripwire con el siguiente contenido:
/usr/sbin/tripwire -m c | mail root@localhost |
Asegúrese de que este archivo para cron sea ejecutable:
# chmod 755 /etc/cron.daily/tripwire |
Esta funcionalidad proporciona un control más flexible con respecto a los reportes vía email. Tripwire es capaz de notificar por email sin necesidad de que el administrador invoque a un cliente de correo como en el ejemplo anterior (en que invocamos a mail. Para esto, en el archivo de políticas debemos insertar la directiva:
emailto = user@host.domain |
... # Kernel Administration Programs # # ( rulename = "Kernel Administration Programs", severity = $(SIG_HI) ) { /sbin/depmod -> $(SEC_CRIT) ; /sbin/adjtimex -> $(SEC_CRIT) ; /sbin/ctrlaltdel -> $(SEC_CRIT) ; /sbin/insmod -> $(SEC_CRIT) ; ... |
... # Kernel Administration Programs # # ( rulename = "Kernel Administration Programs", severity = $(SIG_HI), emailto = root@localhost ) { /sbin/depmod -> $(SEC_CRIT) ; /sbin/adjtimex -> $(SEC_CRIT) ; /sbin/ctrlaltdel -> $(SEC_CRIT) ; /sbin/insmod -> $(SEC_CRIT) ; ... |
Si Ud. usa vi, puede insertar automáticamente la directiva emailto en todas las secciones del archivo con el siguiente comando "de última línea":
:1,$s/severity =.*/&,emailto = root@localhost/ |
Finalmente, el archivo /etc/cron.daily/tripwire debe ser modificado del siguiente modo:
/usr/sbin/tripwire -m c --email-report |
El archivo de configuración twcfg.txt contiene algunos parámetros adicionales para la configuración del sistema de notificación de email. Por ejemplo, es posible configurar si se deben enviar reportes aún si no han habido problemas (ver directiva MAILNOVIOLATIONS de twcfg.txt.) También se puede seleccionar el agente de mensajería (ver directiva MAILPROGRAM) a fin de no usar sendmail y generar una conexión directa SMTP hacia otro host.
Consulte el manual de twconfig(4) y twpolicy(4) para más opciones y ejemplos.
Tripwire guarda su configuración y la política del filesystem en dos archivos encriptados con la "clave del site". Estos son: /etc/tripwire/tw.cfg y /etc/tripwire/tw.pol, respectivamente. El primero se generó a partir de /etc/tripwire/twcfg.txt cuando se configuraron las claves, y el segundo ha sido regenerado cada vez que Ud. modificó su archivo de políticas /etc/tripwire/twpol.txt. Por seguridad, Ud. no debería mantenerlos en el sistema hasta que se vuelvan a necesitar, así que proceda a borrarlos:
# rm /etc/tripwire/twcfg.txt /etc/tripwire/twpol.txt |
# twadmin -m p > /etc/tripwire/twpol.txt |
# twadmin -m f > /etc/tripwire/twcfg.txt |
Tal como se indicó, eventualmente Ud. deberá emplear el archivo twpol.txt que viene con tripwire, el cual contiene numerosas referencias a los archivos del sistema. Sin embargo, este archivo en casi todos los casos deberá personalizarse puesto que no todos los sistemas tienen instalados los mismos archivos.
A fin de agilizar este proceso (que es tremendamente tedioso), confeccioné el siguiente script que genera una versión "corregida" del twpol.txt contrastándo el original contra lo que se encuentra en el sistema. Este script NO modifica el archivo twpol.txt, sino por el contrario, deja la "nueva versión" en /tmp/new.twpol.txt.
Para ejecutarlo, simplemente escribir:
# bash check_twpol.sh |
#!/bin/bash # # Generacion de version corregida de archivo de politicas twpol.txt # (C) 2002-4002 Diego (www.compulinux.com/diego) # # Por favor verifique estas variables: # Please cheack these veriables: # Original twpol.txt TWPOL=/etc/tripwire/twpol.txt # Donde buscar nuevos archivos # Where to search for new files SRC_DIR="/sbin /etc /etc/sysconfig /bin" # El twpol.txt generado # Generated twpol.txt RESULTADO=/tmp/new.twpol.txt ### END OF COMMENTS if [ ! -f $TWPOL ]; then echo "$TWPOL debe existir para poder empezar!" echo "$TWPOL must exist for running this thing!" exit fi echo "Quitando archivos inexistentes de twpol.txt" echo "Cutting non-existent files from twpol.txt" while read L do # Cuidado: entre corchetes se escribe un espacio y un tab (3 lineas abajo) # Beware: between brackets there is a space and a tab (following 3 lines) if echo "$L" | grep '^[ ]*/' > /dev/null ; then PX=$(echo "$L" | sed 's/^[ ]*\([^ ]*\).*/\1/') PY=$(echo "$L" | sed 's/^[ ]*\([^ ]*\)\(.*\)/\2/') if [ -e "$PX" ]; then echo "$PX $PY" else echo "#-- $PX $PY" echo -n '.' > /dev/tty # echo $PX > /dev/tty fi else echo "$L" fi done < $TWPOL > $RESULTADO echo echo "Insertando nuevos archivos en twpol.txt" echo "Inserting new files to twpol.txt" for DIR in $SRC_DIR do echo "#-- " echo "#-- " echo "#-- " echo "(" echo "rulename = \"$DIR\"," echo 'severity = $(SIG_HI)' echo ")" echo "{" echo > /dev/tty echo "Procesando $DIR" > /dev/tty echo "Processing $DIR" > /dev/tty for F in $DIR/* do # Cuidado: entre corchetes se escribe un espacio y un tab (siguiente linea) # Beware: between brackets there is a space and a tab (next linea) if [ -f $F ] && ! grep "^[ ]*$F[ ]" $RESULTADO > /dev/null ; then echo " $F -> \$(SEC_CRIT) ;" echo -n "." > /dev/tty fi done echo "}" done >> $RESULTADO echo echo "El nuevo archivo twpol.txt se ha generado en $RESULTADO" echo "New twpol.txt file was generated as $RESULTADO" |