INFN Sec. Group

swatch: note d'uso

v 1.0
28 Luglio 1998

Roberto Cecchini


Indice

Introduzione
Utilizzo
Configurazione di syslogd
Le patch
Appendice
    Esempio di file di configurazione
    Controllo file di log
Download
 

Introduzione

Swatch è un programma che consente l'analisi del contenuto di file (tipicamente di log), sia in modalità batch, sia continua.

Le sue funzionalità sono grossomodo equivalenti a quelle di grep (o tail -v file | grep), con la differenza che possiede un file di configurazione, modificabile senza dover rilanciare il programma, è capace di un output a colori (nella mia versione) e, per gli utenti più smaliziati, ha a disposizione tutta la potenza delle regular expressions di perl.

Richiede perl: suppongo, ma non sono sicuro, la versione 5, se si vogliono uare le mie patch. L'uso tipico è l'analisi dei logfile per eventi 'anomali': il file di configurazione va accuratamente costruito in modo da eliminare la miriade di messaggi non interessanti, tra cui si potrebbero nascondere quelli significativi (non necessariamente solo dal punto di vista della sicurezza).

Nell'ottica di una gestione 'centralizzata' della sicurezza di una LAN, è opportuno che tutti i messaggi di log delle macchine controllate vengano spediti anche ad una macchina 'sicura', su cui gira swatch, con il duplice risultato di semplificare l'analisi e di evitare alterazioni dei log files: la prima tipica azione di un eventuale hacker.

Utilizzo

Come spiegato nella documentazione originale, che queste note non vogliono assolutamente sostituire, swatch può essere usato in due modi:
  • eseguire una scansione di un file: opzione -f, ad es:
    swatch -c /home/root/.swatchrc.mail   \
           -f /var/adm/syslog/maillog.log 
    
    che scandisce il file di log di sendmail alla ricerca di eventuali messaggi anomali selezionati tramite /home/root/.swatchrc.mail.
  • monitorare in modo continuo un file -- alla tail -v per intendersi, ad es.:
    rxvt -fn '*-courier-medium-r-normal--14-*' \
         -fg gray80 -bg gray50                 \
         -geometry 130x30                      \
         -e swatch /var/adm/syslog/syslog.log
    
    che lancia un terminale a colori dove vengono scritte le righe di /var/adm/syslog/syslog.log scelte tramite ~/.swatchrc.

La possibilità di rappresentare diversamente le righe a seconda del contenuto è di aiuto per alleggerire il compito del sorvegliante: a questo proposito consiglio caldamente l'uso del colore.

Per un esempio di file di configurazione si veda l'Appendice.

Configurazione di syslogd

Come già detto nell'introduzione, sarebbe opportuno che tutti i file di log delle macchine controllate venissero replicati su di una macchina centrale 'sicura'. Per fare questo è necessario modificare i vari file di configurazione di syslog (usualmente /etc/syslog.conf). Ad esempio (da RedHat Linux):
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
kern.*                            /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none    /var/log/messages
*.info;mail.none;authpriv.none    @loghost

# The authpriv file has restricted access.
authpriv.*                        /var/log/secure
authpriv.*                        @loghost

# Log all the mail messages in one place.
mail.*                            /var/log/maillog

# Everybody gets emergency messages
*.emerg                           *
*.emerg                           @loghost

# Save mail and news errors of level err and higher in a
# special file.
uucp,news.crit                    /var/log/spooler
Attenzione a usare TAB invece di spazi!
loghost è ovviamente il nome della macchina destinata a ricevere i messaggi di log.

Le patch

Ho scritto queste patch per due ragioni:
  • introdurre il supporto del colore e permettere l'uso di attributi di visualizzazione multipli;
  • far funzionare il meccanismo di rilettura del file di configurazione, via kill -HUP al processo, che, almeno nel mio caso -- HPUX 10.20 e perl 5.004 -- non funzionava.

Ho provato ad interpellare l'autore, ma non ho avuto risposta.

