[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 383.   Verifica dell'integrità dei file

Attraverso l'accumulo di codici di controllo è possibile verificare l'integrità di file e di directory, contro l'uso improprio del sistema, comprendendo eventualmente l'azione di un virus.

383.1   AIDE

AIDE (1) è un programma per la verifica dell'integrità dei file attraverso il confronto con le informazioni accumulate precedentemente, segnalando le aggiunte, le rimozioni e le alterazioni di file e directory. Si tratta di uno strumento prezioso per scoprire gli utilizzi impropri del sistema comprendendo l'azione di cavalli di Troia e virus.

Il funzionamento di AIDE è controllato da un file di configurazione, che generalmente è bene non lasciare nel file system per motivi di sicurezza, inserendolo solo nel momento del bisogno. Tale file di configurazione viene identificato qui con il nome aide.conf, senza stabilire una collocazione ben precisa.

Nello stesso modo, anche il file contenente le informazioni accumulate riguardo allo stato del file system va protetto, preferibilmente togliendolo dal file system stesso, in modo da garantire che non possa essere letto e alterato.

AIDE può utilizzare diversi algoritmi crittografici per generare i codici di controllo necessari per le sue verifiche. Per questa ragione, a causa delle norme che impediscono l'esportazione di algoritmi del genere, è improbabile che possa trovarsi all'interno delle distribuzioni di origine USA.

383.1.1   Configurazione di AIDE: «aide.conf»

La configurazione di AIDE è simile a quella di Tripwire, con l'aggiunta di direttive nuove. In generale, a parte i commenti che si indicano preceduti dal simbolo # e le righe che non contengono direttive, si distinguono tre gruppi:

In generale, sono indispensabili solo le direttive di selezione che assomigliano molto alle direttive corrispondenti di Tripwire. Le macroistruzioni servono per scandire il file di configurazione in modo differente in base a condizioni determinate, come fa un preprocessore di un linguaggio di programmazione. Anche questa funzionalità è analoga a qualla di Tripwire e qui non viene descritta; eventualmente si può consultare la pagina di manuale aide.conf(5).

Le direttive di configurazione hanno la forma seguente:

nome=valore

In particolare, quando il valore assegnato si riferisce a un file, viene usata una forma descritta nella tabella 383.1. La descrizione delle direttive di configurazione appare invece nella tabella 383.2.

Tabella 383.1. Modalità di indicazione dei file nelle direttive di configurazione.

Forma Descrizione
stdout
Dati emessi attraverso lo standard output.
stderr
Dati emessi attraverso lo standard error.
stdin
Dati letti dallo standard input.
file://file
Si fa riferimento al file indicato.
fd:n
Si fa riferimento al descrittore di file n.

Tabella 383.2. Direttive di configurazione principali.

Nome Predefinito Descrizione
database
file://./aide.db
File delle informazioni accumulate in precedenza.
database_out
file://./aide.db.new
File delle informazioni da accumulare.
report_url
stdout
File usato per emettere le informazioni sull'elaborazione.

Una direttiva di configurazione che fa riferimento a un nome non conosciuto, serve a definire un gruppo. Ciò può essere utile successivamente nelle direttive di selezione, dove si può fare riferimento a questi gruppi senza dover ripetere sempre la stessa espressione di selezione. Questo viene mostrato meglio successivamente.

Le direttive di selezione hanno il formato seguente:

{/|!|=}voce espressione

Il primo carattere definisce il modo in cui va interpretata la direttiva:

/
include un file, o una directory e tutto il suo contenuto, per la scansione e la verifica;
!
escludere completamente un file, o una directory e tutto il suo contenuto, dalla scansione e dalla verifica;
=
escludere il contenuto di una directory dalla scansione e dalla verifica.

Ciò che segue il primo carattere è inteso come un'espressione regolare che descrive uno o più percorsi di file e directory. All'interno di queste espressioni regolari, la barra obliqua normale, /, ha significato letterale.

Il confronto attraverso espressioni regolari avviene se tale gestione è stata inclusa in fase di compilazione, pertanto ciò potrebbe anche mancare, funzionando solo un confronto letterale.

L'espressione che segue rappresenta il tipo di controllo da attuare, attraverso l'indicazione di uno o più gruppi. Questi «gruppi» sono parole chiave che definiscono in breve ciò che deve essere verificato; queste parole chiave possono essere unite assieme inserendo il simbolo +, ma può essere usato anche il simbolo - per sottrarre delle verifiche incluse precedentemente. La tabella 383.5 elenca i gruppi predefiniti e di seguito vengono mostrati alcuni esempi elementari:

# Include la directory / e tutte le directory successive
/ p+i+n+u+g+s+m+c+md5

# Esclude la directory /dev/
!/dev

# Analizza esclusivamente la directory /tmp/ senza il suo contenuto
=/tmp

Tabella 383.5. Elenco dei gruppi predefiniti.

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.
b
Conteggio dei blocchi.
m
Data di modifica.
a
Data di accesso.
c
Data di modifica dell'inode.
S
Incremento di dimensione.
md5
Firma MD5.
sha1
Firma SHA1.
rmd160
Firma RMD160.
tiger
Firma Tiger.
crc32
Firma CRC-32 (se incluso in fase di compilazione).
haval
Firma Haval (se incluso in fase di compilazione).
gost
Firma Gost (se incluso in fase di compilazione).
R
Equivalente a p+i+n+u+g+s+m+c+md5.
L
Equivalente a p+i+n+u+g.
E
Gruppo vuoto.
>
File delle registrazioni p+i+n+u+g+S.

In precedenza è stata descritta la possibilità di definire dei gruppi aggiuntivi nell'ambito delle direttive di configurazione. La sintassi di questa direttiva particolare è la seguente:

nome_gruppo = gruppo_esistente[{+|-}gruppo_esistente]...

In pratica, il segno + aggiunge il controllo del gruppo che precede, mentre il segno - sottrae il controllo del gruppo che precede. A titolo di esempio, viene mostrata la definizione di un gruppo personalizzato, in cui si utilizza il gruppo predefinito R senza la verifica della firma MD5:

Personale = R-md5

Successivamente si può utilizzare esattamente come i gruppi predefiniti:

/usr Personale

È da osservare che i nomi usati nelle direttive di configurazione sono sensibili alla differenza tra maiuscole e minuscole.

Esempio Descrizione
/etc p+i+n+u+g+s+m+c+md5
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, le date di creazione degli inode e la firma MD5.
/etc R
Esattamente come nell'esempio precedente, dal momento che il gruppo riassuntivo R rappresenta le stesse cose.
/etc R+sha1
Come nell'esempio precedente, aggiungendo il controllo della firma SHA1.
!/home/pippo
Esclude qualunque verifica a partire dal percorso /home/pippo/.
=/tmp R
Verifica esclusivamente la directory /tmp/, senza analizzarne il contenuto.

383.1.2   Utilizzo

Il programma aide è quello 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.

aide [opzioni]

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, quando queste sono disponibili.

È da osservare che AIDE distingue nettamente tra il file contenente le informazioni accumulate in precedenza e quello che viene generato dall'elaborazione. In generale si fa riferimento a aide.db per le informazioni originali e aide.db.new per quelle che vengono generate nuovamente. Una volta generato un file nuovo, è compito dell'amministratore cambiargli nome o spostarlo opportunamente. Naturalmente, questa considerazione vale anche quando si usa l'opzione --update per aggiornare un elenco vecchio, nel qual caso AIDE usa entrambi i file: uno in lettura e l'altro in scrittura.

Opzione Descrizione
--init
Genera il file delle informazioni da conservare, in base alle specifiche della configurazione.
--update
Aggiorna il file delle informazioni (legge quello vecchio e ne genera uno nuovo).
--check
Verifica l'integrità dei file secondo le informazioni accumulate in precedenza, informando l'utente di conseguenza.
--config=file_di_configurazione
Consente di indicare esplicitamente il file di configurazione da utilizzare.

383.2   Tripwire

pericolo: software non libero software non libero: non è consentita la commercializzazione a scopo di lucro

Tripwire (2) è un altro programma per la verifica dell'integrità dei file attraverso il confronto con le informazioni accumulate precedentemente. Vengono segnalate le aggiunte, le rimozioni e le alterazioni di file e directory.

Tripwire utilizza un file di configurazione (collocato in una directory da definire), che qui viene 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. È 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 vanno collocati da qualche parte, in modo da non essere individuati facilmente.

383.2.1   Configurazione di Tripwire

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:

!
escludere completamente un file, o una directory e tutto il suo contenuto, dalla scansione e dalla verifica;
=
escludere il contenuto di una directory dalla scansione e dalla verifica.

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 +, quindi quelli da escludere, dopo un solo segno -, come nel caso di +pinugsm12-ac3456789. La tabella 383.13 elenca questi simboli.

Tabella 383.13. Elenco dei parametri di selezione.

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).

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 383.14 elenca questi simboli.

Tabella 383.14. Elenco dei parametri di selezione riassuntivi.

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).

Segue la descrizione di alcuni esempi.

383.2.2   Avvio del programma

tripwire è l'eseguibile che svolge il compito di scansione e verifica dell'integrità dei file e delle directory specificati nel file di configurazione.

tripwire [opzioni]

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.

Segue la descrizione di 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.

Opzione Descrizione
-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.

Segue la descrizione di alcuni esempi.

383.2.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 l'eseguibile 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ò reinnestare il dischetto ed eseguire una scansione di controllo.

mount /mnt/floppy[Invio]

gzip -d < /mnt/floppy/tw.db_dinkel.brot.dg.gz | \
  \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.

383.2.4   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 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) AIDE   GNU GPL

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


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome verifica_dell_x0027_integrita_dei_file.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!