Snort: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Bot: Sostituzione automatica (-{{Software libero}} +{{Portale|Software libero}})
Nessun oggetto della modifica
Riga 37:
* -v : Visualizza l’header dei pacchetti.
* -V : Visualizza la versione di Snort.
 
== Architettura di Snort ==
Snort ha un’architettura molto complessa composta da diversi componenti:
* il packet decoder che intercetta e decodifica i pacchetti in arrivo;
* i preprocessori che analizzano i pacchetti individuando quelli potenzialmente dannosi;
* il detection engine che controlla il pattern matching dei pacchetti con le regole;
* i componenti di alerting e logging che generano gli allarmi e archiviano i log.
Di seguito vengono analizzati i diversi componenti che fanno parte dell’architettura di Snort.
 
=== Il Packet Decoder ===
Il packet decoder è il componente responsabile dell’analisi dei pacchetti. Esso ne determina il protocollo e la struttura, generando allarmi qualora vengano identificati pacchetti malformati. Si configura modificando il file di configurazione /etc/snort.conf come segue:
 
<nowiki>
# Stop generic decode events:
config disable_decode_alerts
# Stop Alerts on experimental TCP options
config disable_tcpopt_experimental_alerts
# Stop Alerts on obsolete TCP options
config disable_tcpopt_obsolete_alerts
# Stop Alerts on T/TCP alerts
# In snort 2.0.1 and above, this only alerts when a TCP option
# is detected that shows T/TCP being actively used on the
# network. If this is normal behavior for your network, disable
# the next option.
config disable_tcpopt_ttcp_alerts
# Stop Alerts on all other TCPOption type events:
config disable_tcpopt_alerts
# Stop Alerts on invalid ip options
config disable_ipopt_alerts
</nowiki>
 
Terminata l’analisi, i pacchetti vengono inviati ai preprocessori.
 
=== I preprocessori ===
I preprocessori, sono dei plug-in di Snort che analizzano il comportamento dei pacchetti. Ogni preprocessore ha la funzione di identificare una diversa tipologia di attacco. Qualora il comportamento dei pacchetti dovesse risultare dannoso, essi vengono inviati al detection engine che provvederà a verificarne il pattern matching con le regole. I preprocessori possono essere attivati, disattivati e configurati attraverso il file /etc/snort.conf.
 
Per capirne meglio il funzionamento, esaminiamo i preprocessori HTTPInspect e sfportscan e le loro principali opzioni di configurazione.
 
Il '''preprocessore HTTPInspect''', si occupa di decodificare il traffico HTTP e di identificare attacchi a livello applicativo che sfruttano eventuali vulnerabilità del protocollo HTTP. La configurazione di questo preprocessore è divisa in due parti, una globale e una per i server.
 
La configurazione globale è identificata dalla stringa:
<nowiki>
preprocessor http_inspect: global [opzioni di configurazione]
</nowiki>
I parametri che possono essere configurati sono:
* iis_unicode_map [filename (located in the config dir)] [codemap (integer)]
che deve essere sempre specificato in quanto contiene contiene la global IIS unicode map.
* detect_anomalous_servers
che genera un allarme se viene rilevato traffico HTTP su porte non standard; è opportuno non attivare questa opzione se è prevista una configurazione server di default.
 
La sezione dedicata ai server ha due modalità di configurazione: default e IP.
La stringa che identifica la configurazione di default è:
 
<nowiki>
preprocessor http_inspect_server:
server default [server options]
</nowiki>
 
mentre quella IP, che identifica la configurazione di indirizzi IP individuali, è:
 
<nowiki>
preprocessor http_inspect_server:
server [IP] [server options]
</nowiki>
 
