S-tripwire-2: (0.01) (potato) tripwire: firma siggen de la base de datos y otros archivos importantes _sistema no recomendado_ 7/1/01 0.01 Primera versión La idea era no guardar la base de datos en medio RO, sino imprimir una firma de ella al crearla y tras cada modificación y comprobarla "a ojo" * INCONVENIENTES 1) Este sistema nos indica que la base de datos ha sido comprometida, pero en ese caso como ya no podemos confiar en ella ¿que ha sido realmente modificado? 2) Con un solo olvido de imprimir la firma de la base de datos ya estas perdido * IMPRIMIR FIRMA DE LA BASE DE DATOS EN VEZ DE USAR UN MEDIO DE SOLO LECTURA 1) Necesitamos estar seguros de que siggen no está comprometido, y este está enlazado a las librerías libc.so.6 y ld-linux.so.2 a) Recompilar y guardar en un floppy en formato ext2 y solo lectura una versión enlazada estáticamente de siggen (es lo más seguro), en el Anexo-II tienes el diff para aplicar a los fuentes 2) Imprimir firmas de tripwire y del contenido de la base de datos: Este script puede estar en /usr/local/bin (lanzar como root) ---8<--- #!/bin/sh # s (copiar a /usr/local/bin) # Monta floppy de test de tripwire e imprime firmas # mount -t ext2 /dev/fd0 /floppy /floppy/twtest | lpr # | lpr = enviar a impresora umount /floppy --->8--- Este script debe estar en el floppy, junto a un "siggen estático" ---8<--- #!/bin/sh # twtest Muestra firmas de archivos de tripwire y base de datos # /floppy/siggen debe estar enlazado estáticamente echo -n "Sistema: "; hostname echo -n "Fecha: "; date +"%A %e de %B de %Y, %T" echo echo "Las firmas de todos los archivos que siguen son importantes para" echo "confiar en tripwire y la base de datos de tripwire del disco duro" for FILE in /floppy/siggen \ /boot/vmlinuz-2.2.17 \ /usr/lib/tripwire/tripwire \ /usr/lib/tripwire/databases/tw* do echo echo echo "--- $FILE ---" echo ls -l $FILE /floppy/siggen -h127 $FILE # -h = modo hexadecimal (como al usar md5sum) # -1 = mostrar firma MD5 # -2 = mostrar firma snefru # -7 = mostrar firma SHA1 (la que usa gnupg) done --->8--- Este script es práctico para evitar olvidos ---8<--- #!/bin/sh # twact (copiar a /usr/local/bin) # Imprime firmas, actualiza base de datos tripwire _NO COMPRIMIDA_ # y vuelve a imprimir firmas mount -t ext2 /dev/fd0 /floppy /floppy/twtest | lpr cd /usr/lib/tripwire nice tripwire -interactive /floppy/twtest | lpr umount /floppy --->8--- Y este para encontrar diferencias ---8<--- #!/bin/sh # twdiff (copiar a /usr/local/bin) # Muestra cambios en la base de datos de tripwire tras usar # twact (tripwire -interactive) HOST=`hostname` cd /usr/lib/tripwire diff -u databases/tw.db_$HOST.old databases/tw.db_$HOST --->8--- 3) Lanzar comprobación de tripwire a mano nice ztripwire DETALLES DE ESTE SISTEMA: - Un papel impreso no puede ser hackeado a distancia ;-) - Este sistema evita el problema de la base de datos que no cabe en el floppy * ANEXO-I diff a aplicar a los fuentes para generar un siggen estático 1) Bajar los fuentes [dsc], [tripwire_1.2.orig.tar.gz], y [tripwire_1.2-16.1.diff.gz] 2) Descomprimir y renombrar directorio a tripwire-1.2 3) Aplicar el diff a los fuentes patch -p0 < archivo.diff 4) Aplicar este diff (o modificar a mano) ---8<--- diff -ruN tripwire-1.2-000/src/Makefile tripwire-1.2/src/Makefile --- tripwire-1.2-000/src/Makefile Mon Dec 4 20:00:14 2000 +++ tripwire-1.2/src/Makefile Mon Dec 4 20:01:40 2000 @@ -89,7 +89,7 @@ # need $(LDFLAGS) because this may interact with the way nullsig.o and # utils.o were compiled siggen: $(OSIGS) siggen.c utils.o nullsig.o - $(CC) $(CFLAGS) $(LDFLAGS) -o siggen siggen.c $(OSIGS) nullsig.o utils.o $(LIBS) + $(CC) $(CFLAGS) $(LDFLAGS) -o siggen siggen.c $(OSIGS) nullsig.o utils.o $(LIBS) -static config.lex.c: config.pre.l $(LEX) config.pre.l --->8--- 5) cd tripwire-1.2/src make siggen 6) copia el siggen a un floppy