Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Swatch: log del server sotto controllo

Mini-guida all'installazione e all'uso di Swatch, un potente software che consente il controllo efficace, e soprattutto sicuro, dei log di sistema di un server
Mini-guida all'installazione e all'uso di Swatch, un potente software che consente il controllo efficace, e soprattutto sicuro, dei log di sistema di un server
Link copiato negli appunti

Con il passare del tempo la sicurezza dei sistemi informatici è diventata sempre più una delle sfide più importanti da affrontare e da vincere. Uno dei punti salienti della sicurezza informatica e della gestione dei sistemi gnu/linux è il logging degli eventi di sistema. Tutti sanno che qualsiasi sistema *nix-like è capace di immagazzinare una grande quantità di informazioni, più comunemente chiamati log di sistema. Il problema è però capire come gestire questa enorme mole di informazioni. Molte volte capita che informazioni veramente importanti non vengano considerate come tali proprio perché l'amministratore di sistema viene letteralmente sommerso dai log.

È anche vero che nella maggior parte dei casi, nei log di sistema, si celano delle informazioni poco rilevanti ma tra queste, specialmente se abbiamo subito tentativi di attacco remoto, sono "nascoste", informazioni al contrario molto rilevanti. A questo punto l'unico modo per non farsi sorprendere da moli enormi di dati è quello di "filtrare" i log e di apprendere tecniche e strumenti che ci permettono di farlo. In questo articolo abbiamo deciso di trattare l'argomento con l'ausilio di Swatch.

Log Monitoring con Swatch

A volte capita di dover consultare tanti megabyte di log, questo comporta una enorme perdita di tempo. Una buona soluzione sarebbe quella di cercare all'interno di quest'ultimi un certo tipo di informazione. È sicuramente una valida idea ma esiste un altro problema a cui questa soluzione non può dare una altrettanto valida risposta. Un amministratore di sistema ha infatti bisogno di monitorare costantemente il proprio sistema in modo tale che le informazioni più importanti gli vegano subito segnalate. Ciò gli permette di intervenire in maniera quasi istantanea al verificarsi di un particolare problema.

Per risolvere questo problema è nato Swatch (Simple WATCHer o Simple WATCHdog), un pacchetto open source che permette a qualsiasi amministratore di individuare efficacemente l'attività di ogni suo singolo sistema, dei suoi utenti e dei suoi gruppi. Tante sono le caratteristiche messe a disposizione da Swatch.

Così come scritto dagli stessi autori di Swatch, esistono quattro principali obiettivi alla base della creazione del pacchetto:

  1. Permettere la configurazione del programma in una maniera tale da far perdere al massimo pochi minuti all'amministratore di sistema per capire il suo funzionamento.
  2. Inglobare una serie di particolari azioni che possono essere utilizzate dopo la ricezione di una particolare informazione all'interno dei log file.
  3. Permettere di creare, e allo stesso tempo modificare, all'utente di Swatch ulteriori azioni, da usare insieme a quelle già esistenti.
  4. Una volta configurato, Swatch, dovrebbe essere ri-configurabile su richiesta o dopo un particolare periodo di tempo, senza che l'amministratore sia costretto a fermare o riavviare il programma manualmente.

Scarichiamo e compiliamo Swatch

Dopo aver introdotto le funzionalità del primo pacchetto di cui ci occuperemo in questa prima parte di articolo, è arrivato il momento di scaricarlo, compilarlo e riuscire a configurarlo in base ai nostri reali bisogni. Prima di cominciare il download, assicuriamoci di aver installato, e funzionante, sul nostro sistema Perl 5. Ormai tutte le distribuzioni GNU/Linux lo installano di default e non dovrebbero esserci particolari problemi con questo punto. È possibile scaricare il pacchetto dalla home page ufficiale del progetto, sotto la sezione "Released Files" (Figura 1), dal seguente indirizzo: http://Swatch.sourceforge.net/

Al momento della stesura di questo articolo l'ultima versione disponibile è la 3.1.1. Una volta scaricato il pacchetto "Swatch-3.1.1.tar.gz", siamo pronti per scompattarlo e compilarlo.

Swatch è una applicazione scritta completamente in Perl e per questo motivo dopo aver scompattato il nostro archivio ".tar.gz", come segue:

tar xzf swatch-3.1.1.tar.gz
cd swatch-3.1.1/
su root

c'è bisogno di compilare il makefile con il comando:

perl Makefile.PL

In questo modo creeremo il makefile per il nostro pacchetto:

[root@ciaglia.net swatch-3.1.1]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Date::Calc 0 not found.
Warning: prerequisite Date::Parse 0 not found.
Writing Makefile for swatch
[root@ciaglia.net swatch-3.1.1]#

Dopo di che siamo pronti alla compilazione vera e propria del nostro programma:

make
make test
make install
make realclean

Dopo questa procedura, a patto che non abbiate ricevuto particolari problemi di compilazione, siamo pronti ad utilizzare Swatch.

Usare Swatch

