Il monitoraggio è parte integrante di ogni politica di sicurezza per svariati motivi. Tra questi, il fatto che l'obiettivo della sicurezza non è solitamente limitato soltanto alla garanzia della riservatezza dei dati, ma include anche l'assicurazione alla disponibilità dei servizi. È quindi obbligatorio verificare che tutto funzioni come previsto, e rilevare in maniera tempestiva ogni comportamento anomalo o variazione nella qualità dei(l) servizi(o) erogati(o). L'attività di monitoraggio permette di evidenziare tentativi di intrusione e permette di reagire rapidamente prima che si possa arrivare a gravi conseguenze. Questa sezione passa in rassegna alcuni strumenti che possono essere usati per monitorare molti degli aspetti di un sistema Debian. Come tale, completa
Sezione 12.4, «Monitoraggio».
14.3.1. Monitorare i log con logcheck
Il comando logcheck
monitora i file di log ogni ora per impostazione predefinita. Invia messaggi di log inconsueti via email all'amministratore per analisi più approfondite.
La lista dei file monitorati è salvata in /etc/logcheck/logcheck.logfiles
; i valori predefiniti funzionano bene se il file /etc/rsyslog.conf
non è stato completamente stravolto.
logcheck
lavora in uno di tre modi più o meno dettagliati: paranoid, server e workstation. Il primo è molto prolisso, e dovrebbe essere usato solo per server specifici come i firewall. Il secondo modo (predefinito) è consigliato per la maggior parte dei server. L'ultimo è progettato per le workstation, ed è ancora più conciso (filtra maggiormente i messaggi).
In tutti e tre i casi, logcheck
probabilmente dovrà essere personalizzato escludendo alcuni messaggi extra (a seconda dei servizi installati), a meno che l'amministratore non voglia veramente ricevere ammassi orari di lunghe e noiose email. Poiché il meccanismo di selezione dei messaggi è piuttosto complesso, il file /usr/share/doc/logcheck-database/README.logcheck-database.gz
è una lettura consigliata, anche se impegnativa.
Le regole applicate possono essere suddivise in varie tipologie:
quelle che qualificano il messaggio come un tentativo di intrusione (memorizzato in un file nella directory /etc/logcheck/cracking.d/
);
quelle che cancellano tale qualifica (/etc/logcheck/cracking.ignore.d/
);
quelle che classificano il messaggio come un allarme di sicurezza (/etc/logcheck/violations.d/
);
quelle che cancellano questa classificazione (/etc/logcheck/violations.ignore.d/
);
infine, quelle che si applicano ai rimanenti messaggi (considerati come eventi di sistema).
Un evento di sistema è sempre segnalato a meno che una regola in una directory /etc/logcheck/ignore.d.{paranoid,server,workstation}/
stabilisca che l'evento debba essere ignorato. Le sole directory prese in considerazione sono esclusivamente quelle corrispondenti ad un livello di prolissità maggiore o uguale alla modalità di funzionamento selezionata.
14.3.2. Attività di monitoraggio
top
è uno strumento interattivo che mostra l'elenco dei processi attualmente in esecuzione. L'ordinamento predefinito è basato sull'utilizzo corrente del processore e può essere ottenuto con il tasto P. Altri tipi di ordinamento sono per occupazione di memoria (tasto M), per tempo totale di processore (tasto T) e per identificatore di processo (tasto N). Il tasto k permette di terminare un processo inserendo il suo identificatore di processo. Il tasto r permette il renice di un processo, cioè la variazione della sua priorità.
Quando il sistema sembra essere sovraccarico, top
è uno strumento fondamentale per capire quali processi competono per il tempo di processore o consumano troppa memoria. In particolare, spesso è interessante controllare se il processo che utilizza le risorse corrisponde realmente ad un servizio che la macchina mette a disposizione. Un processo sconosciuto in esecuzione con utente www-data dovrebbe subito saltare all'occhio ed essere controllato, dato che potenzialmente potrebbe essere l'istanza di un programma installato ed eseguito nel sistema attraverso la vulnerabilità di un'applicazione web.
top
è uno strumento molto flessibile e le pagine del manuale riportano i dettagli di come modificarne la visualizzazione e adattarla alle abitudini e bisogni personali.
Lo strumento grafico gnome-system-monitor
è simile a top
e fornisce più o meno le stesse caratteristiche.
Il carico del processore, il traffico di rete e lo spazio libero su disco sono informazioni che variano costantemente. Mantenere uno storico della loro evoluzione spesso è utile nel determinare esattamente come viene utilizzato un computer.
Esistono molti strumenti dedicati a questo compito. La maggior parte può recuperare dati via SNMP (Simple Network Management Protocol) al fine di centralizzare l'informazione. Un ulteriore beneficio è che si possono recuperare dati da elementi di rete che non necessariamente sono computer generici, come ad esempio switch di rete o router dedicati.
Questo libro tratta Munin in dettaglio (vedere
Sezione 12.4.1, «Impostazione di Munin») come parte di
Capitolo 12: «Amministrazione avanzata». Debian fornisce anche un altro strumento simile,
cacti. La sua installazione è leggermente più complessa, poiché si basa solo su SNMP. Pur disponendo di un'interfaccia web, capire i concetti coinvolti nella configurazione richiede ancora qualche sforzo. La lettura della documentazione HTML (
/usr/share/doc/cacti/html/index.html
) deve essere considerata un prerequisito.
14.3.3. Rilevare le modifiche
Una volta che il sistema è installato e configurato, a meno di aggiornamenti di sicurezza, la maggior parte dei file e directory rimangono statici, dati a parte. È allora interessante fare in modo che i file realmente non possano cambiare: ogni variazione inattesa dovrebbe perciò catturare la nostra attenzione. Questa sezione presenta alcuni strumenti che permettono di monitorare i file e di avvisare l'amministratore quando si verificano cambiamenti non previsti (o semplicemente di elencarli).
14.3.3.1. Revisione dei Pacchetti con dpkg --verify
dpkg --verify
(o dpkg -V
) è un'interessante strumento che permette di trovare i file installati che sono stati modificati (potenzialmente da un hacker), ma questo dovrebbe essere preso con le pinze. Per fare il proprio lavoro si basa su checksum memorizzati sul proprio database dpkg sull'hard disk (posso essere trovati in /var/lib/dpkg/info/package.md5sums
); un hacker scrupoloso aggiornerà quindi questi file in modo da contenere i nuovi checksum per i file modificati.
L'esecuzione di dpkg -V
verificherà tutti i pacchetti installati e stamperà una riga per ogni file con test fallito. Il formato è uguale a quello di rpm -V
dove ogni carattere indica un test su alcuni meta-dati specifici. Purtroppo dpkg
non memorizza i meta-dati necessari per la maggior parte dei test e quindi questi saranno contrassegnati con un punto interrogativo. Attualmente solo il test di checksum può produrre un "5" sul terzo carattere (quando fallisce).
#
dpkg -V
??5?????? /lib/systemd/system/ssh.service
??5?????? c /etc/libvirt/qemu/networks/default.xml
??5?????? c /etc/lvm/lvm.conf
??5?????? c /etc/salt/roster
Nell'esempio sopra, dpkg riporta una modifica al file del servizio SSH che l'amministratore ha fatto al file compresso invece di usare un'appropriata sovrascrittura di /etc/systemd/system/ssh.service
(che potrebbe essere memorizzata in /etc
come dovrebbe essere ogni altro file di configurazione). Elenca anche più file di configurazione (identificati dalla lettera "c" sul secondo campo) che sono stati legittimamente modificati.
14.3.3.2. Controllo dei pacchetti: debsums
e i suoi limiti
debsums
è l'antenato di dpkg -V
ed è quindi in gran parte obsoleto.Ha gli stessi limiti di di dpkg. Fortunatamente, alcune delle limitazioni posso eseere aggirate (mentre dpkg non offre questa possibilità).
Dal momento che i dati su disco non possono essere sicuri, debsums
offre la possibilità di fare i controlli sulla base dei file .deb
anzichè affidarsi al database di dpkg. Per scaricare i file .deb
fidati di tutti i pacchetti installati, possiamo contare solo sui download autenticati di APT. Questa operazione può essere lenta e noiosa, e quindi non dovrebbe essere considerata una tecnica proattiva da utilizzare in modo abituale.
#
apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
#
debsums -p /var/cache/apt/archives --generate=all
Da notare che questo esempio utilizza il comando grep-status
del pacchetto dctrl-tools, che non è installato in modo predefinito.
14.3.3.3. Monitorare i file: AIDE
Lo strumento AIDE (Advanced Intrusion Detection Environment) permette di verificare l'integrità dei file e rileva tutti i cambiamenti rispetto ad una immagine valida archiviata del sistema. Questa immagine viene memorizzata in un database (/var/lib/aide/aide.db
) contenente le informazioni significative di tutti i file del sistema (impronte digitali, permessi, data e ora e così via). Questo database viene generato inizialmente con aideinit
; esso viene poi utilizzato su base giornaliera (dallo script /etc/cron.daily/aide
) per verificare che non sia cambiato nulla di significativo. Quando viene rilevata una modifica, AIDE la elenca nei file di log (/var/log/aide/*.log
) e invia i risultati via email all'amministratore.
Sono presenti molte opzioni in /etc/default/aide
per modificare il comportamento del pacchetto aide. La configurazione vera e propria di AIDE viene memorizzata in /etc/aide/aide.conf
e /etc/aide/aide.conf.d/
(in realtà, questi file vengono utilizzati da update-aide.conf
per generare /var/lib/aide/aide.conf.autogenerated
). La configurazione indica quali proprietà di quali file devono essere controllate. Per esempio, il contenuto dei file di log cambia regolarmente, e tali cambiamenti possono essere ignorati fino a quando i permessi di questi file rimangono invariati, ma sia il contenuto che i permessi dei programmi eseguibili devono rimanere costanti. Anche se non molto complessa, la sintassi della configurazione non è del tutto intuitiva, ed è quindi consigliato leggere la pagina di manuale aide.conf(5).
Una nuova versione del database è generata giornalmente in /var/lib/aide/aide.db.new
; se tutte le variazioni raccolte sono legittime, viene usato per sostituire il database di riferimento.
14.3.4. Rilevare intrusioni (IDS/NIDS)
suricata
(nel pacchetto Debian con lo stesso nome) è un NIDS — un
Network Intrusion Detection System. La sua funzione è quella di mettersi in ascolto sulla rete e cercare di rilevare tentativi di infiltrazione e/o atti ostili (inclusi attacchi denial of service). Tutti questi eventi vengono raccolti in file multipli in
/var/log/suricata
. Ci sono strumenti di terze parti (Kibana/logstash) per consultare al meglio i dati raccolti.
La configurazione di suricata implica la configurazione e la modifica di /etc/suricata/suricata-debian.yaml
, che è molto lunga poichè ogni parametro è abbondantemente commentato. Una configurazione minima richiede che venga descritto l'intervallo di indirizzi coperti dalla rete locale (parametro HOME_NET
). In pratica, questo significa l'insieme di tutti i potenziali obiettivi d'attacco. Ma per ottenere la maggior parte di queste cose è richiesta la lettura in tutto ed adattandola alla situazione locale.
Prima di questo, si dovrebbe modificare anche il file /etc/default/suricata
per definire l'interfaccia di rete da monitorare e consentire lo script di init (impostando RUN=yes
). Si potrebbe anche voler impostare LISTENMODE=pcap
perchè per impostazione predefinita LISTENMODE=nfqueue
richiede un'ulteriore configurazione per funzionare correttamente (il firewall netfilter deve essere configurato per far passare i pacchetti in qualche coda dello spazio utente gestito da suricata tramite il target NFQUEUE
).
Per rilevare un comportamento malevolo, suricata
ha bisogno di un insieme di regole di monitoraggio: è possibile trovare le regole nel pacchetto snort-rules-default. snort
è il riferimento storico nell'ecosistema IDS e suricata
è in grado di riutilizzare le regole scritte per esso. Purtroppo questo pacchetto manca da Debian Jessie e deve essere recuperato da un altro rilascio di Debian come Testing o Unstable.
In alternativa, può essere usato oinkmaster
(nel apchhetto dello stesso nome) per scaricare di set di regole di Snort da fonti esterne.