Tutorial de Tripwire - UNAM-CERT

Anuncio
Tutorial de Tripwire
Tripwire
Es un monitor de la integridad de los sistemas* Unix. Este usa varias rutinas de checksum/mensaje, huella/segura y
hash/firma para detectar cambios en archivos, además de rastrear determinados campos seleccionados de la
administración del sistema.
Introducción
• Creador
En 1993, Gene Kim y Eugene Spafford trabajando en el Laboratorio COAST de la Universidad de Purdue
desarrollaron el concepto de software Tripwire que podía ayudar a detectar cambios en la estructura de los
archivos o directorios gracias al uso de algoritmos de firmas.
Cada resultado inesperado puede ser investigado para determinar si el cambio fue provocado maliciosamente o
accidentalmente. La tecnología de firma digital es utilizada hoy en día en muchos aspectos de la seguridad
informática, incluyendo pruebas de identidad, autentificación, autorización, integridad y no repudio.
• ¿Qué problemas intenta resolver?
Integridad de los sistemas UNIX.
Descripción
• ¿Qué es?
Es un monitor de la integridad de los sistemas* Unix. Este usa varias rutinas de checksum/mensaje, huella/seg
y hash/firma para detectar cambios en archivos, además de rastrear determinados campos seleccionados de la
administración del sistema.
• ¿Para qué sirve?
El sistema tripwire persigue los objetivos de rastrear:
♦ Cambios en los permisos de los archivos.
♦ Ligas.
♦ Tamaños en archivos y directorios
♦ Groupid, userid.
Versiones
• Última versión
♦ Para Unix: Versión 1.2
♦ Para Linux: Versión 1.3
• ¿Dónde obtenerlo?
Hay varios lugares donde podemos obtener Tripwire:
Para Unix. (Versión 1.2)
ftp://ftp.asc.unam.mx/Herramientas/Unix/Monitor_Sistema/Tripwire/Tripwire−1.3.1−1.tar.gz
1
Tutorial de Tripwire
Para Linux. (Versión 1.3)
ftp://ftp.asc.unam.mx/Herramientas/Unix/Monitor_Sistema/Tripwire/tripwire.i386.tar.gz
Nota: En cualquiera de estos caso se obtiene acceso por anonymous.
• Versiones de Tripwire RPM y Código Fuente
Después de obtener el paquete es necesario desempaquetarlo, utilizando los comandos tar y gunzip en el caso
un sistema Unix.
(Versión Unix)
$gunzip tripwire.tar.gz
$tar −xvf tripwire.tar
Para el caso de Sistemas Linux debe obtenerse la versión para Red Hat, que se viene incluida en el CD de Re
Hat, en este caso el paquete esta constituído por:
♦ Tripwire−1.3−1.i386.rpm
♦ Tripwire−1.3−1.src.rpm
Después de obtener el paquete tripwire.i386.tar.gz, se procede a desempaquetarlo:
$gunzip tripwire.i386.tar.gz
$tar −xvf tripwire.i386.tar
Esto desempaqueta los siguientes archivos:
♦ tripwire−1.3−1.i386.rpm
♦ tripwire−1.3−1.scr.rpm
Configuración
• Configuración del archivo tw.config
Editar el archivo tw.config para optimizar la tabla de archivos y directorios que deseamos barrer y
mantener su configuración:
Existe una serie de banderas directivas que se utilizan para organizar la forma en que se obtendrán las firmas d
sistema.
Formato:
[!|=] entry [banderas]
donde:
'!'
Significa que entry debe será excluído de la lista de archivos a verificar.
2
Tutorial de Tripwire
'='
Significa que entry será añadida, pero si este es un directorio, entonces todo su contenido será
excluído.
entry
Es la ruta absoluta de un directorio o archivo.
banderas [+|−][pinugsam123456789]
>
Los cambios de archivo son ignorados siempre y cuando el archivo es más pequeño que el
almacenado.
−
Ignora los siguientes atributos.
+
Habilita los siguientes atributos.
♦ p: bits de permisos y modo de archivos.
♦ a: timestamp de acceso.
♦ i: número de inodo.
♦ m: timestamp de modificación.
♦ n: número de ligas (count).
♦ c: timestamp de creación.
♦ u: user id del propietario.
♦ g: group id del propietario.
♦ s: tamaño del archivo
NOTA: hay 9 firmas activas en tripwire 1.3 a diferencia de las 2 que hay activas en 1.2
0: Firma Null
2: Firma Snefru
4: Firma CRC−16
6: Firma MD2.
8: Firma Haval.
1: Firma MD5
3: Firma CRC−32
5: Firma MD4
7: Firma SHA.
9: Firma Null.
Ejemplo:
La siguiente entrada rastreará todos los archivos del directorio /etc, y reportará los cambios en permisos, en el
número de inodo, el número de ligas, uid, gid, timestamp de creación y modificación, y firmará con MD5, y
Snefru, ignorando cualquier cambio en el tiempo de acceso.
/etc +pinugsm12−a
Se han generado patrones predefinidos que hacen innecesario el uso de la forma larga, estos patrones son:
R
L
N
E
[R]ead−only
(+pinugsm12−a)
[L]og file (+pinug−sam12)
ignore [N]othing
(+pinugsam12)
ignore [E]verithing
(−pinugsam12)
Por default, Tripwire usa el patron R.
• Gramática de tw.config
3
Tutorial de Tripwire
La gramática empleada en tw.config es muy parecida a la empleada en el preprocesador de C, cada regla
empleada en este archivo es ratificada en tiempo de ejecución esto proporciona la posibilidad de incluir mayor
número de reglas según nuestras necesidades y el sistema que administramos.
El preprocesamiento de Tripwire fue incluído para aquellos casos en los cuales se tienen un gran número de
máquinas, permitiendo al administrador de los sistemas reusar el tw.config, configurandolo para uno u otro ca
según los componentes del sistema.
@@ifhost HOSTNAME
@@ifnhost HOSTNAME
@@else
@@define VAR STRING
@@undef VAR
@@ifdef VAR
@@ifndef VAR
@@endif
@@include "PATH"
@@ifndef VAR
@@endif
@@include "PATH"
@@{VAR}
Las reglas que se encuentren entre esta
directiva y @@endif serán utilizadas para
esta máquina. Debe usarse el nombre exacto
que el comando uname(1) o hostname(1)
retornen. Por ejemplo: @@ifhost
tutor.asc.unam.mx
Incluye las reglas entre esta directiva y
@@endif.
Suministra la estructura if−else.
Define variable VAR como STRING.Si el
valor no es asignado, entonces nulo será
asignado a VAR.
Elimina la definición asociada a la variable
VAR.
Incluye las reglas desde este punto hasta la
directiva @@endif o @@else si la variable
VAR ha sido definida.
Incluye las reglas desde esta directiva hasta
la directiva @@endif o @@else si la
variable VAR no ha sido definida.
Cierra la estructura @@ifhosts,
@@ifnhosts, ifdef, y @@ifndef.
Obtiene datos desde el archivo PATH.
Incluye las reglas desde esta directiva hasta
la directiva @@endif o @@else si la
variable VAR no ha sido definida.
Cierra la estructura
@@ifhosts,@@ifnhosts, ifdef, y @@ifndef.
Obtiene datos desde el archivo PATH.
@@VAR Sustituye la definición de VAR
por el valor de VAR.
Substituye la definición de VAR por el valor
de VAR.
Ejemplo:
@@ifhost tutor.asc.unam.edu.mx
/etc/tw.log.mentor R
4
Tutorial de Tripwire
@@endif
@@define ARCHIVE R
/etc/tw.log @@ARCHIVE Personalizar la base de datos y configuración del mismo
Existen distintos tipos de configuración según el sistema operativo, estos archivos están optimizados para cada
sistema operativo.
a) Copiar del directorio /path/to/tripwire−1.2/config/ el archivo tw.conf. a la ruta que se definio dentro del
config.h.
ejemplo:
$cp /path/to/tripwire−1.2/configs/tw.conf.linux
/path/to/tripwire−1.2/tw.config
b) Editar el archivo tw.config optimizar la tabla de archivos y directorios que deseamos mantener su
configuración:
Existe una serie de banderas directivas que se utilizan para organizar la forma en que se obtendrán las firmas d
sistema.
Instalación
Instalación con RPM sobre Linux RedHat
Instalando "Tripwire−1.3−1.i386.rpm" usando el comando rpm
Utilizando este paquete rpm obtendremos una instalación de los binarios de tripwire y el archivo de configuración
tw.config. Esto es suficiente para comenzar a utilizar tripwire.
Con esto nos saltamos el tema "como compilar Tripwire para linux".
Sin embargo esto limitará la configuración del Tripwire, si deseamos obtener mayor flexibilidad (modificar la ruta de
base de datos de Tripwire, o cambiar la máscara por default) entonces necesitamos instalar el código fuente y
configurarlo para nuestras necesidades y compilarlo.
Ejecutar los siguientes comandos según necesitemos los binarios o recompilar los fuentes.
(Instalación de los binarios de Tripwire)
$rpm −ivh tripwire−1.3−1.i386.rpm
(Instalación del código fuente de Tripwire)
$rpm −ivh tripwire−1.3−1.src.rpm
Nota: Para poder instalar adecuadamente los binarios es necesario que el usuario tenga la cuenta de root.
5
Tutorial de Tripwire
Localización por Default
Los archivos de configuración se especifican en el código fuente. Así que si llegara a necesitarse personalizar estas rut
será necesario configurar estas directivas y compilar nuevamente Tripwire.
Los archivos de configuración asi como los binarios de Tripwire los encontraremos en:
/usr/local/bin/tw
El archivo de base de datos se localizará en:
/var/tripwire
El contenido de este directorio incluye:
/usr/local/bin/tw
tripwire
siggen
twdb_check.pl
tw.config
Instalación con código fuente
El ejecutable de Tripwire.
Utilería generadora de firmas.
Script perl de verificación de corrupción en la base de datos.
Reglas de Tripwire.
El siguiente método de compilación es válido para cualquier sistema Unix, en el caso de instalar la versión 1.2 sobre
linux, es necesario aplicar una serie de parches sobre el código fuente, esta excepción se puede manejar fácilmente.
a) Obtener los siguientes archivos desde la dirección :
ftp.seguridad.unam.mx
• patch2tripwire.tar.gz (Requerido solo para linux Redhat.)
• tripwire.tar.gz
b) Desempaquetar estos archivos.
Utilizar el comando gunzip.
$gunzip patch_tripwire.tar.gz tripwire.tar.gz
b.2.) Utilizar el comando tar.
$tar tripwire.tar
b.3) (Solo para linux) Mover el archivo de los parches al directorio generado por el comando anterior, entrar al directo
tripwire−1.2, mediante el comando tar desempaquetar los parches.
$mv patch_tripwire.tar tripwire−1.2
$cd tripwire−1.2
6
Tutorial de Tripwire
$tar −xvf patch_tripwire.tar
El paquete de parches generados son:
tripwire−1.2−latin1.patch
tripwire−1.2−rewind.patch
tripwire−1.2−rhlinux.patch
b.4) (Solo para linux) Aplicar los parches a los archivos fuentes de Tripwire. Para realizar esto es necesario que el
sistema cuente con la utileria patch 2.5 y aplicar la siguiente secuencia de comandos:
$patch −p1 −b tripwire−1.2−rhlinux.patch
$patch −p1 −b tripwire−1.2−rewind.patch
$patch −p1 −b tripwire−1.2−latin.patch
c) Es importante obtener los siguientes datos:
Ejemplo:
• plataforma: i386,alpha
• sistema operativo: Linux, SunOs 2.5
• $uname −a
Linux localhost.localdomain 2.2.9−1 #1 dom may 30 13:57:45 CDT 1999 i486 unknown
Ya que contamos con estos datos, dentro del directorio tripwire−1.2 editamos el archivo Ported, este archivo contiene
información para optimizar la compilación para cada plataforma así como las observaciones necesarias para cada siste
operativo.
$vi Ported
Buscamos el sistema operativo así como la plataforma que utilizamos, por ejemplo:
/linux
En el caso de utilizar linux para PC las líneas más adecuadas serán.
vendor:
os:
os version:
compiler:
cflags:
ldflags:
libs:
several (386/25 PC)
linux
0.99.14
gcc
−O
7
Tutorial de Tripwire
conf.h:
tw.config:
notes:
contributor:
conf−linux.h (the system default)
tw.linux
CC=gcc YACC=bison −y FLEX=flex
Cal Page
Esta información quiere decir:
Que tripwire fue portado para linux versión 0.99.14, optimizado para el compilador gcc con la bandera −O, el archivo
configuración conf−linux.h, con el archivo de configuración de la base de datos, el sistema debe tener los binarios de g
bison y flex. Tomar nota de estos valores.
d) Realizar los cambios necesarios a los binarios según la información obtenida anteriormente.
d.1)Editar el archivo Makefile que se encuentra en tripwire−1.2
$vi Makefile
LEX = lex
#LEX = flex # For the GNU crowd
Buscar la directiva YACC y habilitar la más adecuada para nuestro sistema.
YACC = yacc
#YACC = bison −y # For the GNU crowd
Buscar la directiva del compilador CC y habilitar la línea necesaria.
CC = gcc # common
#CC = gcc # also common
Buscar la directiva de banderas de compilación y habilitar la línea adecuada.
CFLAGS=$(RPM_OPT_FLAGS)
#CFLAGS = −O # common
#CFLAGS = −g # common
#CFLAGS = −g # debugging
#CFLAGS = −O −cckr # SGI
d.2) La instalación de Tripwire se realiza sobre una par de rutas sobre default, para modificar estas rutas dentro del
archivo Makefile, buscar las directivas
DESTDIR (Directorio destino de binarios por default /usr/sbin)
8
Tutorial de Tripwire
MANDIR (Directorio destino de manuales por default /usr/man)
DESTDIR = /usr/sbin
MANDIR = /usr/man
Salvar los cambios realizados a Makefile
d.3) Otro archivo que es necesario configurar es config.h que se localiza en tripwire−1.2/include dentro de este archivo
hay que incluir la ruta al archivo de configuración del sistema operativo, por default el archivo de configuración es
conf−svr4.h
#include "../configs/conf−svr4.h"
Por ejemplo si nuestro sistema en linux el archivo de configuración que recomienda Tripwire es conf−linux.h, entonce
la línea debe quedar:
#include "../configs/conf−linux.h"
Salvar los cambios en include/config.h
e) Por default la base de datos es colocada en /tmp/genek, asi tambiéen el archivo de configuración. Se recomienda qu
estos directorios estén montados sobre algún medio magnético portátil por ejemplo un mini disco o una partición
importada de otra máquina, de esta forma evitamos un ataque a la base de datos.
Para modificar esta ruta debe editarse el archivo tripwire−1.2/include/config.h y buscar las líneas de definición:
#define CONFIG_PATH "/tmp/genek"
#define DATABASE_PATH "/tmp/genek"
CONFIG_PATH Ruta al archivo tw.config.
DATABASE_PATH Ruta para la base de datos.
Por ejemplo si queremos que las rutas apunten al directorio /mnt/floppy, entonces las definiciones quedan como sigue:
#define CONFIG_PATH "/mnt/floppy"
#define DATABASE_PATH "/mnt/floppy"
Salvar los cambios realizados a config.h
F) Ejecutar make.
$make
El sistema de compilación del sistema generará los binarios de Tripwire.
Operación
9
Tutorial de Tripwire
• Binarios básicos de Tripwire
La Utilería siggen
Esta utilería provee a los usuarios la capacidad para obtener las firmas de los archivos sin la necesidad de
ejecutar Tripwire.
La sintaxis de siggen es:
siggen [−01234567989aqv] [−h] [file ...]
sig 0: nullsig
sig 1: md5
sig 2: snefru
sig 3: crc32
sig 4: crc16
sig 5: md4
sig 6: md2
sig 7: sha
sig 8: haval
sig 9: nullsig
Donde:
−h : Muestra salida en hexadecimal.
file: Archivo a obtener firmar.
Ejemplo:
$siggen −h tw.config
• Modos de Ejecución de Tripwire
Generación de la base de datos
Para obtener por primera vez la base de datos se requiere realizar los siguiente:
a) Conmutar al modo singler user, esto para evitar tener acceso por parte de otros usuarios al sistema.
# shutdown now −r
b) Opcionalmente dentro del modo singler−user reinstalar los binarios del sistema.
c) Ejecutar tripwire en modo Generación de la base de datos.
# /usr/local/bin/tw/tripwire −initialize
Recomendaciones sobre la base de datos
♦ La base de datos debe ser movida sobre algún medio donde no pueda ser modificada fácilmente.
♦ utilizar un disco en modo de solo lectura.
♦ exportar la base de datos vía NFS a un servidor seguro.
♦ Realizar una copia sobre papel de la base de datos en caso de existir.
♦ Para eliminar la suspicacia sobre la integridad de base de datos, se pueda realizar manualmente una
comparación de la información.
10
Tutorial de Tripwire
Actualizando la base de datos
Un sistema no es una entidad estática muy por el contrario está en continuo cambio ya sea por nuevas
aplicaciones incluídas, actualización del sistema, aplicación de parches al sistema, etc. Es por esto que Tripwi
permite realizar actualización de la base de datos.
Hay dos formas de actualizar la base de datos de Tripwire. El primer método es interactivo, donde Tripwire
proporciona un prompt al usuario donde podemos manualmente actualizar cada una de las entradas especificad
en el tw.config.
Modo Interactivo
Ejecutar Tripwire en modo Interactivo es muy similar al modo de Verificación de integridad. De esta forma,
cuando se encuentra que un directorio o archivo ha sido añadido, borrado o modificado con respecto a la base
datos almacenada.
Tripwire preguntará al usuario si la base de datos debe ser actualizada.
Ejemplo:
/homes/genek/research/tw/src/preen.c
st_mtime: Wed May 5 15:30:37 1993 Wed May 5 15:24:09 1993
st_ctime: Wed May 5 15:30:37 1993 Wed May 5 15:24:09 1993
−−−> File: '/homes/genek/research/tw/src/preen.c
−−−> Update entry? [YN(y)nh?] y
Tripwire en modo Actualización.
La segunda forma de realizar una actualización es utilizando la línea de comando.
Tripwire almacena información asociada a cada archivo indicado en la configuración tw.config. De forma que
un solo archivo es el que se ha modificado, podemos actualizarlo de la siguiente manera:
$tripwire −update /path/to/file.new
O si un conjunto de archivos del archivo tw.config ha sido modificado, puede señalarse la actualización de la
siguiente manera:
tripwire −update /path/to/dir/
En este caso Tripwire regenera la base de datos para cada archivo.
Modo Verificación Rápida.
Tripwire permite saltarse selectivamente ciertas rutinas de firma al momento de ejecución. Esto para acelerar e
tiempo de ejecución en aquellos momentos en que una ejecución total puede resultar prohibitiva para el sistem
pero indispensable para garantizar su integridad, por ejemplo: Una hora pico del sistema, para esto solamente
verificaría por medio de un algoritmo rápido CRC32, por esto es importante que al momento de inicializar una
11
Tutorial de Tripwire
base de datos se haya seleccionado un algoritmo rápido.
Para ignorar firmas se procede de la siguiente forma:
tripwire −i 1 −i 2
Esto indicará a tripwire que ignore los algoritmos de la firma 1 y firma 2, ejecutando solo los restantes.
Esta capacidad de ignorar firmas nos permiten otra característica a tripwire, que es encontrar si se borraron o
añadieron nuevos archivos al sistema, esto lo logramos ignorando todas las firmas.
tripwire −i all
Firmas
MD2 fue desarrollada por Rivest en 1989. El mensaje primero se rellena hasta obtener una longitud de bytes q
sean divisibles entre 16. Un checksum de 16 bytes es incluido en el mensaje, y se calcula valor hash en el
mensaje resultado.
MD4 fue desarrollado por Rivest en 1990. El mensaje es rellenado hasta una longitud de 448 bits divisible ent
512. Un número de 64 bits representa la longitud original del mensaje y es concatenada al mensaje original. E
mensaje es procesado en bloques de 512 bits en la estructura Damgard/Merkle iterativa, y cada bloque es
procesado en tres distintas rutinas.
MD5 (RFC 1321)fue desarrollado por Rivest en 1991, básicamente toma un mensaje de entrada de longitud
arbitraria y produce una salida de 128−bit "fingerprint" o "message digest" de la entrada.
Snefru, fue desarrollado por Ralph Merkle de Xerox PARC. Hay un incentivo de $1000 USD en efectivo a qu
encuentre dos conjuntos de entradas que generen la misma firma. Este premio ha permanecido desde abril de
1990, cuando la versión de dos pasadas de Snefru fue roto por Eli Biham, un Estudiante del Ph.D. de Adi
Shamir. Actualmente Ralph Merkle recomienda usar la versión de 4 ciclos de Snefru.
CRC−32. Este algoritmo tiene una gran variedad de aplicaciones (detección de errores en la transmisión de da
firmas, etc.) es rápido. La versión de CRC−32 incluida en Tripwire fue escrita por Gary S. Brown. Esta versió
tiene una velocidad de ejecución de 111 kbytes/segundo.
Haval fue desarrollado por Yuliang Zheng de la Universidad de Wollongong en 1992, es un algoritmo de un s
camino hash y soporta 15 diferentes niveles de seguridad.
Informes
Para mayores informes con respecto a este tutorial o uso de Tripwire, te recomendamos visitar los tutoriales en línea,
preguntas mas frecuentes acerca de Tripwire, disponibles en las páginas del Departamento de Seguridad en Cómputo d
la UNAM.
Departamento de Seguridad en Cómputo
DGSCA, UNAM
Circuito Exterior, S/N Frente a la Fac. de Contaduría
Tel: 5622−8169
Fax: 5622−8043
12
Tutorial de Tripwire
http://www.seguridad.unam.mx
ftp://ftp.seguridad.unam.mx
E−Mail:[email protected]
Si eres víctima de una Intrusión en tus sistemas, REPORTALA!!!, El UNAM−CERT es un grupo de profesionales que
ayudará y auxiliará de forma profesional para evitar futuras intrusiones en tu sistema.
UNAM−CERT
DGSCA, UNAM
Circuito Exterior, S/N Frente a la Fac. de Contaduría
Tel: 5622−8169
Fax: 5622−8043
http://www.unam−cert.unam.mx
ftp://ftp.seguridad.unam.mx
E−Mail:unam−[email protected]
13
Descargar