Uno dei metodi migliori per individuare codice dannoso all'interno del PC consiste nella cosiddetta "riconciliazione degli oggetti". Nel processo di riconciliazione degli oggetti si ha l'obiettivo di scoprire se tutto sia rimasto esattamente come lo avete lasciato.
Ecco come funziona, prendendo come esempio un sistema Linux. Durante il processo di riconciliazione file, directory e device vengono confrontati ad una loro copia "fotografata" in precedenza. Ad esempio, supponiamo che da un backup prendiate il file del comando top
(il comando top fornisce in tempo reale istantanee dell'attività del processore, mostrando una lista dei task del sistema che fanno un uso più intenso della CPU) com'era subito dopo l'installazione e lo paragoniate con quello che si trova sul vostro disco fisso. Se questi due differiscono e voi non avete aggiornato quel pacchetto c'è per forza qualche problema. In questa analisi lo strumento migliore è senz'altro Tripwire.
Cos'è Tripwire
Tripwire è un tipo di IDS (Intrusion Detection System) flessibile e facile da usare. La sua funzione è quella di controllare lo stato di determinati file rispetto ad uno stato di partenza (o baseline). Una modifica non prevista di questo stato può essere indice della compromissione del sistema e della manipolazione non autorizzata di comandi, log di sistema oppure file di configurazione.
Esistono due versioni di Tripwire, una commerciale ed una open source, entrambe la versioni del tool usano diversi algoritmi per testare l'integrità dei file, algoritmi che garantiscono un'elevatissima affidabilità. Tripwire è un eccellente strumento per la sicurezza, ma solo se utilizzato unitamente ad altre misure. Ad esempio: se non proteggete la vostra situazione di partenza e i database delle impronte di ogni oggetto l'uso di Tripwire non apporterà alcun beneficio.
Se un intruso riuscisse a modificare il database potrebbe sovvertire l'intero schema di controllo dell'integrità dei file. Un modo sicuro per proteggere il database è quello di conservarlo su un supporto di sola lettura oppure su un disco rimovibile, questo metodo elude la possibilità di modifiche non autorizzate.
Funzionamento e caratteristiche
Come punto di partenza Tripwire crea un database delle impronte digitali con all'interno una "fotografia" dei file di sistema in uno stato iniziale che viene considerato sicuro. L'impronta digitale di ogni singolo file, generata dal programma, è unica.
Da quel momento in poi Tripwire sarà in grado di controllare se ci sono state modifiche nel contenuto, nella data di modifica, nei permessi, negli attributi oppure cancellazioni dei file presi in considerazione. Se modifiche ci sono state Tripwire informa l'amministratore di sistema attraverso un rapporto dettagliato e, se configurato opportunamente, messaggi di posta elettronica.
Il programma effettua questo compito attraverso una verifica automatizzata eseguita ad intervalli regolari paragonando il sistema attuale con il database. Se le modifiche sono legittime, perché dovute alla normale attività del sistema, l'amministratore può aggiornare la baseline del database di Tripwire inglobando il nuovo status. Se le modifiche non vengono ritenute valide l'amministratore può immediatamente verificare quali componenti sono stati alterati e ripristinare il tutto.
Tripwire permette inoltre di criptare i suoi file di configurazione rendendoli modificabili solo attraverso l'inserimento della password creata in fase di installazione. Per utilizzare Tripwire sono richieste infatti due password:
- La site password, di carattere generale, utilizzata per il file di configurazione e le policy; può essere utilizzata per altre macchine esportando il file
site.key
; - La local password, per il file database ed i report generati.
Di seguito riportiamo le caratteristiche più importanti del tool:
- Tripwire può eseguire le sue funzioni attraverso connessioni alla rete. Quindi, potete generare un database di impronte per un'intera rete, al momento dell'installazione;
- Tripwire è dotato di linguaggi per la gestione delle macro, pertanto possiamo automatizzare alcune attività del tool;
- Il programma è scritto in linguaggio C e si compila ovunque senza problemi di portabilità del codice;
- Sebbene originariamente concepito per Unix e non per Linux, è ormai disponibile per quasi tutte le distribuzioni attuali.
I file più importanti di Tripwire
Qui di seguito trovate una descrizione completa dei ruoli svolti dai due file fondamentali di Tripwire.
tw.cfg
Il file /etc/tripwire/tw.cfg
è il file di configurazione di Tripwire che memorizza, in forma cifrata, le informazioni specifiche del sistema, come ad esempio la posizione dei file e la data. Lo script installer twinstall.sh
e il comando twadmin
generano questo file usando le informazioni presenti nella versione testuale del file di configurazione /etc/tripwire/twcfg.txt
.
Dopo aver eseguito lo script di installazione, l'amministratore del sistema può cambiare i parametri, modificando /etc/tripwire/twcfg.txt
e rigenerando una copia firmata del file tw.cfg
, usando il comando twadmin
. Vedremo come lavorare con questi file nel seguito dell'articolo.
Variabile | Commento |
---|---|
DBFILE | Questa variabile indica il vostro database. Cioè il file che contiene "l'istantanea" del vostro sistema. |
EDITOR | Memorizza il path del vostro editor di testi preferito. |
EMAILREPORTLEVEL | Questa variabile indica il livello di descrittività del report delle e-mail di Tripwire. |
MAILPROGRAM | Indica la locazione del vostro programma di posta, specificando tutte le opzioni che bisogna passargli da riga di comando. |
POLFILE | La variabile indica il path del file dei criteri di protezione, di solito è /usr/TSS/policy/tw.pol . |
REPORTFILE | Questa variabile indica dove Tripwire conserva i file di report. |
REPORTLEVEL | Indica il livello di verbosità dei report di Tripwire. |
ROOT | La variabile indica la directory radice della versione binaria di Tripwire. |
SITEKEYFILE | Indica la locazione della vostra frase di accesso al sito. |
SYSLOGREPORTING | Se impostata a TRUE verrà usato SysLog per memorizzare gli avvisi di Tripwire. |
tw.pol
Il file /etc/tripwire/tw.pol
è il file attivo della policy di Tripwire, è un file cifrato che contiene i commenti, le regole, le direttive e le variabili dei criteri di protezione. Questo file regola il modo di controllo del vostro sistema da parte di Tripwire.
Ogni regola nel file policy specifica un oggetto del sistema da monitorare. Le regole specificano altresì quali cambiamenti sono da riportare e quali da ignorare. Gli oggetti del sistema sono dei file e delle directory che desiderate controllare. Ogni oggetto è identificato da un nome. Una proprietà si riferisce ad una caratteristica singola di un oggetto che il software di Tripwire può monitorare. Le direttive controllano il processo di condizione delle regole in un file policy. Durante l'installazione, l'esempio di file policy di testo, /etc/tripwire/twpol.txt
, viene usato per generare il file policy attivo di Tripwire. Questi due file sono importantissimi poiché prima di eseguire effettivamente Tripwire dovreste metterli a punto.
Nella prossima parte dell'articolo esamineremo in profondità l'installazione e l'uso di Tripwire.
Installare Tripwire
Dopo aver parlato nella prima parte di questo articolo delle caratteristiche di Tripwire, mettiamo finalmente le mani in pasta. Prima di usare il programma bisogna installarlo nella nostra Linux box: il modo più semplice per installare Tripwire è quello di utilizzare il pacchetto, in formato RPM, reperibile dal sito del progetto. Una volta scaricato l'RPM lo installiamo (figura 1) con il comando:
# rpm -ivh tripwire-2.3.1-14.i686.rpm
Se usate una distribuzione Debian based (come Ubuntu, KUbuntu, ecc.) potete usare il comando apt-get
oppure lo strumento di gestione dei pacchetti incluso nella vostra distribuzione. Durante l'installazione verranno create due directory:
/var/lib/tripwire/:
la directory in cui verranno memorizzati i report ed il database di Tripwire;- /
etc/tripwire/:
directory dove si trovano i file di configurazione e le key di codifica.
Per completare l'installazione è necessario eseguire lo script di configurazione twinstall.sh
, lo trovate nella directory /etc/tripwire/
. Questo script vi chiederà di scegliere la password locale e quella per il sito, le due password inserite verranno successivamente utilizzate per generare chiavi crittografate per proteggere i file di Tripwire.
Nel selezionare la password per il sito e la password locale, dovreste tener conto delle seguenti indicazioni:
- Utilizzate almeno otto caratteri, alfanumerici e simbolici;
- Non utilizzate le virgolette;
- Le password scelte devono essere completamente differenti dalla password di root o da qualsiasi altra password impostata per un utente del sistema;
- Utilizzate password diverse ed uniche sia per la chiave del sito, sia per quella locale.
Un'ultima avvertenza: se doveste dimenticarvi la password, sappiate che non c'è alcun modo di decifrare un file con firma. Se ciò dovesse accadere, i file non sarebbero più utilizzabili e sareste costretti a riconfigurare lo script. Criptando i file di configurazione, di policy, di database e di report, Tripwire li protegge da "sguardi indiscreti", impedendo a chiunque non sia in possesso delle password di visualizzarli. Ciò significa che, semmai un "intruso" riuscisse ad accedere come utente root al vostro sistema, non sarebbe poi in grado di modificare i file di Tripwire per nasconderne le tracce. Una volta criptati e firmati, i file di configurazione e di policy generati mediante lo script twinstall.sh
, non dovranno mai essere rinominati oppure spostati.
Inizializzare il database di Tripwire
Terminata l'installazione passiamo alla creazione del database. Nel database di sistema verranno introdotte tutte le voci riguardanti i file da controllare secondo le indicazioni presenti nel file di configurazione tw.pol
. Il comando da inserire è:
# tripwire --init
Tripwire ci chiederà di inserire la password locale e in seguito procederà alla creazione vera a propria del database, mettiamoci comodi, quest'operazione può durare diversi minuti (figura 3). Una volta portate a termine queste operazioni, Tripwire possiede la "fotografia" del vostro filesystem, necessaria per l'esecuzione di controlli in cerca di eventuali modifiche apportate ai file più importanti. Dopo l'inizializzazione del database di Tripwire, dovreste eseguire un primo controllo dell'integrità. Tale controllo va fatto prima di collegare il computer alla rete e di metterlo in funzione.
Nel caso alcuni file specificati in tw.pol
non esistano nel nostro disco il comando visualizzerà messaggi di errore simili a questo:
### Warning: File system error. ### Filename: /usr/share/grub/i386-redhat/e2fs_stage1_5 ### No such file or directory ### Continuing... ### Warning: File system error. ### Filename: /usr/share/grub/i386-redhat/fat_stage1_5 ### No such file or directory ### Continuing...
Usare Tripwire
A questo punto potete confrontare il database creato con i file di sistema attuali e cercare i file mancanti oppure modificati, il comando da usare è:
# tripwire --check
Durante il controllo dell'integrità, Tripwire confronta lo stato degli oggetti di filesystem attuali con le proprietà registrate nel suo database. Tutte le violazioni vengono visualizzate sullo schermo ed una copia criptata del report viene creata all'interno della directory /var/lib/tripwire/report/
. Per esaminare i report di Tripwire si usa il comando twprint
(figura 4). Con il comando twprint -m r
potete visualizzare i contenuti in chiaro di un report; è comunque necessario specificare a twprint il file di report da mostrare, ecco la sintassi completa:
# twprint -m r --twrfile /var/lib/tripwire/report/nome_del_report.twr
Le opzioni -m r
indicano a twprint
di decodificare un report di Tripwire, mentre l'opzione --twrfile
indica al comando di utilizzare un file di report specifico. Il nome del report che desiderate visualizzare comprende il nome dell'host usato da Tripwire per generare il report, nonché la data e l'ora di creazione. Potete visualizzare i report salvati in passato in qualsiasi momento. Per visualizzare la lista di tutti i report creati da Tripwire digitate semplicemente:
# ls /var/lib/tripwire/report
Se le modifiche apportate ai file controllati sono state fatte intenzionalmente, modificate il file database in modo che tali cambiamenti non vengano più segnalati come violazioni. Se, al contrario, i file controllati sono stati modificati impropriamente, potete sostituire gli originali con i backup, reinstallare il programma oppure reinstallare l'intero sistema operativo.
Aggiornamento del database
Se di recente avete installato un'applicazione o modificato dei file di sistema importanti, Tripwire segnalerà in modo corretto tutte le violazioni dell'integrità. In questo caso, come detto prima, è necessario aggiornare il database di Tripwire.
Per aggiornare il proprio database in modo che accetti violazioni di policy intenzionali, Tripwire crea innanzitutto un file report a riferimenti incrociati per il database e poi integra al suo interno le violazioni "consentite" estrapolandole dal file report. Attenzione, nell'aggiornare il database, assicuratevi di usare il report più recente. Per aggiornare il database, digitate il comando seguente:
# tripwire --update --twrfile /var/lib/tripwire/report/nome_report_recente.twr
Tripwire visualizzerà il file report utilizzando l'editor di testo predefinito (quello che avete specificato nel file di configurazione). A questo punto, potete deselezionare i file che non desiderate aggiornare nel database di Tripwire. È importante modificare solo le violazioni dell'integrità autorizzate. Tutti gli aggiornamenti proposti per il database di Tripwire hanno una [x]
che precede il nome del file. Se volete escludere una violazione valida dal database di Tripwire, rimuovete la x
. Dopo aver chiuso l'editor, inserite la vostra password locale e il database verrà automaticamente ricostruito e firmato.
Tripwire e la posta elettronica
Possiamo configurare Tripwire in maniera che spedisca un messaggio e-mail, ad uno o più indirizzi, qualora venga violata una specifica regola nel file di policy. Per far questo, occorre prima individuare le regole di policy da controllare e poi inserire gli indirizzi di posta da contattare se avviene che tali regole vengono eluse.
Per i grandi sistemi, con più amministratori, è possibile inviare messaggi di avvertimento a due o più persone in presenza di un particolare tipo di infrazione. Una volta stabilito a chi inviare il messaggio e cosa notificare, modificate il file /etc/tripwire/twpol.txt
aggiungendo una linea emailto=
alla sezione della direttiva di ogni regola. Per farlo, inserite una virgola alla fine della riga severity=
e digitate emailto=
all'inizio della riga seguente, seguito da uno o più indirizzi e-mail.
È possibile specificare più indirizzi e-mail, separandoli con un punto e virgola. Ad esempio, se desiderate che due amministratori di sistema ricevano una notifica via e-mail nel caso in cui venga modificato un programma di networking, modificate la direttiva della regola "Networking Programs" nel modo seguente:
(
rulename = "Networking Programs",
severity = $(SIG_HI),
emailto = primo-admin@mail.tld;secondo-admin@mail.tld
)
Dopo aver trasformato il file di policy dovete generarne una copia aggiornata, criptata e firmata. Di seguito riporto l'intera procedura da seguire. Prima di modificare le policy di Tripwire bisogna creare il file da editare utilizzando il file tw.pol
corrente:
# twadmin --print-polfile tw.pol > polfile.txt
Ora è possibile editare il file polfile.txt
secondo le proprie necessità, magari inserendo le righe viste in precedenza. Per rigenerare il file tw.pol
definitivo si userà il comando:
# tripwire --create-polfile polfile.txt
Per verificare che la configurazione delle notifiche e-mail sia corretta e funzionante, utilizzate il seguente comando:
# tripwire --test --email tuoindirizzo@email.tld
Il programma provvederà immediatamente ad inviare una e-mail di notifica all'indirizzo specificato.
Complimenti! Se tutto funziona a dovere avete appena fatto un piccolo passo avanti nel campo della sicurezza sul pianeta Linux.