Per circa due decenni le tecniche di scoperta delle intrusioni sono state
oggetto di ricerca ma soltanto negli ultimi anni hanno fatto la loro comparsa
sul mercato dei nuovi prodotti che, basandosi su queste tecniche, si sono
dimostrati in grado di affiancare gli strumenti tradizionali nel difficile
compito di costruire una linea di difesa efficiente nei confronti delle
aggressioni esterne.
Sebbene i sistemi per la scoperta delle intrusioni
non abbiano ancora raggiunto un grado di maturità completo essi hanno acquisito
una importanza strategica decisiva ed, in virtù di questa rilevanza, esplicano
ormai un ruolo chiave proprio nel processo di hardening di qualsiasi
piattaforma.
In questo capitolo ci soffermeremo sugli aspetti salienti
relativi all'installazione ed alla configurazione di uno dei prodotti
open-source che ha maggiormente riscosso successo sul mercato vale a dire
Snort.
Caratteristiche degli IDS
Gli ids possono avere caratteristiche tra loro molto differenti perciò
l'unico modo per comprenderne appieno le potenzialità e le debolezze è quello di
suddividerli in categorie diverse. Una prima classificazione, basata sulla
fenomenologia che tali strumenti registrano, è quella che distingue tra:
- HIDS (Host based instrusion detection system): risiedono sull'host a
protezione del quale sono posti ed operano analizzando i dati provenienti dalle
varie attività di log ed auditing alla ricerca di possibili segni di anomalie
(ad es. un cambiamento negli attributi di importanti file di sistema oppure la
presenza di record che indicano una serie di tentativi falliti di accesso).
Questi strumenti sono in grado di monitorare applicazioni specifiche secondo
modalità difficilmente riscontrabili in altri sistemi e possono anche
identificare i segni di aggressioni che non producono effetti per così dire
"esteriori". Tuttavia dal momento che essi consumano risorse di sistema possono
influire in modo negativo sulle performance dell'host in cui risiedono; - NIDS (Network based intrusion detection system): risiedono su
macchine dedicate ed operano analizzando in tempo reale il traffico del segmento
di rete nel quale si trovano. Gli ids di questo tipo sono in grado di monitorare
simultaneamente il traffico generato verso e da più host e di regola non hanno
alcun impatto negativo sulle perfomance di questi ultimi ma, semmai, su quelle
dell'host nel quale sono installati (ciò si verifica soprattutto quando la
velocità della rete è elevata oppure quando occorre mantenere a lungo
informazioni di stato su attacchi differenti); - IDS ibridi: sono sistemi di nuova generazione, attualmente in fase di
studio ed implementazione, che combinano la forza e le caratteristiche migliori
delle altre due categorie appena menzionate;
Una seconda classificazione che interessa soprattutto gli ids cd. network
based è quella basata sulle modalità attraverso le quali avviene il
riconoscimento delle intrusioni:
- ids signature-based: sono caratterizzati dalla presenza di un
database di impronte o signatures che rende possibile l'identificazione, nel
flusso del traffico di rete, di quei pacchetti che hanno una esatta
corrispondenza con attacchi noti. Il punto di forza di questo tipo di
approccio è strettamente dipendente dalla qualità e dall'aggiornamento del
database interno (un pò come accade per gli antivirus). Invece la principale
debolezza di questi sistemi risiede nella loro incapacità di riconoscere i nuovi
attacchi anche se, una volta raggiunto un livello di astrazione delle regole
appropriato, essi possono essere in grado di identificare aggressioni
sconosciute purchè teoricamente corrispondenti ad un modello noto; - ids anomaly-based: identificano i segni di una intrusione per il
semplice fatto che questa si pone come caratterizzazione anomala od inusuale del
traffico di rete. La caratteristica migliore di questi sistemi è quindi la loro
innata attitudine nello scoprire i nuovi attacchi mentre, per converso, essi
richiedono una fase di messa in esercizio più laboriosa ed impegnativa che
consiste nello studiare il comportamento "tipico e normale" della rete in modo
da riuscire ad isolare le aggressioni da tutte quelle altre attività che invece
generano soltanto rumore e possono quindi condurre ai cd. falsi positivi;
Snort
Snort è un ids network-based originariamente sviluppato nel 1998 da Martin
Roesch per le piattaforme Unix ma che, grazie al lavoro della comunità
open-source, è ora disponibile anche per le piattaforme Windows.
Snort è un
software a linea di comando leggero ma al tempo stesso flessibile e potente che
analizza in tempo reale il traffico di rete alla ricerca di impronte conosciute
allertando l'amministratore di rete e producendo dei record di log quando una
corrispondenza viene trovata.
Installazione di snort
Snort può essere liberamente scaricato dall'indirizzo (http://www.snort.org oppure http://www.datanerds.net/~mike) ma per il suo corretto
funzionamento richiede la presenza dei driver WinPcap sviluppati dal politecnico
di Torino (http://netgroup-serv.polito.it/winpcap/install/default.htm).
L'installazione
di Snort deve dunque avvenire soltanto dopo l'installazione della libreria
Winpcap ma a tal fine è sufficiente creare due directory chiamate Snort e
SnortBin (possibilmente su una partizione distinta da quella in cui
risiede il sistema operativo Windows 2000) e scompattare all'interno di
quest'ultima cartella l'archivio di distribuzione.
Il passo
immediatamente successivo consiste invece nel verificare il corretto
funzionamento del software e ciò avviene digitando in una finestra di prompt il
comando: snort -W.
Se tutto funziona a dovere allora verrà
visualizzata una lista degli adattatori di rete riconosciuti mentre, in caso
contrario, sarà restituito un errore.
Considerazioni sulla configurazione di Snort
Il funzionamento di Snort si basa sulla presenza di un file di configurazione
(snort.conf) e di una serie di file addizionali con estensione
rules.
Il primo contiene le impostazioni necessarie per il
corretto funzionamento del software mentre gli altri compongono complessivamente
il database interno delle signatures.
In particolare i file rules indicano
quali sono le caratteristiche intrinseche che devono avere i pacchetti di rete
da catturare ed inoltre specificano se per ciascuno di essi deve essere
rilasciato un avvertimento che viene scritto in un altro file denominato
alert.ids.
Poichè il database contenuto all'interno dell'archivio
di distribuzione di Snort non è in genere molto aggiornato è altamente
consigliato, subito dopo l'installazione, cancellare dalla relativa cartella sia
il file snort.conf che i file rules e procurarsi un nuovo archivio più
aggiornato (http://www.whitehats.com oppure http://www.snort.org).
La successiva fase di
configurazione permette di adattare le caratteristiche del software alle reali
esigenze e si articola in una serie di modifiche da apportare al file snort.conf
quali:
- l'impostazione delle variabili globali di ambiente;
- la configurazione dei preprocessori;
- la configurazione dei plugins di output;
- la personalizzazione del database interno;
Il primo tipo di impostazione consiste nel valorizzare le variabili HOME_NET,
EXTERNAL_NET e DNS_SERVERS: la prima variabile va impostata con l'indirizzo IP
assegnato alla interfaccia di rete pubblica del server, la seconda variabile può
rimanere invece invariata (equivale ad ANY) mentre la terza è destinata a
contenere la lista degli eventuali server dns utilizzati.
L'esatta
configurazione dei preprocessori dipende anche dal tipo di versione in uso
(consultare il manuale e/o le note contenute nel file di
configurazione).
I preprocessori sono porzioni di codice integrate
nel software che assolvono ad un compito ben definito (ad es. la corretta
gestione dei pacchetti frammentati o l'impostazione della soglia di sensibilità
per il riconoscimento delle attività di scansione delle porte TCP/UDP).
I
plugin di output definiscono invece in che modo i dati di log vengono
registrati ed anche per quanto riguarda le loro impostazioni è possibile
consultare il manuale d'uso o le note contenute nel file di
configurazione.
Infine la personalizzazione del database interno
rappresenta un processo un pò più laborioso che richiede una preventiva analisi
delle caratteristiche della rete nonchè delle effettive esigenze di protezione
del server oltre ad un successivo periodo di test e perfezionamento volto a
migliorare l'efficienza complessiva del sistema nel riconoscimento delle
eventuali intrusioni e nella diminuzione del numero di falsi
positivi.
Fondamentalmente questa personalizzazione si articola nella
possibilità di includere o meno nel database uno o più file rules ma non va
dimenticato che la flessibilità dello strumento è tale da consentire perfino la
definizione di nuove regole.
Configurazione di Snort come servizio
È possibile configurare Snort in modo che sia eseguito come servizio di
sistema anzichè come semplice applicazione. Il vantaggio fondamentale derivante
da questa scelta è rappresentato dalla possibilità di sfruttare la
caratteristica di esecuzione automatica dei servizi che non richiede alcun login
da parte di un utente ed offre le maggiori garanzie di copertura soprattutto
nell'ipotesi di crash della macchina ed immediato riavvio (peraltro questi due
eventi potrebbe anche essere forzati da un eventuale
aggressore).
Esistono due utilities facenti parte del Windows 2000
Resource Kit che permettono di installare da linea di comando un servizio
(instsrv.exe) e di eseguire una comune applicazione Win32 come un vero e
proprio servizio di sistema (srvany.exe).
In caso di
indisponibilità del resource kit entrambe le utilities possono essere ricercate
in rete tramite un qualsiasi motore di ricerca.
Attenzione: prima di eseguire le attività
indicate è altamente consigliato effettuare una copia di backup del registry
poichè le modifiche apportate direttamente a quest'ultimo possono rendere il
sistema instabile. Per la configurazione procedere nel seguente
modo:
- aprire una finestra di prompt e lanciare il seguente comando: instsrv
Snort <percorso dell'eseguibile>srvany.exe: questo comando produce
come effetto l'installazione di SrvAny come servizio (sarà poi quest'ultimo ad
invocare l'eseguibile di snort in base ad alcuni parametri indicati nel registro
di configurazione); - aprire l'editor del registry regedit.exe, localizzare e selezionare la
chiave HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSnort; - dal menu Edit selezionare New quindi Key ed assegnare alla chiave il nome
Parameters; - selezionare la chiave, creare un nuovo valore stringa chiamato
Application ed impostarlo in modo che contenga il percorso completo
dell'eseguibile snort; - selezionare la chiave, creare un nuovo valore stringa chiamato
AppDirectory ed impostarlo in modo che contenga soltanto il percorso in
cui risiede l'eseguibile snort; - selezionare la chiave, creare un nuovo valore stringa chiamato
AppParameters ed impostarlo con i parametri da passare all'eseguibile (ad
es. -c snort.conf -l <percorso completo per il salvataggio dei file di log
ed alert>);
Successivamente aprire la finestra dei servizi, selezionare Snort e
visualizzarne le proprietà assicurandosi che sia selezionata l'opzione di
startup Automatic.
Meccanismi di log ed alert
Una delle caratteristiche più apprezzate di Snort è data dalla presenza di
differenti meccanismi di log: il primo consiste nella produzione di file che
tengono traccia del traffico di rete catturato (vengono chiamati snort-) mentre
il secondo prevede la produzione di un file alert.ids contenente
l'indicazione di quei pacchetti per i quali è stata trovata una esatta
corrispondenza nel database interno.
La produzione e le dimensioni dei
file di log ed alert sono direttamente influenzate dai parametri indicati sulla
linea di comando (consultare a tale proposito il manuale
operativo).
Entrambi questi tipi di file sono destinati a raccogliere le
evidenze di eventuali aggressioni o tentativi di attacco per cui meritano una
attenzione particolare nella individuazione dei meccanismi da utilizzare per la
loro protezione onde evitare che essi possano essere alterati o peggio distrutti
in qualche modo.
Alcune precauzioni che è possibile adottare a tal
fine sono elencate di seguito e vanno modulate in base alle reali esigenze del
caso concreto:
- indirizzare l'output di Snort verso un database residente su un altro host
adeguatamente protetto anzichè su singoli file; - nel caso di necessità di utilizzo dei file proteggere questi ultimi facendo
uso della crittografia (eventualmente collocandoli in una cartella protetta
mediante l'Encryption File System di Windows 2000); - nel caso di necessità di utilizzo dei file impostare le adeguate
autorizzazioni in modo tale che ad essi possano avere accesso solo ed
esclusivamente gli utenti con privilegi amministrativi; - utilizzare criteri di rotazione dei log ed assoggettarli a procedure di
backup periodiche scrivendoli su supporti adeguatamente protetti e riposti in
luoghi sicuri;
Una delle attività più impegnative nel caso di utilizzo di Snort, ed in
generale di qualsiasi IDS, è quella relativa alla consultazione periodica dei
file delle evidenze che, a seconda delle caratteristiche del server e delle
"attenzioni esterne" che riceve, possono crescere nel tempo in modo
considerevole.
Questo può obbligare ad una attività di revisione
estremamente impegnativa ed, in quanto tale, suscettibile di dar luogo a sviste
pericolose che possono far passare inosservati i segni di attività sintomo di
imminenti attacchi.
Per questo motivo diventa indispensabile avvalersi di
software specifici sviluppati proprio con l'intento di semplificare il processo
di consultazione dei tracciati di log (vedi ad es. SnortSnarf disponibile
all'indirizzo http://www.silicondefense.com/software/snortsnarf/index.htm).