Le opzioni specificabili sono:
* profile [all/apache/iis]
che permette di selezionare dei profili predefiniti in base al tipo di server HTTP utilizzato, scegliendo tra ‘all’, ‘apache’ e ‘iis’. Questa opzione può essere combinata ad opzioni come ‘ports’, ‘iis_unicode_map’, ‘flow_depth’, ‘no_alerts’, ‘inspect_uri_only’ e ‘oversize_dir_length’ che vanno specificate dopo il profilo in questo modo:
<nowiki>
preprocessor http_inspect_server: server 1.1.1.1 profile all ports { 80 3128 }
</nowiki>
* ports { [port] [port] . . . }
che indica su quale porta è attivo il servizio HTTP. Il traffico cifrato SSL non potrà essere decodificato.
* flow_depth [integer]
che specifica quanti byte del payload di risposta del server ispezionare. Questa opzione incrementa notevolmente le prestazioni dell’IDS perché permette di ignorare una buona parte del traffico HTTP. Il valore può essere impostato da -1 a 1460. -1 permette di ignorare l’intero traffico di risposta, mentre 0 permette di ispezionare integralmente i payload dei pacchetti.
* ascii [yes/no]
che permette di decodificare un URL che contiene sequenze di caratteri
ASCII.
* utf_8 [yes/no]
che permette di decodificare un URL che contiene sequenze di caratteri
UTF-8.
* iis_unicode [yes/no]
che permette di usare la mappa di default, se non è specificata una IIS Unicode Map.
* multi_slash [yes/no]
che permette di generare un allarme ogni volta che viene incontrata una stringa contenente più caratteri ‘/’ consecutivi. (Es. “pippo/////////pluto”)
* iis_backslash [yes/no]
che permette di generare un allarme ogni volta che viene incontrata una stringa contenente un carattere ‘\’. (Es. “pippo\pluto”)
* no_alerts
che permette di non ricevere allarmi generati da questo preprocessore. Se questa opzione viene selezionata, le rispettive regole HTTP non hanno alcun effetto.
* oversize_dir_length [non-zero positive integer]
che specifica la lunghezza massima di un URL. Generalmente la lunghezza media è di 300 caratteri.
* inspect_uri_only
che migliora notevolmente le prestazioni in quanto permette di esaminare solo la porzione di payload contenente l’URL.
 
Un esempio di configurazione del preprocessore HTTPInspect è:
 
<nowiki>
# unicode.map should be wherever your snort.conf lives, or
# given a full path to where snort can find it.
preprocessor http_inspect: global \
iis_unicode_map unicode.map 1252
preprocessor http_inspect_server: server 1.1.1.1 \
ports { 80 3128 8080 } \
flow_depth 0 \
ascii yes \
oversize_dir_length 300
</nowiki>
 
Dal precedente codice si deduce che il file contenente la mappa Unicode è unicode.map, l’indirizzo IP del server HTTP è 1.1.1.1 il quale è attivo sulle porte 80,3128 e 8080. Non sarà ispezionato il payload dei pacchetti di risposta del server, ma saranno decodificati gli URL contenenti caratteri ASCII che potranno avere una lunghezza massima di 300 caratteri.
 
Il preprocessore '''sfportscan''' invece, si occupa di identificare la prima fase di un attacco, dove l’attaccante cerca di acquisire informazioni sui protocolli e sui servizi supportati da una vittima. Questo preprocessore, permette di identificare qualsiasi tipo di Portscan.
 
A tal proposito, è necessario che sia abilitato il preprocessore flow con il quale il preprocessore sfportscan interagisce, mediante la seguente stringa:
 
<nowiki>
preprocessor flow: stats_interval 0 hash 2
</nowiki>
 
I parametri che possono essere configurati per il preprocessore sfportscan sono:
* proto { <proto> }
che può essere configurato con una delle seguenti opzioni: ‘tcp’, ‘udp’, ‘icmp’, ‘ip’ oppure ‘all’ se si intende esaminare tutti i protocolli.
* scan_type { <scan_type> }
che può essere configurato con le opzioni: ‘portscan’, ‘portsweep’, ‘decoy_portscan’, ‘distributed_portscan’ oppure ‘all’ se si intende monitorare tutti i tipi di scan.
* sense_level { <level> }
che accetta i parametri: ‘low’, ‘medium’ o ‘high’ in base al grado di sensibilità che si vuole assegnare al sensore.
* ignore_scanners { <ip_list> }
che definisce gli indirizzi IP che possono eseguire scansioni e pertanto da ignorare.
* ignore_scanned { <ip_list> }
che definisce gli indirizzi IP che possono ricevere scansioni e pertanto da ignorare.
* logfile { <file> }
che definisce su quale file salvare l’output delle scansioni.
 
Un esempio di configurazione è:
 
<nowiki>
preprocessor sfportscan: proto { all } \
scan_type { all } \
logfile { /var/log/snort/portscan } \
sense_level { high }
</nowiki>
 
Dal precedente codice si deduce che saranno esaminati i pacchetti appartenenti a tutti i protocolli, saranno monitorati tutti i tipi di scansioni, il file contenente i log dei Portscan sarà /var/log/snort/portscan, e il sensore avrà una sensibilità alta.
 
 
 
== Bibliografia ==
* [http://www.danilovizzarro.it Danilo Vizzarro], "[http://www.danilovizzarro.it/papers/Tesi%20Laurea%20Danilo%20Vizzarro.pdf Progettazione di un Intrusion Detection System]", December 2006.
 
==creatore==
Martin Roesch
 
{{Portale|Software libero}}