Le tracce di audit sono conservate nel formato binario BSM, così devono essere usati degli strumenti appositi per modificare o convertirli a testo. Il comando praudit(1) converte file di traccia a semplice formato testo; il comando auditreduce può essere usato per ridurre file di traccia per analisi, archiviazione o stampa. auditreduce(1) supporta una varietà di parametri di selezione, incluso il tipo di evento, la classe dell'evento, l'utente, la data o l'ora dell'evento, ed il percorso del file o l'oggetto su cui si opera.
Per esempio, l'utility praudit farà il dump dell'intero contenuto di uno specifico file di log di audit in semplice formato testuale:
# praudit /var/audit/AUDITFILE
Dove AUDITFILE è il nome del file di log di cui fare il dump.
Le tracce di audit consistono in una serie di record di audit composti da token, che praudit scrive sequenzialmente uno per linea. Ogni token è per un tipo specifico, come header che tiene un header di un record audit, o path che tiene un percorso di file da una ricerca del nome. Il seguente è un esempio di un evento execve:
header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec exec arg,finger,doug path,/usr/bin/finger attribute,555,root,wheel,90,24918,104944 subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100 return,success,0 trailer,133
Questo audit rappresenta una chiamata di successo a execve, in cui il comando finger doug è stato eseguito. Il token degli argomenti contiene la riga di comando presentata dalla shell al kernel. Il token path contiene il percorso dell'eseguibile usato dal kernel. Il token attribute descrive il binario, ed in particolare include i permessi del file che possono essere usato per determinare se l'applicazione era setuid. Il token subject descrive il processo in oggetto e conserva in sequenza l'id utente dell'audit, l'id effettivo dell'utente, il group id, lo user id reale ed il group id reale, il process id, l'id della sessione, l'id della porta e l'indirizzo di login. Nota che l'audit user id ed il real user id sono diversi: l'utente robert è diventato root prima di eseguire questo comando, ma questo viene tenuto sotto audit usando lo user id originale. Infine, il token return indica l'esecuzione andata a buon fine, ed il trailer chiude il record.
In FreeBSD 6.3 e successive, praudit supporta anche il
formato di output XML, che può essere selezionato usando l'argomento -x
.
Dato che i log dell'audit possono essere molto grandi, un amministratore probabilmente vorrà selezionarne solo un sottoinsieme utile, ad esempio i record associati con un utente specifico:
# auditreduce -u trhodes /var/audit/AUDITFILE | praudit
Questo selezionerà tutti i record di audit per l'utente trhodes conservati nel file AUDITFILE.
I membri del gruppo audit hanno il permesso di leggere tracce di audit in /var/audit; di default questo gruppo e' vuoto, così solo root può leggere le tracce di audit. Utenti possono essere aggiunti al gruppo audit per delegare diritti di lettura sull'audit. Dato che l'abilità di tracciare contenuti del log di audit fornisce significative informazioni sul comportamento di utenti e processi, si raccomanda che la delega di lettura sia fatta con cautela.
Le pipe di audit sono degli pseudo-device clonanti nel file system dei device che permettono alle applicazioni di intercettare lo stream dei record di audit in tempo reale. Questo è di primario interesse per i creatori di applicativi di intrusion detection e di monitoraggio di sistemi. In ogni caso, per l'amministratore il device della pipe dell'audit è un modo conveniente per permettere il monitaraggio dal vivo senza incontrare problemi con i permessi della traccia audit o la rotazione dei log che interrompono lo stream degli eventi. Per tracciare lo stream degli eventi dell'audit, usa la seguente linea di comando:
# praudit /dev/auditpipe
Di default, i nodi di device delle pipe dell'audit sono accessibili solo dall'utente root. Per renderlo accessibile ai membri del gruppo audit, aggiungi una regola devfs al file devfs.rules:
add path 'auditpipe*' mode 0440 group audit
Leggi devfs.rules(5) per altre informazioni su come configurare il filesystem devfs.
Avvertimento: È facile produrre cicli di feedback di eventi audit, in cui il semplice osservare ogni evento di audit risulta nella creazione di più eventi di audit. Per esempio, se tutto il traffico di rete viene tenuto sotto audit, e praudit(1) viene eseguito da una sessione SSH, un flusso continuo di notevoli dimensioni di eventi audit sarà generato, dato che ogni evento scritto genererà un altro evento. È consigliabile eseguire praudit su un device pipe di audit da sessioni senza audit I/O in grande dettaglio, per evitare fenomeni come questo.
Le tracce di audit sono scritte solo dal kernel, e gestite solo dal demone dell'audit, auditd. Gli amministratori non dovrebbero cercare di usare newsyslog.conf(5) o altri tool per ruotare direttamente i log di audit. Invece, il tool di gestione audit può essere usato per interrompere l'audit, riconfigurare il sistema di audit, ed eseguire la rotazione dei log. Il seguente comando fa sì che il demone audit crei un nuovo log di audit e segnali al kernel di usare il nuovo log. I vecchio log sarà terminato e rinominato, ed a questo punto potrà essere manipolato dall'amministratore.
# audit -n
Avvertimento: Se il demone auditd non sta girando al momento, questo comando fallirà e sarà prodotto un messaggio di errore.
Aggiungendo la seguente linea a /etc/crontab forzerà la rotazione ogni dodici ore da parte di cron(8):
0 */12 * * * root /usr/sbin/audit -n
Il cambiamento prenderà effetto dopo che hai salvato il nuovo /etc/crontab.
La rotazione automatica della traccia dell'audit basata sulla dimensione del file
è possibile attraverso l'opzione filesz
in audit_control(5), ed
è descritta nella sezione sui file di configurazione di questo capitolo.
Man mano che i file di traccia dell'audit diventano di grandi dimensioni, è spesso desiderabile comprimerli o in qualche modo archiviarli dopo che sono stati chiusi dal demone audit. Lo script audit_warn può essere usato per eseguire operazioni personalizzate per una varietà di eventi relativi all'audit, incluse la chiusura pulita delle tracce di audit quando sono ruotate. Ad esempio, il seguente comando può essere aggiunto allo script audit_warn per comprimere le tracce di audit alla chiusura:
# # Compress audit trail files on close. # if [ "$1" = closefile ]; then gzip -9 $2 fi
Altre attività di archiviazione possono includere copiare i file di traccia su di un server centralizzato, cancellare file di traccia vecchi, o ridurre la traccia di audit per rimuovere i record non voluti. Lo script sarà eseguito solo quando i file di traccia sono chiusi in maniera pulita, così non sarà eseguito su tracce lasciate non terminate a seguito di uno shutdown improprio.
Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.