Rispetto al programma originale sono stati aggiunti i seguenti attributi di stampa:
black, red, green, yellow, blue, magenta, cyan, white e i corrispondenti con suffisso bg (ad es.: redbg) per i colori di sfondo. Inoltre gli attributi sono cumulabili: vanno separati con ':' (ad es.: red:greenbg).

Appendice

 
Esempio di file di configurazione
Esempio di file di configurazione
#           messaggi da ignorare

#   time sincronization
/xntpd/                         ignore

#   server pop e imap
/pop3d.*: login/                ignore
/popper.*connect|stats|apop/i   ignore
/imapd.*idle|reset/             ignore

#   named
/named\[.+\]:/                  ignore

#   ssh
/ssh.*Generating.*key/          ignore
/ssh.*RSA key generation/       ignore
/ssh.*RSA.*accepted/            ignore

#   automounter
/amd\[\d+\]:/                   ignore

#   router
/IPACCESSLOGP.*\(25\)/          ignore

#            messaggi da evidenziare
#      (gli attributi richiedono le patch)

/\slogin/i                      echo=redbg:white,bell=3
/\(su\) session/                echo=green:bold,bell=5
/badlogin/                      echo=bold:magenta,bell=3
/authentication failure/        echo=bold:red,bell=3
/telnet|rlogin|rexec|ftp|rsh/   echo=bold:yellow
/finger|talk/                   echo=redbg:white
/file system full/              echo=red:bold,bell=8 01:00 0:16

#            fai vedere tutto il resto
/./                             echo
Controllo file di log
Se si sceglie la filosofia del log file centralizzato, diventa importante tenere sotto controllo le sue dimensioni.

Per comodità del lettore allego una copia di un programma in perl (preso quasi pari pari dalla distribution di RedHat) che provvede alla rotazione, e alla cancellazione, dei file di log: logrotate.

Viene lanciato da cron, controllato da un file di configurazione -- /var/adm/rotatelog.cfg -- e scrive un suo log in /var/adm/rotatelog.log. Ad esempio, il seguente file di configurazione:

/var/adm/syslog/mail.log     daily    rotate=5    shell
kill -HUP `ps -e \
   | awk -v pid=$$ '$NF~"syslogd" { if ($1 != pid) print $1}'`
endshell
/var/adm/syslog/syslog.log   daily    rotate=15   shell
kill -HUP `ps -e \
   | awk -v pid=$$ '$NF~"syslogd" { if ($1 != pid) print $1}'`
endshell
provvede alla rotazione giornaliera di /var/adm/syslog/mail.log e /var/adm/syslog/syslog.log, mantenendo le ultime 5 versioni del primo e le ultime 15 del secondo.
Le righe tra shell e endshell sono script che vengono esguiti dopo ogni rotazione e servono a far prendere atto a syslogd che il file di log è cambiato.

Attenzione, se si ruota un file sotto osservazione di swatch, bisogna inviargli un segnale di -HUP (come a syslogd): la soluzione più semplice è probabilmente quella di lanciarlo con l'opzione -r, avendo cura di specificare un'ora di restart immediatamente successiva a quella dell'esecuzione di logrotate, o, in alternativa, di eseguire lo script hupswatch.pl, che manda un SIGHUP a tutti i processi swatch attivi, e di proprietà dell'esecutore (nela documentazione c'è un accenno a qualcosa del genere, ma lo script non esiste, quindi ne ho scritto uno io).
In quest'ultimo caso l'ultima voce del file di configurazione di sopra diventa:

/var/adm/syslog/syslog.log	daily	rotate=15	shell
kill -HUP `ps -e \
   | awk -v pid=$$ '$NF~"syslogd" { if ($1 != pid) print $1}'`
endshell
/usr/local/bin/hupswatch,pl

Download

  • Tar file con i sorgenti originali;
  • le mie patch;
  • logrotate (in perl) da RedHat Linux 4;
  • hupswatch.pl (in perl): uno script per mandare un SIGHUP a tutti i processi swatch attivi.
 

Roberto Cecchini

Last modified: Tue Jul 28 15:08:53 METDST 1998
URL: http://security.fi.infn.it/tools/swatch/index.html