Tripwire

La herramienta Tripwire ([KS93]), [KS94b]) es un comprobador de integridad para ficheros y directorios de sistemas Unix: compara un conjunto de estos objetos con la información sobre los mismos almacenada previamente en una base de datos, y alerta al administrador en caso de que algo haya cambiado. La idea es simple: se crea un resumen de cada fichero o directorio importante para nuestra seguridad nada más instalar el sistema, y esos resúmenes se almacenan en un medio seguro (un CD-ROM o un disco protegido contra escritura), de forma que si alguno de los ficheros es modificado (por ejemplo, por un atacante que sustituye un programa por una versión troyanizada o añade una entrada en nuestro fichero de contraseñas) Tripwire nos alertará la próxima vez que realicemos la comprobación. Para generar esos resúmenes se utilizan funciones hash, de forma que es casi imposible que dos ficheros generen el mismo resumen; concretamente Tripwire implementa MD2, MD4, MD5, Snefru, CRC-16 y CRC-32.

Una vez hemos compilado el código fuente de Tripwire debemos inicializar la base de datos; para ello necesitamos en primer lugar crear el fichero tw.config en la localización indicada en include/config.h, donde espedificaremos los directorios a analizar (en el directorio configs/ tenemos algunos ficheros de ejemplo, adecuados a diferentes plataformas Unix). A continuación inicializaremos la base de datos con la orden tripwire -initialize (o simplemente -init):
anita:/tmp/tripwire-1.2/src# ./tripwire -init
### Phase 1:   Reading configuration file
### Phase 2:   Generating file list
### Phase 3:   Creating file information database
###
### Warning:   Database file placed in ./databases/tw.db_anita.
###
###            Make sure to move this file file and the configuration
###            to secure media!
###
###            (Tripwire expects to find it in '/usr/local/tw'.)
anita:/tmp/tripwire-1.2/src#
En el fichero ./databases/tw.db_anita se encuentran las funciones resumen de los archivos y directorios especificados en tw.config; evidentemente, los datos de ese fichero se asumen como fiables, por lo que es recomendable generarlo antes de abrir la máquina a los usuarios, nada más instalar el operativo. Además, si un usuario lo consigue modificar toda la seguridad de Tripwire se rompe, así que deberemos almacenarlo en un medio seguro (por ejemplo, de sólo lectura), e incluso imprimir en papel una copia para realizar comprobaciones si sospechamos de un ataque.

Con la base de datos inicial ya generada, podemos ejecutar regularmente Tripwire para verificar que no ha cambiado ningún resumen de nuestros fichero; para ello es necesario utilizar dicha base de datos desde una fuente segura (por ejemplo, recién copiada desde el medio de sólo lectura al disco, en modo monousuario):
anita:/tmp/tripwire-1.2/src# ./tripwire &>resultados
anita:/tmp/tripwire-1.2/src# head -17 resultados
### Phase 1:   Reading configuration file
### Phase 2:   Generating file list
### Phase 3:   Creating file information database
### Phase 4:   Searching for inconsistencies
###
###                     Total files scanned:            4821
###                           Files added:              2
###                           Files deleted:            0
###                           Files changed:            4413
###
###                     After applying rules:
###                           Changes discarded:        3959
###                           Changes remaining:        458
###
added:   -rw------- root            0 May  5 03:46:06 2000 /var/tmp/test
changed: -rw-r--r-- root          972 May  5 03:49:53 2000 /var/adm/utmp
changed: -rw-r--r-- root        10044 May  5 03:49:53 2000 /var/adm/utmpx
anita:/tmp/tripwire-1.2/src#
Finalmente, debemos pensar que existirán ficheros o directorios que van a cambiar habitualmente (por ejemplo, el archivo de contraseñas cada vez que añadamos a un usuario al sistema); por tanto, es lógico que Tripwire ofrezca un mecanismo de actualización de la base de datos. Es más, este programa posee dos: o bien el modo interactivo o el modo actualización. En el primero, cada vez que Tripwire detecte un fichero con modificaciones nos consultará si deseamos actualizar nuestra base de datos, mientras que en el modo update se utiliza para la actualización o bien un nombre de archivo (si es lo único modificado) o bien un directorio pasado como parámetro al ejecutable. El modo interactivo se invocado mediante la opción -interactive:
anita:/tmp/tripwire-1.2/src# ./tripwire -interactive
### Phase 1:   Reading configuration file
### Phase 2:   Generating file list
### Phase 3:   Creating file information database
### Phase 4:   Searching for inconsistencies
###
###                     Total files scanned:            4820
###                           Files added:              1
###                           Files deleted:            0
###                           Files changed:            4413
###
###                     After applying rules:
###                           Changes discarded:        3958
###                           Changes remaining:        457
###
added:   -rw------- toni        32768 May  5 03:55:29 2000 /var/tmp/Rx0000755
---> File: '/var/tmp/Rx0000755'
---> Update entry?  [YN(y)nh?]
Mientras que el modo update se consigue mediante el parámetro -update; por ejemplo, si hemos añadido a un usuario (y por tanto modificado los ficheros /etc/passwd y /etc/shadow), actualizaremos la base de datos de Tripwire con la siguiente orden:
anita:/tmp/tripwire-1.2/src# ./tripwire -update /etc/passwd /etc/shadow
### Phase 1:   Reading configuration file
### Phase 2:   Generating file list
Updating: update file: /etc/passwd
Updating: update file: /etc/shadow
### Phase 3:   Updating file information database
###
### Old database file will be moved to `tw.db_anita.old'
###            in ./databases.
###
### Updated database will be stored in './databases/tw.db_anita'
###            (Tripwire expects it to be moved to '/usr/local/tw'.)
###
anita:/tmp/tripwire-1.2/src#
Tripwire es una herramienta muy útil como sistema de detección de intrusos ([KS94a]) en nuestras máquinas Unix; ejecutarlo periódicamente, y mantener segura la base de datos de resúmenes - donde recordemos que reside toda la fiabilidad del producto - nos puede ayudar a detectar accesos no autorizados al sistema y, más importante, modificaciones que el pirata haya podido realizar en él para garantizarse un futuro acceso.
© 2002 Antonio Villalón Huerta