[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
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.
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.
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:
direttive di configurazione, con le quali si stabiliscono delle modalità di funzionamento generali;
direttive di selezione, con le quali si stabiliscono quali file e directory tenere sotto controllo;
macroistruzioni.
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 265.1. La descrizione delle direttive di configurazione appare invece nella tabella 265.2.
|
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:
|
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 265.5 elenca i gruppi predefiniti e di seguito vengono mostrati alcuni esempi elementari:
|
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:
|
Successivamente si può utilizzare esattamente come i gruppi predefiniti:
|
È da osservare che i nomi usati nelle direttive di configurazione sono sensibili alla differenza tra maiuscole e minuscole.
|
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 --init --config=/root/aide.conf
[Invio]
Genera il file di raccolta delle informazioni, utilizzando un nome predefinito in base alla compilazione dei sorgenti, oppure in base alla configurazione, che in questo caso viene indicato espressamente come /root/aide.conf
.
#
aide --update --config=/root/aide.conf
[Invio]
Genera un nuovo file di raccolta delle informazioni aggiornato. Il file di configurazione utilizzato è /root/aide.conf
.
#
aide --check --config=/root/aide.conf
[Invio]
Esegue una verifica di integrità, utilizzando il file di configurazione /root/aide.conf
.
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.
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.
|
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 +, quindi quelli da escludere, dopo un solo segno -, come nel caso di +pinugsm12-ac3456789. La tabella 265.12 elenca questi simboli.
|
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 265.13 elenca questi simboli.
Segue la descrizione di alcuni esempi.
|
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.
|
Esattamente come nell'esempio precedente, dal momento che il parametro riassuntivo R rappresenta le stesse cose.
|
Esattamente come nell'esempio precedente, dal momento che il parametro riassuntivo R è quello predefinito.
|
Verifica esclusivamente la proprietà dei file (utente e gruppo), come eccezione del parametro riassuntivo E, che da solo escluderebbe tutti i controlli.
|
Esclude tutti i controlli, ma continua a verificare l'aggiunta o la cancellazione di file.
|
Esclude qualunque verifica, ignorando anche l'aggiunta o la cancellazione di file.
|
Verifica esclusivamente la directory /tmp/
, senza analizzarne il contenuto.
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.
|
Segue la descrizione di alcuni esempi.
#
tripwire -initialize -c /root/tw.config
[Invio]
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
[Invio]
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
[Invio]
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
[Invio]
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.
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.
|
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.
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 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
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] [translators] [docinfo] [indice analitico]