[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]


Capitolo 237.   Tripwire

Tripwire (1) è un programma per la verifica dell'integrità dei file attraverso il confronto con le informazioni accumulate precedentemente in un file. Vengono segnalate le aggiunte, le rimozioni e le alterazioni di file e directory. Se usato correttamente, Tripwire può aiutare a scoprire problemi dovuti a un uso improprio del sistema, comprendendo eventualmente l'azione di un virus.

Tripwire utilizza un file di configurazione (collocato in una directory da definire), che qui verrà indicato come tw.config, in modo da seguire la convenzione della documentazione interna di Tripwire.

Come si può intuire, una volta generato il file con le informazioni della situazione attuale del file system, è necessario proteggerlo dalle alterazioni, collocandolo in un file system in sola lettura (come potrebbe essere un dischetto, dove la protezione dalla scrittura viene fatta con un'azione manuale e non può essere modificata elettronicamente). Meglio sarebbe se potesse essere anche nascosto in qualche modo. Nello stesso modo, se possibile, sarebbe opportuno nascondere il file di configurazione.

Tripwire non è un pacchetto che si possa trovare in tutte le distribuzioni GNU/Linux. È decisamente improbabile che possa trovarsi all'interno delle distribuzioni di origine USA. Tuttavia, data la particolarità del programma, non è molto importante disporre di un pacchetto specifico per la propria distribuzione; l'eseguibile tripwire e il file di configurazione andranno collocati da qualche parte, in modo da non essere individuati facilmente.

237.1   Configurazione di Tripwire: tw.config

Per comprendere il funzionamento di Tripwire, è più conveniente vedere prima la sua configurazione attraverso il file tw.config (o qualunque altro nome si decida di utilizzare).

Lo scopo di questo è di elencare i file e le directory che si vogliono tenere sotto controllo, indicando quali dettagli considerare su questi elementi. Nel file di configurazione possono essere usate anche direttive di pre-elaborazione, per selezionare elenchi differenti in presenza di situazioni determinate. In questa sezione viene ignorata tale particolarità; eventualmente si può consultare la pagina di manuale tw.config(5).

Il formato delle direttive attraverso cui si dichiara l'inclusione o l'esclusione di un file o di una directory, è quello seguente. In particolare, i commenti sono preceduti dal simbolo # e conclusi dal codice di interruzione di riga; inoltre le righe bianche e quelle vuote sono ignorate.

[!|=]voce[parametro_riassuntivo][+ parametri_di_selezione - parametri_di_selezione]

Dal momento che si tratta di qualcosa di insolito rispetto alle direttive che si possono incontrare nei file di configurazione di altri programmi, conviene vedere subito un paio di esempi, senza descriverli.

# Include la directory /
/ +pinugsm12-ac3456789

# Esclude la directory /tmp/
!/tmp

Il simbolo iniziale, facoltativo, serve a:

Se non viene indicato alcuno di questi due simboli, si intende verificare il file, o la directory e tutto il suo contenuto in modo ricorsivo.

I parametri di selezione sono dei simboli rappresentati attraverso una singola lettera alfabetica minuscola, o una singola cifra numerica. Ognuno di questi simboli rappresenta l'utilizzo o meno di un'analisi particolare sull'oggetto da verificare: i simboli sono preceduti dal segno +, o dal segno -, a seconda che si voglia includere o escludere quell'analisi particolare.

Solitamente vengono posti inizialmente i simboli da includere, tutti assieme, dopo un segno +, e quindi quelli da escludere, dopo un solo segno -, come nel caso di +pinugsm12-ac3456789. La tabella 237.1 elenca questi simboli.

Simbolo Descrizione
p Verifica dei bit dei permessi.
i Verifica del numero di inode.
n Numero di collegamenti fisici.
u Utente proprietario.
g Gruppo proprietario.
s Dimensione.
> Incremento di dimensione.
a Data-orario dell'ultimo accesso.
m Data-orario dell'ultima modifica.
c Data-orario della creazione o modifica dell'inode.
0 Firma nulla.
1 MD5, RSA Data Security, Inc. Message Digesting Algorithm.
2 Snefru, Xerox Secure Hash Function.
3 CRC-32, POSIX 1003.2.
4 CRC-16
5 MD4, RSA Data Security, Inc. Message Digesting Algorithm.
6 MD2, RSA Data Security, Inc. Message Digesting Algorithm.
7 SHA, NIST Secure Hash Algorithm (NIST FIPS 180).
8 Haval (128-bit).
9 Firma nulla (riservato per uso futuro).

Tabella 237.1. Elenco dei parametri di selezione.

I parametri di selezione riassuntivi, sono identificati attraverso una sola lettera maiuscola, senza essere preceduti dal segno + o -. Possono essere usati da soli, o al massimo seguiti da una serie di parametri di selezione che ne modificano l'effetto. La tabella 237.2 elenca questi simboli.

Simbolo Descrizione
R Sola lettura (+pinugsm12-ac3456789), predefinito.
L File delle registrazioni (+pinug-samc123456789).
N Verifica tutto (+pinugsamc123456789).
E Ignora tutto (-pinugsamc123456789).
> Incremento monotonico (+pinug>-samc123456789).

Tabella 237.2. Elenco dei parametri di selezione riassuntivi.

Esempi
/etc +pinugsm12-ac3456789

Verifica la directory /etc/ e tutto il suo contenuto in modo ricorsivo, verificando: i bit dei permessi, i numeri di inode, i riferimenti agli inode, i numeri UID e GID, le date di modifica, la firma in base al tipo MD5 e Snefru. Viene ignorata la data di accesso, la data di creazione o modifica dell'inode e tutti gli altri tipi di firma.

/etc R

Esattamente come nell'esempio precedente, dal momento che il parametro riassuntivo R rappresenta le stesse cose.

/etc

Esattamente come nell'esempio precedente, dal momento che il parametro riassuntivo R è quello predefinito.

/home/pippo E+ug

Verifica esclusivamente la proprietà dei file (utente e gruppo), come eccezione del parametro riassuntivo E, che da solo escluderebbe tutti i controlli.

/home/pippo E

Esclude tutti i controlli, ma continua a verificare l'aggiunta o la cancellazione di file.

!/home/pippo

Esclude qualunque verifica, ignorando anche l'aggiunta o la cancellazione di file.

=/tmp

Verifica esclusivamente la directory /tmp/, senza analizzarne il contenuto.

237.2   # tripwire

tripwire [opzioni]

tripwire è l'eseguibile che svolge il compito di scansione e verifica dell'integrità dei file e delle directory specificati nel file di configurazione. Si distinguono tre situazioni: la creazione del file contenente le informazioni sulla situazione attuale di ciò che si vuole tenere sotto controllo; l'aggiornamento di queste informazioni in presenza di modifiche volontarie da parte dell'amministratore; la verifica di integrità, cioè il confronto di queste informazioni con la situazione attuale.

A seconda di come viene compilato il programma, si stabilisce la collocazione predefinita e il nome del file di configurazione e del file di registrazione delle informazioni. In generale, conviene utilizzare le opzioni necessarie a specificare tali file.

Alcune opzioni

Se non vengono utilizzate le opzioni -initialize e -update, tripwire si mette automaticamente a verificare l'integrità dei file secondo le informazioni accumulate in precedenza.

-initialize

Genera il file delle informazioni da conservare, in base alle specifiche della configurazione.

-update  percorso_assoluto

Aggiorna le informazioni già esistenti per quanto riguarda la directory o il file indicato come argomento.

-interactive

Inizia la verifica dell'integrità dei file secondo le informazioni accumulate in precedenza e chiede all'utente la conferma o meno della modifica di queste in modo conforme alla nuova situazione trovata.

-loosedir

Può essere utilizzato in fase di verifica per annullare il controllo delle directory, pur mantenendo il controllo del loro contenuto, se questo è indicato nella configurazione. Ciò serve per ridurre la quantità di segnalazioni che si presentano, quando questo può generare solo confusione. In generale, il rischio di perdere informazioni importanti aumenta, ma alle volte l'eccesso può essere dannoso.

-d  file

In fase di verifica dell'integrità dei dati, permette di specificare il file contenente le informazioni raccolte in precedenza. Si può utilizzare un trattino singolo - per fare riferimento allo standard input.

-c  file_di_configurazione

Permette di specificare il file di configurazione, sia in fase di generazione e aggiornamento delle informazioni da conservare, sia in fase di verifica. Si può utilizzare un trattino singolo - per fare riferimento allo standard input.

-v

Emette l'elenco dei nomi di file nel momento in cui avviene la scansione.

Esempi

tripwire -initialize -c /root/tw.config

Genera il file di raccolta delle informazioni, utilizzando un nome predefinito in base alla compilazione dei sorgenti, collocandolo probabilmente nella directory ./databases/ (cioè a partire dalla directory corrente nel momento dell'avvio del programma). Il file di configurazione utilizzato è /root/tw.config.

tripwire -update /etc -c /root/tw.config

Aggiorna il file di raccolta delle informazioni (si fa sempre riferimento al nome predefinito in base alla compilazione dei sorgenti, collocato probabilmente nella directory ./databases/) per le variazioni fatte nella directory /etc/. Il file di configurazione utilizzato è /root/tw.config.

tripwire -interactive -c /root/tw.config -d /root/tw.db

Esegue una verifica di integrità interattiva, utilizzando il file di configurazione /root/tw.config e il file /root/tw.db per il confronto rispetto alla situazione attuale.

tripwire -interactive -c /root/tw.config -d - < /mnt/floppy/tw.db

Esegue una verifica di integrità interattiva, utilizzando il file di configurazione /root/tw.config e il file /mnt/floppy/tw.db (che probabilmente si trova in un dischetto protetto contro la scrittura) per il confronto rispetto alla situazione attuale.

237.3   Configurazione e utilizzo in pratica

Per poter usare Tripwire in modo utile, la prima cosa da fare è studiare la sua configurazione, tenendo conto delle peculiarità del file system. Volendo un controllo generalizzato, bisogna però tenere conto delle aree in cui i dati cambiano continuamente per motivi fisiologici. Quello che segue è un esempio, un po' approssimativo, di una configurazione funzionante, anche se un po' blanda.

# Include il controllo di tutto il file system.
/ +pinugsm14-ac2356789

# Esclude i file di dispositivo
!/dev

# Esclude alcuni file dinamici nella directory /etc/.
!/etc/issue
!/etc/issue.net
!/etc/ioctl.save
!/etc/mtab
!/etc/ntp.drift
!/etc/ld.so.cache
!/etc/snmpd.agentinfo
!/etc/ssh_random_seed
!/etc/mail/sendmail.st

# Esclude le directory personali.
!/home

# Esclude i file riferiti ai moduli che vengono aggiornati a ogni
# avvio del sistema.
!/lib/modules/preferred
!/lib/modules/2.0.34-1/modules.dep

# Esclude la directory /proc/.
!/proc

# Esclude la directory /root/, ma poi aggiunge qualcosa che è
# comunque opportuno controllare.
!/root
/root/bin
/root/.ssh

# Esclude la directory temporanea.
!/tmp

# Esclude i file whatis.
!/usr/X11R6/man/whatis
!/usr/lib/perl5/man/whatis
!/usr/local/man/whatis
!/usr/man/whatis

# Esclude la directory /var/.
!/var

Di sicuro, si potrebbe fare meglio, studiando in modo più dettagliato ogni directory e file del file system da controllare.

Quando si utilizza Tripwire per difendersi da una possibile intrusione nel sistema, è necessario nascondere il file di configurazione, anche se non sempre è facile farlo. Di certo, un modo è quello di conservarlo in un dischetto. Anche il file di registrazione delle informazioni dovrebbe essere archiviato in un posto sicuro e inaccessibile agli «intrusi»; anche in questo caso, il dischetto è l'unica possibilità concreta che hanno tutti.

A titolo di esempio si suppone di avere collocato il binario tripwire e il file di configurazione tw.config nella directory /root/adm/tripwire/.

cd /root/adm/tripwire[Invio]

./tripwire -initialize -c ./tw.config[Invio]

### Phase 1:   Reading configuration file
### Phase 2:   Generating file list
### Phase 3:   Creating file information database
###
### Warning:   Database file placed in ./databases/tw.db_dinkel.brot.dg.
###
###            Make sure to move this file and the configuration
###            to secure media!
###
###            (Tripwire expects to find it in '/var/adm/tripwire/db'.)

Come si può osservare dal messaggio che si ottiene, è stato creato il file ./databases/tw.db_dinkel.brot.dg contenente le informazioni raccolte, dove la parte finale del nome del file, «dinkel.brot.dg» è il nome del nodo. Nel messaggio stesso, viene ricordato di spostare sia il file di configurazione che il file di registrazione delle informazioni (viene chiamato database) in un'unità «sicura». Per esempio, si potrebbe comprimere questo file per poterlo contenere in un dischetto, come nell'esempio seguente:

gzip ./databases/tw.db_dinkel.brot.dg[Invio]

mount /mnt/floppy[Invio]

cp ./databases/tw.db_dinkel.brot.dg.gz /mnt/floppy[Invio]

rm ./databases/tw.db_dinkel.brot.dg.gz[Invio]

cp ./tw.config /mnt/floppy[Invio]

rm ./tw.config[Invio]

umount /mnt/floppy[Invio]

L'esempio è soltanto esplicativo. Il dischetto non è un supporto tecnicamente affidabile, di conseguenza occorre conservare in qualche modo migliore almeno il file di configurazione.

Nel momento del controllo, si può rimontare il dischetto ed eseguire una scansione di controllo.

mount /mnt/floppy[Invio]

gzip -d < /mnt/floppy/tw.db_dinkel.brot.dg.gz | (segue)
  tripwire -c /mnt/floppy/tw.config -d -
[Invio]

### Phase 1:   Reading configuration file
### Phase 2:   Generating file list
### Phase 3:   Creating file information database
### Phase 4:   Searching for inconsistencies
###
###                     Total files scanned:            10650
###                           Files added:              0
###                           Files deleted:            0
###                           Files changed:            10650
###
###                     After applying rules:
###                           Changes discarded:        10649
###                           Changes remaining:        2
###
changed: drwxr-xr-x root         3072 Sep 29 12:17:45 1998 /etc
changed: -rw-r--r-- root           62 Sep 29 12:17:45 1998 /etc/exports
### Phase 5:   Generating observed/expected pairs for changed files
###
### Attr        Observed (what it is)         Expected (what it should be)
### =========== ============================= =============================
/etc
      st_mtime: Tue Sep 29 12:17:45 1998      Tue Sep 29 12:13:30 1998      

/etc/exports
        st_ino: 4100                          4150                          
       st_size: 62                            22                            
      st_mtime: Tue Sep 29 12:17:45 1998      Tue Sep 29 12:13:30 1998      
    md5 (sig1): 3TsxXpVgza:NQutDYSbVIm        1QLSacLNpOIOF6iUqeUo.m        
  crc16 (sig4): 0008f5                        0007e.                        

L'esempio mostra che dal controllo di integrità risulta variato il file /etc/exports: il numero di inode è cambiato e così anche la data di modifica, la dimensione è aumentata e le firme utilizzate (MD5 e CRC-16) sono ovviamente differenti. Anche la directory /etc/ risulta modificata, ma questo sembra essere solo una conseguenza dell'alterazione di questo file.

237.3.1   Uso delle firme

La firma, utilizzando uno o più dei vari metodi elencati nella descrizione della configurazione di Tripwire, serve a verificare che il file o la directory siano sempre gli stessi. La scelta della complessità della firma dipende dalla gravità o meno del problema che ha la sicurezza nel contesto per il quale si utilizza. Di solito ne vengono usate almeno due; se ci si accontenta, si possono usare anche firme piuttosto piccole e semplici. La scelta di firme elementari, riduce il livello di sicurezza, ma anche il peso dell'elaborazione necessaria.

Appunti di informatica libera 2001.01.30 --- Copyright © 2000-2001 Daniele Giacomini --  daniele @ swlibero.org

1) Tripwire   software non libero: non è consentita la commercializzazione a scopo di lucro


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome tripwire.html

[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]