|
Gian Luca Matteucci
gianluca@gmatte.net
Fax: +39 02 700 438 846 ICQ: 302-452-388 gmatte@jabber.linux.it
|
md5sum mini-howtoQuesto documento spiega come sia possibile verificare se e quali file sono stati modificati in seguito ad un'intrusione, senza ricorrere a strumenti complessi. 1. Introduzione1.1 CopyrightCopyright © 2001-2005 Gian Luca Matteucci 1.2 DisclaimerUse the information in this document at your own risk. I disavow any potential liability for the contents of this document. Use of the concepts, examples, and/or other content of this document is entirely at your own risk. All copyrights are owned by their owners, unless specifically noted otherwise. Use of a term in this document should not be regarded as affecting the validity of any trademark or service mark. You are strongly recommended to take a backup of your system before major installation and backups at regular intervals. 1.3 NewsLa versione aggionata di questo documento è disponibile in formato HTML o come sorgente SGML all'URL http://www.gmatte.net/pub/MY-HOWTO/. 1.4 TranslationsFino a che non troverò il tempo di tradurre in inglese questo HowTo, dubito che a qualcuno possa venire in mente di tradurlo. ;-) Ogni eventuale commento può essere inviato al mio indirizzo: gianluca@gmatte.net. 2. Prima di iniziare2.1 PerchéUna delle prime cose che un cracker fa dopo essere riuscito ad assumere il controllo di un sistema è, di solito, consiste nell'installare un qualche strumento per poter, in futuro, accedere liberamente al sistema e sostituire alcuni comandi per nascondere all'admin ogni sua attività. Alcuni di questi posono essere È molto difficile per l'admin sapere se e cosa è stato modificato dall'intruso. Un semplice portscan ci può dire se c'è qualche porta aperta che non dovrebbe esserlo, ma se il cracker avesse modificato, per esempio, sendmail, in questo modo non ce ne accorgeremmo. 2.2 AlternativeSe non avete voglia o non potete seguire le indicazioni di questo How-To, potete utilizzare software come Tripwire, che potete trovare su www.tripwire.com. L'utilizzo di questo software esula dagli scopi di questo documento, quindi non si faranno altri riferimenti. 2.3 Software necessarioTutto quello che ci serve è il comando md5sum che, nella Slackware, si trova nel pacchetto 3. Speriamo nel meglio e prepariamoci al peggioSe vogliamo controllare cosa è stato modificato dopo un'intrusione, abbiamo bisogno inanzitutto di un riferimento sicuro con il quale fare un confronto. Le varie distribuzioni forniscono, insieme ad ogni pacchetto, un checksum che puo' essere utilizzato per verificare se il pacchetto in nostro possesso (preso, magari, dal CD di una rivista o masterizzato da un amico) corrisponde all'originale. 3.1 Cosa controllareLa prima cosa da fare è decidere quali file tenere d'occhio. Potremmo decidere di controllare tutti i file del nostro sistema, ma questa non è una buona idea per svariati motivi, fra i quali:
3.2 Creiamo i checksumPer creare il checksum md5 di un file è sufficiente dare il comando: $ md5sum file1 ottenendo come output qualcosa del tipo d23b066e4cee929cd14b6e28236ed0c9 file1 oppure possiamo passare a $ md5sum * ottenendo 356442aef07977a03d87c78b6b62adf0 file1 631056d771a0dfb2f04297b481af3039 file2 d23b066e4cee929cd14b6e28236ed0c9 file3 a05d0618a5491d02b8c9a5dcfc537f6d file4 7dff9ed4b09840d1bd87ef48d18ddf9f file5 b49d728330bf133c5483d634304397b3 file6 Dal momento che non penso ci sia qualcuno tanto masochista da generare a mano tutti i checksum, vediamo come si può automatizzare il procedimento. /bin/* /boot/vmlinuz* /etc/fstab /etc/hosts.allow /etc/hosts.deny /etc/inetd.conf /etc/lilo.conf /etc/login.access /etc/login.defs /etc/securetty /etc/serial.conf /etc/services /sbin/* /usr/bin/* /usr/local/admin/* /usr/local/sbin/* /usr/sbin/* e salviamolo, per esempio, come
#! /bin/sh
CONFIG_FILE=/etc/fsichk.conf
CHECKSUM_FILE=/usr/secure/checksums
for i in `cat $CONFIG_FILE`; do
if [ ! -d "$i" ]; then
/usr/bin/md5sum "$i" >>$CHECKSUM_FILE;
fi;
done;
I checksum generati saranno salvati nel file indicato da 3.3 Mettiamoli al sicuroPuò sembrare scontato, ma concedetemi qualche byte per sottolineare che tutto quello che abbiamo fatto fino ad ora risulterebbe un'inutile perdita di tempo se lasciassimo il file con i checksum sul sistema che vogliamo tenere sotto controllo. Inutile che il file sia leggibile solo da root, dal momento che stiamo considerando l'eventualità che l'intruso sia riuscito a acquisire i privilegi di root. La cosa migliore da fare sarebbe salvare il file in un floppy e conservarlo in un luogo fisicamente sicuro. E se il server si trovasse chiuso in un rack a qualche centinaio di km di distanza dal SysAdmin? Questa è la mia situazione e ho pensato di risolvere il problema salvando il tutto su di un floppy, proteggendolo dalla scrittura e inserendolo nel drive del server. In questo modo il floppy può essere montato normalmente, anche da remoto, nel momento in cui si vuole verificare l'integrità dei file controllati (come spiegato nel prossimo capitolo). Qualche fanatico potrebbe obiettare che, mentre io dormo beatamente a 300 km di distanza, un malintenzionato potrebbe raggiungere il server, estrarre il floppy e alterarne il contenuto. Questo è assolutamente vero, cosí come è vero che potrebbe anche smontare l'hard disk e farci tutto quello che gli pare. Difendersi da attacchi che prevedano un accesso fisico alla macchina implica delle problematiche che non possono essere affrontate (e tantomeno risolte) con gli strumenti proposti in questo documento ed esulano quindi dai suoi scopi. Se avete necessità di questo tipo, provate a chiedere all'N.S.A. se vi può ospitare il server. ;-) 4. Dopo...4.1 Controlliamo i danniNella malaugurata ipotesi che qualcuno sia riuscito a violare il nostro sistema (o che abbiamo il sospetto che ciò possa essere avvenuto), possiamo utilizzare le informazioni raccolte in precedenza per cercare di scoprire quali parti (più o meno vitali) del sistema sono state compromesse. Quest'operazione è addirittura più semplice di quelle descritte nel paragrafo precedente, poichè è lo stesso md5sum -c CHECKSUM_FILE dove /etc/fstab: FAILED /etc/hosts.allow: OK /etc/hosts.deny: OK /etc/inetd.conf: OK /etc/lilo.conf: OK /etc/login.access: OK /etc/login.defs: FAILED /etc/securetty: OK /usr/sbin/ypset: OK /usr/sbin/zdump: OK /usr/sbin/zic: OK md5sum: WARNING: 2 of 11 checksums did NOT match Una verifica di questo tipo potrebbe essere eseguita anche periodicamente, attraverso un cron, per esempio tutti i giorni: il report verrebbe inviato per mail al sistemista. In tutta questa procedura emerge, però il vecchio interrogativo: "chi controlla il controllore?", che tradotto significa: "chi ci garantisce che lo stesso 5. ConclusioniNell'utopistica speranza che questo documento possa servire a qualcuno (magari in via preventiva, non voglio gufare a nessuno), invito chiunque avesse proposte e/o critiche costruttive (*) a contattarmi via email. (*): critica costruttiva: dicasi critica costruttiva, quella critica che non consista nella semplice asserzione: "quello che hai scritto fa pena", ma in un discorso più articolato nel quale vengano argomentate le critiche e vengano proposte delle alternative. |