Una delle più potenti funzioni di Swatch è quella di esaminare le informazioni così come vengono registrate nel log file. Una peculiarità per ogni amministratore di sistema è quella di analizzare i propri log in tempo reale, senza il bisogno di ritornare a controllare informazioni già lette. È possibile utilizzare l'opzione tail per fare ciò. Ad esempio lanciando il comando:

swatch -t /var/log/authlog

sarà possibile controllare tutti i log generati dall'ultimo lancio dell'applicazione con quella particolare opzione. Ricevendo notifiche temporanee ci sarà possibile anche arrivare facilmente alla radice di alcuni attacchi e permetterci di identificare chi si è loggato sulla nostra macchina prima di una particolare azione.

Usando, invece, l'opzione -f, Swatch può processare un file e leggerlo dall'inizio alla fine. Questa opzione può essere usata per leggere file di log non recenti o altri file di testo contententi informazioni importanti.

Ecco un esempio:

swatch -f /var/log/syslog.0

È una opzione particolarmente utile ed utilizzata quando restiamo lontani dalla macchina per molto tempo. In questo modo potremo controllare il file log in questione senza farci sommergere da informazioni ridondanti.

Capita spesso, inoltre, di voler specificare un percorso alternativo per gli script e i file di configurazione di Swatch. Supponiamo di voler utilizzare Swatch e di forzarlo a leggere un file di configurazione presente nella directory /home/linuxmagazine ed usare la stessa per lanciare il suo processo watcher. Ci troviamo costretti ad utilizzare un comando del genere:

swatch -c /home/linuxmagazine/.swatchrc &

La "e commerciale" viene utilizzata per lanciare in background il programma, mentre l'opzione -c ci aiuta per portare a termine il nostro obiettivo.

Come funziona

Swatch lavora essenzialmente sulle regular expression del Perl. In particolare è stato utilizzato questo potente linguaggio proprio per le sue caratteristiche che ricordano molto Awk e C.

Swatch è costituito da tre parti: un file di configurazione, una libreria di azioni e un programma di controllo. Analizziamo brevemente queste parti.

File di configurazione

Ogni riga presente nel file di configurazione di Swatch consiste di quattro campi separati da un carattere di tabulazione o Tab: una espressione di pattern, un set di azioni se l'espressione è stata trovata, un intervallo di tempo e la definizione di un time stamp.

Ecco un esempio che indica il formato del pattern per un file di configurazione di Swatch:

/pattern/[,/pattern/,...]	action[,action,...]	[ [[HH:]MM:]SS	[start:lenght]]

I pattern sono in pratica delle regular expression che il Perl deve essere in grado di riconoscere.

Time interval

L'intervallo di tempo può essere usato per eliminare i messaggi ripetuti più volte nel file di log (nel nostro caso è

Time stamp

La locazione del time stamp è opzionale ma può essere usata solo quando un intervallo di tempo è specificato. Ad esempio, Swatch utilizza il time stamp solo per confrontare un messaggio con quelli che vengono stati salvati nella lista cronologica.

Azioni

Swatch è in grado di riconoscere un sacco di azioni ma quelle tipicamente di default sono: echo, bell, ignore, write, mail, pipe ed exec.

Analizziamole una per una:

  • echo: invia una linea al terminare di controllo di Swatch;
  • bell: riproduce un segnale bell sul terminale di controllo;
  • ignore: indica a Swatch che deve ignorare la linea corrente e saltare alla prossima;
  • write, mail: utilizzate per spedire una copia di una linea ad una lista di utenti attraverso i comandi write e mail.
  • pipe, exec: il comando pipe permette all'utente di usare delle linee comuni come input per un particolare comando di sistema. Il comando "exec", invece, ci permette di utilizzare un comando di sistema con la possibilità di usare i campi selezionati da una linea comune come argomento per quel comando.

Controlling Program

Il vero e proprio programma è ovviamente Swatch ma quasi tutto il lavoro è svolto da un processo watcher. La prima cosa che deve svolgere Swatch è tradurre il file di configurazione in uno script Perl. Dopo aver creato lo script, Swatch lo esegue e lo manda in background come processo watcher. È proprio quest'ultimo, dunque, che lavora per tutta la durata del processo di esecuzione del programma.

Un esempio di configurazione

Ogni amministratore di sistema dovrebbe avere un file di configurazione personalizzato per ogni utente della propria macchina nella home utente relativa a quest'utlimo. Il nome del file di configurazione è ~/.Swatchrc che conterrà tutti i pattern, le azioni e le impostazioni necessarie al perfetto funzionamento di Swatch. Di seguito un esempio di configurazione del file .Swatchrc:

# Swatch configuration file for Linux Magazine
#
# Last Modified: 7 Marzo, 2006
# Vincenzo Ciaglia <vincenzo>
# GNU/Linux Consulting & Formazione: <http:>
#
### Bad login attempts
# watchfor  /failed/
#        echo Swatching...
#        mail addressess=root,subject=Failed Authentication
### Some is sniffing!
# watchfor   /promiscuous/
#        echo Swatching...
#        mail addressess=root,subject=Someone is sniffing the network!
### Kernel problems or system reboots
# watchfor   /(panic|halt)/
#        echo Swatching...
#        mail addresses=root,subject=System Panic,Halt, or Reboot!
# watchfor  /file system full/
#        echo Swatching...
#        mail addresses=root,subject=File system Full
# watchfor  /su:/
#        echo Swatching...
#        mail addresses=root,subject=Someone sued to root access

