Progettazione di un Intrusion Detection System

Transcript

Progettazione di un Intrusion Detection System
UNIVERSITÀ DEGLI STUDI DI MILANO
Facoltà di Scienze Matematiche Fisiche e Naturali
Dipartimento di Tecnologie dell’Informazione
Progettazione di un
Intrusion Detection System
RELATORE: Prof. Ernesto Damiani
CORRELATORE: Dott.ssa Barbara Rossi
CORRELATORE: Dott. Claudio Agostino Ardagna
Tesi di Laurea di:
Danilo Vizzarro
Matr. n. 693177
Anno Accademico 2005/2006
PREFAZIONE
Prefazione
La grande diffusione delle reti e di Internet come mezzi di accesso ad informazioni e servizi rende sempre più critico, per qualunque azienda, la protezione
delle risorse da accessi non autorizzati e/o attacchi mirati all’acquisizione
di privilegi non garantiti. Questo problema diventa di vitale importanza
per l’economia di un’azienda, dal momento che quest’ultima ha bisogno di
amministrare notevoli quantità di informazioni mantenendone segretezza, integrità e disponibilità. Questa esigenza ha portato alla rapida diffusione di
dispositivi software/hardware, Intrusion Detection System (IDS), utilizzati per identificare accessi non autorizzati e per rilevare tutti gli attacchi a
computer e reti informatiche. Tuttavia, la progettazione di un sistema di
sicurezza non è limitato alla configurazione di un IDS, ma richiede la conoscenza di diverse tecnologie e componenti, quali router, firewall e VPN, e la
capacità di integrarle e farle interagire per garantire la sicurezza dei dati.
Obiettivo del lavoro di tesi è la progettazione e lo sviluppo di un Intrusion
Detection System che massimizzi il rapporto qualità/prezzo. A questo scopo
dopo un’attenta analisi ed uno studio approfondito sono stati selezionati i
migliori strumenti Open Source attualmente disponibili in rete. Il progetto
di tesi si è sviluppato in più fasi che possono essere riassunte come segue.
• Analisi del design della rete.
– Prima di procedere alla configurazione dell’IDS è necessario determinare le mancanze e le necessità di sicurezza della rete, effettuandone un’analisi preliminare e identificandone le risorse da
proteggere e le misure di sicurezza già implementate.
2
PREFAZIONE
• Progettazione e implementazione dell’IDS.
– Dopo aver definito lo schema di rete e aver analizzato le risorse a
disposizione, si è deciso di utilizzare una macchina con processore
di 1600 Mhz per installare il Sistema Operativo CentOS v4.4 e il
software di intrusion detection Snort v2.6, entrambi scelti per le
loro funzionalità.
– Dopo aver proceduto con la loro configurazione, sono state definite
delle regole di intrusion detection ad hoc per le esigenze della rete.
– È stato implementato sulla stessa macchina un server web Apache
con supporto PHP 4 e un database MySQL sul quale sono stati
archiviati e resi accessibili da qualsiasi postazione sulla rete i log
generati da Snort.
– È stata creata un’interfaccia per la visualizzazione grafica dei log
di Snort. È stato inoltre installato e configurato il software nTop
per mostrare tramite interfaccia web le statistiche sui protocolli
più attaccati.
– Per risolvere il problema dell’aggiornamento delle politiche di sicurezza è stato implementato OinkMaster, un sistema automatico
che controlla il rilascio di nuove regole, ed eventualmente ne effettua l’aggiornamento automatico, creando il backup delle vecchie
regole e archiviando i log dell’operazione.
– È stato, infine, installato un server SSH per permettere l’amministrazione dell’IDS da remoto.
• Test dell’IDS.
– La fase di test dell’IDS si è basata sull’adozione di due software, chiamati Nmap e Metasploit, il primo utilizzato per cercare i servizi attivi su un sistema e l’altro per scoprirne eventuali
vulnerabilità.
3
PREFAZIONE
• Ottimizzazione delle regole.
– Dopo l’implementazione dell’IDS è stato necessario procedere con
l’ottimizzazione delle regole dell’IDS al fine di risolvere il problema
dei falsi positivi riscontrato durante la fase di test.
Il lavoro di tesi lascia spazio a sviluppi futuri e possibili evoluzioni dell’architettura proposta. Prima fra tutte l’incremento del livello di sicurezza
dell’IDS al fine di evitare eventuali compromissioni dell’IDS e dei log. A
tale scopo l’IDS potrebbe intercettare passivamente il traffico e archiviare le
informazioni sugli eventi anomali su una macchina remota.
Lavori futuri riguardano anche l’implementazione di un Distribuited Intrusion Detection System, che preveda l’uso di un sensore per ogni segmento di
rete, configurato per monitorare il traffico ed inviare i log su un unico database centrale dove le informazioni verrebbero memorizzate e correttamente
organizzate.
La tesi è organizzata come segue:
Nel Capitolo 1 verrà presentata una panoramica sull’intero lavoro di tesi,
rimandando agli altri capitoli per approfondimenti.
Nel Capitolo 2 si esamineranno e analizzeranno in dettaglio i diversi tipi di
Intrusion Detection Systems e le loro caratteristiche peculiari, mettendone in
evidenza gli aspetti positivi e negativi. Si illustreranno, inoltre, le analogie
e le differenze con i firewall focalizzando la discussione sui motivi che suggeriscono l’utilizzo di entrambe le componenti, durante il processo di sicurezza
di un sistema informatico. Saranno discusse le tecniche e gli attacchi più o
meno sofisticati che consentono di aggirare un IDS e infine saranno esaminati
il problema dell’analisi dei log e gli aspetti legali da considerare qualora un
sistema di intrusion detection venga realmente installato.
Nel Capitolo 3 si illustrerà l’architettura di Snort, il più celebre Networkbased Intrusion Detection System della comunità OpenSource analizzandone
i requisiti hardware richiesti e le modalità di funzionamento. Saranno, dun-
4
PREFAZIONE
que, esaminate la sintassi delle regole di intrusion detection e quella dei log
generati.
Nel Capitolo 4 verrà proposta l’architettura che effettua l’intrusion detection,
descrivendo in dettaglio le parti in gioco e argomentando le scelte implementative.
Nel Capitolo 5 si presenteranno alcune proposte per ottimizzare l’architettura
e renderla più completa.
5
INDICE
Indice
1 Introduzione
10
1.1
Tipologie di IDS . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2
Obiettivi del lavoro di tesi . . . . . . . . . . . . . . . . . . . . 11
2 Intrusion Detection System
14
2.1
NIDS: Pro e Contro . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2
NIDS vs Firewall . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3
Tecniche di Analisi dei Pacchetti . . . . . . . . . . . . . . . . . 17
2.4
Allarmi: Falsi Positivi e Falsi Negativi . . . . . . . . . . . . . 19
2.5
Risposta dei NIDS . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6
Posizionamento degli IDS
2.7
NIDS: gli Attacchi . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8
Log Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.9
Aspetti Legali . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
. . . . . . . . . . . . . . . . . . . . 21
2.10 Scelta di un NIDS . . . . . . . . . . . . . . . . . . . . . . . . . 30
3 Snort
33
3.1
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2
Requisiti Hardware . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3
Architettura di Snort . . . . . . . . . . . . . . . . . . . . . . . 34
3.4
Modalità di Funzionamento . . . . . . . . . . . . . . . . . . . 43
3.5
Regole di Intrusion Detection . . . . . . . . . . . . . . . . . . 44
3.6
Analisi dei Log . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7
INDICE
4 Configurazione del NIDS
55
4.1
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.2
Analisi del Sistema . . . . . . . . . . . . . . . . . . . . . . . . 56
4.3
Setup del NIDS . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.4
4.3.1
Setup di CentOS v4.4 . . . . . . . . . . . . . . . . . . . 59
4.3.2
Setup di Apache e MySQL . . . . . . . . . . . . . . . . 62
4.3.3
Setup di Snort v2.6 . . . . . . . . . . . . . . . . . . . . 69
4.3.4
Setup di AdoDB e BASE . . . . . . . . . . . . . . . . . 72
4.3.5
Setup di nTop . . . . . . . . . . . . . . . . . . . . . . . 77
4.3.6
Setup di OinkMaster . . . . . . . . . . . . . . . . . . . 79
Test del NIDS: i Risultati . . . . . . . . . . . . . . . . . . . . 81
4.4.1
Test con Nmap . . . . . . . . . . . . . . . . . . . . . . 81
4.4.2
Test con Metasploit . . . . . . . . . . . . . . . . . . . . 88
4.5
Amministrazione Remota via SSH . . . . . . . . . . . . . . . . 97
4.6
Ottimizzazione di Snort . . . . . . . . . . . . . . . . . . . . . 97
5 Sviluppi Futuri
101
5.1
Incremento del Livello di Sicurezza . . . . . . . . . . . . . . . 101
5.2
Realizzazione di un IDS Distribuito . . . . . . . . . . . . . . . 102
5.3
Invio degli Allarmi via Email e SMS . . . . . . . . . . . . . . . 103
Ringraziamenti
105
Bibliografia
108
8
CAPITOLO 1. INTRODUZIONE
Capitolo 1
Introduzione
1.1
Tipologie di IDS
Il termine ‘intrusione’ viene usato per descrivere il processo che permette di
guadagnare un accesso non autorizzato ad un sistema, ad esempio, si pensi
al pirata informatico che cerca di ottenere un accesso abusivo ad un server o
che diffonde virus per controllare le vittime1 infettate.
Per intrusion detection si intende quel processo di scoperta, analisi e reporting delle attività non autorizzate che possono violare la confidenzialità,
l’integrità e la riservatezza dei dati.
Esistono diverse tipologie di IDS: gli AIDS (Application-based IDS), gli HIDS
(Host-based IDS) e i NIDS (Network-based IDS).
Gli AIDS vengono installati su una singola macchina2 e raccolgono informazioni a livello applicativo. Permettono di sapere quale utente ha utilizzato
una particolare applicazione e danno la possibilità di ricostruire le transazioni effettuate. Le loro prestazioni non vengono influenzate dalla quantità di
traffico di rete in quanto agiscono su singoli host. Gli AIDS però, richiedendo
elevate risorse per la computazione, possono influenzare le prestazioni della
1
2
Si definisce vittima, un sistema o una singola entità attaccata.
Per macchina si intende un computer appartenente ad una rete LAN o ad Internet.
10
CAPITOLO 1. INTRODUZIONE
macchina sulla quale sono installati.
Gli HIDS hanno una visione limitata all’host che deve essere monitorato di
cui controllano il traffico di rete relativo. Si occupano di monitorare l’attività
di login, registrando i tentativi falliti e inviando appositi allarmi all’amministratore di rete e inoltre controllano le azioni compiute dall’utente root alla
ricerca di comportamenti sospetti. Possono richiedere notevoli quantità di
spazio per l’archiviazione dei log.
I NIDS sono installati su un apparato dedicato detto sensore e si occupano di monitorare l’intero segmento di rete al quale appartengono. I pacchetti
vengono catturati per mezzo dei packet sniffer3 utilizzando interfacce di rete
in modalità promisqua e vengono, poi, analizzati alla ricerca di anomalie.
Agendo passivamente, sono difficili da rilevare per un attaccante.
Nel lavoro di tesi qui descritto, si è deciso di adottare un Network-Based
Intrusion Detection System, in quanto permette di riconoscere eventuali attacchi o violazioni della sicurezza e fornisce dei report via web sullo stato
della rete in tempo reale. La classe di NIDS verrà analizzata in dettaglio per
poi focalizzare nel Capitolo 3, la discussione su Snort, il più diffuso sistema
di intrusion detection che è stato utilizzato per questo lavoro di tesi.
1.2
Obiettivi del lavoro di tesi
La tesi si è concentrata sullo sviluppo di un sistema di rilevamento delle intrusioni realizzato utilizzando un sensore IDS per l’intercettazione e l’analisi dei
pacchetti, un database MySQL per l’archiviazione degli eventi, un server web
e un’interfaccia grafica per monitorare l’attività del sensore IDS. La scelta
degli strumenti utilizzati si è basata sulla valutazione di due requisiti fondamentali: il costo e le funzionalità d’uso. L’obiettivo principale è stato quello
3
I packet sniffer si occupano di intercettare tutti i pacchetti in transito.
11
CAPITOLO 1. INTRODUZIONE
di realizzare un sistema semplice da usare anche per un tecnico informatico
non specializzato in sicurezza. A tale scopo si è cercato di creare un’interfaccia grafica amichevole per permettere una chiara analisi degli eventi generati
dal sensore. Infine, altro obiettivo di particolare importanza è stato quello di
mantenere intatte le performance della rete in cui il sensore è stato installato.
Mediante la realizzazione di questo Intrusion Detection System, non si è
voluto garantire la totale sicurezza del sistema, ma semplicemente aggiungere un tassello fondamentale a quello che è il processo di sicurezza informatica.
Infatti, la sola integrazione di un IDS, con un firewall ben configurato, un
antivirus aggiornato, e con una valida formazione degli utenti della rete, finalizzata a prevenire attacchi di Social Engineering4 , permette di raggiungere
un discreto livello di sicurezza. Nel lavoro di tesi si è cercato, con l’aiuto
di software Open Source come Snort, Nmap e Metasploit, di conoscere i limiti del sistema creato e di capire come personalizzarlo in base alle proprie
esigenze.
4
Gli attacchi basati sul Social Engineering, sfruttano l’ingenuità degli utenti per otte-
nere informazioni preziose come password di accesso. A questo tipo di attacchi anche il
sistema informatico più sicuro esistente ha effetto scarso.
12
CAPITOLO 2. INTRUSION DETECTION SYSTEM
Capitolo 2
Intrusion Detection System
2.1
NIDS: Pro e Contro
In un sistema informatico che implementa valide politiche di sicurezza, un
buon sistema di incident response e che adotta firewall, antivirus e tutte le
più moderne misure di sicurezza, i NIDS giocano un ruolo fondamentale, in
quanto:
• analizzano il payload dei pacchetti identificando il traffico anomalo;
• danno informazioni sulle scansioni che la rete ha ricevuto;
• permettono di ricevere allarmi real-time;
• evidenziano eventuali errori nella configurazione del sistema;
• evidenziano eventuali vulnerabilità della rete;
• permettono di monitorare il comportamento degli utenti interni alla
rete;
• segnalano se qualche altra misura di sicurezza, come il firewall o l’antivirus, non ha funzionato correttamente;
• rilevano eventuali attacchi provenienti dalla rete interna verso la rete
esterna;
14
CAPITOLO 2. INTRUSION DETECTION SYSTEM
• rilevano la presenza di eventuali worm che cercano di inviare informazioni all’esterno della rete;
• effettuano il monitoraggio delle risorse condivise utilizzate;
• permettono di capire quali misure preventive adottare al fine di evitare
eventuali attacchi futuri;
• sono difficili da rilevare in quanto agiscono passivamente.
Le ampie funzionalità descritte hanno portato alcuni amministratori di
rete a pensare che i NIDS siano in grado di segnalare e risolvere qualsiasi problema di sicurezza. Paradossalmente, pensare che i NIDS garantiscano totale
sicurezza date le loro enormi potenzialità, può risultare controproducente in
quanto ciò genererebbe un falso senso di sicurezza. Non esiste, infatti, né totale sicurezza, né un unico prodotto che permetta di essere totalmente sicuri.
Anche se i NIDS sono sicuramente necessari a garantire un buon livello di
sicurezza del sistema, da soli non sarebbero sufficienti in quanto:
• non sostituiscono l’esistente staff di sicurezza in quanto necessitano di
costante monitoraggio;
• non individuano attacchi che sfruttano vulnerabilità non ancora rese
pubbliche detti 0-day;
• agiscono passivamente, ovvero non bloccano il traffico dannoso anche
se possono essere configurati per interagire con un firewall;
• quando c’è una grande quantità di traffico da processare, è possibile che
vengano persi dei pacchetti, con conseguente fallimento nella rilevazione
di un attacco;
• non possono analizzare informazioni criptate;
• identificano un tentativo d’attacco ma non rilevano se questo è riuscito;
15
CAPITOLO 2. INTRUSION DETECTION SYSTEM
• presentano problemi nel gestire attacchi che utilizzano pacchetti frammentati;
• incrementando il numero delle firme1 , può essere ridotta l’efficenza del
NIDS;
• richiedono notevoli risorse in termini di spazio per l’archiviazione dei
log;
• non sostituiscono gli altri meccanismi di protezione.
Da quanto detto, emerge che i NIDS sono necessari ad aumentare il controllo sull’attività dei sistemi ma non sono sufficienti a garantire la continuità
del servizio in quanto agiscono passivamente.
2.2
NIDS vs Firewall
Sia i firewall che i NIDS collaborano al fine di prevenire accessi abusivi ad
una rete. Entrambi sono fondamentali ma nessuno è sufficiente a garantire
da solo un elevato livello di sicurezza. A parte queste analogie, ci sono delle
sostanziali differenze tecniche che li caratterizzano.
I firewall hanno funzione di filtraggio dei pacchetti allo scopo di bloccare il
traffico non conforme alle loro politiche. I pacchetti vengono filtrati in base
all’indirizzo IP sorgente o di destinazione e alle corrispettive porte. Difficilmente i log memorizzati riguardano il traffico permesso2 , in quanto ritenuto
affidabile. Se alcuni dei pacchetti dannosi riuscissero a superare il firewall a
causa di una configurazione non corretta dello stesso, o di una qualsiasi vulnerabilità sfruttata, non solo sarebbe possibile portare a termine un attacco
con successo ma, sopratutto, non verrebbe memorizzata alcuna informazione
1
Ciascuna firma consiste in una o più stringhe contenenti alcuni parametri, che se
riscontrati in un pacchetto devono generare un allarme.
2
Il traffico permesso è quello non bloccato dal firewall. Solitamente non viene registrato
in quanto l’archiviazione di questo tipo di log richiede risorse notevoli.
16
CAPITOLO 2. INTRUSION DETECTION SYSTEM
in merito.
Per ovviare a questo problema, entrano in gioco i NIDS, i quali analizzano il
contenuto di tali pacchetti e segnalano con un allarme ogni attività anomala
individuata, indipendentemente dal successo o dall’insuccesso della stessa.
Inoltre nel caso in cui un attacco provenisse dall’interno della rete, il firewall
non avrebbe utilità alcuna. Esso infatti, pur essendo capace di filtrare il traffico verso e dalla rete esterna, non ha alcun potere sul traffico interno alla
rete.
Altra debolezza dei firewall è dovuta al fatto che talvolta gli utenti per ingenuità o impazienza si collegano a Internet creando connessioni non autorizzate tramite modem. Questo comportamento mette a rischio l’intera rete
perchè il traffico generato, anche in questo caso, non sarà filtrato dal firewall.
I NIDS, pertanto, pur monitorando il traffico interno alla rete, non eliminano
i firewall.
2.3
Tecniche di Analisi dei Pacchetti
Vediamo adesso in che modo gli Intrusion Detection System riescono a svolgere la loro funzione di analizzatori di pacchetti. Impostando la scheda di
rete del NIDS in modalità promisqua, è possibile ‘ascoltare’ in maniera passiva tutto il traffico passante sul segmento di rete, senza interferire sullo stesso.
L’analisi dei pacchetti può essere effettuata mediante tre tecnologie: la pattern matching analysis, la stateful pattern matching analysis e la protocol
analysis.
La Pattern Matching Analysis si occupa di analizzare i contenuti dei
pacchetti alla ricerca di sequenze di bit prefissate. Questo è un approccio
semplice da implementare ma, allo stesso tempo, abbastanza rigido e pesante
dal punto di vista computazionale in quanto ogni pacchetto deve essere confrontato con centinaia di firme di intrusion detection. Ogni firma è associata
a un attacco specifico e istruisce l’IDS sul tipo di pacchetto da considerare
17
CAPITOLO 2. INTRUSION DETECTION SYSTEM
anomalo. Ciascuna firma assume una struttura composta da sei componenti
<protocollo>, <ip_src>, <porta_src>, <ip_dst>, <porta_dst> e <payload_con_exploit> che vengono confrontati con i pacchetti in ingresso e in
uscita nel seguente modo: SE il protocollo utilizzato è <protocollo>, l’indirizzo IP sorgente è <ip_src>, la porta associata all’indirizzo IP sorgente è
<porta_src>, l’indirizzo IP di destinazione è <ip_dst>, la porta associata
all’indirizzo IP di destinazione è <porta_dst> e il payload contenuto nel
pacchetto è <payload_con_exploit>, ALLORA genera un allarme.
In base a quanto descritto fino ad ora, un allarme viene generato quando
si verifica il pattern matching tra un pacchetto e una regola. Questo significa
che sarebbe sufficiente dividere la stringa dell’exploit contenuta nel payload
in due frame TCP, per non far rilevare l’attacco. Per risolvere questo problema, è stato introdotta la Stateful Pattern Matching Analysis che è un
criterio più sofisticato di analisi che effettua gli stessi controlli della Pattern
Matching Analysis tenendo però conto dello stream TCP dei dati.
Questo comporta maggiore carico computazionale in quanto capita spesso
che ci siano sessioni TCP aperte da monitorare per un lungo periodo.
La Protocol Analysis invece, genera un allarme per ogni violazione delle specifiche tecniche di un protocollo3 . Si supponga, per esempio, che un
client intenda aprire una connessione TCP con un server, a tal fine invia
un pacchetto SYN e si aspetta di ricevere o un pacchetto SYN/ACK o un
RST/ACK. Qualsiasi altro pacchetto ricevuto viene considerato una violazione e genera un allarme.
Questa tecnica minimizza, qualora il protocollo sia ben definito, il numero
di falsi positivi generati se traffico lecito viene riconosciuto come anomalo, tuttavia, non è raro trovare delle RFC ambigue che lasciano spazio agli
sviluppatori di implementare il protocollo a propria discrezione.
3
Le specifiche dei protocolli sono documentate nelle Request For Comment e reperibili
su www.rfc-editor.org[14].
18
CAPITOLO 2. INTRUSION DETECTION SYSTEM
2.4
Allarmi: Falsi Positivi e Falsi Negativi
I NIDS lavorano con grandi quantità di dati e per funzionare necessitano
di almeno un algoritmo di generazione degli allarmi. Alcuni amministratori
scelgono di ritenere anomalo tutto il traffico considerato non affidabile (politica chiusa), altri invece scelgono di ritenere affidabile tutto il traffico non
considerato anomalo (politica aperta).
Nella prima ipotesi il carico computazionale del NIDS sarà rilevante e verrà
generato un alto numero di falsi allarmi detti falsi positivi che possono essere
dovuti a:
• pacchetti generati da alcuni dispositivi di rete non riconosciuti dal
NIDS;
• violazioni di protocolli non dovute ad attacchi ma ad implementazioni
ambigue;
• circostanze normali ritenute pericolose dal NIDS, come per esempio la
visualizzazione di una pagina web contenete il codice sorgente di un
exploit.
Nella seconda ipotesi il numero di allarmi sarà notevolmente minore, ma si
corre il rischio di non identificare il traffico anomalo che non trova alcuna
corrispondenza con le regole impostate, generando falsi negativi che sono più
difficili da rilevare e possono essere dovuti a:
• configurazioni non appropriate della rete;
• quantità di traffico elevata a tal punto da non essere supportata dal
NIDS;
• traffico cifrato;
• firme errate o troppo generiche;
19
CAPITOLO 2. INTRUSION DETECTION SYSTEM
• attacchi 0-day dei quali non è stata ancora rilasciata la corrispettiva
firma.
Il numero di falsi negativi può essere limitato solo con una costante manutenzione del NIDS e con un frequente aggiornamento delle firme.
Per trovare il giusto equilibrio tra falsi positivi e falsi negativi, è opportuno
analizzare approfonditamente la topologia della rete ed eliminare la causa che
genera falsi allarmi. Procedere eliminando radicalmente la regola corrispondente ad un attacco, potrebbe essere una scelta troppo ingenua e superficiale
che tal volta può comportare il rischio di non rilevare attacchi reali.
2.5
Risposta dei NIDS
Gli IDS generalmente non intervengono sul traffico, ma si limitano a rispondere passivamente segnalando le anomalie tramite messaggi di testo, email,
o telefonate. La modalità di segnalazione dell’allarme spesso dipende dalla
gravità dello stesso.
Alcuni IDS, possono anche essere programmati per rispondere attivamente
agli attacchi più seri, adottando una delle seguenti contromisure:
• inviando un pacchetto RST all’attaccante simulando che esso provenga dal sistema attaccato al fine di far credere che la vittima non sia
raggiungibile;
• interagendo con un firewall di rete per bloccare temporaneamente o
permanentemente le connessioni con la vittima;
• monitorando l’intero scambio di pacchetti;
20
CAPITOLO 2. INTRUSION DETECTION SYSTEM
• eseguendo un nslookup 4 , un portscan 5 o un traceroute 6 verso il sistema
attaccante per reperire maggiori informazioni.
Tuttavia, configurando l’IDS per rispondere attivamente ad attacchi, in caso
di falsi positivi si rischierebbe il blocco delle connessioni che normalmente
dovrebbero essere consentite causando un DoS.
2.6
Posizionamento degli IDS
Una delle attività maggiormente critiche nella configurazione e messa in opera di un IDS è il suo posizionamento all’interno della rete da monitorare. In
base alla topologia della rete, possono presentarsi diversi casi. Quando in un
segmento di rete gli host sono collegati da un hub, l’implementazione di un
NIDS è relativamente semplice perchè l’hub è una componente di rete che si
occupa di replicare ogni singolo pacchetto su tutte le porte. In questo modo
è sufficiente collegare il NIDS a una porta qualsiasi dell’hub per poter leggere
tutto il traffico passante.
In presenza di uno switch, invece, la situazione è diversa e l’implementazione
dei NIDS è maggiormente complicata. Gli switch, infatti, lavorano ad un
livello superiore della pila ISO/OSI[25] rispetto agli hub e quando devono
inviare un pacchetto, lo inviano solo verso la relativa porta di destinazione. Una soluzione per poter leggere tutto il traffico del segmento di rete è
il port mirroring che consiste nel monitorare una o più porte dello switch,
copiandone il traffico su un’altra porta detta mirror port. Tale porta dovrà
necessariamente avere una capacità di banda possibilmente pari alla somma
della capacità di banda di tutte le porte monitorate. Solo in questo modo il
traffico potrà essere gestito in modo opportuno.
4
Nslookup è un comando che permette di risalire dall’hostname di una macchina al suo
indirizzp IP.
5
Il Portscan è una tecnica utlizzata per raccogliere informazioni e capire quali sono i
servizi attivi su una vittima.
6
Traceroute è un comando che permette di individuare il percorso compiuto dai
pacchetti di dati per giungere dal computer dell’utente ad un computer remoto.
21
CAPITOLO 2. INTRUSION DETECTION SYSTEM
Come detto, la scelta del posizionamento degli IDS è un’attività molto delicata che deve tener conto delle esigenze della rete e delle risorse di cui si
dispone.
Un’altra variabile da considerare nel posizionamento di un IDS è la sua collocazione rispetto ad un firewall. Posizionando l’Intrusion Detection System
all’esterno del firewall, si identificheranno tutte le attività anomale incluse
quelle che non avranno accesso alla rete in quanto bloccate dal firewall. Un
IDS disposto in questo modo sarà più esposto agli attacchi provenienti dall’esterno perchè privo di protezione. Le risorse richieste sono ingenti in quanto
la quantità di traffico analizzato e di log memorizzati sarà rilevante.
Una soluzione più economica consiste nel posizionare l’IDS all’interno del firewall per monitorare solo il traffico che accede alla rete. In tal modo saranno
generati meno allarmi e ci saranno meno log da analizzare.
Se invece, l’obiettivo dell’IDS è la protezione dei server, una valida alternativa è installare il sistema di intrusion detection nella Demilitarized Zone
(DMZ)7 [23]. Tuttavia, gli altri segmenti di rete rimarrebbero privi di monitoraggio.
Pertanto, nel caso in cui le risorse a disposizione siano elevate, la soluzione
più robusta consiste nell’installare un IDS per ogni segmento di rete. Questo permette di tenere sotto controllo l’intera rete, di configurare ciascun
Intrusion Detection System in maniera diversa in base alle esigenze del singolo segmento e di evitare eventuali sovraccarichi dei sistemi. Inoltre, se
un IDS dovesse venire meno per una qualsiasi ragione (come ad esempio errori hardware/software o attacchi di vario tipo), gli altri segmenti di rete
continuerebbero ad essere monitorati.
7
La DMZ è un segmento di rete isolato della LAN, che si trova tra la rete interna e la
rete esterna. Alla DMZ si può accedere sia dalla rete interna che da quella esterna, ma le
connessioni dalla DMZ possono essere dirette solo verso l’esterno.
22
CAPITOLO 2. INTRUSION DETECTION SYSTEM
2.7
NIDS: gli Attacchi
Esistono diverse tecniche per aggirare un NIDS[17] che possono essere sfruttate diversamente, in base alle caratteristiche tecniche del sistema di intrusion
detection e quelle della rete che viene monitorata. Le tipologie d’attacco descritte di seguito, sfruttano il timeout di riassemblaggio del frame IP che è il
tempo massimo in cui un frame viene tenuto in memoria prima di essere eliminato e la frammentazione. Quando un pacchetto è eccessivamente grande
rispetto alla rete che deve attraversare, può essere frammentato da qualsiasi
router. Ogni frame viene associato a un Time to Live (TTL) che per essere
accettato dal router deve avere un valore maggiore di 1. Quando il router
riceve un frame, prima di inviarlo a destinazione, provvede a decrementare il
TTL di 1. Se questo diventa uguale a 0, il pacchetto viene eliminato e viene
restituito un messaggio di errore ICMP “Time Exceeded in Transit”.
Insertion Attack
Si verifica quando un NIDS accetta un pacchetto che il sistema finale rifiuterà.
In questo modo l’attaccante può inserire dati nel NIDS in modo opportuno
per nascondere un attacco. Possono essere sfruttati diversi tipi di Insertion
Attack, descritti in seguito.
• Il tempo di timeout del NIDS è maggiore di quello della vittima
Supponiamo che il tempo di timeout del NIDS sia 60 secondi e quello
del sistema attaccato sia 30 secondi. Il pacchetto contenente codice
maligno viene diviso in 4 frammenti numerati da 1 a 4. Vengono poi
generati altri due frame ai quali associamo i numeri 2’ e 4’, con payload
apparentemente normale. L’attacco viene espletato come descritto di
seguito. Si inviano i frame 2’ e 4’ che saranno ricevuti sia dal NIDS
che dalla vittima. Dopo 30 secondi la vittima scarterà tali frame in
quanto scaduto il tempo di timeout e non genererà alcun messaggio
ICMP di errore. Si inviano quindi, i frame 1 e 3. A questo punto la
vittima avrà in memoria solo questi due frame, mentre il NIDS avrà i
23
CAPITOLO 2. INTRUSION DETECTION SYSTEM
frame 1,2’,3,4’ e andrà a calcolare la checksum8 che risulterà invalida e
pertanto scarterà i frammenti senza generare allarmi. Ora è possibile
inviare i frame 2 e 4. In questo modo la vittima, avendo ricevuto tutti
i 4 frame, riassemblerà il pacchetto, mentre il NIDS avendo ricevuto
solo gli ultimi due pacchetti, attenderà il rispettivo tempo di timeout
e provvederà a scartarli.
• Attacco basato su TTL
Per sfruttare questo attacco è necessario conoscere il numero dei router
presenti tra l’attaccante e la vittima. A tale scopo possono essere utilizzati tool come traceroute. Supponiamo che tra il NIDS e la vittima
ci sia un router. Si divide il pacchetto contenente codice maligno in
3 frammenti numerati da 1 a 3. Viene poi generato un altro frame al
quale associamo il numero 2’ con payload apparentemente normale. Si
invia il frame 1 con un TTL elevato il quale sarà ricevuto sia dal NIDS
che dalla vittima. Si invia il frame 2’ con TTL impostato a 1. Questo
frammento sarà ricevuto dal NIDS ma non arriverà a destinazione perchè sarà scartato dal router a causa del basso TTL. Si invia il frame 3
con un TTL valido. A questo punto il NIDS riassemblerà i 3 frammenti,
mentre la vittima resterà in attesa del secondo frammento. Dopo aver
inviato il frame 2, la vittima riassemblerà il pacchetto e l’attacco sarà
riuscito con successo.
• Overlapping dei frammenti
Come detto precedentemente, ogni sistema operativo adotta una sua
politica di riassemblaggio dei pacchetti. Si supponga di avere un pacchetto anomalo diviso in 4 frammenti numerati da 1 a 4. Vengono poi
generati altri due frame ai quali associamo i numeri 2’ e 4’, i quali hanno un payload apparentemente normale, stesso offset, stessa lunghezza
e stesso header IP dei pacchetti 2 e 4. Si inviano i frame 1,2,3 i quali
8
La checksum è una somma di controllo utilizzata per rilevare eventuali errori nella
trasmissione.
24
CAPITOLO 2. INTRUSION DETECTION SYSTEM
giungeranno a destinazione senza problemi. Si inviano ora i frammenti
2’,3’,4. A questo punto diversi sistemi operativi potrebbero reagire in
modo diverso. Per esempio, i sistemi Windows, MacOC o SunOS riassemblerebbero il pacchetto considerando validi i frame 1,2,3,4; sistemi
come Cisco IOS considererebbero validi i frame 1,2’,3’,4. Pertanto, in
base al sistema operativo attaccato, questa tecnica può essere sfruttata
per portare a termine un attacco.
Evasion Attack
Si verifica quando un NIDS scarta un pacchetto che sarà accettato dal sistema
finale. In questo modo l’attaccante può inviare pacchetti dannosi alla vittima
senza che il NIDS ne effettui l’analisi.
• Il tempo di timeout del NIDS è minore di quello della vittima
Supponiamo di aver diviso il pacchetto da inviare in 2 frame e che
il tempo di timeout del NIDS sia di 15 secondi e quello del sistema
attaccato sia 30 secondi. Dopo aver inviato il primo frame, l’attaccante
invia il secondo frame in un intervallo di tempo che varia tra i 15 e i 30
secondi. In questo modo il NIDS scarterà il pacchetto in quanto sarà
scaduto il tempo di timeout e non genererà allarmi, mentre la vittima,
dopo aver ricevuto il secondo pacchetto, effettuerà il riassemblaggio
portanto l’attacco a compimento.
• Unicode Evasion
Consiste nel modificare i pacchetti cercando di evitare il pattern matching con le regole di intrusion detection. Per esempio, in occasione della diffusione del worm Nimda[5] è stato riscontrato che il worm inviava
una particolare richiesta HTTP, dove il simbolo “/” veniva sostituito
con il corrispondente codice Unicode “%c0%af”:
GET /scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir
In tal modo, sfruttando una vulnerabilità di alcuni server Microsoft
25
CAPITOLO 2. INTRUSION DETECTION SYSTEM
IIS, il worm riusciva a guadagnare i privilegi di amministratore ed ad
accedere alla root directory. Dopo la ricezione della sringa, sostituiva
‘%c0%af’ con il carattere ‘/’ ottenendo la stringa:
GET /scripts/../../winnt/system32/cmd.exe?/c+dir
che coincide esattamente con la root directory.
Denial of Service
Il Denial of Service è finalizzato a provocare l’arresto temporaneo o definitivo
dei NIDS.
• Esaurimento delle Risorse della CPU
Consiste nell’inviare grandi quantità di pacchetti frammentati sfruttando il fatto che, quando l’IDS riceve tali pacchetti, questi devono essere
salvati e mantenuti fino a quando tutti i pacchetti dello stream non
siano arrivati o il tempo di timeout non sia raggiunto.
2.8
Log Analysis
L’analisi dei log è di fondamentale importanza nel processo di intrusion detection sia nel caso ci siano stati dei tentativi di intrusione, che nel caso si
sia verificato un incidente informatico.
I log memorizzano record contenenti informazioni sul timestamp9 , sul protocollo utilizzato, sull’indirizzo IP sorgente e di destinazione e sulle porte
utilizzate da qualsiasi attività anomala monitorata. Possono anche essere
contenuti dati aggiuntivi come una descrizione testuale dell’evento o il numero della regola che ha generato l’allarme.
Quando vengono generati log causati da eventi di una certa entità, è opportuno memorizzare anche il payload del pacchetto che ha generato l’allarme
per avere maggiori dettagli sull’evento.
9
Il timestamp include la data e l’ora in cui l’evento è stato registrato.
26
CAPITOLO 2. INTRUSION DETECTION SYSTEM
Facciamo un esempio considerando una richiesta DNS10 . In corrispondenza
di questo evento, verrà generato un log dove sarà riportato che il potenziale
attaccante con indirizzo IP 100.200.100.200 ha inviato un pacchetto UDP al
destinatario 90.80.70.60, sulla porta 53. Ciò non sarà sufficiente a capire se
la richiesta DNS è stata dannosa o meno. La situazione sarebbe differente
nel caso in cui si potesse analizzare anche il payload del pacchetto.
Uno dei problemi maggiori nell’analisi dei log è l’eterogeneità intrinseca degli
stessi, in quanto variano a seconda del firewall, del router o dell’IDS utilizzato. Non esistono tool che sincronizzano cronologicamente i log prodotti da
sistemi differenti. Può talvolta capitare che la time zone differisca da sistema
a sistema, rendendo ancora più complicata l’analisi; tuttavia, per sincronizzare sistemi diversi, possono essere usati protocolli come NTP[24].
Inoltre, di estrema importanza è la capacità di reazione di fronte ad un’intrusione. Intervenire tempestivamente quando si identifica un’intrusione, spesso
è essenziale per evitare che l’attaccante possa alterare o eliminare i log.
Gli amministratori di rete, tuttavia, dovrebbero prestare attenzione non solo
alla possibile manipolazione dei log ma anche alle molteplici attività anomale
che possono presentarsi, come quelle che si stanno per analizzare.
• Il calo delle performance della rete dovuto alla saturazione della banda,
che si verifica perchè spesso l’attaccante utilizza le macchine compromesse per archiviare programmi, mp3 e film da mettere illegalmente in
condivisione con gli altri utenti della rete.
• Il traffico sospetto verso indirizzi IP sconosciuti o su protocolli non
utilizzati comunemente. Se si rilevano connessioni in uscita provenienti da un server web, questo può significare che il server sia stato
compromesso.
• Se si identificano pacchetti malformati, c’è il rischio che un attaccante
10
Per richiesta DNS si intende un’interrogazione inviata al server DNS per risolvere
un’indirizzo IP ottenendo l’indirizzo IP numerico, dal nome della macchina.
27
CAPITOLO 2. INTRUSION DETECTION SYSTEM
sia alla ricerca di vulnerabilità sulle varie macchine del sistema o stia
tentando di aggirare un firewall.
• La perdita di connettività, che potrebbe essere associata ad un attacco
DoS.
• Un numero elevato di tentativi di login falliti, i quali sono comuni quando l’attaccante cerca di ottenere maggiori privilegi di quelli realmente
concessi.
• Un’attività inusuale del modem, che potrebbe indicare la probabile
presenza di dialer.
• Le ‘Scansioni’ verso le macchine della rete, che sono utilizzate dall’attaccante per raccogliere informazioni sui sistemi operativi installati, i
servizi attivi, le porte aperte e la topologia della rete. Tali informazioni
saranno poi usate per effettuare un attacco.
• L’alta quantità di traffico generata in orari non di lavoro, indice di
utenti non autorizzati che stanno usufruendo della rete.
Nel caso in cui nella rete attaccata fosse presente uno switch, una volta introdottosi, l’attaccante potrebbe intercettare il traffico utilizzando due
attacchi.
• L’attacco ARP-POISONING, dove vengono alterate le tabelle ARP11
degli host appartenenti allo stesso segmento di rete, in modo che la
macchina sul quale risiede lo sniffer veda anche il traffico generato dagli
altri host.
• L’attacco DHCP-POISONING, dove l’attaccante fa in modo che un host della rete interna simuli di essere il server DHCP e invii delle risposte
ad-hoc alle DHCP-REQUEST che gli arrivano, specificando l’indirizzo
11
Le tabelle ARP contengono la correlazione tra indirizzi IP e MAC address di una
macchina.
28
CAPITOLO 2. INTRUSION DETECTION SYSTEM
IP dell’attaccante come default gateway. In tal modo tutto il traffico, prima di arrivare all’esterno, passerà per la macchina controllata
dall’attaccante.
2.9
Aspetti Legali
Qualsiasi attività di monitoraggio della rete deve rispettare le normative in
vigore nello stato in cui si trova il sistema informatico e le politiche interne
aziendali. In caso contrario esiste il rischio di essere perseguiti penalmente
per violazione della privacy degli utenti della rete e per intercettazione abusiva di comunicazione informatica. Non sarà, inoltre, possibile utilizzare i dati
raccolti per intraprendere azioni legali nei confronti di un intruso.
È pertanto opportuno:
• informare gli utenti che la loro attività di rete sarà monitorata;
• indicare lo scopo del monitoraggio;
• specificare le tipologie di traffico monitorate;
• specificare il responsabile a cui saranno inviate le segnalazioni di eventuali compromissioni.
Dal punto di vista burocratico tali accorgimenti possono essere tradotti
in una lettera informativa da far firmare a tutti gli utenti della rete per presa
visione. Dal punto di vista tecnico è possibile implementare un “Message of
the Day” (MOTD) che consiste in un messaggio iniziale che informa gli utenti
dell’attività di logging della rete.
In caso di incidente informatico i log rappresentano prove preziose, ed in
quanto tali, devono essere ottenute in modo conforme alla normativa vigente
ed essere tali da poter illustrare dettagliatamente lo svolgimento dei fatti.
È pertanto opportuno fare in modo che la prova ottenuta sia:
29
CAPITOLO 2. INTRUSION DETECTION SYSTEM
• autentica ed inalterata anche in caso di spostamenti dei dispositivi che
contengono la prova stessa;
• completa, in quanto non deve mostrare l’incidente dall’unica prospettiva riconducibile alle azioni compiute dall’attaccante, ma deve valutare
anche prospettive che potrebbero dare adito a contraddizioni;
• comprensibile e credibile, ovvero rappresentata in un formato leggibile
da chiunque e non ad uso esclusivo degli esperti del settore.
2.10
Scelta di un NIDS
Per concludere questa panoramica, vengono discussi gli elementi da tenere in
considerazione durante la scelta di un NIDS.
• Costo: deve, ovviamente, essere proporzionato alle risorse che si vogliono proteggere.
• Capacità della banda supportata: è la quantità di traffico che il sensore può analizzare in un’unità di tempo. Si misura in Mb/s o in
pacchetti/sec.
• Aggiornamento delle firme: i NIDS da questo punto di vista funzionano
esattamente come gli antivirus. Per poter identificare i nuovi attacchi
devono avere nel loro database le firme recenti. Per questa ragione
è di estrema importanza che gli aggiornamenti vengano rilasciati in
modo tempestivo e venga data la possibilità di aggiornare il database
in modo automatico. Importante è anche la possibilità di utilizzare
firme personalizzate create ad-hoc per le proprie esigenze.
• Attività di logging: è opportuno verificare la chiarezza dei log e valutare
se l’output viene salvato in formato standard o proprietario.
• Scalabilità: La possibilità di ampliare le funzionalità del NIDS in caso
di esigenze future è di estrema importanza, in partiolare andrebbe valu30
CAPITOLO 2. INTRUSION DETECTION SYSTEM
tato il numero di sensori supportati e la possibilità di gestire il sistema
in maniera centralizzata tramite un’apposita console.
31
CAPITOLO 3. SNORT
Capitolo 3
Snort
3.1
Introduzione
Snort[21] è il più noto Network-based Intrusion Detection System della comunità OpenSource, progettato per funzionare sia su sistemi operativi Unix
che Windows[30]. Uno degli aspetti che lo differenzia dagli altri NIDS è l’ampio bagaglio di regole di cui dispone che sono aggiornate in modo tempestivo
dalla communità e la semplicità della loro sintassi che permette a chiunque
di scriverne e aggiungerne nuove. La possibilità di salvare i log e di fornire l’output in diversi formati e ciò che lo rende uno dei migliori NIDS del
settore.
3.2
Requisiti Hardware
Per implementare Snort in una rete e realizzare un buon sistema di intrusion
detection è opportuno disporre di 2 macchine, ciascuna dotata di due schede
di rete e un hub. La prima macchina funzionerà da sensore, l’altra verrà utilizzata per archiviare i log e per permettere il monitoraggio delle statistiche
da remoto.
Più grande sarà la rete da monitorare, migliori dovranno essere le caratteristiche tecniche delle macchine usate. Bisognerà infatti disporre di una quantità
33
CAPITOLO 3. SNORT
sufficiente di memoria RAM, di un adeguato spazio per archiviare i log e di
una CPU sufficientemente rapida per processare tutti i pacchetti in tempo
reale.
Per poter quantificare le risorse necessarie è opportuno valutare:
• la dimensione della rete in cui sarà posto il sensore NIDS;
• la quantità di traffico normalmente vista dalla rete;
• dove e per quanto tempo saranno archiviati i log;
• quante regole saranno abilitate;
• quale forma di output sarà utilizzata;
• in che modo saranno generati gli allarmi.
Concretamente, per monitorare una rete domestica è consigliabile disporre
di un processore da almeno 2Ghz per l’analisi dei pacchetti e 5Gb di spazio
libero da dedicare all’archiviazione dei log.
3.3
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.
34
CAPITOLO 3. 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:
# 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
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,
35
CAPITOLO 3. SNORT
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:
preprocessor http_inspect: global [opzioni di configurazione]
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 map1 .
• 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 è:
preprocessor http_inspect_server:
server default [server options]
mentre quella IP, che identifica la configurazione di indirizzi IP individuali,
è:
1
Unicode è un sistema di codifica che assegna una combinazione di bit a ogni carat-
tere. La Unicode Map è un file contenente l’associazione tra un carattere e la rispettiva
combinazione di bit.
36
CAPITOLO 3. SNORT
preprocessor http_inspect_server:
server [IP] [server options]
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:
preprocessor http_inspect_server:
server 1.1.1.1 profile all ports { 80 3128 }
• 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.
37
CAPITOLO 3. SNORT
• 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 è:
# 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
38
CAPITOLO 3. SNORT
preprocessor http_inspect_server: server 1.1.1.1 \
ports { 80 3128 8080 } \
flow_depth 0 \
ascii yes \
oversize_dir_length 300
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 2 con
il quale il preprocessore sfportscan interagisce, mediante la seguente stringa:
preprocessor flow: stats_interval 0 hash 2
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.
2
Il preprocessore flow è un prerequisito di funzionalità di altri preprocessori in quanto
lascia Snort in un continuo meccanismo di acquisizione.
39
CAPITOLO 3. SNORT
• 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 è:
preprocessor sfportscan: proto
{ all } \
scan_type { all } \
logfile { /var/log/snort/portscan } \
sense_level { high }
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.
Il Detection Engine
Il Detection Engine è il componente che riceve i pacchetti dai preprocessori e
si occupa di confrontarli con le regole di intrusion detection. Nel caso in cui
dovesse esserci una corrispondenza tra un pacchetto e più regole diverse, la
prima regola che trova una corrispondenza con il contenuto di un pacchetto
40
CAPITOLO 3. SNORT
genera un allarme o, in alternativa, Snort offre anche la possibilità di generare un allarme per ciascun evento.
Per ridurre il numero di falsi positivi può essere configurato il file
threshold.conf. Siccome ogni evento è associato ad un gen_id e un sig_id,
conoscendo questi due valori, è possibile disabilitare completamente gli allarmi in questo modo:
#
Suppress this event completely
suppress gen_id 1, sig_id 1852
#
Suppress this event from this IP
suppress gen_id 1, sig_id 1852, track by_src, ip 10.1.1.54
#
Suppress this event to this CIDR block
suppress gen_id 1, sig_id 1852, track by_dst, ip 10.1.1.0/24
Per garantire l’effettiva disattivazione delle regole, è opportuno accertarsi
che il file threshold.conf sia incluso nel file snort.conf mediante la stringa
include threshold.conf
È anche possibile fare in modo che in un certo intervallo di tempo venga
generato al massimo un allarme.
# Esempio
threshold gen_id 1, sig_id 1851, type limit, track by_src,
count 1, seconds 60
I Componenti di Alerting e Logging
Quando viene trovata una corrispondenza tra un pacchetto e una regola,
entrano in gioco i componenti di alerting e logging, il primo usato per generare gli allarmi, il secondo per archiviare i pacchetti che hanno causato la
generazione dell’allarme. È possibile archiviare i log in un database MySQL,
PosgreSQL, Oracle o ODBC, oppure inviarli ad un server Syslog, o salvarli
41
CAPITOLO 3. SNORT
in formato compatibile con Tcpdump. Queste opzioni sono configurabili nel
file snort.conf in questo modo:
# Step #3: Configure output plugins
#
# È sufficiente eliminare il commento al plug-in che si intende
# usare.
#
# La configurazione generale è di questo tipo
# output <name_of_plugin>: <configuration_options>
#
# alert_syslog: log alerts to syslog
# ---------------------------------# Use one or more syslog facilities as arguments.
Win32 can
# also optionally specify a particular hostname/port.
# Under Win32, the default hostname is ’127.0.0.1’, .
# and the default port is 514
#
# [Unix flavours should use this format...]
# output alert_syslog: LOG_AUTH LOG_ALERT
#
# [Win32 can use any of these formats...]
# output alert_syslog: LOG_AUTH LOG_ALERT
# output alert_syslog: host=hostname, LOG_AUTH LOG_ALERT
# output alert_syslog: host=hostname:port, LOG_AUTH LOG_ALERT
# log_tcpdump: log packets in binary tcpdump format
# ------------------------------------------------# The only argument is the output file name.
#
# output log_tcpdump: tcpdump.log
42
CAPITOLO 3. SNORT
# database: log to a variety of databases
# --------------------------------------# In questo caso è attivo il database MySQL
#
# output database: log, mysql, user=snort password=test
# dbname=snort host=localhost
# output database: alert, postgresql, user=snort dbname=snort
# output database: log, odbc, user=snort dbname=snort
# output database: log, oracle, dbname=snort user=snort
# password=test
In base alla riga di codice a cui viene tolto il commento si stabilisce il tipo
di output. Nel caso in cui si intenda archiviare i dati in un server Syslog, va
specificato se tale server sia Unix o Windows. Per archiviare i dati in un file
compatibile con Tcpdump, è sufficiente configurare il nome da dare a tale
file. Nel caso si intenda archiviare i dati in un database, dovrà essere inserito
il nome del database, l’username e la password.
3.4
Modalità di Funzionamento
Snort ha diverse opzioni di funzionamento che possono essere adottate a
seconda del contesto in cui viene installato.
• -A alert-mode: Permette di specificare la modalità di generazione degli
allarmi che può essere di tipo full, fast, none e unsock. L’opzione full è
impostata di default e permette di avere informazioni complete sull’attacco, fast invece permette di rendere più rapido il sistema generando allarmi in un formato più semplice che contiene solo il timestamp,
il messaggio di allarme e gli indirizzi IP sorgente e di destinazione.
La modalità none permette di non generare allarmi, mentre unsock è
un’opzione sperimentale che invia le informazioni ad un altro processo
attraverso un socket UNIX.
43
CAPITOLO 3. SNORT
• -b: Effettua il logging dei pacchetti in formato binario.
• -c config-file: Utilizza le regole trascritte nel file di configurazione
specificato.
• -D: Avvia snort in modalità daemon.
• -h home-net: Imposta la rete domestica nel formato 192.168.1.0/16.
• -i interface: Imposta l’interfaccia di rete sul quale effettuare lo sniffing.
• -k logging-mode: Imposta la modalità di logging. Quella di default è
pcap ma può essere anche cambiata in ascii o none, che permette di
non effettuare il logging dei pacchetti.
• -l log-dir : Imposta il percorso del file nel quale saranno archiviati i log.
• -N : Disabilita il logging dei pacchetti ma continua a generare allarmi.
• -s: Invia messaggi di allarme ad un server Syslog.
• -v : Visualizza l’header dei pacchetti.
• -V : Visualizza la versione di Snort.
3.5
Regole di Intrusion Detection
Una regola è un set di istruzioni strutturato in modo tale da permettere di
verificare il pattern matching con l’header dei pacchetti, oppure con stringhe
contenute nel payload dei pacchetti.
Una buona regola deve essere specifica e chiara in modo tale da ridurre
falsi negativi e falsi positivi, e deve contenere una descrizione accurata dell’attacco fornendo referenze per eventuali approfondimenti esterni.
Una regola è composta da un header (l’intestazione della regola) e un
body (il corpo della regola).
44
CAPITOLO 3. SNORT
Header
L’header è la parte principale della regola e comprende: l’azione da intraprendere (alert, log, pass, ...), il protocollo utilizzato, l’indirizzo IP e la porta
sorgente, l’indirizzo IP e la porta di destinazione. Una volta trovata una corrispondenza tra una regola e il contenuto di un pacchetto, è possibile scegliere
tra diverse opzioni ciascuna identificata da una particolare keyword:
• ALERT ha la semplice funzione di generare un allarme;
• LOG archivia l’evento senza generare l’allarme;
• PASS ignora il pacchetto;
• ACTIVATE genera un allarme e poi attiva una regola DYNAMIC;
• DYNAMIC viene attivata da una regola ACTIVATE e poi agisce come
la keyword LOG.
# Esempio
alert udp any 19 <> any 7
Nel precente esempio viene generato un allarme, qualora venga riconosciuto un pacchetto UDP proveniente dalla porta 19 di un qualsiasi indirizzo
IP sorgente, verso la porta 7 di un qualsiasi indirizzo IP di destinazione. I
parametri aggiuntivi, come il testo del messaggio da scrivere nei log, saranno
configurati nel body.
Body
Il body completa la definizione della regola e comprende una serie di opzioni
che vengono racchiuse tra parentesi:
# Esempio
(msg:"DOS UDP echo+chargen bomb";
reference:cve,CAN-1999-0635; reference:cve,CVE-1999-0103;
classtype:attempted-dos; sid:271; rev:3;)
45
CAPITOLO 3. SNORT
Nel precedente esempio, il messaggio scritto nei log sarà ‘DOS UDP echo
+ chargen bomb’, la tipologia d’attacco è ‘attempted-dos’ che indica il tentativo di effettuare un attacco DoS, l’identificatore della regola che ha generato
l’allarme è 271 e tale regola è stata revisionata 3 volte. Vengono inoltre
dati alcuni riferimenti da cui reperire informazioni aggiuntive sull’attacco:
cve,CAN-1999-0635 e cve,CVE-1999-0103.
Il body è inoltre configurabile con una serie di opzioni come ad esempio
‘flow’, ‘TTL’ o ‘sid’ che saranno analizzate di seguito.
L’opzione ‘flow’, permette di definire la direzione dello stream di pacchetti
da controllare e può assumere i seguenti valori:
• to_server: per i pacchetti inviati al server;
• from_server: per i pacchetti inviati dal server;
• to client: per i pacchetti inviati al client;
• from_client: per i pacchetti inviati dal client;
• established: per i paccheti di una sessione TCP in stato established.
L’opzione ‘sameip’ permette di analizzare se la sorgente e la destinazione
dei pacchetti coincidono; la regola assume la seguente forma:
alert ip any any -> any any
(msg:"Same Source and Destination IP Address"; sameip;)
Il Time To Live ‘TTL’ viene utilizzato per identificare le query via tool
come Traceroute, Tracert o Netroute e supporta i simboli ‘>’,‘<’ e ‘=’, mentre l’opzione ‘seq’, permette di selezionare i pacchetti con numero di sequenza
statico.
La verifica dei flag TCP è invece attivata tramite l’opzione ‘flags’ che può
assumere diversi valori:
• A: per verificare se è attivo solo il flag ACK;
46
CAPITOLO 3. SNORT
• F: per verificare se è attivo solo il flag FIN;
• P: per verificare se è attivo solo il flag PSH;
• R: per verificare se è attivo solo il flag RST;
• S: per verificare se è attivo solo il flag SYN;
• U: per verificare se è attivo solo il flag URG;
• +: usato per identificare se sono attivi altri flag oltre quello specificato
(Es. A+ identificherà i pacchetti con attivi i flag AF,AP,AR,AS,AU);
• *: usato per verificare se sono attivi i flag specificati (Es. *AS, identificherà solo i pacchetti con attivi i flag AS);
• !: usato per verificare se sono attivi i flag diversi da quello specificato
(Es. !S identificherà i pacchetti con attivi uno o più flag tra i seguenti:
A,F,P,R,U).
Inoltre, se da un lato l’opzione ‘ack’, permette di selezionare i pacchetti
con numero di acknowledgement statico, l’opzione ‘itype’ esamina invece il
valore del campo itype dei pacchetti ICMP, al fine di identificare i pacchetti
con valori non validi.
Lo Snort ID ‘sid’ identifica univocamente le regole di Intrusion Detetion. I
valori tra 1 e 1.000.000 sono riservati alle regole rilasciate da www.snort.org,
mentre quelli maggiori di 1.000.000 possono essere usati dagli utenti per creare le proprie regole. In questo ambito l’opzione ‘rev’ rilascia informazioni
circa il numero di revisioni avuto da una regola, l’identificatore di sicurezza
‘priority’ assegna una priorità ad ogni regola e l’opzione ‘classtype’ permette
di raggruppare le regole in base ad una categoria di attacco.
L’opzione ‘reference’, inoltre, permette di associare a ciascuna regola
una referenza esterna dove reperire maggiori informazioni sulla vulnerabilità
sfruttata. La sintassi di riferimento per questa opzione è:
47
CAPITOLO 3. SNORT
reference:<fonte> <valore>;
Continuando l’analisi delle opzioni configurabili all’interno del body di
una regola di intrusion detection, troviamo l’opzione ‘msg’ che permette di
associare alla regola un messaggio che informerà sul tipo di attacco potenzialmente riscontrato. Questa opzione si utilizza nel seguente modo:
alert tcp $EXTERNAL any -> $INTERNAL 79 (msg:"Finger";)
L’opzione ‘logto’ permette di archiviare i pacchetti relativi alla regola. La
sintassi di questa opzione è
logto: "PATH/FILE.estensione";
Snort fornisce, inoltre, la possibilità di definire delle variabili da usare
nelle regole. Ogni variabile deve avere una struttura di questo tipo:
Var <nome variabile> <valore variabile>
Ogni variabile definita all’interno di regole o nei file di configurazione, può
essere richiamata anteponendo al suo nome il simbolo ‘$’.
Nel file snort.conf è opportuno definire le variabili principali al fine di
alleggerire il carico della CPU nel modo seguente:
# Indirizzi IP o range di indirizzi IP della rete interna
var HOME_NET [10.1.1.0/24,192.168.1.0/16]
# Indirizzi IP o range di indirizzi IP della rete esterna
# che in questo caso assume tutti i valori diversi
# dalla rete interna
var EXTERNAL_NET !$HOME_NET
# Indirizzo IP di un eventuale Server DNS
# Anche per i server è possibile specificare più
48
CAPITOLO 3. SNORT
# di un indirizzo IP nel caso ci siano più server
# dello stesso tipo
var DNS_SERVERS 192.168.1.101
# Indirizzo IP di un eventuale Server SMTP
var SMTP_SERVERS 192.168.1.102
# Indirizzo IP di un eventuale Server Web
var HTTP_SERVERS 192.168.1.103
# Indirizzo IP di un eventuale Server SQL
var SQL_SERVERS 192.168.1.104
# Indirizzo IP di un eventuale Server Telnet
var TELNET_SERVERS 192.168.1.105
# Indirizzo IP di un eventuale Server SNMP
var SNMP_SERVERS 192.168.1.106
# Il valore di default per tutti i server è
var NOME_SERVER $HOME_NET
# che permette di trattare tutti gli host della rete interna
# come server
# Valore numerico della Porta Http su quale il
# server web è in ascolto
var HTTP_PORTS 80
# Valore Numerico della Porta di un eventuale Server Oracle
var ORACLE_PORTS 1521
49
CAPITOLO 3. SNORT
# Indirizzi IP dei Server Aim
var AIM_SERVERS [64.12.24.0/23,64.12.28.0/23,64.12.161.0/24,
64.12.163.0/24,64.12.200.0/24,205.188.3.0/24,205.188.5.0/24,
205.188.7.0/24,205.188.9.0/24,205.188.153.0/24,
205.188.179.0/24,205.188.248.0/24]
# Percorso dei file contenenti le regole
var RULE_PATH /boot/etc/rules
Le regole sono, infine, raggruppate per categorie in alcuni file che saranno
inclusi nel file di configurazione snort.conf.
include $RULE_PATH/local.rules
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-client.rules
50
CAPITOLO 3. SNORT
include $RULE_PATH/web-php.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/x11.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/oracle.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/snmp.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/shellcode.rules
include $RULE_PATH/policy.rules
include $RULE_PATH/porn.rules
include $RULE_PATH/info.rules
include $RULE_PATH/icmp-info.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/chat.rules
include $RULE_PATH/multimedia.rules
include $RULE_PATH/p2p.rules
include $RULE_PATH/experimental.rules
51
CAPITOLO 3. SNORT
Ad una tipologia di server, è usualmente associata una tipologia di regole:
ad esempio il server DNS è associato al file dns.rules o il server POP3 al
file pop3.rules.
In questo modo, specificando per esempio l’indirizzo IP di un server DNS,
tutte le regole presenti nel file dns.rules saranno verificate solo sui pacchetti
in ingresso e uscita dal server DNS e non su tutto il restante traffico di rete
che non sarebbe comunque vulnerabile ai tipi di attacchi controllati dalle
regole.
È anche possibile disabilitare una categoria di regole commentando la
stringa corrispondente al file include. Per esempio se non è configurato un
server web, sarà possibile aggiungere il simbolo ‘#’ davanti alle seguenti
stringhe di inclusione:
# include $RULE_PATH/web-cgi.rules
# include $RULE_PATH/web-coldfusion.rules
# include $RULE_PATH/web-iis.rules
# include $RULE_PATH/web-frontpage.rules
# include $RULE_PATH/web-misc.rules
# include $RULE_PATH/web-client.rules
# include $RULE_PATH/web-php.rules
Terminata questa panoramica sulla configurazione delle regole di Snort,
si esamineranno nel prossimo l’analisi dei log generati dalle regole.
3.6
Analisi dei Log
Quando si verifica un incidente, l’analisi delle intrusioni permette di avere
maggiori informazioni sia su come si è sviluppato l’attacco, che sull’entità in
termini di pericolosità dello stesso. Il primo passo che permette di raccogliere
maggiori informazioni è l’analisi degli eventi. Snort produce dei log di questo
formato:
52
CAPITOLO 3. SNORT
[**] [1:469:1] ICMP PING NMAP [**]
[Classification: Attempted Information Leak] [Priority: 2]
10/15-06:01:46.050056 192.168.0.4 -> 192.168.0.3
ICMP TTL:45 TOS:0x0 ID:17750 IpLen:20 DgmLen:28
Type:8
Code:0
ID:31266
Seq:8282
ECHO
[Xref => http://www.whitehats.com/info/IDS162]
Analizzando i campi del log registrato si evince che:
• 1:469:1 è composto da tre numeri, di cui il primo indica quale componente di Snort ha generato l’allarme, il secondo indica il SID della
firma e l’ultimo il numero di revisioni della firma stessa.
• ICMP PING NMAP è il nome dell’attacco.
• Classification: Attempted Information Leak indica il tipo di attacco.
• Priority: 2 indica il grado di priorità dell’allarme che è direttamente
proporzionale alla potenziale pericolosità dell’attacco (scala da 1 a 3);
gli allarmi in cui il valore del campo Priority è 1 sono i più più critici.
• 10/15-06:01:46.050056 è la data e l’ora dell’attacco effettuato il 15
ottobre 2006 alle 06:01.
• 192.168.0.4 -> 192.168.0.3 indica gli indirizzi IP sorgente (192.168.0.4)
e di destinazione (192.168.0.3).
• Le restanti informazioni riguardano le specifiche tecniche del protocollo
utilizzato.
Terminata l’analisi di Snort, nel prossimo capitolo si esaminerà la sua
implementazione pratica all’interno di una rete.
53
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Capitolo 4
Configurazione del NIDS
4.1
Introduzione
Il compito principale di un NIDS è rilevare le attività non autorizzate che
vengono compiute abusivamente all’interno di un sistema informatico.
Durante il lavoro di progettazione dell’Intrusion Detection System si sono
tenuti in considerazione diversi requisiti, tra i quali:
• usabilità al fine di rendere comprensibili anche a tecnici non esperti i
risultati prodotti dal sistema di intrusion detection;
• adattabilità a nuovi attacchi. A questo scopo gli aggiornamenti devono essere eseguiti in modo automatico e tempestivo, limitando la
manutenzione del sensore;
• ottimizzazione del rapporto qualità/prezzo allo scopo di ottenere le
migliori prestazioni utilizzando una macchina con risorse limitate.
Si è scelto, pertanto, di adottare esclusivamente software gratuiti, realizzati
dalla comunità OpenSource e che presentano tutte le caratteristiche essenziali
per implementare un valido sistema di sicurezza.
Nel corso di questo capitolo, si analizzeranno le fasi fondamentali d’installazione e configurazione di un Intrusion Detection System, completo di
55
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
interfaccia web, per la visualizzazione degli allarmi e per l’aggiornamento
automatico delle regole. Per prima cosa verranno descritte le fasi di installazione dei diversi software necessari per il funzionamento dell’IDS (vedi Capitolo 4.3). Successivamente, verrà presentata la fase di test (vedi Capitolo
4.4), e la fase di configurazione dei componenti necessari all’amministrazione
remota via SSH (vedi Capitolo 4.5). Per concludere, verranno presentate in
dettaglio le ottimizzazioni apportate alle regole di intrusion detection al fine
di limitare i falsi positivi (vedi Capitolo 4.6).
4.2
Analisi del Sistema
Il lavoro di tesi, come detto, si è occupato della progettazione e dello sviluppo di un IDS, da integrare all’interno di una rete informatica già esistente,
in grado di garantire un livello di sicurezza maggiore. A questo scopo, la
conoscenza approfondita della rete e delle sue peculiarità diventa un requisito fondamentale per lo sviluppo di un’infrastruttura robusta ad attacchi
e tentativi di intrusione. Pertanto, prima di procedere alla configurazione
dell’IDS si è valutato:
• il tipo risorse da proteggere, al fine di comprendere quali tipi di dati
vengono trattati e di capire quali sono i rischi che si corrono nel caso
in cui venga infranta la loro integrità 1 , disponibilità 2 e riservatezza 3 ;
• il design e la topologia della rete, per individuare eventuali misure di
sicurezza già implementate, e la collocazione dei dati da proteggere;
• l’utilizzo di hub, switch o entrambi, per stabilire le modalità di implementazione e il posizionamento dei sensori nella rete;
1
Per integrità si intende la protezione dei dati nei confronti delle modifiche non
autorizzate del loro contenuto.
2
Per disponibilità si intende la prevenzione da attacchi che mirano a rendere i dati non
accessibili anche a coloro che ne hanno il diritto.
3
Per riservatezza si intende la protezione dei dati scambiati tra due o più interlocutori
al fine di evitare che terze parti vi possano accedere in modo non autorizzato.
56
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.1: Schema di rete prima dell’installazione del NIDS
• l’opportunità di visualizzare il traffico prima che venga filtrato dal firewall, per valutare l’opportunità di rilevare anche i tentativi di attacco
bloccati dal firewall stesso.
Il sistema di intrusion detection è stato implementato in una rete caratterizzata da un firewall perimetrale con tre interfacce: una per la rete interna,
una per la rete esterna e una per la DMZ. In particolare, nella rete interna
sono stati collocati tutti gli host utilizzati dagli utenti per l’archiviazione e
l’elaborazione dei dati, nella DMZ sono stati inseriti i server web, SMTP,
POP3 e un database ORACLE contenenti gli archivi dei dati, mentre la rete
esterna è stata impiegata per collegare la rete interna e la DMZ ad Internet
(vedi Figura 4.1). In una LAN di questo tipo, è evidente come il firewall non
garantisca alcuna protezione da attacchi provenienti dall’interno della rete;
inoltre, nel caso in cui un intruso, che agisce all’esterno del firewall, riesca
ad aggirare il firewall, nessun log sul traffico di rete generato viene mantenuto.
Disponendo di una sola macchina per l’implementazione del sistema di
intrusion detection, questa è stata configurata per agire contemporaneamente da sensore per le intrusioni, da database in cui archiviare i log generati
dal sensore e da webserver per permettere che i log siano visibili tramite
57
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.2: Schema di rete dopo l’installazione del NIDS
interfaccia grafica. Uno dei problemi più critici da affrontare prima della
configurazione di un NIDS è la scelta della sua posizione all’interno della
rete. Installare il sensore all’esterno del firewall non sembra la scelta più
opportuna, in quanto questa scelta lo esporrebbe ad attacchi provenienti
dall’esterno; dato che i dati da proteggere sono collocati nei database posti
nella DMZ si è quindi pensato di installare il sensore in questo segmento di
rete (vedi Figura 4.2).
Per l’installazione e la configurazione dell’Intrusion Detection System,
inoltre, sono state identificate come necessarie le seguenti tecnologie, che
verranno analizzate in dettaglio nei prossimi capitoli.
• Il sistema operativo CentOS v4.4 (www.centos.org);
• Il software di intrusion detection Snort v2.6 (www.snort.org);
• Le regole di intrusion detection per Snort v2.6 (www.snort.org);
• Il server web Apache con supporto PHP (www.apache.org);
• Il server MySQL (www.mysql.org);
• L’Active Data Objects DataBase (http://adodb.sourceforge.net);
58
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
• Il Basic Analysis and Security Engine per permettere la visualizzazione
grafica dei log (http://secureideas.sourceforge.net);
• nTop (www.ntop.org) per analizzare e monitorare il traffico anomalo;
• Oinkmaster (http://oinkmaster.sourceforge.net) per aggiornare
automaticamente le regole (è richiesta la registrazione su www.snort.
org);
• Nmap (www.insecure.org/nmap) e Metasploit (www.metasploit.org)
per il test dell’IDS;
• Un server SSH per permettere l’amministrazione remota dell’IDS;
• Un client SSH per amministrare l’IDS da remoto.
4.3
Setup del NIDS
La fase di setup di un IDS si compone di molteplici passi di configurazione
dei diversi componenti utilizzati per lo sviluppo dell’IDS stesso.
4.3.1
Setup di CentOS v4.4
Primo passo nella configurazione di un IDS è la scelta del Sistema Operativo
per la gestione delle risorse del sensore. Per questo lavoro di tesi, si è scelto il
sistema operativo CentOS v4.4[4] in quanto premette di avere una maggiore
stabilità anche in realtà estese come quelle ‘enterprise’, più ampie delle comuni reti domestiche. Per evitare di occupare risorse che potrebbero essere
necessarie al software di intrusion detection, è stata effettuata un’installazione minimale del Sistema Operativo, priva di interfaccia grafica. Inoltre,
poichè il sistema viene gestito da riga di comando, si può fare a meno del
sistema grafico X window 4 [26].
4
X Window System, ben noto in gergo come X11 o ancor più semplicemente X, è di
fatto il sistema grafico standard per tutti i sistemi Unix (Linux e BSD compresi)
59
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Tuttavia, anche in caso di installazione minimale, non tutti i servizi installati sono stati necessari per questo lavoro di tesi. In particolare, i servizi
non necessari, quali ad esempio apmd che si occupa del risparmio energetico,
cups che è il server di stampa, isdn che permette di effettuare connessioni
tramite modem ISDN, nfslock che permette ai client NFS di bloccare i file
presenti sul server, pcmcia che permette di rilevare l’eventuale inserimento
o l’estrazione di una scheda PCMCIA, portmap che converte i numeri dei
programmi RPC nei numeri di porta del protocollo DARPA, sono stati disabilitati per migliorare le performance dell’infrastruttura mediante i seguenti
comandi:
[root@localhost ~]#
chkconfig apmd off
[root@localhost ~]#
chkconfig cups off
[root@localhost ~]#
chkconfig isdn off
[root@localhost ~]#
chkconfig nfslock off
[root@localhost ~]#
chkconfig pcmcia off
[root@localhost ~]#
chkconfig pcmcia off
A questo punto è stato effettuato l’aggiornamento del sistema operativo:
[root@localhost ~]# yum -y update
e l’installazione dei servizi necessari:
[root@localhost ~]# yum -y install mysql
mysql-bench mysql-server mysql-devel mysqlclient10
php-mysql httpd gcc pcre-devel php-gd gd mod_ssl glib2-devel
gcc-c++
Una volta che il sistema è installato ed operativo, è necessario configurare
le opzioni di rete, utilizzando il comando:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
60
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
In questo modo viene eseguito l’editor di testo vi, che permette di modificare il contenuto del file ifcfg-eth0.
A questo punto si digitano le seguenti righe di codice personalizzate che
permettono di configurare la scheda di interfaccia di rete eth0.
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.22
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
HWADDR=00:0C:29:2B:60:6D
Nella precedente configurazione,
• DEVICE, indica il nome del dispositivo di rete fisico;
• ONBOOT, può essere configurato con le opzioni yes e no ed indica se
il dispositivo è attivato all’avvio;
• BOOTPROTO, segnala se c’è un protocollo per l’assegnazione dell’indirizzo IP, e può essere configurato con le opzioni static se l’indirizzo
IP della scheda di rete è statico, bootp se viene utilizzato il protocollo
BOOTP, dhcp se viene utilizzato il protocollo DHCP;
• IPADDR, corrisponde all’indirizzo IP della scheda di rete; questa opzione non va configurata nel caso in cui si utilizzano i protocolli DHCP
o BOOTP per l’assegnazione dell’indirizzo IP;
• NETMASK, corrisponde al valore della maschera di rete;
• GATEWAY, corrisponde all’indirizzo IP del gateway di rete;
• HWADDR, corrisponde al MAC address della scheda di rete.
61
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Il setup della rete continua e si conclude con la configurazione del server
DNS (Domain Name Server). Analogamente a quanto fatto precedentemente,
si modifica il file /etc/resolv.conf inserendo la seguente riga di codice che
identifica l’indirizzo IP del server DNS.
nameserver 192.168.1.10
Ovviamente, al posto di 192.168.1.10, va inserito l’indirizzo IP del rispettivo server DNS.
La configurazione di rete è a questo punto terminata. Nel prossimo paragrafo verrà descritta in dettaglio la configurazione del database MySQL e del
server web Apache.
4.3.2
Setup di Apache e MySQL
L’installazione di un server web e di un Database Management System (DBMS)5
è una fase necessaria che precede l’implementazione dell’interfaccia grafica
che sarà utilizzata per gestire gli allarmi generati dal software di intrusion
detection Snort. A tal proposito si è scelto di utilizzare Apache[2] che è la
piattaforma server Web più diffusa e MySQL[8] che è un DBMS relazionale, composto da un client e un server, utilizzabile sia in ambiente Unix che
Windows.
Prima di procedere alla configurazione del server web Apache e del server
MySQL è opportuno aggiungere al sistema un nuovo utente chiamato snort
che non abbia i privilegi dell’utente root ma che possa compiere tutte le
operazioni necessarie al processo di intrusion detection.
[root@localhost ~]# groupadd snort
groupadd: group snort exists
[root@localhost ~]# useradd -g snort snort -s /sbin/nologin
5
Un Database Management System è un sistema software che consente la creazione e
la modifica di un database da parte di più utenti.
62
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
I servizi Apache e MySQL vengono, poi, avviati mediante i seguenti
comandi:
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# service httpd start
Avvio di httpd:
[
OK
]
[
OK
]
[root@localhost ~]# service mysqld start
Avvio di MySQL:
Per la configurazione del server web Apache è sufficiente modificare, in
base alle proprie esigenze, il file httpd.conf che si trova nella directory
/etc/httpd/conf/ oppure nella directory /usr/local/apache/conf/ che
contiene le direttive usate per la configurazione.
Le direttive principali che è necessario configurare sono:
• Listen che identifica la porta sul quale il server web sarà attivo;
Listen 80
• ServerName che identifica il nome del server web che può coincidere
con il nome della macchina o può essere un nome arbitrario;
ServerName new.host.name:80
• User e Group che identificano l’utente e il gruppo con i quali viene
eseguito il processo httpd : per ragioni di sicurezza è sempre opportuno
utilizzare utenti che non hanno i privilegi dell’utente root come apache
o nobody;
User apache
Group apache
63
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
• DocumentRoot che va configurata con la directory che conterrà i file
HTML da visualizzare;
DocumentRoot "/var/www/html"
• ServerRoot che definisce la directory di base di Apache;
ServerRoot "/etc/httpd"
• LoadModule utilizzata per caricare i moduli di Apache necessari al corretto funzionamento del server web: la configurazione di default integra
i seguenti moduli:
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule auth_ldap_module modules/mod_auth_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
64
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
Terminata la configurazione del server web Apache si può passare alla
configurazione e alla gestione amministrativa del database MySQL. Per prima
cosa, è necessario collegarsi al database con i privilegi di amministratore
dell’utente root, e se non è stata precedentemente impostata una password,
è opportuno configurarne una eseguendo il comando:
mysql> SET PASSWORD FOR root@localhost=PASSWORD(‘password’);
Query OK, 0 rows affected (0.03 sec)
65
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Si procede, poi, con la creazione vera e propria di un nuovo database,
chiamato ‘snort’, che si occuperà di memorizzare i log generati dal software
di intrusion detection.
mysql> create database snort;
Query OK, 1 row affected (0.00 sec)
Si impostano quindi i privilegi e la password di accesso dell’utente snort.
mysql> grant insert,select on root.* to snort@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> SET PASSWORD FOR snort@localhost=PASSWORD(‘password’);
Query OK, 0 rows affected (0.00 sec)
mysql> grant create,insert,select,delete,update on
snort.* to snort@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> grant create,insert,select,delete,update on
snort.* to snort;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
Per creare le tabelle del database si effettua, successivamente, il download dell’archivio all’interno del quale è presente il file create_mysql. Si
decomprime, quindi, nella diretory /etc/snort/ il file create_mysql, contenente i comandi per la generazione delle tabelle. Tale file è contenuto nella
subdirectory /schemas/ dell’archivio snort-2.6.0.2.tar.gz, scaricabile da
www.snort.org.
La creazione delle tabelle avviene con il seguente comando che esegue, a
sua volta, i comandi contenuti nel file create_mysql:
66
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
[root@localhost ~]#
mysql -u root -p < /etc/snort/create_mysql snort
Enter password:
Prima di creare le tabelle sarà richiesta la password di accesso al database
dell’utente root. Dopo aver inserito la password, sarà portata a termine
l’importazione delle tabelle e sarà, quindi, opportuno controllare che tutto
sia stato compiuto correttamente tramite il seguente brano di codice:
[root@localhost ~]# mysql -p
Enter password:
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.1.20
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
A questo punto, il server MySQL contiene tre database: ‘mysql’, ‘snort’
e ‘test’. Per visualizzare il contenuto del server MySQL basta digitare il
comando show databases e sullo schermo comparirà il seguente output:
mysql> show databases;
+----------+
| Database |
+----------+
| mysql
|
| snort
|
| test
|
+----------+
3 rows in set (0.00 sec)
A questo punto selezionando il database ‘snort’, si possono visualizzare
le tabelle in esso contenute.
mysql> use snort
67
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Reading table information for completion of table and column
names
You can turn off this feature to get a quicker startup with -A
Database changed
Se tutte le operazioni sono state compiute correttamente, l’output dovrebbe essere come segue:
mysql> show tables;
+------------------+
| Tables_in_snort
|
+------------------+
| data
|
| detail
|
| encoding
|
| event
|
| icmphdr
|
| iphdr
|
| opt
|
| reference
|
| reference_system |
| schema
|
| sensor
|
| sig_class
|
| sig_reference
|
| signature
|
| tcphdr
|
| udphdr
|
+------------------+
16 rows in set (0.00 sec)
68
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Dopo aver verificato che tutto sia stato portato a termine con successo è
possibile terminare la configurazione del server MySQL.
A questo punto, l’installazione e configurazione di Snort, che sarà trattata
nel prossimo paragrafo, può cominciare.
4.3.3
Setup di Snort v2.6
Il software di intrusion detection Snort e le sue regole, possono essere scaricate dal sito ufficiale www.snort.org. Dopo aver installato il programma e decompresso le regole nella cartella /etc/snort/, la configurazione di
Snort può avere inizio aprendo il file /etc/snort/snort.conf contenente le
impostazioni di default.
[root@localhost ~]# vi /etc/snort/snort.conf
In aggiunta alle suddette regole di default devono essere specificati i dati
relativi alla Home Network e agli indirizzi IP dei server.
## var HOME_NET [172.20.1.0/24,192.168.1.0/24]
var HOME_NET 192.168.1.0/16
var EXTERNAL_NET !\$HOME_NET
# Configure your server lists.
This allows snort to only look for
# attacks to systems that have a service up.
Why look for HTTP
# attacks if you are not running a web server?
This allows quick
# filtering based on IP addresses
# These configurations MUST follow the same configuration
# scheme as defined
# above for \$HOME_NET.
# List of DNS servers on your network
var DNS_SERVERS \$HOME_NET
69
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
# List of SMTP servers on your network
var SMTP_SERVERS \$HOME_NET
# List of web servers on your network
var HTTP_SERVERS \$HOME_NET
# List of sql servers on your network
var SQL_SERVERS \$HOME_NET
# List of telnet servers on your network
var TELNET_SERVERS \$HOME_NET
# List of snmp servers on your network
var SNMP_SERVERS \$HOME_NET
È inoltre necessario configurare la porta sulla quale è attivo il server web,
var HTTP_PORTS 80
il percorso della directory contenente le regole,
var RULE_PATH /boot/etc/rules
e la stringa che comunica a Snort di memorizzare gli eventi nel database
MySQL
output database: log, mysql, user=snort password=snort
dbname=snort host=localhost
Fatto questo, Snort è funzionante ma non è ancora possibile visualizzare
l’output degli eventi tramite un’interfaccia HTML.
Per eseguire Snort è sufficiente portarsi nella directory /usr/sbin/, ed
eseguire il seguente comando:
70
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
[root@localhost sbin]# ./snort -dev -l /var/log/snort -b
-h 192.168.1.1/16 -c /etc/snort/snort.conf
Se tutto è andato a buon fine, l’output visualizzato sarà:
Running in IDS mode
--== Initializing Snort ==-Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file /etc/snort/snort.conf
+++++++++++++++++++++++++++++++++++++++++++++++++++
--== Initialization Complete ==-,,_
o"
-*> Snort! <*)~
’’’’
Version 2.6.0 (Build 59)
By Martin Roesch & The Snort Team:
http://www.snort.org/team.html
(C) Copyright 1998-2006 Sourcefire Inc., et al.
È anche possibile avviare Snort in modalità daemon6 aggiungendo l’opzione -D.
[root@localhost sbin]# ./snort -dev -l /var/log/snort -b
-h 192.168.1.1/16 -c /etc/snort/snort.conf -D
Snort è anche capace di funzionare in modalità Sniffer:
[root@localhost sbin]# ./snort -dev
6
Nei sistemi operativi Unix-like, un processo avviato in modalità daemon viene eseguto
in background senza che l’utente possa interagire con esso o possa visualizzarne l’output.
71
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
o in modalità Packet Logger:
[root@localhost sbin]# ./snort -dev -l /var/log/snort -b
Sino a questo punto sono stati trattati la configurazione di Snort, del server web Apache e del database MySQL. Nel prossimo paragrafo verranno esaminati alcuni componenti aggiuntivi che offrono un’interfaccia più amichevole
a livello utente per la consultazione degli eventi generati da Snort.
4.3.4
Setup di AdoDB e BASE
Per interagire con diversi tipi di database senza dover scrivere query specifiche per ogni database, ma utilizzando query SQL standard, si utilizza
il componente AdoDB[1] (Active Data Objects DataBase) che va installato
nella directory /var/www.
Per analizzare tramite un’interfaccia HTML, gli allarmi generati da Snort
si installa, invece, il Basic Analysis and Security Engine nella directory /var/
www/html.
A questo punto è opportuno rinominare prima la directory del componente BASE[3] /base-1.2.6 in /base (questo semplicemente per semplificare le
operazioni successive) e poi il file base_conf.php.dist in base_conf.php.
Si modificano quindi, nel seguente modo, alcuni parametri nel file base_
conf.php.
\$BASE_urlpath = ‘/base’;
\$DBlib_path = ‘/var/www/adodb’;
\$DBtype = ‘mysql’;
\$alert_dbname
= ‘snort’;
\$alert_host
= ‘localhost’;
\$alert_port
= ‘’;
\$alert_user
= ‘snort’;
\$alert_password = ‘password’;
72
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Se tutto è andato a buon fine, accedendo per mezzo di un browser alla
pagina https://192.168.1.22/base si potrà visualizzare il seguente messaggio:
The database version is valid, but the BASE DB structure
(table: acid_ag)is not present. Use the ‘Setup page’ to
configure and optimize the DB.
Si procede, così, alla configurazione del Basic Analysis and Security Engine, cliccando prima su ‘Setup page’ e nella pagina che segue su ‘Create
BASE AG’. L’output visualizzato è:
Successfully created ‘acid_ag’
Successfully created ‘acid_ag_alert’
Successfully created ‘acid_ip_cache’
Successfully created ‘acid_event’
Successfully created ‘base_roles’
Successfully INSERTED Admin role
Successfully INSERTED Authenticated User role
Successfully INSERTED Anonymous User role
Successfully INSERTED Alert Group Editor role
Successfully created ‘base_users’
Operation
BASE tables
Description
Status
Adds tables to extend the Snort DB to support the
BASE functionality
DONE
Il Basic Analysis and Security Engine e l’interfaccia HTML per la visualizzazione grafica degli eventi di Snort sono adesso funzionanti.
È tuttavia opportuno proteggere la directory di BASE da password.
[root@localhost base]# mkdir /var/www/passwords
73
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
[root@localhost www]#
/usr/bin/htpasswd -c /var/www/passwords/passwords base
New password:
Re-type new password:
Adding password for user base
È quindi necessario modificare il file /etc/httpd/conf/httpd.conf, aggiungendo sotto la sezione
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
le seguenti stringhe:
<Directory "/var/www/html/base">
AuthType Basic
AuthName "SnortIDS"
AuthUserFile /var/www/passwords/passwords
Require user base
</Directory>
Infine, il server Apache deve essere riavviato con il seguente comando:
[root@localhost /]# service httpd restart
Interruzione di httpd:
[
OK
]
Avvio di httpd:
[
OK
]
A questo punto, dopo aver inserito la password di accesso nel pannello di
controllo, la pagina https://192.168.1.22/base visualizzerà la schermata
principale di BASE (vedi Figura 4.3). Nel pannello di controllo si può scegliere se visualizzare gli allarmi più recenti o quelli più frequenti e raggrupparli
in base alla porta sorgente o di destinazione o in base al protocollo utilizzato. Per ogni evento è possibile, inoltre, visualizzare innumerevoli dettagli ed
eseguire il download del payload del pacchetto che l’ha generato (vedi Figura
4.4).
74
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.3: Schermata principale di BASE
75
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.4: Schermata dettagli di BASE
76
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Riguardo ciascun allarme è possibile conoscere:
• l’id;
• il sensore che l’ha generato;
• la data e l’orario della segnalazione;
• il nome del potenziale attacco;
• i riferimenti dai quali reperire maggiori informazioni sui dettagli e la
pericolosità dell’attacco;
• gli indirizzi IP sorgente e di destinazione dell’attacco;
• il protocollo utilizzato con le rispettive specifiche;
• il payload del pacchetto.
L’interfaccia web creata, incrementa notevolmente la facilità di consultazione degli eventi e si integra totalmente con Snort, tanto da sembrare uno
strumento unico. Nel prossimo paragrafo sarà esaminato nTop, uno strumento che permette di sfruttare il server web e il database per esaminare il
traffico di rete.
4.3.5
Setup di nTop
Per mezzo di nTop[10] si può monitorare e analizzare il traffico generato
dai diversi protocolli. Per quanto riguarda la sua configurazione, è necessario creare nella directory /etc/yum.repos.d un file chiamato dag.repo
contenente le seguenti stringhe:
[dag] name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el\$releasever/en/\$basearch/dag/
gpgcheck=1
enabled=1
77
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
ed importare la chiave GPG7 :
[root@localhost ~]# rpm --import http://dag.wieers.com/
packages/RPM-GPG-KEY.dag.txt
L’installazione è, successivamente, avviata per mezzo del comando:
[root@localhost ~]# yum install ntop
A questo punto è necessario permettere l’interazione del server web con
nTop sulla porta 3001 con protocollo HTTPS. Per questo motivo, si deve
configurare nTop modificando il file /etc/ntop.conf, verificando che la porta
3001 sia associata al server HTTPS,
#--http-server 3000
--https-server 3001
ed accertandosi che la stringa che permette di far partire nTop in modalità
daemon sia commentata:
#--daemon
Dopo l’impostazione della password,
[root@localhost etc]# /usr/bin/ntop @/etc/ntop.conf -A
Processing file /etc/ntop.conf for parameters...
Wed Oct 11 12:21:10 2006
NOTE: Interface merge enabled by
default
Wed Oct 11 12:21:10 2006
Initializing gdbm databases
ntop startup - waiting for user response!
Please enter the password for the admin user:
Please enter the password again:
Wed Oct 11 12:21:18 2006
7
Admin user password has been set
GPG è un software cifratura asimettrica per la criptazione di messaggi, documenti e
file che agisce utilizzando una coppia di chiavi (pubblica e privata) che vengono scambiate
tra gli utenti. Particolare attenzione va prestata alla corrispondenza tra chiave e (presunta)
identità: se non può essere certificata l’autenticità della chiave, non si può avere la certezza
della provenienza del documento.
78
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
nTop è pronto per essere avviato in modalità daemon. A tal scopo si può
eliminare il commento, inserito in precedenza, dalla seguente stringa
--daemon
e far partire il servizio:
[root@localhost etc]# chkconfig ntop on
[root@localhost etc]# service ntop start
Starting ntop:
[
OK
]
In questo modo nTop è raggiungibile all’indirizzo
https://192.168.1.22:3001 dove 192.168.1.22 è l’indirizzo IP dell’IDS.
Dopo questa panoramica sugli strumenti che permettono l’analisi e il monitoraggio della rete verrà esaminato nel prossimo paragrafo un altro strumento
che permette di automatizzare il download delle regole di intrusion detection
aggiornate, OinkMaster.
4.3.6
Setup di OinkMaster
Oinkmaster[11] è uno script scritto in linguaggio Perl che effettua il download
automatico delle regole aggiornate disponibili su www.snort.org. L’utilizzo
gratutito di OinkMaster è vincolato alla registrazione di un account su www.
snort.org.
Prima di procedere can la configurazione di OinkMaster, si deve modificare l’utente proprietario della directory contenente le regole di Snort per
poter permettere a OinkMaster di modificare i file in essa contenuti:
[root@localhost /]# chown -R snort:snort /etc/snort/rules
Si effettua, quindi, il download e l’installazione di OinkMaster. Nella
directory /etc viene creato il file oinkmster.conf che va configurato con un
URL valido utilizzato da OinkMaster per effettuare il download delle regole
aggiornate. Ogni URL avrà una struttura di questo tipo:
79
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
http://www.snort.org/pub-bin/oinkmaster.cgi/
<codice oinkmaster>/<file regole>
mentre un esempio di URL valido potrebbe essere il seguente:
http://www.snort.org/pub-bin/oinkmaster.cgi/
397c07dd8761ea56d9c8115ca2b6c13cd7790ea3/
snortrules-snapshot-2.4.tar.gz
OinkMaster è quindi pronto per essere avviato mediante il seguente comando che esegue lo script oinkmaster.pl in base alle configurazioni stabite
nei file /etc/oinkmaster.conf e /etc/autodisable.conf. Il comando si
occupa inoltre di scrivere le nuove regole nella directory /boot/etc/rules:
[root@localhost etc]# oinkmaster.pl -C /etc/oinkmaster.conf
-C /etc/autodisable.conf -o /boot/etc/rules
Una delle caratteristiche che rende OinkMaster, un componente fondamentale per un sistema di intrusion detection è la possibilità di automatizzarne alcune fuzionalità. A questo scopo, si crea nella cartella /etc un file
di testo chiamato snort-oinkmaster che conterrà il codice per l’esecuzione
di OinkMaster,
#! /bin/bash
/usr/bin/oinkmaster.pl -C /etc/oinkmaster.conf
-C /etc/autodisable.conf -o /etc/snort/rules
e si impostano sul file snort-oinkmaster i privilegi di esecuzione:
[root@localhost etc]# chmod 755 snort-oinkmaster
In questo modo per avviare OinkMaster sarà sufficiente eseguire il programma snort-oinkmaster.
Spostando il programma snort-oinkmaster nella cartella /etc/cron.
daily si attiverà quotidianamente l’aggiornamento delle regole:
[root@localhost etc]# mv snort-oinkmaster cron.daily/
80
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Nella cartella /cron.daily risiedono, infatti, i file che il sistema esegue
ogni ventiquattro ore. Aprendo il file /etc/crontab è possibile visualizzare
l’ora esatta in cui tali file verranno eseguiti.
Il file /etc/crontab contiene infatti una stringa di questo tipo:
02 4 * * * root run-parts /etc/cron.daily
che informa che alle 4.02 di ogni giorno saranno eseguiti tutti i file nella
directory /etc/cron.daily.
La sintassi della stringa è relativamente semplice. La prima colonna indica i
minuti (0-59), la seconda le ore (1-23), la terza il giorno (1-31), la quarta il
mese (1-12), la quinta il giorno della settimana (0-7 dove 7 corrisponde alla
domenica). Il carattere ‘*’ significa che tutti i valori del rispettivo campo
sono validi.
Con OinkMaster si completa la realizzazione e configurazione del sistema
di intrusion detection. A questo punto non resta che testarne il funzionamento.
4.4
Test del NIDS: i Risultati
Il test dell’IDS è stato diviso in due fasi principali. Nella prima fase di test
è stato utilizzato il tool Nmap per rilevare eventuali scansioni delle porte
(Paragrafo 4.4.1), mentre nella seconda è stato utilizzato il tool Metasploit
per rilevare attacchi basati sull’esecuzione di exploit (Paragrafo 4.4.2).
4.4.1
Test con Nmap
Dopo un’attenta analisi dei tool Open Source in grado di eseguire scansioni
delle porte, Nmap[9] è risultato il tool più completo in grado di eseguire
diversi tipi di scansioni, di frammentare i pacchetti nel tentativo di aggirare
gli IDS e di mantenere parzialmente l’anonimità mediante una tecnica detta
Decoy Scan descritta in seguito. Nel corso di questo capitolo si procederà
all’analisi dettagliata dei test eseguiti in questo lavoro di tesi.
81
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
TCP Connect() Scan
La prima scansione eseguita è stata il TCP Connect() Scan, un tipo di scansione in cui la chiamata di sistema connect() fornita dal Sistema Operativo
di chi effettua la scansione, è usata per aprire una connessione ad ogni porta interessante sulla macchina di destinazione. In questo tipo di scansione,
l’attaccante invia alla vittima un pacchetto TCP con flag SYN attivo. Se
la porta obiettivo della scansione risulterà aperta, l’attaccante riceverà in
risposta un pacchetto TCP con i flag SYN e ACK attivi a cui risponderà
con un pacchetto TCP con flag ACK attivo, altrimenti se la porta risulterà
chiusa, riceverà un pacchetto TCP con flag RST attivo che terminerà la connessione. In altre parole, se la porta vittima della scansione è in ascolto, la
chiamata di sistema connect() avrà luogo e l’handshake verrà completato, in
caso contrario la porta non sarà raggiungibile.
Il TCP Connect() Scan si esegue mediante il seguente comando:
[root@localhost ~]# nmap -sT 192.168.1.22
Snort rileva i pacchetti inviati per effettuare la scansione e pertanto genera
i seguenti allarmi:
• (portscan) TCP Portscan: 304:61441
Il preprocessore sfPortscan rileva il traffico anomalo e identifica la scansione delle porte che costituisce la prima fase di un attacco la quale non
danneggia la vittima ma permette di ottenere innumerevoli informazioni su di essa. Tali informazioni potranno essere sfruttate in seguito per
danneggiare il sistema o assumerne il controllo. I numerosi tool presenti in rete che realizzano i Portscan, rendono la scansione delle porte un
attacco alla portata di chiunque. Tutti i sistemi sono soggetti a questo
tipo d’attacco e non sono conosciuti falsi positivi in merito.
• (portscan) Open Port: 80
Il preprocessore sfPortscan rileva una porta aperta corrispondente ad
82
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
un servizio attivo sulla vittima. Questo indica la probabilità che un
attaccante sia alla ricerca di vulnerabilità sulla vittima.
I sistemi
vulnerabili sono analoghi a quelli discussi per il precedente allarme.
SYN Scan
Un attacco analogo al TCP Connect() Scan è il SYS Scan. La differenza tra i
due attacchi consiste nel fatto che nel SYS Scan l’handshake non viene completato. L’attaccante invia, quindi, un pacchetto TCP con flag SYN attivo,
se la porta da controllare è aperta riceverà in risposta un pacchetto TCP con
i flag SYN e ACK attivi al quale Nmap risponderà chiudendo la connessione
con un pacchetto TCP con flag RST attivo. Se la porta è chiusa, l’attaccante
riceverà un pacchetto TCP con flag RST attivo che chiuderà la connessione.
In entrambi i casi, la connessione non verrà mai completata e per questa
ragione difficilmente comparirà nei file di log, anche se generalmente viene
riconosciuta e registrata dagli IDS.
Il SYS Scan si esegue mediante il seguente comando:
[root@localhost ~]# nmap -sS 192.168.1.22
Gli allarmi generati da Snort saranno analoghi a quelli prodotti per il
TCP Connect() Scan già descritti precedentemente:
• (portscan) TCP Portscan: 304:61441
Viene generato per qualsiasi attività di scanning.
• (portscan) Open Port: 80
Segnala una possibile situazione di pericolo dovuta ad una porta trovata
aperta.
FIN Scan
Il FIN Scan ha delle sostanziali differenze rispetto alle scansioni analizzate precedentemente. L’attacco è caratterizzato dall’invio di pacchetti TCP
83
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
anomali, alle porte della vittima, aventi solo il flag FIN attivo. Le specifiche
tecniche dalla RFC 793[28] prevedono che un host che riceve un pacchetto con flag FIN attivo, nel caso in cui la porta sia chiusa, risponda con un
pacchetto con flag RST attivo, nel caso in cui la porta sia aperta, ignori il
pacchetto. Da evidenziare che alcuni sistemi come Windows, Cisco, HP-UX,
IRIX non seguono lo standard e rispondono inviando in qualsiasi caso un
pacchetto TCP con flag RST attivo rendendo la scansione inefficace.
Il FIN Scan si esegue mediante il seguente comando:
[root@localhost ~]# nmap -sF 192.168.1.22
A questo tipo di traffico, Snort reagisce generando i seguenti allarmi:
• (portscan) TCP Portscan: 22:554
Trattandosi di un’attività di scansione, anche nei casi di FIN Scan viene
generato un allarme che segnala l’esecuzione di un TCP Portscan.
• (portscan) Open Port: 80
Viene riconosciuta una porta aperta.
• SCAN FIN
Viene identificato un pacchetto TCP con il solo flag FIN attivo. I
sistemi affetti da questo tipo di attacco sono quelli che rispettano la
RFC 793. Non sono conosciuti casi di falsi positivi riguardanti questo
allarme.
XMAS Scan
Questo tipo di scansione è analoga al FIN Scan con la differenza che i pacchetti TCP inviati hanno attivi i flag FIN, URG, e PSH. Analoghi sono i
problemi relativi al rispetto della RFC 793.
L’XMAS Scan si esegue mediante il seguente comando:
[root@localhost ~]# nmap -sF 192.168.1.22
Ancora una volta Snort risulta efficace e genera i seguenti allarmi:
84
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
• (portscan) TCP Portscan: 25:1723
Si presenta in quanto l’attacco portato a termine è una scansione.
• (portscan) Open Port: 80
Viene riconosciuta una siutazione di pericolo dovuta ad una porta
aperta.
• SCAN nmap XMAS
Individua la scansione XMAS e rileva Nmap come programma con cui
potrebbe essere stata effettuata. Tipicamente la vittima, nel caso in
cui la porta a cui è stato inviato il pacchetto sia chiusa, risponderà con
un pacchetto TCP con flag ACK e RST attivi, nel caso in cui la porta
sia aperta, non invierà alcuna risposta. Tutti i sistemi sono vulnerabili
a questo tipo di scansione e non sono conosciuti casi di falsi positivi in
quanto i flag FIN, PSH e URG dei pacchetti TCP, non sono mai stati
attivi contemporaneamente nel normale traffico TCP, ad eccezione del
caso in cui la scansione venga realizzata con un tool diverso da Nmap.
UDP Scan
L’UDP Scan è una scansione utilizzata per rilevare quali sono i servizi attivi
sul protocollo UDP. Tipicamente la vittima, nel caso in cui la porta attaccata
sia aperta non invierà risposta alcuna, nel caso in cui sia chiusa, invierà un
pacchetto ICMP Port Unreachable.
L’UDP Scan si avvia mediante il seguente comando:
[root@localhost ~]# nmap -sU 192.168.1.22
L’allarme generato da Snort è il seguente:
• (portscan) UDP Portscan: 477:7000
Il preprocessore sfPortscan rileva una scansione delle porte UDP alla
ricerca di servizi attivi su questo protocollo. Tutti i sistemi sono vulnerabili a questo tipo di attacco, che combinato con altri attacchi può
85
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
permettere, di rilevare anche il Sistema Operativo utilizzato dalla vittima. Analogamente a quanto avviene per il TCP Portscan non sono
conosciuti falsi positivi.
IP Protocol Scan
Questo tipo di scansione, permette di determinare quali sono i protocolli supportati dalla macchine a cui la scansione è indirizzata.
L’IP Protocol Scan si avvia mediante il seguente comando:
[root@localhost ~]# nmap -sO 192.168.1.22
Rilevando traffico anomalo, Snort genera i seguenti allarmi:
• (portscan) IP Protocol Scan
Segnala una scansione effettuata nel tentativo di rilevare i protocolli
supportati dalla vittima.
• ICMP PING NMAP
Viene rilevato un ICMP Ping realizzato con Nmap. Può indicare che è
in corso una completa scansione del sistema alla ricerca di vulnerabilità.
Casi di falsi positivi possono essere rilevati qualora l’ICMP Ping viene
generato da un altro tool.
• BAD-TRAFFIC Unassigned/Reserved IP protocol
Questo allarme viene generato quando in rete viene identificato un pacchetto che utilizza un protocollo non supportato o riservato. Questo
non dovrebbe accadere in circostanze normali.
Decoy SYS Scan
Il Decoy Scan è una variante applicabile a tutte le precedenti scansioni che
permette di rimanere parzialmente anonimi che nel nostro caso è stata integrata al SYS Scan. Nel comando di Nmap che implementa l’attacco, è pos-
86
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
sibile specificare altri indirizzi IP dai quali sembrerà provenire la scansione
in questo modo:
[root@localhost ~]# nmap -sS 192.168.1.22 -D 1.1.1.1,2.2.2.2
L’indirizzo IP dell’attaccante sarà comunque visibile alla vittima e l’output di Snort sarà analogo a quello generato per una qualsiasi scansione,
con la differenza che la provenienza dei pacchetti sospetti sarà costituita sia
dall’indirizzo IP dell’attaccante che da quelli indicati dopo l’opzione -D del
comando Nmap eseguito. Inserendo dopo l’opzione -D un numero elevato di
indirizzi IP, sarà possibile nascondere il reale indirizzo IP dell’attaccante.
SYN Scan con Frammentazione
Nel tentativo di non far rilevare a Snort la scansione, la frammentazione dei
pacchetti è stata implementata insieme alla scansione SYS Scan. Ne consegue
che il seguente comando ha gli stessi effetti di un normale SYN Scan con la
differenza che i pacchetti vengono frammentati:
[root@localhost ~]# nmap -sS -f 192.168.1.22
Il test presentato, tuttavia, non ha avuto successo in quanto la scansione
non ha rilevato le porte aperte e di conseguenza Snort non ha generato allarmi
di alcun tipo.
TCP Connect() Scan con Frammentazione
Il test è stato quindi ripetuto implementando la frammentazione dei pacchetti
al TCP Connect() Scan, mediante il seguente comando:
[root@localhost ~]# nmap -sT -f 192.168.1.22
Altrettanto scarso è stato il successo di questo test in quanto le porte
aperte vengono rilevate correttamente, ma Snort rileva l’attacco generando
gli stessi allarmi descritti per il TCP Connect() Scan.
87
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Nonostante, complessivamente, Nmap si sia rivelato un tool particolarmente
adatto alla fase di testing perchè in grado di gestire scansioni di vario tipo,
esso non è sufficiente ad eseguire un testing completo ed intensivo dell’IDS.
Il secondo tool utilizzato per completare la fase di test è, quindi, Metasploit
(www.metasploit.org), uno strumento utile ad analizzare le vulnerabilità
dei sistemi e funzionante sia da console che tramite interfaccia web.
4.4.2
Test con Metasploit
Metasploit[7] oltre ad essere uno strumento per eseguire exploit già conosciuti che permettono di sfruttare vulnerabilità e di acquisire in maniera non
autorizzata dei privilegi sulla macchina obiettivo di un attacco, è anche un
ambiente completo per scrivere, testare e usare codici maliziosi[18]. Esso fornisce una solida piattaforma di ricerca di vulnerabilità, utilizzabile non solo
allo scopo di testare un Intrusion Detection System ma anche per eseguire
dei Penetration Test. Dopo aver installato il programma, l’interfaccia web si
avvia nel modo seguente:
[root@localhost msf]# ./msfweb
+----=[ Metasploit Framework Web Interface (127.0.0.1:55555)
A questo punto dall’indirizzo http://127.0.0.1:55555 si accede al pannello di controllo di Metasploit (vedi Figura 4.5), e si seleziona, un exploit ed
un payload che Metasploit provvederà ad inviare alla vittima (vedi Figura
4.6).
Di rilevante importanza è il fatto che Metasploit, prima di inviare i pacchetti contenente codice malizioso, controlla che la porta con cui si cerca
di stabilire una connesione sia aperta. Snort rileverà tale condotta come
Portscan e produrrà di conseguenza un allarme. Se la porta risulterà chiusa
Metasploit non eseguirà l’attacco e Snort non produrrà alcun allarme.
Di seguito si esamineranno gli exploit eseguiti in questo lavoro di tesi per
testare il corretto funzionamento di Snort.
88
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.5: Pannello di controllo di Metasploit
89
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.6: Esempio di exploit e payload inviati tramite Metasploit
90
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
AWStats configdir Remote Command Execution
(Irix Inetd Bind Shell)
AWStats (http://awstats.sourceforge.net) è un tool Open Source utilizzato per analizzare i log generati da un server web e per produrre delle
statistiche sul suo utilizzo.
Dopo aver eseguito l’exploit, seguendo le istruzioni descritte in precedenza, Snort riconosce il traffico come anomalo e genera il seguente allarme.
• WEB-CGI awstats access
L’allarme segnala un tentativo di accedere al CGI script awstats.pl.
Il rischio che si corre, è l’esecuzione di comandi arbitrari sul server web
dovuta al fatto che un attaccante può iniettare codice a sua discrezione
sfruttando la vulnerabilità dello script awstats.pl. I sistemi vulnerabili a questo tipo d’attacco sono quelli su cui è installato il tool Awstats
versione 6.1 e precedenti.
IIS 5.0 WebDAV ntdll.dll Overflow
(win32_bind)
Questo exploit ha come obiettivo i server Windows IIS 5.0 con WebDAV
(Web-based Distributed Authoring and Versioning) che è un protocollo che
permette di gestire il contenuto di una directory di un server remoto.
Dopo aver eseguito l’exploit Snort genera i seguenti allarmi:
• (http_inspect) OVERSIZE REQUEST-URI DIRECTORY
Il preprocessore http_inspect identifica il traffico anomalo come un attacco in quanto è stata riscontrata una richiesta /cgi-bin/, costituita
da un URL contenente approssimativamente 330 caratteri Unicode, che
può causare un DoS del server. Un attaccante può anche inviare un
URI di questa dimensione nel tentativo di evadere un IDS.
• WEB-MISC WebDAV search access
Viene identificato un tentativo di utilizzo improprio dell’applicazione
91
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
WebDAV. IIS 5.0, include un’implementazione di WebDAV vulnerabile
a questo tipo di attacco che può essere sfruttata dall’attaccante per ottenere un elenco completo delle directory contenute nella root directory
o per causare un Denial of Service (DoS) del server.
phpBB viewtopic.php Arbitrary Code Execution
(cmd_unix_reverse)
PhpBB presenta una vulnerabilità contenuta nello script viewtopic.php,
che permette ad un attaccante di iniettare codice SQL arbitrario nel server
web.
Riconoscendo un accesso al file viewtopic.php Snort genera il seguente
allarme:
• WEB-PHP viewtopic.php access
Viene riconosciuto il tentativo di sfruttare la vulnerabilità descritta di
phpBB. L’attaccante può sfruttare questo attacco per poter ottenere
password e altre informazioni contenute nel database. I sistemi vulnerabili sono quelli su cui è installato phpBB Group e phpBB versioni
2.0.4 e 2.0.5.
IA WebMail 3.x Buffer Overflow
(win32_exec)
L’IA Webmail è una comoda interfaccia per la gestione della posta via web.
Il problema di questa applicazione consiste in una cattiva gestione delle richieste HTTP GET generalmente utilizzate per ottenere il contenuto delle
pagine HTML. La sua vulnerabilità può essere sfruttata per causare un Overflow di Buffer che permette di eseguire codice arbitrario sul server.
Snort, ancora una volta, rileva il tentativo d’attacco e genera i seguenti
allarmi:
• (http_inspect) BARE BYTE UNICODE ENCODING
Il preprocessore http_inspect rileva traffico anomalo che può costituire
92
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
un attacco. La vulnerabilità consiste in una anomala codifica dei caratteri UTF-8 la quale può essere sfruttata per portare a termine un
attacco verso un server IIS o per evadere un IDS.
• (http_inspect) OVERSIZE REQUEST-URI DIRECTORY
Anche in questo caso, analogamente a quanto visto per il precedente
exploit, viene identificato un pacchetto contenente un URI costituito
da un numero eccessivo di caratteri Unicode tale da presentare il rischio
di Denial of Service. Casi di falsi positivi posono identificarsi qualora
gli utenti di una rete utilizzino in maniera autorizzata applicativi che
generano richieste HTTP composte da più di 300 caratteri Unicode.
vBulletin misc.php Template Name Arbitrary Code Execution
(cmd_irix_bind)
vBulletin è un pacchetto che permette di installare un forum completamente
personalizzabile su un sito web. La vulnerabilità è stata riscontrata nel file
misc.php che permette di iniettare ed eseguire codice PHP arbitrario sul
server. In questo caso il test dell’IDS ha fallito in quanto, dopo aver eseguito
l’exploit, Snort non ha rilevato l’attacco ma ha riconosciuto il traffico come
affidabile.
Dall’analisi effettuata, risulta che su quattordici attacchi diversi, uno di questi, il SYS Scan con Frammentazione, non è stato eseguito con successo in
quanto Nmap non è riuscito ad inviare correttamente i pacchetti frammentati; un’altro di questi, il vBulletin misc.php Template Name Arbitrary Code
Execution non è stato per nulla rilevato da Snort che ritiene affidabile il
contenuto dei pacchetti generati per questo attacco. I restanti 12 attacchi
sono stati tutti rilevati da Snort anche se sono stati individuati 3 casi possibili di falsi positivi. I primi due relativi agli allarmi SCAN nmap XMAS
e ICMP PING NMAP in cui Snort potrebbe generare questi allarmi anche
se gli attacchi sono stati realizzati mediante tool diversi da Nmap. L’ultimo
falso positivo, di cui si tornerà a parlare nel Paragrafo 4.6, è relativo all’al93
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
larme OVERSIZE REQUEST-URI DIRECTORY generato sia dall’attacco
IIS 5.0 WebDAV ntdll.dll Overflow che dall’attacco IA WebMail 3.x Buffer
Overflow ; in questo caso il falso positivo si riscontrerebbe qualora gli utenti
della rete fossero autorizzati ad utilizzare applicazioni che generano richieste
HTTP contenenti più di 300 caratteri Unicode le quali sarebbero interpretate
da Snort come traffico anomalo.
Complessivamente sia gli attacchi effettuati con Nmap che quelli implementati con Metasploit hanno dimostrato l’efficacia di Snort nel rilevamento delle
intrusioni. Tuttavia, l’attacco vBulletin misc.php Template Name Arbitrary
Code Execution è sufficiente per dimostrare la non infallibilità degli strumenti di intrusion detection.
Di seguito sono riportate due tabelle riassuntive riguardo gli attacchi eseguiti
con Nmap (Tabella 4.1) e con Metasploit (Tabella 4.2), gli eventi generati
per ciascun attacco e i casi possibili di falsi positivi. Successivamente nel
paragrafo seguente, si esaminerà l’utilizzo di un sistema client/server SSH da
utilizzare per l’amministrazione remota dell’IDS.
94
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Attacco
Evento Generato
TCP Connect() Scan
TCP Portscan
Falsi Positivi
Open Port
SYN Scan
TCP Portscan
Open Port
FIN Scan
TCP Portscan
Open Port
SCAN FIN
XMAS Scan
TCP Portscan
Open Port
SCAN nmap XMAS
XMAS scan eseguito
con un tool diverso da
NMAP
UDP Scan
UDP Portscan
IP Protocol Scan
IP Protocol Scan
ICMP PING NMAP
ICMP PING eseguito
con un tool diverso da
NMAP
BAD-TRAFFIC
Unassigned/Reserved
IP protocol
Decoy SYS Scan
TCP Portscan
Open Port
SYS Scan con Fram-
NESSUNO
mentazione
TCP Connect() Scan TCP Portscan
con Frammentazione
Open Port
Tabella 4.1: Tabella degli attacchi eseguiti con Nmap.
95
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Attacco
Evento Generato
AWStats configdir Re-
WEB-CGI awstats ac-
mote Command Exe-
cess
Falsi Positivi
cution
IIS
5.0
WebDAV OVERSIZE
ntdll.dll Overflow
Esecuzione
autoriz-
REQUEST-URI
zata di applicazioni
DIRECTORY
che generano richieste
HTTP
contenenti
più di 300 caratteri
Unicode
WEB-MISC WebDAV
search access
phpBB viewtopic.php WEB-PHP
Arbitrary Code Exe-
viewtopic.php access
cution
IA WebMail 3.x Buffer BARE BYTE UNIOverflow
CODE ENCODING
OVERSIZE
Esecuzione
REQUEST-URI
zata di applicazioni
DIRECTORY
che generano richieste
HTTP
autoriz-
contenenti
più di 300 caratteri
Unicode
vBulletin
misc.php NESSUNO
Template
Name
Arbitrary
Code
Execution
Tabella 4.2: Tabella degli attacchi eseguiti con Metasploit.
96
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
4.5
Amministrazione Remota via SSH
SSH (Secure SHell) è un protocollo che permette di stabilire una sessione remota cifrata con un altro host inviando comandi testuali. Il fatto che l’intera
comunicazione avvenga in maniera cifrata ha fatto in modo che il protocollo
SSH diventasse uno standard de facto per l’amministrazione remota di sistemi
Unix e dispositivi di rete. L’utilità dell’amministrazione remota nasce dalla
possibilità di modificare, aggiornare ed effettuare interventi di manutenzione
sull’IDS (o su un host qualsiasi), anche se ci si trova fisicamente lontani dal
sensore. Si pensi agli enormi vantaggi del suo utilizzo in una rete di notevoli
dimensioni in cui sono dislocati più sensori IDS in edifici diversi.
La fase di configurazione dell’accesso remoto è molto semplice e si riduce a poche semplici operazioni; è infatti sufficiente installare un qualsiasi server SSH,
come quello disponibile sul cd d’installazione di CentOS v4.4 sul sensore IDS,
e un qualsiasi client SSH sulla macchina da connettere all’IDS. Molte distribuzioni Unix ne integrano uno, mentre per i sistemi Windows si può utilizzare un
client come Putty (www.chiark.greenend.org.uk/~sgtatham/putty)[13].
Digitando il seguente comando con i privilegi di utente root è possibile accede
ad una console che permette di avere il totale controllo dell’IDS e di compiere
qualsiasi operazione.
[root@localhost ~]#
ssh 192.168.1.22
Nel prossimo paragrafo si esaminerà l’ottimizzazione di Snort finalizzata a
limitare la generazione di falsi positivi.
4.6
Ottimizzazione di Snort
Capita frequentemente che Snort rilevi numerosi falsi positivi e che generi
allarmi per eventi di importanza non rilevante. Snort permette di limitare
97
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
Figura 4.7: Console remota SSH
la generazione di falsi positivi modificando le regole di intrusion detection
(vedi Capitolo 3.5), disabilitandole totalmente o definendo degli indirizzi IP
sui quali non verrà effettuato alcun controllo in relazione ad una o più regole.
Dopo la fase di test di Snort, svolta durante questo lavoro di tesi, l’IDS
è stato installato nella rete da proteggere. Anche in questo caso, si è dovuto affrontare il problema dei falsi positivi, in particolare è stato rilevato un
allarme che sicuramente non costituiva un attacco: l’Oversize Request-URI
Directory. L’allarme in questione, le cui caratteristiche sono state discusse nel Capitolo 4.4.2, veniva causato dai pacchetti contenenti URI costituiti
da un numero eccessivo di caratteri Unicode. In realtà gli utenti della rete,
utilizzavano a fini professionali, un applicativo che generava questo tipo di
URI. Si è pertanto deciso di disabilitare l’allarme relativamente al range di
indirizzi IP della rete privata.
Per procedere con la disattivazione delle regole che hanno generato l’allarme, si deve configurare il file /etc/snort/threshold.conf che deve essere
98
CAPITOLO 4. CONFIGURAZIONE DEL NIDS
incluso nel file /etc/snort/snort.conf.
Aprendo, quindi, il file /etc/snort/threshold.conf e conoscendo il gen_id
e il sig_id della regola che genera falsi positivi, sarà sufficiente creare delle
stringhe analoghe a quelle riportate di seguito per disabilitare i corrispettivi
allarmi:
suppress gen_id <valore1>, sig_id <valore2>,
by_src, ip 10.1.1.54
Nella precedente riga di codice, valore1 e valore2 sono rispettivamente il
gen_id e il sig_id della regola che si vuole disabilitare, mentre track by_src
permette di disabilitare il controllo delle regole relativamente al traffico proveniente dall’indirizzo IP 10.1.1.54.
Con la riga di codice
suppress gen_id <valore1>, sig_id <valore2>,
track by_dst, ip 10.1.1.54
si disabilita invece il controllo delle regole relativamente al traffico diretto
all’indirizzo IP 10.1.1.54. La stessa modifica può essere effettuata anche in
relazione ad un range di indirizzi IP in questo modo:
suppress gen_id <valore1>, sig_id <valore2>,
track by_dst, ip 10.1.1.0/24
In ultimo è anche possibile disabilitare completamente una regola:
suppress gen_id <valore1>, sig_id <valore2>
L’ottimizzazione è un’operazione delicata, in quanto può comportare la
generazione di falsi negativi. Prima di procedere è, quindi, opportuno esaminare attentamente la documentazione fornita su www.snort.org in merito
alle regole che si intende disabilitare.
99
CAPITOLO 5. SVILUPPI FUTURI
Capitolo 5
Sviluppi Futuri
Nei Capitoli 2 e 3 sono state discusse le peculiarità dei NIDS soffermando
l’attenzione sul software di intrusion detection Snort. Successivamente è
stato presentato il modello di Intrusion Detection System progettato durante
questo lavoro di tesi, il quale è soggetto a numerose possibilità di sviluppo
al fine di rendere l’architettura più completa e sicura. Vengono ora esposti
quelli che sono i possibili sviluppi futuri.
5.1
Incremento del Livello di Sicurezza
L’architettura proposta, garantisce il rilevamento delle intrusioni e il logging delle attività anomale; tuttavia, l’IDS progettato, deve necessariamente
interagire con l’esterno per poter permettere la visualizzazione dei log, esponendosi a tutti i pericoli di sicurezza che ne conseguono. Si è quindi pensato
ad un possibile intervento che potesse incrementare il suo livello di sicurezza. A tal fine occorrono due macchine, la prima da configurare come sensore,
l’altra da utilizzare come server web e database per archiviare i log. Ciascuna
macchina deve essere dotata di due schede di rete. Il sensore utilizza la prima
scheda di rete per ricevere i pacchetti da analizzare e la seconda per inviare
i log degli eventi al database il quale, a sua volta, utilizza invece la prima
scheda di rete per ricevere i pacchetti inviati dal sensore, e l’altra per con-
101
CAPITOLO 5. SVILUPPI FUTURI
Figura 5.1: Schema di rete con IDS e database implementate su due macchine
diverse
nettersi alla rete interna dalla quale sarà possibile accedere alle informazioni
contenute nel database (vedi Figura 5.1). È possibile perfezionare l’upgrade
configurando il sensore per non rispondere alle rischieste provenienti dall’esterno. Questo permette di rendere l’IDS difficile da rilevare e da attaccare e
può garantire un notevole incremento dell’affidabilità del NIDS e del livello
di sicurezza del sistema.
5.2
Realizzazione di un IDS Distribuito
Nel corso della tesi sono state illustrate diverse ragioni che hanno influenzato
la scelta del posizionamento del sensore nella DMZ (vedi Capitolo 4.2). Nel
caso in cui si intenda monitorare più segmenti di rete, risulta interessante
implementare un sistema che preveda un sensore per ogni segmento e che
gestisca in maniera centralizzata l’archiviazione dei log. Ogni sensore intercetta passivamente il traffico per mezzo della prima scheda di rete e invia i
log degli eventi al database centrale per mezzo della seconda scheda di rete. Il database, è accedibile solamente dalla rete interna. Un’architettura
di questo tipo, garantisce un monitoraggio efficiente degli eventi dell’intera
102
CAPITOLO 5. SVILUPPI FUTURI
rete, e rende più facile un’eventuale azione di correlazione finalizzata alla
ricostruzione delle procedure di attacco.
5.3
Invio degli Allarmi via Email e SMS
Un Intrusion Detection System ideale, richiede un monitoraggio costante, situazione che nella realtà è difficilmente riproducibile. L’ultimo miglioramento
proposto è finalizzato ad informare in maniera tempestiva i CERT (Computer Emergency Response Team) aziendali di eventuali situazioni dannose.
Implementando un sistema che invii gli allarmi più gravi via email o SMS, sarebbe possibile informare in tempo reale le persone responsabili, permettendo
interventi tempestivi.
103
RINGRAZIAMENTI
Ringraziamenti
Alla fine di questo ciclo di studi rivolgo i miei più sentiti ringraziamenti a tutti
coloro che mi hanno accompagnato in questi tre anni. Ci tengo a ringraziare
particolarmente:
• Mamma, Papà che mi hanno sempre sostenuto, moralmente ed economicamente durante tutto il percorso di studi, senza i quali probabilmente questo momento non sarebbe mai arrivato;
• Federica che ha messo sempre il suo tocco di brio in qualsiasi cosa mi
riguardasse;
• Il relatore Prof. Ernesto Damiani e il correlatore Dott. Claudio Agostino Ardagna per l’aiuto costante fornito durante il lavoro di tesi e per
l’infinita pazienza e disponibilità mostrata;
• Il prof. Dario Forte e il Prof. Marco Cremonini per gli utili suggerimenti
e per la documentazione fornita;
• Il mio amico Vittorio con il quale ho trascorso un anno formidabile e
grazie al quale affrontare i problemi universitari è stato più semplice;
• Il mio amico Antonio senza il quale probabilmente l’ultimo anno a
Crema sarebbe stato una catastrofe;
• Mio Zio Franco che, anche se non è presente, mi ha iniettato indispensabili dosi di matematica pura;
• Tutti i miei Nonni che aspettavano più di me questo momento;
105
RINGRAZIAMENTI
• Il Dott. Rossi del Comune di Piacenza e i suoi tips su Linux che anche
se sommerso dalle mille faccende comunali ha sempre trovato tempo da
dedicarmi;
• Gli amici di Bari in particolare Biagio, Giuseppe, Mario Z., Francesco,
Raffaele, Claudio, Alessandro, Amedeo, Mario C. ed Emiliano per gli
anni indimenticabili passati insieme;
• Gli amici di Crema con cui ho trascorso serate stupende;
• Gli amici dell’Università per aver condiviso le loro conoscenze;
• Il Comune di Piacenza per aver ospitato il mio tirocinio.
Grazie infine, a tutti coloro che hanno creduto in me e hanno contribuito a
farmi raggiungere questo ambito traguardo!
106
BIBLIOGRAFIA
Bibliografia
[1] ADOdb Database Abstraction Library for PHP.
http://adodb.
sourceforge.net.
[2] Apache HTTP Server Project. http://httpd.apache.org.
[3] Basic
Analysis
and
Security
Engine.
http://secureideas.
sourceforge.net.
[4] CentOS - The Community Enterprise Operating System. http://www.
centos.org.
R Advisory CA-2001-26 Nimda Worm. http://www.cert.org/
[5] CERT
advisories/CA-2001-26.html.
[6] Insecure.org. http://www.insecure.org.
[7] Metasploit.org. http://www.metasploit.org.
[8] MySQL. http://www.mysql.org.
[9] Nmap. http://insecure.org/nmap.
[10] nTop. http://www.ntop.org.
[11] OinkMaster. http://oinkmaster.sourceforge.net.
[12] Php.net. http://www.php.net.
[13] Putty Official Website.
http://www.chiark.greenend.org.uk/
~sgtatham/putty/.
108
BIBLIOGRAFIA
[14] Rfc Editor. http://www.rfc-editor.org.
[15] Seclists.org. http://www.seclists.org.
[16] Securiteam.com. http://www.securiteam.com.
[17] Securityfocus.com - Evading NIDS. http://www.securityfocus.com/
infocus/1852.
[18] Securityfocus.com - Metasploit Framework, Part 2.
http://www.
securityfocus.com/infocus/1790.
[19] Sikurezza.org. http://www.sikurezza.org.
[20] Snort User Manual 2.6.0.
[21] Snort.org. http://www.snort.org.
[22] Sourceforge.net. http://www.sourceforge.net.
[23] Wikipedia.org - Demilitarized Zone. http://it.wikipedia.org/wiki/
Demilitarized_zone.
[24] Wikipedia.org - NTP. http://it.wikipedia.org/wiki/NTP.
[25] Wikipedia.org - Standard ISO/OSI. http://it.wikipedia.org/wiki/
Protocollo_di_rete.
[26] Wikipedia.org - X Window System. http://it.wikipedia.org/wiki/
X_Window_System.
[27] Rfc 791 - Internet Protocol. ftp://ftp.rfc-editor.org/in-notes/
rfc791.txt, Settembre 1981.
[28] Rfc 793 - Transmission Control Protocol. ftp://ftp.rfc-editor.org/
in-notes/rfc793.txt, Settembre 1981.
[29] AA.VV. 2002-2006. Iritaly - Italian Incident Response Project. http:
//www.iritaly.org, 2006.
109
BIBLIOGRAFIA
[30] Baker Andrew, Caswell Brian, Poor Mike.
Snort 2.1 : intrusion
detection. Syngress Publishing, 2004.
[31] Bejtlich Richard. The Tao of Network Security Monitoring: Beyond
Intrusion Detection.
[32] Bejtlich Richard. Extrusion detection: security monitoring for internal
intrusions. Addison Wesley, 2006.
[33] Massaro Roberta. Metodologie di test per la sicurezza delle reti informatiche. Master’s thesis, Università degli Studi di Milano, Dipartimento
di Tecnologie dell’Informazione di Crema, 2003-2004.
[34] Northcutt, Stephen [et al.]. Inside network perimeter security. Sams
publishing, 2005.
[35] Northcutt Stephen, Novak Judy. Network intrusion detection. New
Riders, 2003.
[36] Soragni Michele. Sviluppo e implementazione di un sistema di analisi della sicurezza e di controllo del traffico su Reti IP. Master’s thesis, Università degli Studi di Milano, Dipartimento di Tecnologie dell’Informazione
di Crema, 2004-2005.
110

Documenti analoghi

Tecnologie innovative per il rilevamento e il

Tecnologie innovative per il rilevamento e il sull’approccio di tipo network based vivono una fase difficile; strette infatti tra la morsa dei sistemi antivirus e dei sempre più diffusi personal firewall, i sistemi IDS di tipo host based stent...

Dettagli

pdf ITA - The Italian Honey Project

pdf ITA - The Italian Honey Project Il modulo VME (modulo per la virtualizzazione delle honeypot) consente di copiare ed eseguire il malware catturato in un ambiente virtuale, la finestra di esposizione è di tre minuti, dopodiché l'a...

Dettagli