Prima di tutto precisiamo che i cancelletti servono a commentare una linea, quindi tutto quello scritto dopo di essi non viene preso in considerazione da Swatch. Per questo motivo, se siete intenzionati ad utilizzare questa configurazione è utile eliminare i cancelletti vicino alla linea di configurazione desiderata. È inutile commentare in questa sede ogni linea, rischieremo di perdere importante spazio per il prosieguo del nostro articolo. Per questo motivo, analizziamo soltanto uno dei tanti pattern contenuti in questo nostro file di configurazione. Una volta spiegata la sintassi di uno sarà facilmente comprensibile anche la configurazione di tutti gli altri. Prendiamo in considerazione l'esempio che segue:

 watchfor  /su:/
        echo Swatching...
        mail addresses=root,subject=Someone sued to root access

Una volta eliminati i caratteri "cancelletto" siamo dunque pronti a cominciare il nostro filtraggio dei log. Quello che abbiamo deciso di controllare sono i messaggi relativi al comando "su". In questo modo saremo in grado di capire se qualcuno ha tentato di loggarsi come utente non privilegiato alla nostra macchina. Abbiamo utilizzato un comando echo per dare al terminale di controllo la linea "Swatching...", il comando mail addresses=root per spedire una email, in locale, all'amministratore di sistema nel caso in cui qualcuno tenti di loggarsi con i permessi di un altro utente, così come specificato nel soggetto della email che verrà spedita a quest'ultimo nel caso in cui si verifichi quest'ultima condizione. Tutto ciò è specificato attraverso la linea subject=Someone sued to root access del file di configurazione. È ovviamente possibile spedire l'email di avviso anche ad un indirizzo email remoto (ad esempio a redazione@html.it).

Spiegata la sintassi risulta ora molto semplice capire la funzione delle altre linee di configurazione e/o pattern con le relative azioni da eseguire.

Opzioni dalla linea di comando

Una volta capito come impostare il nostro file di configurazione principale, ossia "Swatchrc", è arrivato il momento di prendere dimestichezza con le possibilità offerte dalle opzioni di Swatch dalla linea di comando. Abbiamo pensato di inserire qui di seguito la lista delle opzioni che è possibile utilizzare per una maggiore personalizzazione e padronanza del pacchetto. Tutte le opzioni sono utilizzabile attraverso il comando "Swatch" seguito dall'opzione desiderata:

--config-file=/directory/filename
Indica a Swatch che il file di configurazione si trova nella directory indicata La directory di default come più volte detto è: ${HOME}/.Swatchrc .

--help
Stampa delle informazioni sull'uso dei principali comandi di Swatch ed esce.

--input-record-separator=regular_expression
Permette di specificare una particolare regular expression per specificare l'inizio di ogni linea presente nel nostro file di configurazione.

--restart-time=[+]hh:mm[am|pm]
Permette di far ripartire il programma all'ora indicata nell'opzione.

--script-dir=/path/to/directory
Questa opzione fa in modo di forzare lo script "watcher" di Swatch a scrivere su un file nella directory specificata al posto della home directory di un utente. È altamente consigliato scrivere questo file in una directory non scrivibile da parte di un altro utente, come ad esempio lo è /tmp.

--version
Stampa la versione di Swatch ed esce.

-use-cpan-file-tail
Usa il modulo CPAN per leggere un file invece del comando tail.

--tail-file=filename
Esamina le linee di testo presenti nel file specificato allo stesso modo con cui sono state aggiunte in quest'ultimo.

--read-pipe=command
Esamina l'input contenuto insieme all'opzione del comando specificato.

--examine=filename
Usa il file specificato dall'utente tramite questa opzione come il file da esaminare. Swatch lo leggerà soltanto una volta.

Se Swatch viene richiamato senza utilizzate alcuna opzione è come se venisse lanciato il seguente comando da shell:

Swatch --config-file=~/.Swatchrc --tail-file=/var/log/syslog

Oppure, nel caso in cui esista il file "/var/log/messages":

Swatch --config-file=~/.Swatchrc --tail-file=/var/log/messages

Mentre, nel caso in cui il file di configurazione non esista, allora verrà utilizzata la seguente configurazione di default:

watchfor /.*/
echo

In pratica Swatch si comporterebbe come "syslogd", senza filtrare alcun messaggio e leggendoli tutti.

Conclusione

Siamo giunti ai titoli di coda del nostro articolo. Abbiamo visto come sia possibile semplificarci la vita utilizzando tecniche, pacchetti e strumenti tra la miriade di informazioni presenti nei log file di ogni nostro sistema. Speriamo solo che questo articolo sia stato di vostro gradimento e che abbia creato in voi quello spirito pratico capace di farvi sempre più sperimentare ed imparare. Happy hacking!

Ti consigliamo anche