universita` politecnica delle marche
Transcript
universita` politecnica delle marche
UNIVERSITA’ POLITECNICA DELLE MARCHE FACOLTA’ DI INGEGNERIA Corso di Laurea in Ingegneria Elettronica Dipartimento di Elettronica, Intelligenza Artificiale e Telecomunicazioni UN SISTEMA DI SUPPORTO ALLA DETERMINAZIONE DI ANOMALIE NEL TRAFFICO DI RETE Tesi di Laurea di: Luca VESCOVI Relatore: Prof. Paolo PULITI Correlatori: Ing. Aldo Franco DRAGONI Ing. Paola BALDASSARRI Anno Accademico 2003-2004 INDICE INTRODUZIONE ......................................................................................................................................1 1 SICUREZZA DELL’INFORMAZIONE........................................................................................4 1.1 1.2 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.4 1.4.1 1.4.2 1.4.3 1.4.4 2 IDS: CONCETTO E STATO DELL’ARTE ................................................................................27 2.1 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.5 3 SICUREZZA DELL’INFORMAZIONE ..............................................................................................4 AGGRESSORI, BERSAGLI, OBIETTIVI ..........................................................................................5 LE CLASSI DEGLI ATTACCHI ......................................................................................................8 La Negazione del Servizio ....................................................................................................9 La Fuga di Informazioni.....................................................................................................12 L’accesso Regolare ai File .................................................................................................14 La Disinformazione ............................................................................................................15 L’accesso ai Database........................................................................................................17 L’esecuzioni di Codice Arbitrario Remoto .........................................................................17 L’elevazione dei Privilegi ...................................................................................................20 STRUMENTI E METODOLOGIE DI ATTACCO ..............................................................................21 Attacchi da Remoto.............................................................................................................22 Attacchi Locali....................................................................................................................25 Attacchi Ibridi.....................................................................................................................25 Osservazioni Conclusive.....................................................................................................26 CONCETTO DI INTRUSION DETECTION SYSTEM ........................................................................27 TASSONOMIA DEGLI INTRUSION DETECTION SYSTEM ..............................................................29 I Due Approcci Principali ..................................................................................................29 Host Based, Network Based................................................................................................30 On-Line (In-Line, Real-Time), Off-Line .............................................................................32 Sistemi Centralizzati e Distribuiti.......................................................................................32 CARATTERISTICHE DESIDERABILI PER UN IDS.........................................................................33 Reattività.............................................................................................................................33 Sicurezza Intrinseca: Survivability, Robustezza .................................................................34 Interazione con il Personale e Flessibilità .........................................................................34 Adattabilità ad Attacchi Nuovi ...........................................................................................35 Scalabilità e Concorrenza ..................................................................................................35 PROBLEMI TIPICI DI UN IDS .....................................................................................................36 Individuazione di Attacchi Nuovi, Modificati o Codificati .................................................36 Falsi Positivi e Falsi Negativi ............................................................................................38 Inserimento ed Elusione .....................................................................................................39 Elusione Basata Sul TTL (Time-To-Live) ...........................................................................40 La Frammentazione IP (Internet Protocol) ........................................................................41 Problemi Legati al Protocollo TCP....................................................................................41 UN’ARCHITETTURA RILEVANTE: SNORT................................................................................42 LE RETI NEURALI .......................................................................................................................45 3.1 INTRODUZIONE SULLE RETI NEURALI ......................................................................................45 3.2 APPRENDIMENTO .....................................................................................................................49 3.2.1 Apprendimento Supervisionato...........................................................................................51 3.2.2 Apprendimento Non Supervisionato ...................................................................................51 3.2.2.1 3.2.2.2 3.2.2.3 3.3 3.4 3.5 3.6 3.7 Hard Competitive Learning..................................................................................................... 53 Soft Competitive Learning ...................................................................................................... 53 Competitive Hebbian Learning ............................................................................................... 54 POLIEDRI DI VORONOI E TRIANGOLAZIONE DI DELAUNAY ......................................................55 MAPPE AUTO ORGANIZZANTI ..................................................................................................57 MAPPE CHE PRESERVANO LA TOPOLOGIA ................................................................................58 LA RETE SELF-ORGANIZING MAPS (SOM)...............................................................................60 LA RETE GROWING NEURAL GAS (GNG).................................................................................62 I Indice 4 METODOLOGIA E SISTEMA IMPLEMENTATO..................................................................67 4.1 4.2 4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.4 4.4.1 4.4.2 4.5 4.6 5 OBIETTIVO DEL PROGETTO ......................................................................................................67 INFORMAZIONI RILEVANTI ALL’INTERNO DEI PACCHETTI DI RETE...........................................70 DECODIFICA DEI PACCHETTI DI RETE .......................................................................................73 IP Protocol Header ............................................................................................................75 TCP Protocol Header.........................................................................................................77 UDP Protocol Header ........................................................................................................79 ICMP Protocol Header ......................................................................................................79 ALGORITMO STATISTICO ..........................................................................................................80 Descrizione .........................................................................................................................81 Implementazione.................................................................................................................97 ALGORITMO DI PREPROCESSAMENTO.....................................................................................103 SOTTOSISTEMA DELLE RETI NEURALI ....................................................................................111 RISULTATI SPERIMENTALI...................................................................................................116 5.1 SET DI DATI UTILIZZATO .........................................................................................................116 5.1.1 DARPA IDS Evaluation dataset .......................................................................................117 5.1.2 Generazione del Dataset ..................................................................................................118 5.1.3 Generazione del Traffico di Background..........................................................................124 5.1.4 Esecuzione degli Attacchi.................................................................................................127 5.2 RISULTATI SPERIMENTALI FORNITI DAL SISTEMA STATISTICO ...............................................129 5.2.1 Risultati Relativi al Traffico di Background.....................................................................132 5.2.2 Risultati Relativi agli Attacchi..........................................................................................144 5.2.2.1 5.2.2.2 5.2.2.3 5.2.2.4 5.2.2.5 5.2.2.6 5.2.2.7 5.2.2.8 Attacco “Mailbomb” ............................................................................................................. 146 Attacco “Smurf”.................................................................................................................... 155 Attacco “Portsweep” ............................................................................................................. 161 Attacco “Udpstorm”.............................................................................................................. 166 Attacco “SshProcessTable”................................................................................................... 169 Attacco “Neptune” ................................................................................................................ 171 Attacco “Mscan” ................................................................................................................... 175 Attacco “Secret”.................................................................................................................... 177 5.3 RISULTATI SPERIMENTALI FORNITI DAL SISTEMA DI RETI NEURALI ......................................180 5.3.1 Risultati Forniti dalle SOM ..............................................................................................181 5.3.1.1 5.3.1.2 5.3.1.3 5.3.1.4 5.3.1.5 5.3.1.6 5.3.1.7 5.3.1.8 5.3.1.9 5.3.1.10 5.3.1.11 5.3.2 Risultati Forniti dalle GNG ..............................................................................................194 5.3.2.1 5.3.2.2 5.3.2.3 5.3.2.4 5.3.2.5 5.3.2.6 5.3.2.7 5.3.2.8 5.3.2.9 5.3.2.10 5.3.2.11 6 Risultati Relativi al Traffico di Background ......................................................................... 183 Risultati Relativi agli Attacchi .............................................................................................. 185 Attacco “Mailbomb” ............................................................................................................. 185 Attacco “Smurf”.................................................................................................................... 187 Attacco “Portsweep” ............................................................................................................. 188 Attacco “UdpStorm” ............................................................................................................. 190 Attacco “Sshprocesstable” .................................................................................................... 190 Attacco “Neptune” ................................................................................................................ 191 Attacco “Mscan” ................................................................................................................... 191 Attacco “Secret”.................................................................................................................... 192 Considerazioni Finali e Falsi Allarmi.................................................................................... 192 Risultati Relativi al Traffico di Background ......................................................................... 197 Risultati Relativi agli Attacchi .............................................................................................. 198 Attacco “Mailbomb” ............................................................................................................. 199 Attacco “Smurf”.................................................................................................................... 199 Attacco “Portsweep” ............................................................................................................. 200 Attacco “UdpStorm” ............................................................................................................. 200 Attacco “Sshprocesstable” .................................................................................................... 201 Attacco “Neptune” ................................................................................................................ 201 Attacco “Mscan” ................................................................................................................... 201 Attacco “Secret”.................................................................................................................... 201 Considerazioni Finali e Falsi Allarmi.................................................................................... 201 CONCLUSIONI E SVILUPPI FUTURI ....................................................................................203 BIBLIOGRAFIA ....................................................................................................................................207 II INTRODUZIONE L’obiettivo del presente lavoro di tesi è quello di studiare e quindi implementare un sistema integrato che si basa su tecniche statistiche e tecniche di tipo neurale e che realizzi un sistema di rilevazione delle intrusioni. In particolare, il sistema deve essere di supporto alla rilevazione di anomalie nel traffico di una rete informatica e quindi deve simulare un sistema di “Intrusion Detection” (detto comunemente IDS). Il concetto di “Intrusion Detection System” è stato introdotto da James P. Anderson in un suo rapporto tecnico del 15 aprile 1980. L’idea alla base di un IDS è che sia possibile ricavare i segnali caratteristici di un’intrusione in un sistema informatico allo scopo di dare l’allarme. Quando si progetta la sicurezza di un fabbricato, si comincia a realizzare un sistema di chiusure (porte, lucchetti, chiavistelli) che consenta di “selezionare” le persone che hanno accesso alle varie aree della costruzione. Dopodichè si integra questo sistema di “difesa” con un sistema di rilevazione (“antifurto”), che consente di individuare eventuali trasgressori. Un IDS è l’equivalente informatico di un impianto antifurto configurato per monitorare i punti di accesso, le attività ostili e gli intrusi conosciuti. IDS e sistemi di sicurezza tradizionali sono progettati per essere il più possibile indipendenti, nella speranza di rendere più difficile la compromissione di entrambi. Un sistema di sicurezza tradizionale si basa su un approccio classico del tipo “Chi sei ? Cosa sei autorizzato a fare ?”, un IDS cerca piuttosto di capire “che cosa stai cercando di fare ?”, o “perché stai operando in questo modo ?”. Idealmente l’obiettivo di un IDS è “individuare quelle azioni che cercano di far agire il sistema in un modo diverso rispetto a quello per cui è stato progettato”. Ciò significa, principalmente, cercare di individuare azioni tese a eludere le misure di sicurezza, nella speranza che le azioni degli intrusi siano sensibilmente differenti rispetto a quelle degli utenti autorizzati. 1 Introduzione Possiamo distinguere tra IDS “misuse detection” e “anomaly detection”. Nell’approccio “misuse detection”, il sistema cerca di individuare direttamente un comportamento illecito, solitamente basandosi su qualche forma di base di conoscenza che contenga un catalogo di attacchi noti (“firme” o “signatures”). Nell’approccio “anomaly detection” invece, si cerca di studiare il comportamento dell’utente o della rete, confrontandolo con un profilo di comportamento “normale”, modellato secondo varie tecniche. Il sistema quindi individua, basandosi su parametri del profilo costruito in precedenza, qualsiasi deviazione “significativa”, dal comportamento “normale”, segnalandola all’amministratore che si occupa della sicurezza della rete informatica come “sospetta”. Il sistema di rilevamento delle anomalie proposto può essere classificato come un IDS “anomaly detection” ma caratterizzato da una soluzione ibrida, a metà tra un approccio “network based” e “host based”. Una possibile configurazione, è quella di affiancare al sistema proposto un tradizionale IDS “misuse detection” come ad esempio Snort; in tal modo è compito di quest’ultimo ricercare nel traffico di rete pacchetti malformati o altri tentativi di attacco che un sistema basato su un approccio ”anomaly detection” potrebbe non rilevare a causa della sua natura statistica. Il sistema dovrà osservare il traffico di un host sulla rete, presumibilmente un server Web, un server di posta elettronica o ancora un server di autenticazione remota. Sotto questo aspetto si avvicina ad un sistema “host based”, ma l’originalità della nostra soluzione ibrida consiste nel fatto che l’IDS non è eseguito fisicamente dall’host monitorato bensì in un computer diverso dedicato a tale scopo. Questo ci permette di non dipendere strettamente dal sistema operativo del server monitorato mantenendo così un’elevata integrità e robustezza anche nel caso sfortunato che esso sia stato ad esempio bersaglio di un attacco legato allo sfruttamento di una vulnerabilità, che Snort non ha rilevato e che purtroppo ha avuto successo. In uno scenario simile, il sistema proposto intende rilevare che l’host osservato sta generando un traffico di rete statisticamente diverso da quello prodotto durante una condizione di “normalità” e segnalare la situazione all’amministratore come “sospetta”. Tale comportamento, infatti, potrebbe essere causato da un aggressore che una volta preso il controllo del server, ha installato immediatamente un rootkit o un modulo maligno del kernel per nascondere la propria presenza ed in questo modo sta sfruttando l’host compromesso a proprio piacimento. 2 Introduzione Tutto ciò è reso possibile dall’ idea di integrare i due sistemi: il sistema statistico ed il sistema basato sulle reti neurali. Il sistema statistico prende in considerazione finestre temporali scorrevoli durante le quali osserva il traffico di rete, considerando in particolare alcuni parametri caratteristici, dei quali calcola la variazione nel tempo determinando il momento primo, secondo, terzo e la varianza. Il sistema statistico quindi svolgerà il ruolo di “discriminatore” la cui uscita deve consentire, da una semplice ispezione visiva, di distinguere un andamento temporale “normale” da uno anomalo. L’uscita del sistema statistico rappresenterà l’ingresso del sistema di reti neurali basate su un apprendimento non supervisionato che avrà il ruolo di “motore di decisione”, dal momento che ha il compito di comunicare lo stato della rete, indicando la presenza di un attacco conosciuto (o di un’anomalia) o se si stanno configurando le condizioni per una situazione di preallarme. Lo schema di questo lavoro ricalca fedelmente le varie fasi del suo sviluppo. Viene analizzato innanzitutto nel primo capitolo il problema della sicurezza dell’informazione, e delle minacce che minano alla base tale sicurezza. A partire da questa analisi viene introdotto, nel secondo capitolo, il tema riguardante gli Intrusion Detection System. Ci soffermeremo su alcune caratteristiche desiderabili per un sistema IDS come ad esempio: adattabilità ad attacchi nuovi o modificati, reattività, sicurezza intrinseca e robustezza. Verranno presentati inoltre i maggiori problemi che affliggono gli attuali IDS e che conseguentemente possono permettere ad un eventuale aggressore di eludere tali sistemi di sicurezza. Il terzo capitolo è una descrizione in generale delle reti neurali; il loro funzionamento e le loro proprietà. Il quarto capitolo riguarda la metodologia ed il sistema realizzato. Verranno illustrate tutte le varie fasi del lavoro dall’obiettivo all’implementazione del sistema stesso. Il quinto capitolo riporta varie verifiche sperimentali a sostegno della validità del sistema di rilevazione delle anomalie proposto, ed infine nel sesto ed ultimo capitolo riporteremo le conclusioni e gli aspetti di questo lavoro che possono essere approfonditi e sviluppati con studi futuri. 3 CAPITOLO 1 1 SICUREZZA DELL’INFORMAZIONE 1.1 Sicurezza dell’Informazione Non è certo necessario dimostrare che nel nostro mondo una parte sempre maggiore di ciò che facciamo, di ciò che gestiamo, o che trasmettiamo, viene realizzata, controllata, o coadiuvata dall'utilizzo di sistemi informatici. Per questa ragione è particolarmente importante capire quanto possiamo fidarci di questi sistemi. Questo problema diviene sempre più critico, mano a mano che il valore delle informazioni scambiate in forma digitale cresce. La sicurezza dell'informazione ha attraversato un lungo periodo in cui veniva considerata un'arte più che una scienza, da apprendere tramite l'esperienza e non tramite lo studio. Solo pochi studi pionieristici stendevano le basi dei metodi formali che negli ultimi anni sono stati sviluppati. Questo, unito all'intrinseca difficoltà della materia, spiega il motivo per cui gran parte degli approcci al tema della sicurezza dell'informazione sono basati su esperienza e conoscenza euristica più che su tecniche raffinate. L'unico settore della sicurezza che vanta una lunga tradizione nell'uso dei metodi formali è il campo della crittografia, che, non sorprendentemente, è molto più avanzato e stabile degli altri. Se questo metodo pragmatico di procedere ha funzionato per anni, lo sviluppo esplosivo dei sistemi collegati in rete e di dispositivi con potenza e versatilità francamente inimmaginabili solo pochi anni fa ha reso necessario, urgente, lo sviluppo di un'ingegneria della sicurezza informatica, dove il termine “ingegneria” va inteso nel suo senso tradizionale di scienza applicata, con definizione formale di concetti, metodi e tecniche conosciute, esplorate da una ampia letteratura scientifica, e globalmente diffuse. 4 Capitolo 1 – Sicurezza dell’Informazione Cercheremo ora di dare una tassonomia e una nomenclatura per gli attacchi ai sistemi informatici e per i possibili perpetratori di questi attacchi. Premettiamo che questa non intende essere in alcun modo una guida esaustiva ai tipi di attacco (compito che si rivelerebbe improbo, visto il numero quotidiano di innovazioni in questo settore), ma piuttosto cercherà di delineare una serie di direttrici tipiche d’attacco, e di tecniche “esemplari”, universalmente note, per farne uso. 1.2 Aggressori, Bersagli, Obiettivi “Conoscere l’altro, e se stessi – cento battaglie, nessun rischio. Non conoscere l’altro, e conoscere se stessi – a volte vittoria, a volte sconfitta. Non conoscere né l’altro né se stessi – ogni battaglia è un rischio certo”. Le parole del saggio Sun Tzu, maestro cinese dell’arte della guerra, ci devono fare riflettere. Per capire l’andamento di qualsiasi scontro bisogna conoscere le due parti in gioco, e nel campo di battaglia della sicurezza vi sono aggressori e aggrediti, o attaccanti e difensori. Ponendoci nell’ottica dei difensori, conoscere “noi stessi” significa conoscere i sistemi che usiamo ma soprattutto conoscere cosa dobbiamo proteggere. Conoscere il nemico significa essere consci delle sue capacità e dei suoi obiettivi. La prima nota da fare è che (eccettuati rari sottocasi) i sistemi informativi non vengono aggrediti da altri sistemi, ma da persone. Ciò implica che l’analisi delle loro motivazioni e delle loro metodologie sia una disciplina delle scienze sociali e della psicologia più che dell’informatica. Tuttavia, come abbiamo già notato, la disciplina della sicurezza dell’informazione è una di quelle discipline che si situano all’interfaccia tra l’uomo e il sistema informativo. Per cominciare, possiamo fare una macrodistinzione tra minacce esterne e minacce interne. Infatti, una gran parte degli attacchi provengono da dentro le mura di qualsiasi organizzazione. Già definire i “confini” di una singola organizzazione diviene oggi difficile: concetti come le “extranet” che estendono il sistema informativo mediante Internet fino ad interfacciarlo con quello dei partner, dei clienti e dei fornitori, rendono molto labile il confine tra ciò che è interno ad una impresa e ciò che è esterno. Un aggressore interno ha tutti i vantaggi, in quanto molto spesso opera a scatola aperta: 5 Capitolo 1 – Sicurezza dell’Informazione sa già quali sono i punti deboli, e come è strutturata l’architettura dei sistemi, tutte cose che dall’esterno vanno scoperte poco alla volta. Tra gli aggressori interni possiamo individuare due categorie principali: Disgruntled Employees: sono persone che stanno coscientemente aggredendo l’organizzazione, perché hanno qualche conto in sospeso, o perché sono stati corrotti, o ancora peggio si sono fatti assumere appositamente per avere una opportunità di violarne la sicurezza; Trasgressori Ingenui: semplicemente cercano di abusare in qualche modo delle risorse loro concesse, per esempio violando le linee guida aziendali sull’uso responsabile di Internet, sul software da installare sulle postazioni di lavoro aziendali, o simili. Sono pericolosi perché nel loro tentativo di violare le difese aziendali potrebbero involontariamente fornire una porta d’accesso ad altri intrusi ben più pericolosi (ad esempio, scaricando ed utilizzando software di dubbia provenienza come ad esempio un Cavallo di Troia). Tra gli aggressori esterni possiamo fare due tipi di distinzioni, la prima è una distinzione a livello di capacità, e distinguiamo: Esperti: dotati di conoscenze tecniche approfondite, capaci di elaborare attacchi innovativi o di “inventare” procedimenti nuovi; molto spesso sono più esperti dei sistemi che stanno attaccando di quanto non siano le persone incaricate di difenderli; se volessimo tracciarne un quadro psicologico li definiremmo come controllati, freddi, sul limite del paranoico, desiderosi di sentirsi “in controllo” della situazione; Script-Kiddies: privi di reali conoscenze tecniche, studiano ed utilizzano “exploit”, attacchi preconfezionati rilasciati da esperti; il loro quadro psicologico è ben più agitato, emotivo, possono lasciarsi prendere dalla paura e agire irrazionalmente. Tra le due categorie vi sono ovviamente infinite gradazioni intermedie. 6 Capitolo 1 – Sicurezza dell’Informazione Una seconda distinzione dei nemici si può fare secondo i loro fini: nemici con un obiettivo preciso: sul sistema informativo sono contenuti dati che vogliono rubare, oppure vogliono informazioni su una singola persona, vogliono modificare o eliminare qualche informazione scomoda, o in ogni caso mirano ad un obiettivo specifico e a lasciare quante meno tracce possibile della propria presenza; nemici che vogliono fare soltanto un danno, per rabbia, perché sono stati pagati per farlo, o perché sono l’equivalente telematico dei vandali; persone che stanno giocando: esplorano sistemi che non gli appartengono e se li vedono vulnerabili provano a bucarli come “sfida” alle proprie capacità. Non va assolutamente sottovalutata la potenzialità di questi aggressori “ludici”, e nemmeno la loro pericolosità. Per quanto spesso non vogliano fare alcun danno, o addirittura sperino di “dare una mano” agli amministratori delle macchine che attaccano, un errore può sempre succedere. Dobbiamo anche valutare quali siano i possibili bersagli di un aggressore con un obiettivo preciso: I dati: l’aggressore cerca di violare la confidenzialità delle informazioni che il sistema contiene, oppure di modificarle abusivamente. I dati possono essere copiati per essere venduti, oppure dare vita a un rapimento con riscatto (l’attaccante ottiene abusivamente i segreti industriali di una vittima, e minaccia di renderli pubblici se non gli verrà versato un cospicuo riscatto, per esempio); I sistemi: l’aggressore mira alle risorse telematiche in sé più che al loro contenuto. Ad esempio, moltissimi script-kiddie cercano macchine facili da penetrare che possano essere usate come “deposito” di materiale illegale e/o piratato, o che possano essere abusate per fare spam, o per disporre di connessioni permanenti per qualsivoglia altra ragione. Le finalità ultime di una persona possono essere, come abbiamo visto, moltissime: dal guadagno diretto al guadagno derivante dalla vendita di informazioni, dalla rappresaglia al divertimento; non ci avventuriamo in questo campo che è proprio della. 7 Capitolo 1 – Sicurezza dell’Informazione Tutto ciò costituisce il movente dell’attacco informatico, legame fondamentale tra aggressori e obiettivi, molto spesso trascurato perché si tende a trascurare che la componente umana è il cuore dell’attacco. Non lo strumento, non l’aggressione in sé, ma la molla che spinge qualcuno ad aggredire un sistema. Ogni organizzazione deve perciò considerare che sarà valutata da ogni tipo di nemici, e che se risulterà interessante anche solo da un punto di vista sarà sicuramente attaccata ed aggredita. Bisogna mettersi nell’ottica dell’aggressore, anzi, degli aggressori, non nell’ottica dell’organizzazione: ciò che magari dal nostro punto di vista è poco importante, per qualcuno può essere molto utile. Per esempio, poche organizzazioni si rendono conto di quanto attrattivo possa essere, per un ragazzino che vuole distribuire file musicali MP3, lo spazio su disco e la banda di connessione ad alta velocità che possiedono in abbondanza. La relazione tra aggressori ed obiettivi può essere schematizzata come mostrato dalla figura seguente: Figura 1.1 Relazione tra aggressori ed obiettivi 1.3 Le Classi degli Attacchi La serietà di un attacco dipende da due fattori: il modo in cui esso viene condotto e il danno inferto al sistema vittima. L’aggressore in grado di eseguire codice arbitrario sulla macchina è forse il tipo di attacco più serio per l’utente finale , mentre per una società di e-commerce il problema più immediato sarebbe costituito da un attacco DoS (Denial of Service, negazione del servizio) o dalla fuga di informazioni. Ogni vulnerabilità in grado di provocare una compromissione può rientrare in una particolare categoria, o classe, di attacco; le proprietà 8 di ciascuna classe indicano Capitolo 1 – Sicurezza dell’Informazione approssimativamente la gravità di un attacco della classe medesima e il livello di difficoltà necessario per contrastarlo. In questo paragrafo saranno analizzate le classi degli attacchi, mostrando il tipo di danno che possono causare e ciò che l’aggressore ottiene utilizzandole. I principali tipi di attacco sono sette e costituiscono il criterio generale adottato per classificare i problemi di sicurezza: La negazione del servizio; La fuga di informazioni; L’accesso regolare ai file; La disinformazione; L’accesso ai database; L’esecuzione di codice arbitrario remoto; L’elevazione dei privilegi. 1.3.1 La Negazione del Servizio Gli attacchi di negazione del servizio inferti dalla rete possono essere suddivisi, sostanzialmente, in due categorie: quelli che colpiscono sul lato client e quelli invece diretti all’intero sistema. Essi vengono concepiti per arrecare disagio e sono spesso lanciati come attacchi per rappresaglia. Nella maggior parte dei casi questa classe di attacco viene utilizzata dai cosiddetti Script-Kiddies, infatti la disponibilità di una serie di strumenti gratuiti dà a queste persone il potere dell’anonimato e la facoltà di arrecare disturbo, senza però la necessità di alcuna competenza tecnica. Gli attacchi DoS sul lato client sono rivolti tipicamente ad un prodotto specifico, con lo scopo di rendere l’utente finale incapace di eseguire qualunque attività con il client. Uno di essi si svolge ad esempio con l’impiego della bomba JavaScript. Il linguaggio JavaScript è infatti abilitato per impostazione predefinita su gran parte dei browser Web; è possibile accorgersene quando si visita un sito Web con menu e finestre a comparsa, tuttavia, viene utilizzato anche con numerosi scopi nocivi, fra cui quello di lanciare un attacco DoS contro un client. Utilizzando la stessa tecnica scelta dai pubblicitari per creare nuove finestre con le promozioni, l’aggressore crea un pagina Web nociva che genera un ciclo infinito di creazione delle finestre: come risultato 9 Capitolo 1 – Sicurezza dell’Informazione finale, appaiono così tante finestre che il sistema occupa per esse tutte le risorse. Altri attacchi simili colpiscono prodotti come AOL Instant Messenger, il client di messagistica ICQ e software simili. Il genere di aggressioni più conosciute, appartenenti a questa categoria, sono invece gli attacchi DoS diretti al sistema che hanno lo scopo di degradare le prestazioni per rendere il sistema completamente inutilizzabile. Questo genere di attacco presenta tipicamente alcuni approcci che definiscono i metodi adottati nella loro interezza: uno prevede l’impiego di un programma di violazione per attaccare un sistema da un altro sistema, lasciando inagibile il sistema obiettivo. Questo tipo di attacco fu mostrato da programmi di violazione come Ping of Death e teardrop di un paio d’anni fa e dalle varie vulnerabilità del pacchetto frammentato TCP/IP in prodotti come i router D-Link e Microsoft ISA Server. Su questa linea vi è anche il concetto di SYN flood, un attacco che può essere lanciato da un sistema o da una rete più veloci del sistema obiettivo. Questo attacco ha lo scopo principale di degradare le prestazioni del sistema e viene eseguito inviando le richieste di connessione TCP più velocemente di quanto il sistema di destinazione le possa elaborare. Il sistema vittima conserva le risorse per tenere traccia di ciascuna connessione, quindi un cospicuo numero di SYN in arrivo può far sì che l’host bersaglio esaurisca le risorse destinate alle nuove connessioni legittime. L’indirizzo IP sorgente è, come di consueto, sottoposto a spoofing: in tale modo, quando il sistema bersaglio tenta di rispondere con la seconda fase dell’handshaking a tre fasi, ovvero SYN-ACK, non riceve alcuna risposta. Taluni sistemi operativi ritrasmettono SYN-ACK diverse volte prima di restituire le risorse al sistema. Nella figura 2.1 è mostrato un attacco SYN flood in esecuzione. È infatti possibile vedere molte connessioni con il flag “SYN_RECEIVED“per le quali non è stato ricevuto nessun ACK di risposta. 10 Capitolo 1 – Sicurezza dell’Informazione Figura 1.2 Sintomi di un attacco SYN flood È importante affrontare anche gli attacchi smurfing o di pacchetto. L’attacco smurfing esegue una negazione del sevizio della rete contro l’host di destinazione, affidandosi all’aiuto di un intermediario, per esempio il router. L’aggressore, effettuando lo spoofing dell’indirizzo IP sorgente dell’host di destinazione, genera una grossa quantità di traffico eco ICMP (Internet Control Message Protocol) diretto verso indirizzi IP di broadcast. Il router, detto anche amplificatore di smurfing, converte la trasmissione IP in un broadcast di livello 2 e lo invia sul suo percorso. Ogni host che riceve il broadcast risponde all’IP sorgente sottoposto a spoofing con una replica eco e, secondo il numero di host sulla rete, sia il router sia l’host bersaglio possono essere inondati di traffico. Questo può causare un rallentamento delle prestazioni di rete dell’host colpito e, secondo il numero di reti di amplificazione adoperate, la saturazione della rete. L’ultimo attacco di questo tipo che analizzeremo è il DDoS (Distribuited Denial of Service, negazione della rete distribuita). Questo concetto è simile a quello dell’attacco di smurfing, ma il mezzo ed il metodo con cui esso viene sfruttato sono molto diversi da quello dello smurfing. Questo tipo di attacco dipende dall’impiego di un client, di master e di daemon (detti anche zombie). Il primo viene utilizzato per avviare l’attacco, che ha poi luogo mediante i master; i master sono host compromessi, muniti di un particolare programma che permette il controllo di più daemon. Anche i daemon sono host compromessi muniti di un particolare programma e sono gli unici a generare il flusso di pacchetti verso la destinazione. Perché un attacco DDoS funzioni, lo speciale programma deve essere collocato su decine o centinaia di sistemi “agente”. 11 Capitolo 1 – Sicurezza dell’Informazione Di norma, un procedura automatizzata cerca gli host attaccabili, per esempio con overflow del buffer nei servizi RCP (Remote Procedure Call), dopo di che inserisce il programma sull’host compromesso. Iniziato il DDoS, tutti gli agenti inondano il sistema bersaglio inviandogli il flusso del traffico. 1.3.2 La Fuga di Informazioni La fuga di informazioni è tipicamente una risorsa di cui si abusa prima di sferrare l’attacco. Nello stesso modo in cui i generali militari si affidano alle informazioni portate dalle truppe di ricognizione che penetrano le linee nemiche per osservare il tipo di armi, forza lavoro, approvvigionamenti e altre risorse del nemico, così gli aggressori si introducono nella rete bersaglio per svolgere lo stesso compito: raccogliere informazioni su programmi, sistemi operativi e struttura della rete. La fuga di informazioni classica è quella da parte dei sevizi. Questa tecnica si svolge con varie forme, fra cui i banner, i quali sono quel testo presentato all’utente quando egli tenta di accedere a un sistema attraverso uno dei numerosi servizi; si trovano generalmente su servizi come FTP (File Transfer Protocol), SSH (Secure Shell), Telnet, SMTP (Simple Mail Transfer Protocol) e POP3 (Post Office Protocol). Molti pacchetti software per questi servizi forniscono agli utenti esterni le informazioni sulla versione nella loro configurazione predefinita. La figura 1.3 mostra il risultato di una connessione tramite Telnet ad un server Web, dalla quale è ad esempio passibile capire che il server in questione è Apache versione 2.0.39 in esecuzione su un sistema Unix. 12 Capitolo 1 – Sicurezza dell’Informazione Figura 1.3 Fuga di informazioni da parte di un server Web Un altro problema simile è dato dai messaggi di errore. Alcuni servizi, come i server Web, presentano numerose informazioni su sé stessi quando si creano le condizioni per un’eccezione. L’eccezione è una circostanza fuori dall’ordinario, come la richiesta di una pagina inesistente o un comando non riconosciuto; in situazioni del genere, è preferibile adottare le configurazioni di errore personalizzate o crearne una risolutiva. Fra gli altri numerosi altri metodi per svolgere l’analisi di un sistema remoto vi è l’analisi delle risposte IP. Gli strumenti automatizzati come Nmap (o Network Mapper), forniscono un’utilità di facile impiego finalizzata a raccogliere informazioni su un sistema, fra cui le porte raggiungibili pubblicamente e il sistema operativo. La rilevazione del sistema operativo si basa sul cosiddetto “fingerprinting” (letteralmente rilevamento delle impronte digitali), eseguito controllando la corrispondenza di un insieme di risposte note prodotta da un tipo di sistema con una tabella che indica il sistema operativo dell’host. La figura 1.4 mostra il risultato della scansione di un host mediante Nmap. È possibile vedere le informazioni riguardo quali servizi di rete sono in esecuzione sul server (Ssh, Smtp, Domain, Http), nonché il sistema operativo utilizzato con addirittura l’indicazione della versione (Linux 2.4.X o 2.5.X). 13 Capitolo 1 – Sicurezza dell’Informazione Figura 1.4 Scansione di un host tramite Nmap Qualsiasi sistema operativo progettato con intelligenza consente per lo meno di prevenire questa pratica o di creare una sorta di “impronta digitale” che sia difficile da identificare senza un accurato esame; alcuni, addirittura, consentono di inviare impronte digitali fittizie agli host particolarmente invadenti. 1.3.3 L’accesso Regolare ai File L’accesso regolare ai file offre all’aggressore numerosi mezzi diversi con i quali lanciare l’attacco; gli può consentire di accedere a informazioni sensibili, come nomi utente e password di un sistema, nonché di ottenere l’accesso ai file in modi diversi, per esempio modificando le autorizzazioni o il proprietario di un file. Uno dei modi più facili per accertare la sicurezza di un file è garantire le autorizzazioni appropriate: questo è sovente uno degli aspetti più trascurati della protezione. Alcuni sistemi per utente singolo, come i prodotti Windows 3.1/95/98/Me, sono privi di un’infrastruttura per le autorizzazioni; gli host multiutente ne possiedono almeno una e, solitamente, offrono numerosi mezzi per il controllo degli accessi. Ad esempio, i sistemi UNIX e alcuni sistemi Windows possiedono sia utenti sia gruppi; UNIX e, fino ad un certo 14 Capitolo 1 – Sicurezza dell’Informazione punto, Windows consentono l’impostazione degli attributi dei file per indicare quali utenti e quali gruppi possono ottenere l’accesso per svolgere determinate operazioni su un file. Un utente, definito proprietario del file, dispone del totale controllo sul file e quindi possiede le autorizzazioni di lettura, scrittura ed esecuzione; un utente del gruppo assegnato al file può invece disporre solo delle autorizzazioni di lettura ed esecuzione. Gli utenti diversi dal proprietario e dai membri del gruppo possono avere un diverso insieme di autorizzazioni o non averne affatto. 1.3.4 La Disinformazione Il concetto di disinformazione si può presentare sotto molti aspetti. Tornando allo scenario militare, si supponga che nel campo siano appostate alcune sentinelle in vari punti di osservazione e che una di esse abbia visto il gruppo di ricognizione del nemico. La sentinella avverte i suoi superiori, i quali inviano il loro gruppo di ricognizione per scoprire esattamente chi li sta spiando, la sua posizione e la sua forza. Nel caso in cui i generali scoprono così che l’esercito nemico è maggiore del proprio, loro rafforzerebbero la propria posizione o si sposterebbero in un’altra zona, dove è più difficile attaccarli o dove è più complicato individuarli. Com’è intuibile il generale nemico, ha già pensato a questa situazione, perciò vuole far sembrare le proprie forze meno minacciose di quanto siano in realtà; egli nasconde le sue armi pesanti e la maggior parte della fanteria, consentendo la visibilità solo di una piccola parte delle forze. Questa è l’idea alla base della disinformazione. Il concetto si applica anche ai sistemi. Dopo averne compromesso uno, l’aggressore svolge un accurato lavoro di occultamento del proprio passaggio, per lasciare più disinformazione possibile; questo lavoro viene compiuto in molti modi. Un metodo utilizzato è, ad esempio, la modifica del registro. L’aggressore può tentare di riempire i file del registro, ma un sistema ben progettato dispone di molto spazio e di una caratteristica di rotazione del registro per impedire tale attacco; egli può allora, come ripiego, generare una grossa quantità di eventi per celare la sua attività. Nelle circostanze opportune, egli può creare un intenso volume di eventi di registrazione, generando uno o più eventi somiglianti alla voce creata all’inizio del programma di hacking. Se l’aggressore ottiene l’accesso come amministratore del 15 Capitolo 1 – Sicurezza dell’Informazione sistema, ogni speranza di integrità del registro è perduta: munito di questo accesso, egli può modificare i file di registro per rimuovere qualsiasi evento che indichi l’intrusione o addirittura implicare nell’opera un altro utente. In questo caso, gli unici dispositivi che possono fornire dati con una certa integrità sono gli IDS (Intrusion Detection System, sistema di rilevamento delle intrusioni). Alcuni strumenti includono opzioni per generare traffico e dati casuali: questi sono definiti disturbo e sono utilizzati come tattica diversiva o come tecnica di offuscamento. Lo scopo dell’aggressore è produrre un effetto come ad esempio: lo stato di “benessere” del sistema, che equivale a far sembrare che nulla sia accaduto, oppure la confusione generale e totale, mettendo in conflitto i file di registro o le loro voci, per far sembrare che un processo del sistema sia impazzito. Il rootkit, un altro strumento di disinformazione, è un programma pronto all’uso finalizzato a nascondere l’operato dell’aggressore all’interno di un sistema; è anche lo strumento preferito per conservare l’accesso a lungo termine a un sistema. Esistono diversi tipi di rootkit, ciascuno con le proprie caratteristiche e difetti. Il rootkit funziona sostituendo i programmi fondamentali del sistema nei sistemi UNIX o i driver e le voci del Registro sui computer Windows. Esso sostituisce questi programmi, e possibilmente non solo questi, con programmi interni, personalizzati per non fornire alla staff amministrativo dettagli affidabili. Lo scopo principale dei rootkit è quindi celare l’attività dell’aggressore e la sua presenza nel sistema, perciò questi pacchetti vengono concepiti appositamente per creare disinformazione: fanno in modo che tutto appaia perfettamente normale ma, nel frattempo, l’aggressore controlla il sistema e lancia attacchi contro nuovi host o esegue altre azioni nefaste. I moduli del kernel sono codici che possono essere caricati o scaricati da un kernel in funzione e hanno lo scopo di fornire una funzionalità supplementare quando occorre, consentendo al kernel di scaricare il modulo quando non occorre più, in modo da alleggerire il carico della memoria. Questi moduli vengono caricati per fornire funzioni aggiuntive come il supporto di un file system non nativo o il controllo di periferica, ma si possono impiegare anche per azioni malevoli. Gli scopi dei moduli maligni del kernel sono simili a quelli dei rootkit, il modulo infatti, fornisce un mezzo per nascondere l’aggressore affinché questi svolga sull’host tutto ciò che desidera. Il modulo opera però su un livello molto inferiore rispetto ai rootkit, intercettando le interrogazioni delle informazioni sul livello di chiamata del sistema e filtrando tutti i dati che potrebbero 16 Capitolo 1 – Sicurezza dell’Informazione segnalare allo staff amministrativo presenze illecite. Tutto questo senza modificare i file di sistema, come invece avviene nei rootkit, cosa che comporterebbe un rischio maggiore di essere individuato. 1.3.5 L’accesso ai Database I database devono combattere una guerra su due fronti: sono software, e perciò soggetti a tutti i problemi del software come gli overflow del buffer, le negoziazioni del servizio e così via; allo stesso tempo, essi sono anche un back-end per altri elementi quali le interfacce Web, gli strumenti di interfaccia utente e così via. I database sono sicuri solo quanto il software eseguito e le interfacce con cui comunicano. Le interfacce Web, ad esempio, tendono ad essere un problema abituale per i database: ciò si deve al fatto che non riescono a filtrare i caratteri speciali o che sono state progettate in modo non corretto. Questa tesi è avvalorata dalla regolarità con cui si trovano falle nei pacchetti di e-commerce. Gestire l’input proveniente dall’utente è quindi rischioso: l’utente tende infatti a fornire al front-end Web qualunque cosa, sia per semplice ignoranza sia, talvolta, per agire in mala fede. Occorre progettare script adatti a filtrare i caratteri speciali, come la virgoletta singola (‘), il carattere slash (/), la barra rovesciata (\), e le virgolette doppie (“), altrimenti si crea una situazione che potrebbe essere rapidamente sfruttata: un frontend che consente il passaggio di tali caratteri a un database permette di eseguire comandi arbitrari, solitamente con l’autorizzazione dei daemon dei database. I front-end progettati in modo non corretto costituiscono uno scenario differente. Essi consentono agli utenti di interagire con il database e di manipolarlo in molti modi: l’aggressore può dunque prendere visione delle tabelle, eseguire comandi SQL o perfino eliminare le tabelle. 1.3.6 L’esecuzioni di Codice Arbitrario Remoto L’esecuzione di codice remoto è uno dei metodi più comuni per sfruttare i sistemi: con esso sono stati sferrati numerosi e rilevanti attacchi a siti Web di alto profilo. Il codice arbitrario remoto, è particolarmente pericoloso, perché non richiede 17 Capitolo 1 – Sicurezza dell’Informazione autenticazione e quindi può essere sfruttato da chiunque. Se l’aggressore riesce ad eseguire codice arbitrario mediante un servizio nel sistema, egli ottiene l’accesso locale al sistema stesso con gli stessi privilegi del servizio che ha sfruttato per l’attacco. Esistono svariati metodi per svolgere questa tecnica ad esempio l’overflow del buffer o gli attacchi mediante il formato delle stringhe, comunque occorre sfruttare una vulnerabilità. Esistono tre tipologie fondamentali di vulnerabilità in un sistema informatico: vulnerabilità nell’implementazione dei programmi, che consentono all’aggressore di far comportare il programma in maniera diversa da quella attesa. Non possiamo riportarne un elenco completo, ma le più comuni sono: errori nella validazione dell’input, ovvero nel filtraggio dei dati che arrivano da fonti inaffidabili (ad esempio, gli utenti). Un esempio comune sono le pagine web che gestiscono back-end collegati all’esecuzione di query SQL sui database, come spiegato in precedenza nel paragrafo “L’Accesso ai Database”; problematiche di buffer overflow, ovvero la possibilità che un insieme di valori troppo lungo venga inserito in un buffer di lunghezza prefissata, andando a influire sullo stack ed alterando il flusso di esecuzione del programma, o sull’heap del programma, corrompendone le variabili; problemi nelle chiamate e comunicazioni tra processi e nella gestione della memoria: ad esempio, passaggi in chiaro di dati molto sensibili che possono essere intercettati da qualche curioso; problemi di gestione dei privilegi di esecuzione, in particolare per i demoni di rete che hanno bisogno dei privilegi di amministratore in alcuni punti della loro esecuzione; attacchi relativi al timing di determinate operazioni critiche (le cosiddette “race condition”). vulnerabilità nella configurazione: molti programmi per essere considerati sicuri debbono essere opportunamente configurati ed adattati alle situazioni specifiche in cui vengono inseriti. Spesso è proprio nella fase di configurazione 18 Capitolo 1 – Sicurezza dell’Informazione che amministratori inesperti compiono gravi leggerezze, che rendono inutili tutte le contromisure di sicurezza. Per esempio, la condivisione di unità a disco in ambiente Windows senza alcuna forma di autenticazione è da anni costantemente nella lista delle “20 vulnerabilità più diffuse” gestita dal SANS institute; vulnerabilità nella progettazione di una determinata applicazione, sistema, o protocollo, che la rendano insicura per come è stata creata. Esempio tristemente noto è il recente protocollo criptografico WEP, Wired Equivalent Privacy, progettato per rendere sicure le comunicazioni sulle reti Wireless LAN realizzate secondo lo standard IEEE 802.11b; un errore di design rende tale protocollo estremamente debole e facile da decodificare. Abbiamo volutamente ordinato tali classi in ordine crescente di “livello concettuale”, e di difficoltà di correggere l’errore una volta individuato: un buffer overflow può essere corretto mediante una patch; un errore di configurazione, una volta scoperto, può essere sistemato; un algoritmo come WEP è irrecuperabile, e può solo essere abbandonato in favore di un altro. L’esecuzione del codice remoto viene sempre compiuta da un mezzo automatizzato: tentare di effettuarla manualmente è pressoché impossibile. Questi attacchi sono compiuti tipicamente facendo ricorso ad uno script automatizzato. Nella maggior parte dei casi, questa tecnica di aggressione ha lo scopo di conferire all’utente remoto l’accesso amministrativo a un sistema vulnerabile. L’attacco vero e proprio è solitamente preceduto da un altro di raccolta delle informazioni, nel quale l’autore identifica la versione vulnerabile del programma mediante, per esempio, strumenti di scansione automatizzati. Dopo di che l’aggressore esegue uno script sul programma con l’intento di ottenere l’accesso amministrativo all’host. Ottenuto questo accesso, egli dà il via al processo descritto precedentemente nel paragrafo “La Disinformazione”, vale a dire che egli fa del suo meglio per nascondere la propria presenza nel sistema. In seguito, può utilizzare l’host compromesso per lanciare attacchi di esecuzione di codice arbitrario remoto contro altri host. 19 Capitolo 1 – Sicurezza dell’Informazione 1.3.7 L’elevazione dei Privilegi L’elevazione dei privilegi, si verifica quando un utente ottiene l’accesso a delle risorse per le quali non era autorizzato. L’elevazione dei privilegi remota può rientrare in una di due categorie: la prima è quella dell’accesso remoto non privilegiato, che permette ad un utente remoto l’accesso non autorizzato ad un sistema come utente regolare; la seconda è l’accesso amministrativo immediato (remote root exploits). L’accesso remoto ad un sistema come utente regolare si può ottenere mediante numerosi mezzi, tra cui gli elementi già discussi come il filtraggio dei caratteri speciali attraverso le interfacce Web, l’esecuzione del codice con metodi quali gli overflow del buffer e le falle nei formati delle stringhe, oppure con i dati ottenuti dalla fuga di informazioni. Solitamente a questa prima fase di attacco, segue una seconda denominata privilege escalation, che consiste nel tentare di sfruttare un’altra vulnerabilità sul sistema locale col fine di ottenere anche in questo caso i privilegi amministrativi sul sistema violato. L’accesso remoto dell’utente privilegiato è il più grave dei due problemi: se un utente remoto riesce ad ottenere l’accesso ad un sistema come utente privilegiato, l’integrità del sistema è destinata al collasso. Questo evento è paragonabile ad un aggressore che accede ad un sistema con i privilegi di un account di sistema; tali account comprendono, ad esempio, root, bin e sys nei sistemi UNIX e Administrator e LocalSystem in quelli Windows 2000. I Metodi per raggiungere questo obiettivo sono sostanzialmente identici a quelli per l’accesso non privilegiato, ma vi sono alcune importanti differenze. Una si trova nel servizio colpito: per avere l’accesso remoto come utente privilegiato, occorre sfruttare un servizio che operi come utente privilegiato. Fra questi vi è tuttora la maggior parte dei servizi UNIX: alcuni di essi, come Telnet e SSH, sono stati oggetto di serie vulnerabilità. L’accesso dell’utente remoto privilegiato è anche lo scopo di molti Cavalli di Troia. Programmi come SubSeven, Back Orifice e le numerose varianti sono utilizzati per ottenere privilegi amministrativi remoti in un sistema infetto; essi tendono a includere l’ingegneria sociale, definita generalmente come impiego della disinformazione o della persuasione, per convincere un utente ad eseguirli. Nel momento dell’esecuzione, l’aggressore deve semplicemente adottare il metodo di comunicazione con il programma maligno e così può osservare il sistema infetto, 20 Capitolo 1 – Sicurezza dell’Informazione eseguire operazioni da quest’ultimo e perfino controllare la facoltà degli utenti di operare su esso. Figura 1.5 Illustrazione schematica dei cammini tipici per l’accesso ad un sistema informatico; in verde i cammini leciti, in rosso quelli illeciti 1.4 Strumenti e Metodologie di Attacco Per mettere in atto le tipologie di attacco viste finora, gli aggressori usano una vasta serie di strumenti, non crediamo certo di poterne offrire un elenco esaustivo. Tuttavia proviamo ad elencarne le tipologie principali: Strumenti di packet forgery: vasta categoria di programmi, sia generali (che consentono di costruire pacchetti del tipo desiderato dall’utente) sia molto specifici (che creano pacchetti strutturati appositamente per sfruttare una specifica vulnerabilità). Molti “remote exploit tools” ricadono in quest’ultima categoria; Port-scanner e vulnerability scanner: strumenti che inviano ad una o più macchine pacchetti TCP/IP per cercare di scoprire quali servizi sono disponibili. I vulnerability scanner aggiungono a questa funzione una base di conoscenze per determinare se tali servizi sono vulnerabili ad attacchi noti, sia mediante funzioni di raccolta di informazioni, che mediante veri e propri tentativi di attacco; 21 Capitolo 1 – Sicurezza dell’Informazione Normali client d’accesso: non sono poche le vulnerabilità che non richiedono niente altro che un normale browser, un client Telnet, o qualche altro tipo di client, e un po’ di conoscenze da parte dell’aggressore per essere sfruttate. Ricadono in questa categoria, per esempio, gran parte delle vulnerabilità dovute a cattiva configurazione. A volte si usano dei client modificati: per esempio un client FTP da linea di comando, congiunto ad uno script, può essere utilizzato per fare molteplici tentativi di accesso tentando di “indovinare” una password; Programmi da eseguire (o far eseguire con l’inganno) su un host remoto per ottenere gli effetti più vari. Un noto detto della sicurezza informatica vuole che “una volta che qualcuno è riuscito, con l’inganno o mediante qualche tecnica, ad eseguire o a farti eseguire un programma di sua scelta sulla tua macchina, quella non è più la tua macchina”; Agenti software autonomi, con varie funzioni, sono dei programmi simili ai precedenti ma sono in grado di attuare da soli un processo di compromissione del sistema; Artefatti fisici: un tempo erano molto di moda i “wiretap”, piccoli morsetti applicati sui cavi di una rete di telecomunicazioni per intercettare e inserire traffico abusivamente, al punto che molte canaline di rete sicure venivano integrate con impianti ad aria compressa per rilevare eventuali forature. Caduta in disuso negli anni ’90, la pratica sta rinascendo con le reti wireless, in cui l’uso di apparecchiature di intercettazione dei segnali anche molto semplici consente risultati sorprendentemente efficaci. Strumenti e accessi si combinano in un numero sorprendente di scenari di intrusione possibili, di cui elenchiamo le variazioni più comuni ed i relativi risultati. 1.4.1 Attacchi da Remoto Attacchi a demoni e servizi di rete: il tipo di exploit forse più conosciuto, al punto tale da essere spesso l’unico preso in considerazione. L’idea alla base di questi attacchi è che, in assenza di un accesso diretto al livello comandi del sistema, l’aggressore cerchi di fare in modo che un processo già in esecuzione, spesso con elevati privilegi, esegua al posto suo delle operazioni sul sistema: 22 Capitolo 1 – Sicurezza dell’Informazione Mediante l’invio di pacchetti artefatti: spesso i progettisti di applicazioni di rete dimenticano che è possibile per chiunque forgiare ed iniettare pacchetti all’interno di Internet. Molti servizi si sono dimostrati vulnerabili a particolari pacchetti malformati; Mediante l’interazione con l’interfaccia pubblica: molti attacchi vengono portati a termine interagendo con l’applicazione, demone o servizio, esattamente come qualsiasi utente normale farebbe, ma inviando dati o comandi malformati che provocano effetti indesiderabili. Possiamo ricordare i bug Unicode di I.I.S. (Internet Information Server) di Microsoft, il cui meccanismo di exploit era una richiesta Http malformata; ma anche le vulnerabilità delle applicazioni web-based; Grazie a misconfigurazioni: la più tipica delle vulnerabilità da remoto è una misconfigurazione o un’errata concezione della sicurezza. Pagine web amministrative lasciate on-line senza password, directory FTP aperte per l’upload…ecc; Bruteforcing: l’aggressore cerca, per tentativi successivi, di individuare i codici di accesso di un servizio, nella speranza di trovarne di deboli o corti. Contrariamente a quanto si crede, è un attacco relativamente poco usato perché facilmente individuabile. Attacchi all’infrastruttura: con questo termine si intendono quegli attacchi che non si concentrano sul sistema aggredito, ma che cercano di sfruttare alcune debolezze dell’infrastruttura di rete che lo circonda, per esempio: Sniffing: I dati su Internet viaggiano in chiaro e vengono trasmessi da un punto all’altro rimbalzando per una serie di sistemi di cui non conosciamo l’affidabilità. Non solo, ma su una rete locale Ethernet, tranne in alcuni casi, tutte le workstation sullo stesso segmento di rete vedono passare tutto il traffico destinato anche alle altre macchine. La pratica dello sniffing consiste proprio nell’analizzare il traffico abusivamente intercettato, in generale alla ricerca dei codici d’accesso per le macchine; 23 Capitolo 1 – Sicurezza dell’Informazione Hijacking: l’hijacking delle connessioni TCP è un tipo d’attacco tanto pericoloso quanto difficile da realizzare, che consente a un aggressore di “rilevare” la connessione stabilita tra due macchine, e continuare ad usarla. Per fare un esempio, un intruso potrebbe attendere che A abbia stabilito una connessione Telnet con B per poi “inserirsi” al posto di A e sfruttare il collegamento per fare ciò che vuole su B; Man-in-the-middle: un attacco in cui l’intruso, C, riesce a interporsi in maniera perfetta tra due sistemi, A e B, che stanno comunicando via rete. In pratica A parla con C, illudendosi di parlare con B; B pure parla con C, interpretando le sue risposte come provenienti da A; Spoofing: la pratica dello spoofing prende le mosse dall’osservazione che non c’è, in IP, un meccanismo di autenticazione del mittente: l’indirizzo IP sorgente può pertanto venire tranquillamente falsificato. A livello di TCP sono previsti alcuni meccanismi che rendono più difficile questo attacco (la presenza di un numero pseudocasuale di sincronizzazione, ad esempio) “alla cieca”, ma se l’aggressore vede tutti i pacchetti mentre passano (mediante sniffing) la difficoltà non è insormontabile. Denial-of-Service da remoto: attacchi spesso meno complessi dei precedenti, in quanto in questo caso l’obiettivo dell’aggressore è “semplicemente” impedire a chiunque altro di utilizzare il servizio aggredito: Saturazione delle risorse: sia del particolare servizio, che dell’intero sistema. Un esempio di attacco di questa classe può essere il SYN flood visto in precedenza; Utilizzo di pacchetti artefatti: come per il caso dell’uso di pacchetti malformati per attacchi finalizzati a ottenere un accesso, determinati pacchetti malformati possono invece ottenere l’effetto di far bloccare un servizio o una applicazione, ottenendo un Denial of Service; Utilizzo dell’interfaccia pubblica del daemon: facendo richieste impossibili, malformate, o semplicemente subissando di richieste molto lunghe il servizio che si vuole bloccare, è possibile impedire l’accesso agli utenti legittimi. 24 Capitolo 1 – Sicurezza dell’Informazione 1.4.2 Attacchi Locali Mediante esecuzione di comandi e script: dall’interno di un computer ed utilizzando i comandi disponibili agli utenti si possono compiere un gran numero di possibili attacchi, cercando di ottenere privilegi “migliori”, per esempio l’accesso in lettura a tutti i file, oppure i privilegi d’amministrazione; Mediante la compilazione e l’esecuzione di exploit sull’host vittima: esistono alcuni bug di servizi locali e/o del sistema operativo che possono essere sfruttati mediante l’esecuzione (in locale) di programmi di exploit; Denial-of-Service da locale: un utente locale (se non è stato limitato in qualche modo) può lanciare in esecuzione un’infinità di processi, per esempio scrivendo un piccolo programma C che lancia due “copie” di se stesso. La crescita esponenziale metterà in breve in ginocchio il sistema; Altri tipi di interazione con il sistema: quasi ogni sistema ha delle attività (per esempio, di manutenzione programmata) in grado di rallentare o bloccare l’accesso ai servizi. Inoltre, un intruso con i privilegi amministrativi può arrestare qualsiasi servizio gli interessi disattivare. 1.4.3 Attacchi Ibridi Utilizzo di agenti autonomi: questi programmi agiscono da soli, in modo indipendente da chi li ha creati e lanciati, per guadagnare accesso ad altre macchine ed eseguirvi operazioni non autorizzate. L’esempio più tipico sono i virus e i worm: Virus: sono frammenti di codice eseguibile che quando vengono eseguiti copiano sé stessi all’interno di altri programmi eseguibili. Quando questi ultimi vengono eseguiti, il codice virale torna in esecuzione e si diffonde sempre di più. I virus non possono essere inseriti all’interno di file di dati, però va notato che al giorno d’oggi molti programmi possono salvare istruzioni “macro” nei propri documenti, che in alcuni casi possono essere utilizzate per creare virus; 25 Capitolo 1 – Sicurezza dell’Informazione Worm: diversamente dai virus, non sono pezzi di codice che si agganciano ad altri programmi, bensì programmi che clonano se stessi, lanciandosi in esecuzione in vari modi. Spesso i worm contengono del codice “backdoor”, installando sulle macchine infettate un accesso per il proprio creatore. 1.4.4 Osservazioni Conclusive Per completare il quadro mancano ancora alcune annotazioni di carattere generale ma di estrema importanza. Per prima cosa, non è assolutamente detto che un attacco proceda in questa maniera lineare; anzi, sarebbe una pessima indicazione di inefficacia delle misure di sicurezza se l’attaccante potesse compiere un processo così diretto che lo porta dall’idea alla realizzazione del suo obiettivo. Solitamente la fase di utilizzo dei tool per guadagnare un accesso, porta a dei risultati che non sono immediatamente in linea con gli obiettivi, ma che servono per poter utilizzare altri strumenti, su altre vulnerabilità. Questo ciclo aggressione – risultato – nuova aggressione è una costante nelle intrusioni informatiche. In secondo luogo, non dobbiamo dimenticarci, che gli aggressori hanno dalla loro parte la straordinaria potenza dell’intelligenza umana. Proprio per questo motivo un sistema informatico, per quanto possa essere ben progettato e robusto, si troverà costantemente in svantaggio se confrontato con una mente umana capace di ragionamento, improvvisazione e flessibilità di gran lunga superiore ad un qualunque sistema artificiale. Infine un’ulteriore annotazione, riguarda l’utilizzo da parte degli aggressori di metodologie di attacco non strettamente informatiche: per esempio, come già accennato, l’utilizzo di metodologie di social engineering per ottenere accessi ingannando le persone; oppure, ad esempio, il cosiddetto dumpster diving, la ricerca di preziosi frammenti di informazione, password, e documenti, nella spazzatura eliminata da una organizzazione; o ancora, il furto di computer portatili e palmari con memorizzate importanti chiavi d’accesso (si tratta di un fenomeno in continua crescita, secondo il rapporto CSI/FBI). 26 CAPITOLO 2 2 IDS: CONCETTO E STATO DELL’ARTE 2.1 Concetto di Intrusion Detection System Quando si progetta la sicurezza di un fabbricato, si comincia a realizzare un sistema di chiusure (porte, lucchetti, chiavistelli) che consenta di “selezionare” le persone che hanno accesso alle varie aree della costruzione. Dopodichè si integra questo sistema di “difesa” con un sistema di rilevazione (“antifurto”), che consente di individuare eventuali trasgressori. Un Intrusion Detection System (IDS) è l’equivalente informatico di un antifurto. Dopo aver introdotto il concetto con una analogia, vediamo però di esplorare più approfonditamente cosa sia e come funzioni un IDS. Abbiamo detto che, a fronte delle possibilità non secondarie di violazione della policy di sicurezza da noi prestabilita, dobbiamo trovare dei meccanismi complementari di difesa. Molto naturalmente, questi meccanismi sono quelli di individuazione degli intrusi, reazione, contenimento del danno e “chiusura” del buco nel sistema difensivo che ha reso possibile la compromissione. Ovviamente, gli IDS entrano in gioco proprio nella difficile fase di “individuazione” degli intrusi. Se la protezione dalle intrusioni è difficile perché deve essere tenuto conto della determinazione da parte dell’intruso a violare le politiche di sicurezza, a maggior ragione l’individuazione di queste violazioni sarà doppiamente difficile. A meno di clamorosi autogol, infatti, uno dei primissimi obiettivi di qualsiasi attaccante è coprire le proprie tracce, cercare di comportarsi nella maniera più anonima possibile e soprattutto distruggere qualsiasi prova della violazione perpetrata. Il problema peggiore è che, laddove la sicurezza del sistema sia stata completamente sovvertita e l’intruso abbia raggiunto i privilegi amministrativi, improvvisamente tutti i sistemi di registrazione degli eventi (logging) e tutti i controlli inseriti nel sistema sono 27 Capitolo 2 – IDS : Concetto e Stato dell’Arte terribilmente inaffidabili e inclini a ogni manipolazione. Proprio per questo motivo gli amministratori più preoccupati hanno l’abitudine di collegare il logging dei sistemi critici a una stampante. In questo modo, l’intruso può al massimo disabilitare il sistema di logging, ma non cancellare selettivamente o modificare le proprie tracce. Sono però evidenti i limiti di questo tipo di artifici difensivi. Per questo motivo è necessario che il sistema che tenta di individuare queste violazioni utilizzi un’ottica il più possibile diversa da quella utilizzata per l’implementazione del sistema di sicurezza. Laddove quest’ultimo tradizionalmente si basa su un approccio classico del tipo “Chi sei ? Cosa sei autorizzato a fare ?” un IDS cerca piuttosto di capire “che cosa stai cercando di fare ?”, o “perché stai operando in questo modo ?”. Ciò che, idealmente, un IDS dovrebbe fare è “individuare quelle azioni che cercano di fare agire il sistema in un modo diverso rispetto a quello per cui è stato progettato”. Ciò significa, principalmente, cercare di individuare azioni tese a eludere le misure di sicurezza, nella speranza che le azioni degli intrusi siano sensibilmente differenti rispetto a quelle degli utenti autorizzati. IDS e sistemi di sicurezza tradizionali sono fatti per essere quanto più possibile indipendenti, nella speranza di rendere più difficile la compromissione di entrambi. Come nota a margine, è evidente che il concetto di Intrusion Detection System tracciato in questo paragrafo è paradigmatico. Non stiamo parlando di un singolo software, prodotto o meccanismo, ma dell’intera architettura di sistemi che vengono predisposti per rilevare le intrusioni. In molti casi, specialmente nell’industria, viene indicato come “Intrusion Detection System” il singolo software utilizzato per individuare le intrusioni. Questo approccio potrebbe essere limitativo, in quanto riduce una problematica e la relativa soluzione progettuale all’uso di un singolo prodotto. Tuttavia, nel seguito di questa tesi, utilizzeremo il termine per indicare anche un singolo sistema o software che svolga compiti di intrusion detection, seguendo la convenzione tipica. Ci premeva però sottolineare questo importante concetto di IDS come architettura integrata di sistemi. 28 Capitolo 2 – IDS : Concetto e Stato dell’Arte 2.2 Tassonomia degli Intrusion Detection System In questo paragrafo cercheremo di dare una rapida panoramica dei possibili approcci al problema dell’intrusion detection. Daremo esempi concreti, ma per una più approfondita analisi dei sistemi esistenti in letteratura e commerciali preferiamo rimandare a testi specifici. 2.2.1 I Due Approcci Principali Esistono in letteratura due grandi categorie di approcci alla tematica dell’Intrusion Detection: Anomaly Detection: in questo tipo di approccio si cerca di studiare il comportamento dell’utente o della rete, confrontandolo con un profilo di comportamento “normale”, modellato secondo varie tecniche. Il sistema individua in modo statistico qualsiasi deviazione “significativa”, segnalandola all’amministratore come “sospetta”. I sistemi di questo tipo vengono anche detti “behavior based”; Misuse Detection: in questo tipo di approccio, viceversa, il sistema cerca di individuare direttamente un comportamento “anomalo”, solitamente basandosi su qualche forma di base di conoscenza che contenga un catalogo di attacchi noti (“firme” o “signatures”). I sistemi di questo tipo vengono anche detti “knowledge based”. Ciascuno di questi approcci ha pregi e difetti. I sistemi basati sulla anomaly detection, per esempio, non richiedono un’immissione di conoscenza “a priori”, né richiedono continui aggiornamenti delle “firme” d’attacco, essendo teoricamente in grado di rilevare i “cattivi comportamenti” sulla base di una descrizione di “normalità”. Tuttavia, per costruire un modello di “comportamento normale” serve innanzitutto uno studio architetturale preciso su quale tipo di modello usare, e in secondo luogo una fase più o meno prolungata di addestramento in cui il modello viene “tarato” sullo specifico 29 Capitolo 2 – IDS : Concetto e Stato dell’Arte utente e sullo specifico sistema. Inoltre, questi sistemi sono inclini ad errori e falsi positivi. I sistemi basati sulla misuse detection, viceversa, richiedono uno studio estensivo delle forme d’attacco per la produzione delle “firme” necessarie al loro funzionamento. Le firme degli attacchi consistono nell’impiego di diversi componenti per descrivere in modo unico un attacco. Le firme vengono costruite per lo più eseguendo varie volte un codice di hacking conosciuto, monitorando i dati mentre appaiono sulla rete e cercando una forma unica che venga ripetuta ad ogni esecuzione. Questo metodo è efficace nel garantire che la firma corrisponderà in modo coerente ad un tentativo da parte del codice di hacking in questione. La firma ideale sarebbe peculiare dell’attacco e allo stesso tempo molto semplice; le firme estese e complesse, difatti, possono costituire un grosso peso per l’elaborazione. Dalla qualità delle firme e dal loro aggiornamento costante dipende inevitabilmente l’efficacia del sistema (si può notare immediatamente un parallelo con i meccanismi e le problematiche tipiche del software antivirus). Stranamente, il problema dei falsi positivi ma soprattutto degli avvisi indesiderati affligge drammaticamente anche i sistemi di questo tipo, che dovrebbero essere meno vulnerabili. Ciò che si nota, infine, è che mantenere una base di conoscenze vasta e in continuo aggiornamento con i “pattern” degli attacchi è una impresa improba. Alcuni sistemi di intrusion detection combinano entrambi questi aspetti, in quanto ciascuno di essi possiede delle caratteristiche molto desiderabili, e sono a tutti gli effetti complementari. Vi è tuttavia un problema di metriche decisionali, e di aumento incontrollato dei falsi positivi, che ha scoraggiato fino ad ora lo sviluppo di simili soluzioni. Nella stragrande maggioranza dei casi i sistemi di Intrusion Detection commerciali sono comunque “misuse based”. 2.2.2 Host Based, Network Based Un’altra classificazione molto importante distingue tra sistemi host-based e network-based: 30 Capitolo 2 – IDS : Concetto e Stato dell’Arte I sistemi “host-based” controllano una singola macchina e a volte una singola applicazione, e dipendono dal sistema operativo (a cui sono spesso collegati strettamente, nello specifico molti moduli di intrusion detection host based sul sistema Linux vengono realizzati come moduli del kernel) per tracciare chiamate di sistema, utilizzo delle risorse, comandi eseguiti e i passaggi da un livello di privilegi a un altro. Altre tipiche fonti di dati per un sistema host based sono i log di sistema; I sistemi “network-based”, viceversa, sono collegati in posizioni opportune ad una rete di computer, e cercano di controllare tutto il traffico che la attraversa (mediante degli sniffer di rete), cercando nel flusso di pacchetti le indicazioni di possibili attacchi. Come sempre, entrambi gli approcci presentano vantaggi e svantaggi. Uno dei principali vantaggi di un IDS network-based è la possibilità di operare una “passive analysis”, in cui il sistema raccoglie i pacchetti di rete senza che la sua presenza sia rilevabile: operativamente questo si ottiene dotando la macchina che esegue l'IDS di una scheda di rete posta in modalità promiscua. In questo modo diventa molto difficile per un intruso rilevare la presenza dello sniffer. Inoltre un IDS di rete può utilizzare un numero di sonde relativamente piccolo per controllare anche reti di grandi dimensioni. Questo tipo di intrusion detection deve, però, processare continuamente una grossa quantità di dati e quindi và inevitabilmente incontro a problemi di prestazioni, soprattutto in reti ad alta velocità. Per quanto riguarda i sistemi “host-based” possiamo dire che studi e ricerche nel campo degli IDS si sono finora focalizzati quasi esclusivamente su questa classe di intrusion detection, come conseguenza, questi hanno raggiunto una relativa maturazione e stabilità. Il principale svantaggio però è che dipendono dal sistema operativo dell’host che stanno monitorando, quindi sono sottoposti ad enormi rischi legati ad attacchi finalizzati alla disinformazione. Infatti un aggressore subito dopo aver violato il sistema tenterà di installare un rootkit oppure un modulo maligno del kernel in questo modo le informazioni a cui può accedere l’intrusion detection host based saranno sicuramente compromesse. L’IDS segnalerà il tentativo di intrusione all’amministratore, ma egli 31 Capitolo 2 – IDS : Concetto e Stato dell’Arte vedendo che tutto procede normalmente (grazie al lavoro del software di disinformazione installato dall’aggressore) penserà sicuramente ad un falso allarme. 2.2.3 On-Line (In-Line, Real-Time), Off-Line Su questi termini ci soffermiamo perchè rappresentano spesso fonte di confusione. Vengono definiti “on-line” gli IDS che analizzano i dati mentre le azioni avvengono, mentre i sistemi di tipo “off-line” o batch analizzano i dati a posteriori. Ultimamente si tende a considerare questi ultimi più come dei tool di “computer forensics” (ovvero, di analisi a posteriori delle intrusioni, con scopi generalmente di polizia giudiziaria) che di “intrusion detection” in senso stretto, ma nella definizione che abbiamo dato di “Intrusion Detection System” come insieme di accorgimenti mirati a rilevare, identificare e contenere le intrusioni, è indubbio che sistemi di questo tipo siano da considerarsi totalmente inclusi. All’interno dei sistemi on-line spesso si usa la definizione “real-time” per indicare che l’IDS è progettato per gestire un determinato flusso di dati senza perdere pacchetti e senza rimanere con un “buffer” in attesa di essere verificato. I sistemi “in-line” invece sono una relativa novità, e spesso fanno parte della categoria dei cosiddetti “intrusion prevention systems”. In sostanza, se un IDS è in-line esso è posizionato come un firewall o uno switch sulla “traiettoria” dei pacchetti, e la sua funzione più ovvia è quella di poter fungere anche da filtro oltre che da analizzatore, mentre invece gli IDS on-line di tipo tradizionale sono solitamente posizionati su una porta di rete che presenta una “copia” di tutto il traffico. 2.2.4 Sistemi Centralizzati e Distribuiti Un IDS può essere costituito da più processi eseguiti su varie macchine, denominati sensori. Un esempio notevole in campo accademico, forse uno dei primi e più documentati, è il DIDS,(Distributed Intrusion Detection System, sistema di rilevamento delle intrusioni distribuito). A volte, se tali macchine sono dedicate esclusivamente al software di intrusion detection, esse vengono chiamate sensori o 32 Capitolo 2 – IDS : Concetto e Stato dell’Arte sonde, e vengono spesso realizzate sotto forma di soluzioni integrate composte da hardware e software proprietario, ottimizzato e preinstallato. Un IDS così strutturato può utilizzare un modello distribuito o centralizzato per l’analisi dei dati e per la loro collezione, a seconda che i vari sensori procedano per conto proprio o facciano riferimento a un server centrale. Le due cose possono essere miscelate: le sonde potrebbero analizzare ciascuna i propri dati, per poi trasmettere i risultati ad un server centrale per ulteriori rielaborazioni. 2.3 Caratteristiche Desiderabili per un IDS 2.3.1 Reattività Una delle caratteristiche desiderate per un IDS è quella di poter in qualche modo reagire agli attacchi, ovvero cercare di bloccarli automaticamente. Questo concetto, spesso pomposamente denominato “Intrusion Prevention System”, in realtà pone una serie di problemi non indifferenti. Il primo problema è di tipo architetturale. Un sistema on-line, se non è real-time, non ha nessuna reale possibilità di reagire ad una intrusione prima che si verifichino dei danni. Se anche il sistema fosse real-time, l’unico modo efficace di consentirgli di operare preventivamente sarebbe quello di porlo in posizione “in-line”, come filtro pregresso di tutto il traffico. Ciò è fattibile, tuttavia considerazioni di performance possono rendere questa soluzione irragionevole su linee ad alta capacità. Una soluzione alternativa è un IDS on-line, real-time di tipo tradizionale, in qualche modo accoppiato con un firewall, in grado quindi di interrompere la comunicazione tra l’host vittima e l’attaccante. Questo sistema ha un difetto terribile: innanzitutto se del traffico legittimo fa scattare per qualsiasi motivo una firma d’attacco un utente si troverà privato di un servizio a cui ha diritto. Ma il problema diventa di gran lunga peggiore se immaginiamo un attaccante che riesce a “forgiare” finti attacchi provenienti da un indirizzo a suo piacere: potrebbe forzare il nostro stesso IDS a chiudere fuori dal firewall indirizzi arbitrari. Ultimo problema (in ordine di esposizione, ma non certo in ordine di importanza), una certe tipologia di attacchi possono avvenire dall’interno della rete e non 33 Capitolo 2 – IDS : Concetto e Stato dell’Arte dall’esterno. Spesso i firewall (o gli IDS in-line) sono alla frontiera della rete, e di questo genere di attacchi non si accorgerebbero mai. Viceversa un IDS piazzato sulla rete interna potrebbe individuarli e bloccarli. 2.3.2 Sicurezza Intrinseca: Survivability, Robustezza Un IDS può essere progettato per la “survivability”: dal momento che (esattamente come una scatola nera) le sue registrazioni possono essere l’unico mezzo di stabilire cos’è accaduto su una rete, diventa importante garantire che il sistema stesso sia quanto meno vulnerabile possibile. La sovversione di un sistema di difesa è infatti il più pericoloso risultato di un attacco telematico, in quanto lascia agli attaccati un falso senso di sicurezza. Deve inoltre essere in qualche modo garantita la sicurezza della comunicazione tra le varie componenti di un IDS distribuito, pertanto opportuni meccanismi di autenticazione, crittografia, e verifica di integrità devono essere implementati per evitare ogni sorte di attacchi di spoofing o di tipo man-in-the-middle. È inoltre opportuno che, per ogni tipo di attacco ed aggressione (distruzione di una sonda dell’IDS, flood di pacchetti per disturbare l’analizzatore di rete, ecc.) il sistema presenti robustezza, ovvero non si arresti completamente ma esibisca una graduale riduzione delle performance man mano che l’attacco procede e si aggrava. 2.3.3 Interazione con il Personale e Flessibilità All’interno di un NOC (Network Operations Center) o di un SOC (Security Operations Center) spesso vi sono pochi tecnici (specie durante i turni notturni) magari non eccessivamente esperti, che devono sovrintendere al controllo di numerose reti remote, che conoscono solo a grandi linee. Oltre alle ovvie problematiche connesse ai falsi positivi, i sistemi di IDS devono essere progettati per comunicare quante più informazioni possibile al personale che deve controllarli, nel modo più chiaro possibile, e possibilmente fornendo anche una guida alla soluzione di un determinato problema. In aggiunta, deve essere possibile una totale flessibilità e adattabilità del sistema a circostanze molto specifiche di ogni singola rete. Questo può essere garantito in modo 34 Capitolo 2 – IDS : Concetto e Stato dell’Arte molto automatico da IDS in modalità "anomaly detection", ma deve essere opportunamente studiato per sistemi basati su firme. 2.3.4 Adattabilità ad Attacchi Nuovi I possibili tipi di attacco contro una rete informatica si evolvono in continuazione. Si possono distinguere una microevoluzione, processo con cui vengono ideati nuovi attacchi all'interno di categorie di attacchi già esistenti, e una macroevoluzione più lenta mediante la quale vengono scoperti dei metodi di attacco completamente nuovi. È abbastanza evidente che la macro evoluzione può creare forme d'attacco che sfruttino gli “angoli morti” del progetto di un IDS, ovvero tecniche di aggressione i cui unici sintomi ricadano in quelle variabili che sono state scartate come indicatori in fase di progettazione e quindi per cui il sistema non è architetturalmente predisposto. Per fare un esempio, se il sistema controlla il traffico di rete al livello 3 ISO/OSI, e viene sviluppata una metodologia di attacco che coinvolge manipolazioni al livello 2, è molto probabile che un semplice aggiornamento della base di conoscenza non sia sufficiente. Si rende necessaria, in questo caso, una revisione del motore di analisi in sé. Viceversa, in linea di principio, se una forma di attacco è già nota, le sue successive microevoluzioni dovrebbero essere relativamente semplici da inserire nella base di conoscenza o nel modello dell'IDS. Il problema colpisce soprattutto i motori di misuse detection, che in effetti operano su una base di firme che tende a diventare sempre meno adeguata con il tempo (esattamente come accade per il software antivirus, che è sicuramente un esempio più familiare). 2.3.5 Scalabilità e Concorrenza Un buon sistema IDS deve essere in grado di scalare seguendo la crescita della rete. Per questo le soluzioni network-based hanno spesso sofferto rispetto a soluzioni host-based, in quanto analizzare gli eventi in modo distribuito è sicuramente più semplice che cercare di capire qualcosa analizzando tutto il traffico della rete aggregato. 35 Capitolo 2 – IDS : Concetto e Stato dell’Arte Tipicamente, quando un IDS di rete supera la propria capacità di analizzare i pacchetti inizia a lavorare in una modalità “a campione”, scartando parte del buffer con una tecnica simile a quella utilizzata dai router. Il problema è che, nel caso dei router, i meccanismi di ritrasmissione del TCP evitano la perdita di pacchetti, mentre nel caso dell'IDS, a meno di fortunate coincidenze, ciò che è perso è perso, e potrebbe trattarsi proprio dei pacchetti interessanti. Se tale coincidenza pare troppo azzardata e teorica, proviamo a guardare la cosa dal punto di vista dell'attaccante: generare una marea di traffico di nessun interesse è relativamente semplice; se ciò significa mettere in crisi l'IDS ancora prima che l'attacco sia cominciato, si può essere sicuri che qualsiasi attaccante con un minimo di esperienza adotterà questa tecnica, nella speranza che ad essere scartati siano proprio i pacchetti con le firme d'attacco. In aggiunta ai problemi di scalabilità, il sistema deve essere in grado di gestire attacchi multipli concorrenti. Molto raramente un intruso proverà un singolo attacco contro le nostre macchine: spesso utilizzerà uno strumento che prova attacchi multipli, e vogliamo essere in grado di seguirli tutti. Non solo: seguendo le stesse considerazioni fatte poco fa, se l'attaccante sapesse che il nostro IDS è in grado di seguire soltanto un attacco alla volta farebbe in modo di generare un finto attacco proveniente da chissà dove per “distrarre” il sistema. 2.4 Problemi Tipici di un IDS 2.4.1 Individuazione di Attacchi Nuovi, Modificati o Codificati I sistemi informatici possono essere definiti, con il massimo grado di astrazione, macchine dagli stati finiti: significa letteralmente che esiste un numero specifico e predefinito di stati che un sistema può raggiungere. Questa limitazione ostacola l’IDS, poiché questo può armarsi adeguatamente solo in un singolo momento; in altre parole, è armato quanto lo sono le dimensioni del proprio database. In primo luogo, come si possono conoscere in anticipo le caratteristiche che costituiscono un tentativo di intrusione che non si è ancora verificato? È ovviamente impossibile avvertire di un attacco che non è mai stato visto. 36 Capitolo 2 – IDS : Concetto e Stato dell’Arte In secondo luogo, si può solo intuire che quanto accaduto in passato possa ripresentarsi in futuro: è possibile creare una firma per un attacco subito dopo tale evento, ma non vi è la certezza che quello stesso attacco si verifichi nuovamente con le stesse modalità viste in precedenza. Una leggere modifica apportata ad un attacco noto, infatti, potrebbe ostacolare la capacità di rilevamento del sistema. Una terza considerazione è che un IDS può essere incapace di distinguere un nuovo attacco con rumore bianco di fondo di qualunque rete: l’impiego della rete potrebbe essere troppo intenso oppure un numero eccessivo di falsi positivi potrebbe disabilitare le regole. Un problema che rientra in questo ambito è rappresentato dalle codifiche alternative per i dati. Il testo standard inviato fra un client e un server Web può infatti essere codificato per essere interpretato come Unicode, che può rappresentare tutti i simboli conosciuto Questi valori, però, devono essere successivamente esaminati e convertiti in ASCII per l’elaborazione standard. Per fortuna una gran parte dei sistemi implementa una pratica detta normalizzazione del protocollo, che prende una stringa di input ed assorbe tutte le codifiche, gli spazi bianchi e qualsiasi delimitatore di protocollo conosciuto nel tentativo di produrre la forma più basilare dell’input. Purtroppo, tutte le normalizzazioni immaginabili non possono risolvere il problema del monitoraggio dei pacchetti software closet source; senza informazioni dettagliate sul funzionamento di un sistema, può non esservi alcuna spiegazione per le funzioni non standard e non documentate. IIS (Internet Information Server) di Microsoft, ad esempio, aveva la particolare funzione di consentire una codifica alternativa (%u####) alla normale codifica Unicode (%####). Il worm Code Red si è servito di questa tecnica, precedentemente sconosciuta, allo scopo di aggirare molte firme dell’IDS preparate per corrispondere specificamente alla vulnerabilità da lui sfruttata. Un altro metodo utilizzato per “nascondere” una stringa di attacco ad un IDS è il polimorfismo. L’obiettivo del codice polimorfo è conservare le stesse funzionalità assumendo però una forma strutturalmente diversa da quella originale. Il polimorfismo si ottiene prendendo il codice di hacking e codificandolo con una forma di algoritmo reversibile. Vengono ad esempio sostituite opportunamente tutte le istruzioni basate sulla sequenza di NOP (No Operation), in quanto questo codice viene tipicamente usato nei buffer overflow e quindi molti IDS hanno una specifica firma per riconoscerlo. Il 37 Capitolo 2 – IDS : Concetto e Stato dell’Arte carico di lavoro così codificato è poi inviato sulla rete con una piccola funzione di decodifica prefissata. Quando il codice di attacco agisce sul target, il decodificatore “apre” il carico di lavoro originario e lo esegue; in questo modo la funzionalità originaria è conservata. La base per generare il codice polimorfo è che vi è sempre più di un modo per raggiungere un determinato scopo: se, per sfruttare una vulnerabilità si dovesse calcolare il valore 4, si potrebbe conteggiare 2+2, 3+1, 6-2 e così via. Esiste un numero letteralmente infinito di modi per calcolare un valore ma per un IDS che esamina il traffico di rete, non vi è modo di identificare un 2+2 come equivalente di 3+1; esso riceve solo la istruzioni di basso livello da valutare con una forma conosciuta, quindi non le interpreta come fa invece l’host target. 2.4.2 Falsi Positivi e Falsi Negativi Gli errori di un IDS vengono tipicamente suddivisi in due categorie. Si parla di “falso positivo” quando l’IDS segnala come anomala un’azione che è legittima o innocua. Si parla di “falso negativo” quando viceversa un IDS non suona l’allarme in presenza di una azione evidentemente maliziosa. I “falsi positivi” possono suonare innocui: in fondo, meglio essere avvertiti una volta di troppo che una volta di meno. La famosa favola del ragazzino che gridava “Al lupo!” ci ricorda che questo non è sempre vero: un IDS che segnala in continuazione come “pericolose” azioni perfettamente normali dopo un po’ verrà ignorato. Eliminare i falsi positivi è dunque uno dei focus della ricerca sugli IDS, in particolare per sistemi di anomaly detection. Non và comunque dimenticato che anche se a prima vista questo problema sembra affliggere solo i sistemi basati sul riconoscimento delle anomalie, potrebbe presentarsi anche in sistemi misuse detection. Se infatti nella base di conoscenza fosse inserita una firma di attacco generica con lo scopo di rilevare diverse varianti di un particolare attacco, questa firma molto probabilmente genererà una certa percentuale di falsi positivi I falsi negativi sono invece assai più pericolosi: si tratta del mancato riconoscimento di una forma d'attacco. In generale, in un sistema basato sulla misuse detection, un falso negativo è associato con la mancanza di una firma per l’attacco effettuato (e ricadiamo quindi nel problema dell'individuazione di nuovi attacchi 38 Capitolo 2 – IDS : Concetto e Stato dell’Arte descritto nel paragrafo precedente). In un sistema basato sull'individuazione di anomalie invece è più probabile che si abbia un falso negativo magari anche su un attacco che in precedenza era stato riconosciuto, proprio a causa della natura statistica di questo tipo di sistemi. 2.4.3 Inserimento ed Elusione Per abbattere lo sforzo dell’analisi dei dati un IDS di rete lavora su vari livelli. I livelli più bassi, cioè quelli di trasporto e di rete, sono quelli in cui l’aggressore ha forti opportunità di confondere, ingannare o eliminare il sensore dell’intrusion detection. Tutte le facoltà di rilevamento dell’IDS si affidano alla capacità di interpretare correttamente il traffico di rete proprio come farebbe l’host target, per questo motivo ingannare il livello di rete significa ingannare di conseguenza l’intero sistema di intrusion detection. L’aggressore potrebbe frammentare il proprio traffico in modo che sia assemblato diversamente dall’IDS e dall’host target: di conseguenza egli può portare a termine l’attacco senza che l’intrusion detection riesce ad interpretare l’evento in modo adeguato. I principali metodi per ottenere questo scopo sono l’inserimento e l’elusione. L’inserimento si affida alle situazioni in cui l’IDS accetta alcune informazioni con la supposizione che farà così anche l’host target; se, tuttavia, l’IDS non interpreta il flusso di rete nello stesso modo in cui lo interpreta il target, esso ha una diversa comprensione dell’aspetto dello scambio e sarà perciò inefficace nell’avvertire l’attacco; la firma dell’IDS non corrisponderà in tal caso ai dati acquisiti dalla rete. Supponiamo che si voglia realizzare una firma per cercare la stringa “CODE RED” in una qualsiasi richiesta Http. L’IDS vedrebbe “CODE NOT RED” al posto di “CODE RED” quindi esso non troverà alcuna corrispondenza con le proprie firme, mentre l’host target riceverebbe “CODE RED”, avendo perso il “NOT” nel tragitto poiché il pacchetto che lo conteneva non corrispondeva alla comprensione che il target aveva degli standard. L’elusione è il contrario dell’inserimento: essa si basa sulla situazione per cui un sistema target accetta i dati che l’intrusion detection ignora. Un attacco potrebbe quindi apparire all’IDS come “CODE”, mentre il target riceve “CODE RED”. Questo tipo di aggressioni può essere compiuto in svariati modi. In qualsiasi momento, la 39 Capitolo 2 – IDS : Concetto e Stato dell’Arte comunicazione TCP/IP può essere terminata da una delle due parti; se l’IDS interpreta in modo scorretto un FIN o un RST che provengono da un aggressore e che l’host target non ha accettato (per esempio se l’IDS non ha monitorato correttamente i numeri di sequenza) l’aggressore è libero di comunicare tranquillamente. Inserimento ed elusione si basano quindi su una visione limitata che un intrusion detection ha dell’effettivo stato dello stack TCP/IP interno di ogni host. Nell’intestazione IP vi sono numerosi campi in cui attraverso una modifica è possibile creare le condizione per sfruttare alcune vulnerabilità di inserimento o di elusione. Se si modificano ad esempio le dimensioni del pacchetto, L’IDS può avere difficoltà a capire dove iniziano i livelli superiori del pacchetto stesso (elusione). Un altro campo a cui occorre prestare attenzione è il Checksum IP: se si riesce ad inserire dei pacchetti con checksum non valido nel flusso dati, l’IDS può accettarli come validi se non calcola manualmente il checksum di ciascuno di essi (il progettista può aver ritenuto eccessivo il carico di lavoro dell’elaborazione), mentre saranno scartati dal sistema finale (inserimento). 2.4.4 Elusione Basata Sul TTL (Time-To-Live) In una tipica configurazione di rete l’IDS viene quasi sempre posizionato sul perimetro della rete; in questo modo l’intrusion detection può monitorare tutte le comunicazioni su Internet. Purtroppo, se un aggressore è in grado di eseguire traceroute o di ridurre metodicamente il TTL del traffico verso il target e identificare l’esatta quantità di salti necessari per raggiungere l’host, egli può inviare alcuni pacchetti con valore TTL insufficiente. Tutto ciò ha l’effetto di garantire che con un basso TTL non raggiungeranno mai il sistema target, ma verranno considerati dall’IDS come parte del flusso dati (inserimento). Fortunatamente oggigiorno è molto difficile riuscire ad eseguire traceroute, ping o applicativi simili verso host interni di una rete perché questo tipo di pacchetti vengono bloccati alla frontiera dal firewall ma comunque è bene tener presente l’esistenza di questo scenario di elusione. 40 Capitolo 2 – IDS : Concetto e Stato dell’Arte 2.4.5 La Frammentazione IP (Internet Protocol) Il riassemblamento della frammentazione IP è la base di numerosi attacchi. Se l’IDS non riassembla i frammenti IP nello stesso modo dell’host target, non può far corrispondere il pacchetto nel proprio database delle firme. Nelle normali operazioni di rete, i frammenti IP arrivano tipicamente nell’ordine in cui vengono inviati, ma non è sempre così. L’assemblamento può complicarsi anche a causa della necessità di tenerli in memoria finchè viene ricevuto l’ultimo frammento, allo scopo di completare l’assemblamento dell’intero pacchetto. Sorge quindi anche un problema di DoS: è possibile trasmettere molti frammenti per occupare le strutture o i buffer interni, in modo che l’IDS possa iniziare a rilasciare pacchetti o perfino subire un crash. È possibile sviluppare ulteriormente questo problema quando vi si aggiunge la complessità del garbage collection interno. Cioè quel sistema che ad intervalli regolari si occupa di rimuovere dalla memoria dati non più utilizzati da nessuno o rimasti orfani del processo che li ha generati perché ormai terminato. Un IDS che ascolta sul filo può dover rendere conto delle sessioni di migliaia di host, mentre ogni host deve preoccuparsi solo del proprio traffico. Un sistema host può consentire ai frammenti di arrivare nel flusso con tempi eccessivamente lunghi, mentre un IDS potrebbe avere timeout più aggressivi, imposti al garbage collection, allo scopo di supportare la gestione di un sistema più esteso. Se l’aggressore invia un attacco che consiste di tre frammenti e trattiene l’ultimo frammento fino allo scadere di un lasso di tempo significativo, e se l’intrusion detection di rete non ha processi identici per la gestione dei frammenti interni (e pare che questo sia quasi impossibile da raggiungere), esso non dispone di un’immagine coerente del pacchetto IP e, di conseguenza, non può eseguire i processi di corrispondenza della firma. 2.4.6 Problemi Legati al Protocollo TCP Finora abbiamo visto i problemi legati al protocollo IP, ma anche l’header TCP contiene una serie di campi aperti allo sfruttamento; di conseguenza, se l’IDS non lo esamina completamente, vi sono opportunità di elusione e di inserimento. Il campo 41 Capitolo 2 – IDS : Concetto e Stato dell’Arte CODE definisce il tipo di messaggio inviato per la connessione; se qualcuno inoltrasse una combinazione non valida o un pacchetto che non incontra il flag ACK, l’host target potrebbe rifiutare il pacchetto mentre l’IDS invece lo accetterebbe (possibile inserimento). Anche i segmenti contrassegnati come SYN possono includere dati e, a causa dell’impiego relativamente raro di questa opzione, un IDS potrebbe ignorare il contenuto di questi tipi (elusione). Infine anche il campo Checksum presenta le stesse problematiche viste in precedenza per il protocollo IP. Il riassemblamento del flusso TCP inoltre presenta numerosi problemi, simili a quelli della frammentazione IP. I segmenti TCP possono arrivare in modo irregolare, sovrapporsi o essere ridondanti, quindi l’IDS deve prestare un’attenzione particolare nel monitorare i numeri di sequenza di ciascuna connessione, allo scopo di garantire che non vengano desincronizzati. Nel caso di un segmento TCP ridondante ad esempio, alcuni host potrebbero conservare il vecchio frame, mentre altri potrebbero rifiutarlo in favore dell’ultimo ricevuto. Un intrusion detection inoltre deve anche conoscere bene le dimensioni delle finestre annunciate per ciascuna connessione; questo valore viene spesso regolato durante una sessione per garantire il massimo throughput. Se l’IDS perde di vista le dimensioni della finestra TCP, può diventare vulnerabile ad un attacco di inserimento in cui l’autore invia dati superando le dimensioni della finestra; in questo caso l’host di destinazione rilascia i pacchetti che vengono ricevuti al di fuori delle proprie dimensioni annunciate. 2.5 Un’architettura Rilevante: SNORT Snort è un IDS network-based, basato sulla misuse detection. È un progetto sviluppato sotto GPL (GNU public license), distribuito gratuitamente su Internet in formato open source e aperto ai contributi della comunità, l’ideale come riferimento per un lavoro scientifico. Inoltre, Snort è uno dei progetti open source più famosi del mondo, e uno dei pochissimi esempi di IDS non commerciali che godano di un supporto e di una base installata tali da renderlo un “concorrente” di molti sistemi commerciali. È un sistema multipiattaforma che utilizza le librerie di cattura pacchetti libpcap (le librerie per la cattura di pacchetti di rete al livello più basso della struttura ISO/OSI 42 Capitolo 2 – IDS : Concetto e Stato dell’Arte quindi bypassando il sistema operativo). L’architettura di Snort comprende tre sottosistemi primari: un packet sniffer/decoder altamente performante; un motore a regole basato sul pattern matching; e un sottosistema per il logging, la creazione di report, e l’invio di avvisi all’amministratore di rete. Concentriamoci sul componente di analisi, Snort implementa un linguaggio di descrizione utilizzato per costruire qualsiasi regola. Il linguaggio con cui vengono espresse le regole di Snort è molto semplice ed efficace. Ecco degli esempi di regole: 1. log tcp any any -> $HOME_NET 79 2. alert tcp $EXTERNAL_NET any -> $HOME_NET 8080 (msg: "SCAN Proxy attempt";) 3. alert ip $EXTERNAL_NET any -> $HOME_NET 0:1024 (msg: "SHELLCODE linux shellcode"; content: "|90 90 90 e8 c0 ff ff ff|/bin/sh";) 4. alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg: "ICMP taceroute"; ipopts: rr;) 5. alert tcp $EXTERNAL_NET any -> $HTTP_SERVER 80 (msg: "WEB-ATTACK chgrp command attempt"; flags:A+; content: "/usr/bin/chgrp" nocase;) Le variabili $EXTERNAL_NET, $HOME_NET e $HTTP_SERVER sono solitamente definite nello stile 10.10.10.0/24. In questo particolare esempio stiamo specificando un intervallo della classe C 10.10.10.*. La parola chiave msg definisce il messaggio che sarà inviato all’amministratore se la regola corrisponde; flags definisce quali flag TCP sono impostati; ipopts impone le opzioni di un pacchetto IP mentre content, infine, è utilizzato per specificare una serie unica di dati che appare nel contenuto effettivo del pacchetto. Nel campo del contenuto, tutto ciò che si trova tra le barre verticali è in formato esadecimale e tutto il resto è in ASCII. La prima regola scatta quando viene rilevato del traffico TCP, da qualsiasi host, qualsiasi porta sorgente (tcp any any), verso un host dell’intervallo $HOME_NET porta 79 e richiede a Snort di effettuare il logging del pacchetto. La seconda regola attende i tentativi dall’esterno ad un host interno sulla porta TCP 8080 che è spesso utilizzata per i proxy Web. La terza regola cerca una sequenza d’uso comune del codice della shell all’interno di qualsiasi pacchetto IP diretto ad una porta compresa nell’intervallo 0:1024. 43 Capitolo 2 – IDS : Concetto e Stato dell’Arte La quarta attende i pacchetti IP su cui è attivata l’opzione Record Route (rr), mentre l’ultima regola cerca la stringa /usr/bin/chgrp diretta alla porta 80 Http. Il database contenente le regole di Snort è continuamente aggiornato sia per includere firme di nuovi attacchi sia per eliminare delle “cattive” firme che l’utilizzo quotidiano ha dimostrato essere solo autori di falsi positivi. Inoltre è possibile personalizzare il database aggiungendo o rimuovendo specifiche firme, ovviamente tutto a proprio rischi e pericolo. Snort conserva le sue regole di detection in una lista linkata bidimensionale per applicare un algoritmo di pattern matching estremamente efficiente. Riprendendo il concetto di “catena” utilizzato nel packet filtering del kernel di Linux, i pacchetti vengono fatti “combaciare” dapprima in orizzontale sulla base dell’header, ed in seguito in verticale per le opzioni di payload solo in caso di match degli header, in modo da ottimizzare il più possibile il tempo di analisi. Per quanto riguarda invece sistemi di rilevamento delle intrusioni basati sull’anomaly detection è difficile riportare un esempio significativo perché questo è ancora un campo di ricerca molto attivo dove di continuo vengono proposte nuove idee ed altre vengono scartate. Per tale motivo non esiste ancora un sistema o un progetto che si è particolarmente distinto rispetto a tutti gli altri. 44 CAPITOLO 3 3 LE RETI NEURALI 3.1 Introduzione sulle Reti Neurali Le reti neurali si basano sul modello di rete neurale naturale in cui l’elemento costituente è il neurone biologico. I segnali tra neuroni vengono trasmessi lungo l’assone, che invece riceve gli impulsi attraverso terminali chiamati dendridi. Dall’assone si diramano le sinapsi che si andranno a collegare alle altre cellule. Il segnale trasmesso tra cellule è di tipo digitale, nel senso che grazie ai neurotrasmettitori la cellula può propagare un segnale alto o basso analogamente a quanto succede nei circuiti digitali con la trasmissione di una tensione alta per rappresentare il valore 1 ed invece l’utilizzo di una tensione bassa per indicare il valore 0. Il corpo della cellula è detto invece soma. Vediamo due caratteristiche particolari del modello di rete neurale naturale che si ripercuotono sulle reti neurali artificiali. Il segnale che si propaga dal soma lungo l’assone è uno, infatti ogni neurone ha un unico assone, esso però arriva a più cellule mediante le sinapsi: poiché ogni sinapsi ha un suo potenziale sinaptico il segnale che arriverà ad ogni neurone non sarà lo stesso. Questo si tradurrà nelle reti neurali artificiali nel peso o coefficienti dei collegamenti tra un’unità neurale e l’altra; Un altro concetto importante è quello della soglia: se i segnali in ingresso ad una cellula supera una certa soglia, allora la cellula genera un potenziale di attivazione che comincia a propagarsi lungo il proprio assone. Questo concetto invece si ritroverà nelle reti neurali artificiali con il nome di funzione di attivazione. 45 Capitolo 3 – Le Reti Neurali Le reti neurali artificiali sono costituite quindi da un elevato numero di unità elementari, chiamate neuroni o nodi, organizzate di solito in uno o più strati. Il primo strato, denominato anche strato di ingresso e l’ultimo strato, denominato anche strato uscita, permettono alla rete neurale di interagire con l’esterno. In particolare lo strato di ingresso viene utilizzato per fornire alla rete l’ingresso da elaborare, mentre quello di uscita viene utilizzato dalla rete per comunicare il risultato della propria elaborazione. Vediamo a questo punto, nella figura seguente, lo schema di una singola unità elementare o neurone. Figura 3.1 Schema di un neurone con n Ingressi ed una sola Uscita I neuroni di ciascun strato hanno una struttura simile tra loro, ma si distinguono per “stato di attivazione”, e per un “vettore dei pesi”, che ha la stessa dimensione dell’ingresso, e che caratterizza le connessioni che hanno con gli altri nodi. Le varie unità, sono infatti solitamente interconnesse con le altre; sia con le unità degli strati adiacenti, sia con unità dello stesso strato (connessioni laterali). Tali connessioni possono avere molti significati e possono essere associate ad un coefficiente di connessione o peso (indicati con wi nella figura precedente), che caratterizza l’importanza assunta dai segnali che viaggiano lungo quella particolare linea. Esistono reti prive di Localizzazione Spaziale, nelle quali non si tiene conto né della distanza tra due unità, né della loro posizione. Nelle reti con localizzazione spaziale invece si tiene conto della posizione spaziale occupata da ogni singola unità. Il modo in cui le varie unità sono disposte ed il tipo di interconnessioni presenti 46 Capitolo 3 – Le Reti Neurali caratterizzano la topologia della rete. Una possibile topologia è mostrata nella figura seguente: Figura 3.2 Rappresentazione della topologia di un percettrone multistrato La funzione di attivazione caratterizza il modo in cui viene determinato lo stato di uscita di una particolare linea di uscita di un neurone. Questa funzione viene definita con l’introduzione di altri due importanti concetti : il potenziale di attivazione e la funzione di uscita. Definiamo a questo punto il potenziale di attivazione. Facendo riferimento alla figura 3.1, supponiamo che il particolare neurone di cui vogliamo calcolare il potenziale di attivazione abbia n segnali in ingresso (I1,I2,…,In) e che a ciascuno di essi venga associato un peso rispettivamente (w1,w2,…,wn). Possiamo quindi definire il potenziale di attivazione per tale neurone come: n P (t ) = ∑ wi ⋅ xi (t ) (3.1) i =1 In questa formula i pesi dei coefficienti non sono dipendenti dal tempo, perché stiamo ipotizzando che la rete neurale non si trovi in fase di addestramento (spiegheremo in dettaglio nel seguito questa fase). In tal caso infatti anche i pesi sarebbero dipendenti dal tempo. La funzione di uscita invece stabilisce il modo in cui il segnale trasmesso lungo la linea di uscita dipende dal potenziale assunto dall’unità neurale stessa all’istante precedente ossia: 47 Capitolo 3 – Le Reti Neurali Out (t + ∆t ) = F ( P(t )) (3.2) Esistono diverse possibilità per la funzione F(P(t)) ad esempio: Funzione a soglia: ⎧1 se P(t ) ≥ s F ( P(t )) = ⎨ ⎩0 se P(t ) < s (3.3) L’uscita restituita da questo tipo di funzione è quindi un’uscita digitale (0 o 1). La soglia viene solitamente posta uguale a zero. Funzione lineare: F ( P(t )) = α ⋅ P(t ) (3.4) L’uscita è quindi in questo caso lineare dal potenziale assunto dall’unità neurale stessa all’istante precedente secondo la costante di proporzionalità α. Funzione Sigmoidale: Questo tipo di funzioni sono utilizzate per rendere più soft il gradino visto in precedenza con le funzioni a soglia. Tali funzioni hanno le seguenti proprietà: 1 ; 2 Se P(t ) → ∞ allora Out (t + ∆t ) → 1. Se P(t ) = s allora Out (t + ∆t ) = Segue il grafico di una possibile funzione sigmoidale: Figura 3.3 Andamento di un possibile funzione sigmoidale 48 (3.5) Capitolo 3 – Le Reti Neurali Le reti neurali lavorano a tempo discreto: l’elaborazione procede secondo una sequenza precisa di istanti di lavoro in ognuno dei quali la rete ha un particolare ingresso, stato interno ed uscita. La conoscenza accumulata dal sistema è distribuita e contenuta nella struttura stessa dei coefficienti di connessione, mentre l’informazione che il sistema sta elaborando è contenuta nei potenziali di attivazione delle differenti unità neurali. Si tratta quindi di una rappresentazione della conoscenza con un “approccio subsimbolico” in quanto un’entità non è rappresentata da un preciso modello. Le reti neurali, infine, possono elaborare un grosso quantitativo di informazioni, mantenendo una ridotta complessità ed un relativamente basso costo computazionale. In quanto il numero di unità neurali sono solitamente poche centinaia ed inoltre vista la struttura della rete l’elaborazione viene fatta in modo altamente parallelo contenendo così i tempi di calcolo necessari. 3.2 Apprendimento Tutte le caratteristiche descritte nel paragrafo precedente come: funzione di attivazione, pesi dei collegamenti, architettura della rete e dinamica temporale devono essere impostate correttamente per permettere alla rete neurale di comportarsi in maniera desiderata. La metodologia normalmente utilizzata per definire il valore di questi parametri fa uso di un particolare algoritmo di addestramento che permette, attraverso piccole raffinazioni successive di giungere al valore ottimo di alcuni di questi parametri come ad esempio i coefficienti dei vari collegamenti tra le unità neurali. Altre caratteristiche invece come funzione di attivazione, dinamica temporale e topologia della rete sono stabilite a priori, durante il progetto della rete stessa, tenendo conto delle finalità del sistema, quindi prima della fase di addestramento vera e propria. Una delle maggiori proprietà di una rete neurale consiste quindi proprio nell’apprendimento: cioè la dinamica delle modificazioni del comportamento derivanti dalle esperienze avute in un determinato spazio temporale, il tempo di addestramento. L’obiettivo della fase di addestramento è quello di far avvicinare il più possibile il comportamento della rete a quello desiderato. Possiamo quindi arrestare l’algoritmo di apprendimento quando la differenza che intercorre tra la risposta delle rete e la risposta 49 Capitolo 3 – Le Reti Neurali corretta da noi desiderata, cioè l’errore commesso, scende al sotto di una certa soglia. In caso contrario possiamo procedere con l’addestramento per un numero di passi ben definito e prefissato riponendo in secondo piano l’errore commesso. In quanto a volte potrebbe essere difficile determinare quando un errore è accettabile perché dipende dalla specifica implementazione della rete, ma soprattutto dal particolare contesto in cui il sistema sta operando. La scelta del numero di passi di addestramento porta con sé due problemi. Il primo quello più importante è rappresentato dall’interferenza catastrofica. Il problema consiste nella tendenza della rete a cancellare le informazioni apprese in passato a favore di quelle più recenti. Questo fenomeno avviene sia nel caso di diversi insiemi di addestramento (training set), sia addirittura all’interno dello stesso training set dove gli ultimi pattern appresi vengono privilegiati rispetto ai primi dell’insieme di addestramento. Succede un po’ come quando dobbiamo apprendere qualcosa a memoria: le ultime informazioni sono spesso chiare in mente, mentre le prime sono un ricordo notevolmente più sfocato. Tutto dipende ovviamente dalla quantità di informazioni da apprendere sia per noi che per la rete neurale. Per superare in qualche modo il problema dell’interferenza catastrofica occorre che gli ingressi all’interno del training set siano uniformemente distribuiti rispetto alla loro distribuzione di probabilità. Inoltre se dopo una prima fase di addestramento conclusa, decidiamo di iniziare una seconda fase con un diverso insieme di dati rispetto al precedente occorre inevitabilmente ripresentare alla rete anche il primo set di dati con cui abbiamo eseguito il precedente addestramento, pena l’annullamento delle informazioni già memorizzate dalla rete. Esiste anche un problema in qualche modo opposto l’Overfitting. Un numero troppo elevato di passi di addestramento infatti, potrebbero portare ad una specializzazione della rete sul particolare set di dati utilizzato durante l’addestramento con la conseguente perdita della capacità della rete neurale di generalizzare. Cioè pattern leggermente modificati rispetto a quelli di addestramento potrebbero non essere correttamente riconosciuti. L’apprendimento si suddivide in due macrocategorie: l’apprendimento supervisionato e l’apprendimento non supervisionato. Vediamo a questo punto una descrizione di entrambi. 50 Capitolo 3 – Le Reti Neurali 3.2.1 Apprendimento Supervisionato La caratteristica fondamentale dell’algoritmo di apprendimento supervisionato è che deve essere nota a priori l’uscita corretta che la rete dovrà fornire dato un particolare pattern di ingresso. I coefficienti dei collegamenti vengono inizialmente posti pari ad un piccolo valore casuale; piccolo perché altrimenti la rete potrebbe non riuscire a modificare il valore di tali coefficienti in modo da fornire il comportamento desiderato. Inizialmente la rete, fornirà un’uscita casuale per un qualsiasi ingresso dato. Per ogni pattern di ingresso presentato alla rete, questa produrrà un’uscita basandosi sui valori correnti dei coefficienti di connessione, l’uscita così ottenuta verrà confrontata con l’uscita corretta che deve essere nota. L’errore tra l’uscita fornita e quella corretta viene utilizzato per correggere i pesi dei collegamenti della rete neurale secondo un preciso algoritmo. Il procedimento di addestramento viene ripetuto più volte finché le rete non produce la risposta desiderata o l’errore medio non scende al di sotto di una soglia prefissata. 3.2.2 Apprendimento Non Supervisionato Gli algoritmi di apprendimento non supervisionato, invece sono caratterizzati dal fatto che non hanno a disposizione nessuna informazione circa la risposta della rete neurale ad un particolare ingresso. La valutazione dei coefficienti di connessione in questo caso, dipende dalle caratteristiche statistiche del campione dei pattern a cui la rete è sottoposta in fase di addestramento. Con questo algoritmo quindi le reti neurali devono trovare autonomamente le caratteristiche dei campioni forniti per produrre un’uscita corretta. Un particolare tipo di apprendimento non supervisionato è rappresentato dall’apprendimento competitivo. Questo tipo di apprendimento ha una finalità diversa rispetto agli altri algoritmi di apprendimento visti finora. Cioè l’addestramento tenta di far catturare alla rete neurale le regolarità statistiche della sequenza di pattern a lei 51 Capitolo 3 – Le Reti Neurali presentata durante questa fase, invece di far in modo che fornisca le risposte desiderate dato un particolare ingresso. L’algoritmo competitivo si può riassumere nei seguenti passi: Inizializzazione casuale dei pesi; Determinazione dell’unità vincitrice, cioè dell’unità neurale che si avvicina maggiormente all’ingresso proposto, prendendo in considerazione il vettore dei pesi di ciascuna unità neurale ed il vettore di ingresso; Modifica del vettore dei pesi del vincitore in modo da renderlo il più possibile simile a quello di ingresso. Nel suo funzionamento questo algoritmo tende a spostare il vettore dei pesi delle unità neurali in un punto centrale rispetto al vettore fornito in ingresso. Lo scopo finale è quello adattare la distribuzione spaziale delle attività delle unità di uscita alla distribuzione di probabilità degli ingressi. Una rete addestrata in questo modo classifica ottimamente gli ingressi se, una determinata classe di valori di ingresso attiva il giusto valore dei pesi e quindi la corretta unità neurale. Se forniamo in ingresso, nella fase di test, pattern mai osservati in precedenza, questi verranno classificati nella classe che rappresenta i vettori di ingresso che più “assomigliano” all’ingresso attualmente analizzato. Esistono varie implementazioni pratiche di questo algoritmo ma le più importanti sono: la strategia “Hard Competitive Learning” e la strategia “Soft Competitive Learning”. 52 Capitolo 3 – Le Reti Neurali 3.2.2.1 Hard Competitive Learning Questa strategia di apprendimento nota anche come “winner-take-all” (il vincitore prende tutto) è caratterizzata dal fatto che ogni pattern presentato in ingresso determina una sola unità vincitrice su tutte le altre. Tale unità è l’unica che può fornire un segnale di uscita. Questo tipo di addestramento può portare però come conseguenza negativa alla presenza nella rete neurale alla fine dell’apprendimento di “unità morte”. Le unità morte, a causa di un’inizializzazione sbagliata o inadatta dei pesi non saranno mai vincitrici e quindi non rappresentando nessun pattern di ingresso costituiscono solo uno spreco di risorse. Per evitare il problema occorrerebbe inizializzare i pesi delle unità neurali mediante campioni distinti prelevati dalla distribuzione di probabilità di ingresso ed evitare invece l’inizializzazione casuale che può inoltre condurre a risultati molto differenti tra loro. Un’ulteriore soluzione è rappresentata da un altro tipo di apprendimento basato sulla filosofia “winner-take-most” come ad esempio la strategia “Soft Competitive Learning” che illustreremo nel prossimo paragrafo. 3.2.2.2 Soft Competitive Learning Diversamente dal metodo precedente questa metodologia di addestramento conosciuta come “winner-take-most” (il vincitore prende quasi tutto), non modifica solamente i pesi dell’unità vincitrice ma anche quelli delle unità immediatamente vicine. Rispetto alle unità vicine però, l’unità vincitrice viene adattata maggiormente basandosi, come negli altri casi, sul pattern di ingresso considerato. Le altre unità invece subiranno un adattamento inversamente proporzionale rispetto alla loro distanza dal vincitore. La distanza in questo caso può essere riferita allo stato di attivazione oppure in caso di reti neurali con topologia spaziale ben definita è possibile utilizzare la distanza tra i vari nodi della rete. Ad esempio la strategia “a bolla”, adatta le unità 53 Capitolo 3 – Le Reti Neurali nell’immediato intorno della vincitrice, in accordo con una distribuzione chiamata a “cappello messicano”. Secondo questa particolare curva le unità maggiormente vicine al vincitore subiranno un’adattamento di tipo eccitatorio, e quindi collaboreranno col vincitore, mentre quelle più distanti saranno inibite. Nella figura seguente è riportata la rappresentazione della suddetta curva: Figura 3.4 Rappresentazione tridimensionale della curva a cappello messicano Le reti neurali che utilizzano la strategia di apprendimento “Soft Competitive Learning” possono essere suddivise in due categorie. La prima comprende le reti per cui non è necessario stabilire a priori la dimensione, in quanto riescono a variare la propria dimensione e topologia durante la fase di addestramento. In questa categoria rientrano le reti “Growing Neural Gas” (GNG) introdotte da Fritzke nel 1995. Nella seconda categoria invece rientrano quelle reti per cui è necessario decidere in anticipo la dimensione come succede ad esempio con le reti “Self-Organizing sensory Maps” (SOM) introdotte da Kohonen. 3.2.2.3 Competitive Hebbian Learning Nell’ottica delle reti neurali che hanno la possibilità di modificare la topologia durante la fase di addestramento citiamo un altro apprendimento molto importante il “Competitive Hebbian Learning” (apprendimento hebbiano competitivo). Questo non modifica i valori dei vettori di riferimento di ciascuna unità neurale ma si preoccupa di creare le connessioni tra un nodo e l’altro generando in questo modo la topologia della 54 Capitolo 3 – Le Reti Neurali rete. Vengono modificate, ad ogni pattern di ingresso presentatati alla rete, solo le connessioni tra i due nodi più vicini all’ingresso fornito. Le relazioni di vicinanza sono stabilite utilizzando il concetto di distanza euclidea. L’algoritmo può essere riassunto nei seguenti passi: Ad ogni istante di addestramento, prima viene stabilità l’unità più vicina al segnale di ingresso presentato e poi la seconda unità più vicina allo stesso segnale di ingresso. Le distanze vengono calcolate in base alla distanza euclidea ed inoltre in caso di pareggio l’unità viene scelta casualmente fra quelle possibili, cioè quelle più vicine all’ingresso; Tra le due unità selezionate si crea, a meno che non sia già presente, una connessione non pesata. Questo metodo, come spiegato in precedenza, serve solo ed esclusivamente per generare le connessioni tra le varie unità neurali ma non gestisce i valori dei vettori di riferimento di ciascun nodo. Per tale motivo non può essere utilizzato da solo ma contestualmente ad un algoritmo principale di apprendimento che gestisca i valori dei vettori di riferimento delle unità neurali. 3.3 Poliedri di Voronoi e Triangolazione di Delaunay Una caratteristica molto importante delle reti che modificano la propria topologia durante la fase di addestramento è la capacità di approssimare la distribuzione di un qualsiasi ingresso. Prima di continuare però accorre introdurre due importanti concetti preliminari, come il “diagramma di Voronoi” e la “triangolazione di Delaunay”. Il diagramma di Voronoi VS di un insieme S = {w 1,...,w N } di punti w i ∈ ℜ D , è dato da N poliedri D-dimensionali, i poliedri di Voronoi Vi . Il poliedro di Voronoi Vi di un punto w i ∈ S , è dato da un insieme di punti v ∈ ℜ D che sono più vicini a w i di ogni altro punto w j ∈ S , con i≠j, ossia: { Vi = v ∈ ℜ D : v − wi ≤ v − w j j = 1,K ,N 55 } i=1,…,N (3.6) Capitolo 3 – Le Reti Neurali D I poliedri di Voronoi forniscono una divisione completa dello spazio ℜ , poiché N ℜ D = Ii =1 Vi . La figura 3.5a, mostra i possibili poliedri di Voronoi, di un insieme di campioni di punti nel piano, che formano il diagramma di Voronoi. Figura 3.5 (a) Diagramma di Voronoi e (b) Triangolazione di Delaunay Come è possibile osservare dalla figura, nel piano il grafo che rappresenta il diagramma di Voronoi ha come vertici punti che sono contemporaneamente elementi di tre distinti poliedri di Voronoi, mentre per quanto concerne le connessioni, queste sono formate da punti che appartengono a due diversi poliedri di Voronoi. La triangolazione di Delaunay DS , invece, su di un piano si ottiene se collegando tutte le coppie w i , w j ∈ S , di poliedri Vi , Vj con cui condividono una connessione. La figura 3.5b rappresenta la triangolazione di Delaunay corrispondente al diagramma di Voronoi in figura 3.5a. I concetti illustrati in questo paragrafo saranno utilizzate nei paragrafi seguenti per descrivere le cosiddette “mappe auto organizzanti”, o “mappe che conservano la topologia”. Queste mappe hanno la capacità di codificare pattern simili in unità adiacenti e viceversa, unità neurali adiacenti sono relative ad ingressi con un certo grado di somiglianza. 56 Capitolo 3 – Le Reti Neurali 3.4 Mappe Auto Organizzanti Una mappa auto organizzante è determinata attraverso una funzione Φs, definita da un insieme M ⊆ ℜ D (insieme dei dati ingresso), e che assume valori nell’insieme G, il quale rappresenta il grafo delle unità neurali i (i=1,…,N). Il mappaggio da M a G si determina a partire da w i ∈ ℜ D , con i=1,…,N, relativo ai vertici i. Un vettore caratteristico v ∈ M è mappato verso il vertice i*(v) , con un vettore w i*(v) più vicino a v e con poliedro di Voronoi, Vi*(v) vicino a v. Il mappaggio Φs è completamente determinato a partire da un insieme S = {w1,...,w N }, e quindi si può scrivere: Φ S : M → G , v ∈ M → i *(v) ∈ G (3.7) dove i*(v) è dato da: w i*(v) − v ≤ w i − v ∀i ∈ G (3.8) Una funzione Φ S da M a G che conserva la relazione di vicinanza deve fare in modo che vettori v con caratteristiche simili, ossia che sono vicini all’interno di M, siano mappati in vettori adiacenti nel grafo delle unità neurali G. Questo richiede che i vettori w i e w j che sono vicini per quanto riguarda l’insieme di caratteristiche corrispondono a vertici i e j che sono adiacenti nel grafo delle unità neurali. La funzione inversa Φ S−1 dal grafo G sull’insieme M è determinata invece dalla seguente relazione: Φ S−1 : G → M , i ∈ G → wi ∈ M (3.9) assumendo che tutti i vettori w i , i=1,…,N si trovano in M. Analogamente a quanto accade con la funzione diretta Φ S , la conservazione della relazione di vicinanza del 57 Capitolo 3 – Le Reti Neurali mappaggio inverso Φ S−1 è soddisfatta se i vettori w i e w j di vertici adiacenti i e j sono vicini sull’insieme M. Analizziamo a questo punto il problema della conservazione della topologia. Un grafo G, forma una mappa che conserva la topologia di M se rappresenta i suoi elementi mantenendo la loro esatta dimensione. La definizione formale è quindi: Un grafo G forma una mappa che conserva la topologia di M, se il mappaggio Φ S da M a G ed il mappaggio inverso Φ S−1 da G a M preservano la vicinanza. Solo in questo caso G costituisce una mappa in cui posizioni adiacenti, nello spazio delle unità neurali, corrispondono a caratteristiche vicine in M e, viceversa posizioni adiacenti in M saranno rappresentate da neuroni vicini. 3.5 Mappe che Preservano la Topologia In genere la triangolazione di Delaunay non definisce una mappa che preserva la topologia di M. Questo risultato viene infatti raggiunto solo se, ogni elemento dell’insieme S = {w1,...,w N }, che contiene i vettori di riferimento di tutte le N unità neurali che appartengono all’insieme G, giace sullo spazio degli ingressi M. Per questo motivo è stato introdotto il concetto di triangolazione indotta di Delaunay, definito attraverso l’adiacenza dei poliedri mascherati di Voronoi. Si definisce poliedro mascherato di Voronoi Vi(M) , la parte di Vi che è anche parte di M, in altre parole Vi(M) = Vi ∩ M . Ogni poliedro di Voronoi mascherato è una parte dell’insieme M, e invece di formare una divisione completa dello spazio ℜ D come i poliedri di Voronoi, essi N formano un partizionamento completo solo se è valida la relazione M = Ii=1 Vi(M) . La triangolazione di Delaunay DS è definita partendo dai poliedri di Voronoi, analogamente la triangolazione di Delaunay indotta DS(M) è definita partendo dai poliedri mascherati di Voronoi. La definizione formale è la seguente: Sia M ⊆ ℜ D un insieme dato e S = {w1,...,w N } un insieme di punti w i ∈ M . La triangolazione di Delaunay indotta D S(M) di S è determinata dal grafo che connette due 58 Capitolo 3 – Le Reti Neurali punti w i e w j se i loro poliedri mascherati di Voronoi Vi(M) e Vj(M) sono adiacenti, ossia se Vi(M) e Vj(M) condividono un elemento v ∈ M o, in maniera equivalente, se è valida la relazione Vi( M ) ∩ Vj( M ) ≠ ∅ . La differenza tra triangolazione di Delaunay DS e la triangolazione indotta di Delaunay DS(M) è rappresentata graficamente nella figura seguente: Figura 3.6 (a) Triangolazione di Delaunay (linea spessa) e (b) Triangolazione di Delaunay indotta (linea Spessa) che si ottiene mascherando la triangolazione di Delaunay Vediamo ora una definizione, che ci servirà subito dopo, e che ci permette di determinare quando la distribuzione dei punti w i è densa su M: Sia S = {w 1,...,w N } un insieme di punti w i che sono distribuiti su un insieme dato M ⊆ ℜ D . La distribuzione dei punti w i ∈ M , i=1,…,N è densa su M se per ogni v ∈ M ( ) il triangolo ∆ v,w i0 ,w i1 , formato dal punto w i0 più vicino a v, il punto w i1 che è il ( ) secondo più vicino a v che giace completamente su M, ossia se ∆ v,w i0 ,w i1 ⊆ M è valida. È possibile dimostrare che se la distribuzione S = {w 1,...,w N } di punti è densa in M (definizione precedente), allora il grafo G formato attraverso la regola di apprendimento hebbiano competitivo (descritta nel paragrafo 2.2.3 di questo capitolo) è la triangolazione indotta di Delaunay DS(M) di S e quindi, forma una mappa che preserva perfettamente la topologia di M. 59 Capitolo 3 – Le Reti Neurali 3.6 La rete Self-Organizing Maps (SOM) La rete Self-Organizing Maps (SOM), è una rete neurale che utilizza un apprendimento non supervisionato ed è costituita da un insieme di nodi prefissati. La SOM infatti non ha la possibilità di variare la propria topologia durante la fase di addestramento, per questo motivo occorre decidere in anticipo le dimensioni delle rete utilizzata. I nodi sono collegati tra loro secondo uno schema deciso dall’implementatore (solitamente rettangolare o esagonale), che hanno una loro posizione in uno “spazio dei nodi” solitamente bidimensionale. Ogni nodo rappresenta una classe, e corrisponde pertanto ad un punto nello spazio dei vettori di ingresso. Vediamo subito l’algoritmo di addestramento di una SOM che avviene attraverso una procedura iterativa. Ad ogni passo di apprendimento si ha in input un certo ingresso v. Gli ingressi sono trattati come variabili random indipendenti di uno spazio di vettori V, e la loro occorrenza è determinata da una funzione densità di probabilità P(v). L’algoritmo è il seguente: 1. Inizializzazione: fissare appropriati valori iniziali dei pesi sinaptici, in base alla distribuzione di probabilità degli ingressi. In assenza di una informazione a priori, i valori sono scelti in maniera random. 2. Scelta dello stimolo: scegliere, secondo una funzione densità di probabilità P(v), un vettore random v che rappresenta un “segnale sensoriale” di ingresso. 3. Risposta: determinare l’unità vincitrice r' , ossia il nodo che meglio approssima lo stimolo in ingresso, tenendo conto della condizione: v − wr' ≤ min v − wr r ∀r ∈ A (3.10) Dove w r = (w r1,...,w rd )T è una notazione compatta per le connessioni sinaptiche del neurone r, analogamente wr' è una notazione compatta per il neurone r ′ . L’insieme A invece rappresenta l’insieme delle unità neurali. 60 Capitolo 3 – Le Reti Neurali 4. Passo di adattamento: adattare i pesi sinaptici di ogni unità r secondo la seguente equazione: old = w old w new r r + εh rr'(v − w r ) (3.11) dove, ε rappresenta il tasso di apprendimento che varia in funzione del tempo: ( ε(t) = ε i (ε f ε i )t t max ). Il valore iniziale di questo parametro, ε(t = 0) = ε i è piuttosto grande e decresce lentamente con il numero di passi di adattamento verso un piccolo valore finale ε(t = t max ) = ε f . Inoltre hrr' è una funzione gaussiana, detta anche funzione di vicinanza: − (r − r' ) . Dove r rappresenta il neurone correntemente preso in 2σ 2 2 hrr' = exp considerazione, mentre r ′ indica l’unità vincitrice. Infine σ rappresenta il raggio in base al quale lo stimolo di ingresso determina le correzioni della mappa. Solitamente si sceglie un valore di σ come funzione del tempo: σ(t) = σ i (σ f σ i )t t max , dove σ(t = 0) = σ i indica il valore iniziale piuttosto grande che decresce lentamente con il numero di passi di adattamento verso un valore finale prossimo a zero σ(t = t max ) = σ f . In tal modo, inizialmente si forma una struttura grossolana della mappa e poi si incorpora la struttura fine all’interno della mappa stessa, ottenendo un aumento graduale delle selettività dei neuroni individuali durante il processo di apprendimento. 5. Incremento: incrementare il parametro tempo t=t+1. Se t < t max ritornare al passo 1. La figura 3.7 mostra graficamente il funzionamento dell’algoritmo di addestramento. Un ingresso v, appartenente ad una distribuzione V, seleziona attraverso la funzione Φ un centro s. Di conseguenza i neuroni vicini, spostano il vettore dei pesi ws verso l’ingresso v. L’ampiezza dello spostamento è inversamente proporzionale alla distanza dell’unità dal centro s. 61 Capitolo 3 – Le Reti Neurali Figura 3.7 Rappresentazione di una distribuzione di ingresso e selezione di un nodo s per un valore v in ingresso La SOM non garantisce la conservazione della tipologia, a causa della sua struttura notevolmente vincolata. Nel caso in cui non esiste una corrispondenza tra la dimensione dello spazio M e la dimensione predeterminata del grafo G oppure se la distribuzione degli stimoli di ingresso è fortemente convessa la SOM non riesce a modellare correttamente la distribuzione di ingresso. È inoltre possibile osservare la presenza di unità morte o connessioni che attraversano zone esterne di M. Per tali ragioni occorre conoscere a priori le caratteristiche della distribuzione di ingresso per stabilire, prima dell’addestramento, in fase di progetto la dimensione della rete ed inoltre per garantire una corretta inizializzazione delle unità neurali. 3.7 La rete Growing Neural Gas (GNG) La rete Growing Neural Gas (GNG) ha la capacità di modificare in fase di addestramento la propria topologia, generando o eliminando all’occorrenza nodi o connessioni. Questo le permette di superare i problemi legati alla scelta preliminare della dimensione della rete neurale in quanto autonomamente riesce ad adattarsi ad una particolare distribuzione di ingresso. La rete è inizialmente formata da poche unità, sarà poi l’algoritmo di addestramento ad inserire nuove unità dove occorre aumentare la densità dei vettori di riferimento. Per ciascun pattern di ingresso presentato alla rete vengono selezionate due 62 Capitolo 3 – Le Reti Neurali unità vincitrici, cioè le due unità che in base ad una distanza euclidea hanno i vettori dei pesi più vicini ai vettori che costituiscono l’ingresso. I due nodi così selezionati vengono uniti da una connessione, nel caso non esista gia, ed inoltre le posizioni di questi nodi e di quelli immediatamente vicini vengono modificati in base ad una particolare regola di adattamento. Ogni connessione è caratterizzata da un valore che ne specifica l’età, in particolare, durante l’addestramento, le nuove connessioni vengono inizializzate a zero mentre le altre non utilizzate vengono aggiornate aumentando l’età di una unità ad ogni pattern presentato in ingresso. Quando l’età di una connessione supera un certo valore di soglia viene rimossa dalla topologia. Come citato in precedenza in addestramento, vengono aggiunte nuove unità neurali. In particolare viene aggiunta una nuova unità dopo un numero prefissato di iterazioni; il nuovo nodo viene creato in una posizione intermedia tra altri due nodi. I due nodi prescelti sono: il primo è quello che ha accumulato il maggior errore ed il secondo viene scelto, sempre in base al maggior errore accumulato, ma tra i vicini del primo nodo scelto. L’algoritmo completo del modello “Growing Neural Gas” è il seguente: 1. Inizializzazione: assegnare a due nodi (N=2) i valori dei pesi iniziali w i ∈ ℜ n , i=1,2, in base alla distribuzione di ingresso se nota, altrimenti in maniera random. 2. Scelta dello stimolo: selezionare un vettore di ingresso v dall’insieme M. 3. Determinazione del vincitore: determinare l’unità più vicina (vincitore) i 0 e la seconda unità vincitrice i1 : v − w i0 < v − w i1 < K < v − w i N −1 (3.12) 4. Crea connessione: se i 0 e i1 sono già connessi tra loro ( C i0i1 = 1 ), settare l’età della connessione ( t i0i1 = 0 ); altrimenti se C i0i1 = 0 creare la connessione ( C i0i1 = 1 ) e settare l’età della connessione a zero ( t i0i1 = 0 ). 63 Capitolo 3 – Le Reti Neurali 5. Aggiornamento dell’errore: aggiungere la distanza al quadrato tra il segnale di ingresso e l’unità più vicina nello spazio di ingresso ad una variabile contatore locale: ∆error(i 0 ) = w i0 − v 2 (3.13) 6. Aggiornamento dei pesi: Aggiornare i pesi dell’unità vincitrice e delle unità connesse all’unità vincitrice, mediante le seguenti formule: ( ) (v − w ) w inew = w iold + ε b v − w iold 0 0 0 (3.14a) w inew = w iold + ε n (3.14b) old i dove ε b e ε n sono parametri di apprendimento costanti con un valore compreso tra [0,1]. Il valore ε n dovrebbe essere scelto di due ordini di grandezza inferiore al valore di ε b . 7. Incremento età: incrementare di 1 l’età di tutte le connessioni che partono dal vincitore i 0 , ponendo t i0 j = t i0 j + 1 per tutti gli indici j con C i0 j = 1 . 8. Rimozione: eliminare tutte le connessioni di i 0 che hanno superato il tempo di vita, ponendo C i0 j = 0 per tutti gli j con C i0 j = 1 e t i0 j > T . Inoltre se dopo questa procedura esistono nodi con nessuna connessione, rimuovere tali nodi che rappresentano le unità morte. 9. Inserimento nodi: se il numero di pattern di ingresso presentati alla rete è un multiplo intero di un parametro λ, inserire una nuova unità mediante la sequenza: a. Determinare il nodo q con il massimo errore accumulato; b. Inserire una nuova unità r, tra q e il suo vicino con l’errore accumulato maggiore, che assume un vettore dei pesi w r ∈ ℜ n : ( ) wr = wq + wf 2 (3.15) 64 Capitolo 3 – Le Reti Neurali Connettere la nuova unità r con le unità q e f , C qr = 1 , C fr = 1 , e rimuovere la connessione esistente tra q e f, C qf = 0 . c. Diminuire le variabili dell’errore di q e f utilizzando un parametro α costante: ∆E q = −αE q ∆E f = −αE f (3.16) d. Ottenere la variabile dell’errore di r dall’errore di q e f: ( ) Er = Eq + Ef 2 (3.17) 10. Diminuire le variabili di errore: ridurre l’errore accumulato da tutte le unità, utilizzando un parametro costante β: ∆E i = −βE i ∀i ∈ ℜ n (3.18) La condizione di arresto dell’algoritmo può essere rappresentata o da una certa dimensione della rete o da una qualche misura di performance. Se tale condizione è verificata interrompere la procedura, altrimenti ritornare al passo 2. Il parametro λ utilizzato nell’algoritmo precedente è molto importante in quanto può influire negativamente o positivamente sul comportamento della rete neurale. Un valore di λ troppo basso, porta ad una rapida diminuzione iniziale del valore medio dell’errore ma in seguito, dovremo compiere un numero maggiore di iterazioni per ottenere un basso valore dell’errore medio rispetto a quanto sarebbe stato necessario utilizzando un λ più elevato. Inoltre un valore di λ basso può aumentare la probabilità di avere “unità morte” che sono uno spreco di risorse in quanto non sono utili per il raggiungimento dell’obiettivo da parte della rete neurale. Inversamente, un valore troppo grande di λ determina una lenta crescita della rete e richiede un elevato numero di iterazioni affinché i nodi siano opportunamente distribuiti. L’algoritmo di apprendimento porta ad un graduale spostamento delle unità neurali verso l’area dello spazio da cui provengono i segnali di ingresso. Inoltre l’inserimento delle connessioni tra il vincitore e la seconda unità vincitrice e la 65 Capitolo 3 – Le Reti Neurali rimozione di unità ormai obsolete sono operazioni finalizzate al continuo inseguimento della triangolazione di Delaunay indotta che si sta lentamente muovendo a causa dell’adattamento dei vettori di riferimento. Tale inseguimento, utilizzando anche l’apprendimento hebbiano competitivo per la generazione delle connessioni non pesate che formano la topologia della rete, hanno come risultato quello di ottenere una mappa che preserva perfettamente la topologia di dell’insieme di ingresso M. 66 Capitolo 4 – Metodologia e Sistema Implementato CAPITOLO 4 4 METODOLOGIA E SISTEMA IMPLEMENTATO In questo capitolo descriveremo le varie fasi del progetto sperimentale sviluppato nel lavoro di tesi, dall’obiettivo del progetto fino al risultato, cioè l’implementazione del sistema. Come in ogni lavoro sperimentale il percorso lavorativo non è stato molto lineare; sin dalle prime fasi,infatti, abbiamo dovuto affrontare diversi problemi di natura teorica. L’unica idea certa era di voler tentare di introdurre dell’intelligenza artificiale in un IDS per verificare in tal modo la fattibilità di questo approccio. 4.1 Obiettivo del Progetto Per prima cosa si pone il problema di inquadrare il sistema IDS che vogliamo realizzare in una delle categorie viste in precedenza nel capitolo riguardante gli Intrusion Detection System. L’idea principale è studiare la realizzabilità di un IDS di tipo network based con un approccio anomaly detection. La scelta di utilizzare un sistema anomaly detection viene motivata da fatto che l’approccio “misuse detection” è stato studiato approfonditamente ed implementato in molti modi con risultati del tutto apprezzabili. Tuttavia, il paradigma su cui si basa sta sempre più mostrando i propri limiti, basti pensare a tutta la serie di problematiche legate alla ricostruzione del traffico di rete ed alla necessità di mantenere una visione il più possibile coerente dello stack TCP/IP degli altri host; altrimenti in caso contrario L’IDS non sarà più in grado di ricostruire fedelmente il pacchetto e quindi rilevare l’intrusione. Inoltre non bisogna dimenticare la necessità dei sistemi “misuse detection” di utilizzare una base di conoscenza a priori (database di firme). Il costante aggiornamento di questa base di conoscenza equivale ad un eterno gioco di scacchi in cui ad ogni 67 Capitolo 4 – Metodologia e Sistema Implementato mossa corrisponde una contromossa uguale e contraria. Questi “mirror game” dove ad ogni mossa si risponde con la mossa speculare sono però destinati alla vittoria inevitabile di chi ha mosso per primo. La caratteristica network based invece, è stata momentaneamente trascurata per probabili problemi computazionali, in quanto l’osservazione del traffico di rete proveniente e diretto dalla totalità degli host in una rete è sicuramente un compito computazionamente molto impegnativo. Quindi ci siamo orientati verso una soluzione ibrida, prendendo cioè caratteristiche desiderabili sia dall’approccio network based che dall’approccio host based. Il nostro sistema dovrà osservare il traffico di un host sulla rete, presumibilmente un server Web, un server di posta elettronica o ancora un server di autenticazione remota. Sotto questo aspetto si avvicina ad un sistema host based ma l’originalità della nostra soluzione ibrida consiste nel fatto che l’IDS non è eseguito fisicamente dall’host monitorato bensì in un computer diverso dedicato a tale scopo. In questo modo possiamo sfruttare i benefici di entrambe le soluzioni. In quanto un sistema così configurato può operare una “passive analysis”, senza quindi essere rilevato, ponendo ad esempio la scheda di rete in modalità promiscua; il software poi si occuperà di prendere in considerazione solo i pacchetti ricevuti ed inviati dall’host a cui siamo interessati. Inoltre caratteristica ancora più rilevante di questa configurazione ibrida, è che in questo modo non si è legati al sistema operativo dell’host monitorato, come invece avviene con i tradizionali sistemi host based. In quanto in tal caso, il sistema di rilevamento delle intrusioni o delle anomalie, è appunto eseguito da una macchina diversa e dedicata esclusivamente a tale scopo. Questo ci permette di essere notevolmente più protetti da attacchi legati alla disinformazione, come ad esempio l’installazione di un rootkit. Il nostro sistema, infatti non deve prendere le informazioni necessarie al proprio funzionamento dal sistema operativo dell’host monitorato, ma osserverà i pacchetti che esso riceve ed invia direttamente dal filo di rete dove non sono possibili manipolazioni. In ultimo occorre precisare che, la scelta di osservare un solo host di rete, non è vincolante in alcun modo. Infatti dopo aver verificato la fattibilità in termini di capacità computazionale è possibile modificare il sistema per permettergli di osservare più di un host, o addirittura tutti gli host della rete, essendo nella stessa posizione fisica di un 68 Capitolo 4 – Metodologia e Sistema Implementato classico Intrusion Detection System network based. Questo gli fornisce volendo la possibilità di controllare l’intero traffico di rete senza dover ristrutturare completamente l’implementazione presentata in questo lavoro. Il sistema proposto ha come obiettivo finale quello di rilevare scostamenti statisticamente significativi nell’andamento, del traffico di rete, dell’host che andremo a monitorare, rispetto al comportamento “classico”. A causa del proprio carattere statistico, ma anche perché almeno in un primo momento trascureremo il contenuto dati dei pacchetti di rete, questo sistema non rileverà mai la presenza di un pacchetto malformato o dal contenuto generato “ad hoc” per sfruttare una vulnerabilità in un applicativo di rete eseguito sul nostro server. Per questo motivo il sistema che proponiamo non vuole in alcun modo sostituire gli IDS attualmente in uso, ma diversamente abbiamo tentato di implementare un sistema che andasse ad affiancare un IDS classico. Una possibile configurazione di esempio, come mostrato in figura 4.1, è quella di affiancare al sistema proposto un tradizionale IDS misuse detection come ad esempio Snort; in tal modo è compito di quest’ultimo ricercare nel traffico di rete pacchetti malformati o altri tentativi di attacco che un sistema basato sull’anomaly detection potrebbe non rilevare. Figura 4.1 Una possibile configurazione di esempio per il sistema proposto Il sistema proposto può essere comunque di supporto ad un amministratore di rete che si occupa di sicurezza in molti altri modi. Analizzeremo, a questo punto, i due principali per cui abbiamo verificato almeno in parte il funzionamento durante il nostro lavoro. Il primo si basa nel rilevare il più velocemente possibile la situazione in cui l’host osservato sta generando del traffico di rete diverso da quello prodotto durante una 69 Capitolo 4 – Metodologia e Sistema Implementato condizione di “normalità”. Infatti tale comportamento, potrebbe essere causato dall’azione di un aggressore che una volta preso il controllo del server, lo sta utilizzando a proprio piacimento. Se per qualche ragione (vedi tutte le problematiche che affliggono un IDS tradizionale nel capitolo 2) l’IDS tradizionale non riesce a rilevare un attacco che ha poi successo, un aggressore con un po’ di esperienza, installerebbe immediatamente un rootkit o un modulo maligno del kernel per nascondere la propria presenza ed in questo modo sfruttare il più a lungo possibile l’host compromesso. In questo scenario il sistema qui proposto potrebbe fornire un valido aiuto rilevando una variazione nel traffico di rete generato dal server osservato; variazione dovuta allo sfruttamento da parte dell’aggressore del computer compromesso. In secondo luogo, il sistema proposto ha mostrato una discreta capacità nel rilevare attacchi di tipo DoS oppure tentavi di “fingerprinting” come ad esempio una scansione delle porte, che un aggressore potrebbe eseguire verso un probabile futuro bersaglio. 4.2 Informazioni Rilevanti all’interno dei Pacchetti di Rete Dopo aver delineato la collocazione del nostro sistema circa le categorie di Intrusion Detection System esistenti abbiamo immediatamente dovuto affrontare il problema circa il tipo di dati da prendere in considerazione data l’infinita quantità di informazioni che continuamente attraversa i collegamenti di una rete di computer. Un pacchetto TCP o UDP consta principalmente di due parti l’header ed il payload. L’header è l’equivalente di quello che è scritto normalmente fuori di una normale lettera inviata per posta, quindi conterrà ad esempio il mittente ed il destinatario, mentre il payload potrebbe essere paragonato al contenuto della lettera. Occorre osservare che il paragone è estremamente riduttivo, ed inoltre l’header ed il payload sia TCP che UDP ma anche ICMP verranno spiegati più in dettaglio in seguito, ma serve comunque in questo momento per dare solo un’idea di cosa stiamo parlando. Una scelta fondamentale e che influenzerà il lavoro in seguito consiste quindi nel decidere se includere o meno il payload nelle informazioni che il nostro sistema dovrà osservare e quindi dalle quali dovrà discriminare il svolgersi o meno di un attacco o di un’anomalia nel traffico di rete. 70 Capitolo 4 – Metodologia e Sistema Implementato Occorre ricordare che uno degli obiettivi con cui questo abbiamo iniziato questo lavoro è introdurre intelligenza artificiale all’interno di un IDS. L’intuizione è che tra tutte le possibilità che ci vengono offerte dallo studio dell’intelligenza artificiale, nel nostro particolare caso, possano rivelarsi particolarmente utili quelle tecniche che permettono una classificazione di un insieme di dati. Questo perché una classificazione permette di evidenziare che un certo insieme di valori di particolari caratteristiche è significativamente diverso da un altro insieme in presenza di condizioni o situazioni distinte. La speranza in questa fase era che queste diverse situazioni potessero concretizzarsi alcune in anomalie nel traffico di rete ed altre invece in condizioni di “normalità”. Per questo motivo abbiamo deciso di utilizzare le reti neurali, con apprendimento non supervisionato che, come anticipato nel capitolo precedente, permettono una buona classificazione di un insieme di dati. Questa intuizione e speranza era anche supportata dal fatto che in letteratura si trovano altri lavori basati su reti neurali ma con la sostanziale differenza che tali lavori si basano su apprendimenti supervisionati mentre il nostro progetto si concentra su apprendimenti non supervisionati ed in seguito illustreremo il perché di tale scelta. Chiusa questa parentesi il problema era quello di decidere se includere o meno il payload nelle informazioni “sensibili” da tenere in considerazione. Dopo una semplice visita a qualche sito Web ci si rende subito conto di quanto siano pesantemente eterogenee le informazioni contenute nel Web. Inoltre il Web come sappiamo offre moltissimi servizi come portali, posta elettronica, scambio di file attraverso FTP o applicazioni P2P, servizi di messaggistica immediata come ICQ, streaming audio e video ecc. Tutti questi servizi producono se andiamo ad osservare il contenuto dei pacchetti e quindi il payload dati molto diversi tra loro ad eccezione forse della fase di inizializzazione della connessione che per molti servizi si basa comunque su una procedura stile Three Way Handshaking, metodo comunemente utilizzato dal protocollo TCP. Questo porta ad una intrinseca difficoltà circa l’assegnamento del payload di un particolare pacchetto ad uno dei possibili servizi o protocolli esistenti e comunemente utilizzati dagli utenti di Internet. Il compito sarebbe sicuramente più facile se un ipotetico Intrusion Detection System anomaly based che controlla il contenuto del payload potesse mantenere una visione d’insieme di quanto sta succedendo nella comunicazione; cioè prendere nota dell’inizio di una comunicazione, il momento più 71 Capitolo 4 – Metodologia e Sistema Implementato favorevole per classificare un certo tipo di pacchetto, tracciare i numeri di sequenza TCP fino ad incontrare un pacchetto FIN o RST, che comunica la volontà da parte di uno dei due host di chiudere la comunicazione, per terminare quindi il monitoraggio della connessione. Questo però introduce i classici problemi di possibilità di elusione dal momento che l’IDS deve mantenere lo stato della connessione ed inoltre nessuno sarà in grado di stabilire a priori quanto durerà una connessione e quindi le risorse dell’IDS potrebbero presto esaurirsi solo per osservare un numero esiguo di collegamenti ma che magari sono iniziati da un considerevole lasso di tempo. Inoltre anche all’interno di un particolare servizio possiamo avere delle consistenti variazioni durante un certo periodo; basti pensare alle pagine Web, la cui maggior parte è scritta in predominanza con linguaggio HTML. La pagina Web di un portale o di un’organizzazione infatti viene continuamente modificata o aggiornata per mettere in risalto una novità, ad esempio un nuovo prodotto lanciato sul mercato, o solo per un’operazione di restyling in modo da renderla più gradevole ed accattivante. La homepage del sito Web di una testata giornalistica è un esempio particolarmente adatto in questo senso, infatti ogni giorno verrà aggiornata con le ultime notizie giornalistiche. Mettiamoci a questo punto un momento nell’ottica di una rete neurale che deve classificare tutte queste informazioni; durante l’addestramento vedrà il contenuto dei pacchetti che corrispondono al caricamento di una pagina Web in un certo modo ma in seguito la stessa pagina modificata produrrà durante il proprio caricamento pacchetti con contenuto significativamente diverso dal precedente. Ammettiamo che ipoteticamente una rete neurale fosse riuscita a catalogare in qualche modo un’impronta del contenuto normale ad esempio dei pacchetti Http (ma con ogni probabilità sarà formata da un numero elevatissimo di unità neurali con esplosione dei tempi necessari per l’addestramento e cosa più importante per la classificazione durante le normali condizioni operative). Di fronte allo scenario precedente in cui la pagina Web è stata modificata rispetto al passato, non può far altro che segnalare un’anomalia mentre la situazione è perfettamente nella normalità. Infine, non dobbiamo tralasciare l’ipotesi che il contenuto dei pacchetti possa essere criptato ad esempio nel caso in cui vengono utilizzati i protocolli SSL o SSH. In 72 Capitolo 4 – Metodologia e Sistema Implementato questi casi l’osservazione del contenuto dei pacchetti è nel migliore del casi inutile ma potrebbe anche generare falsi positivi o peggio falsi negativi. Dopo aver preso coscienza di tutto ciò abbiamo avuto dei seri dubbi su come si potesse attraverso una rete neurale non supervisionata a classificare e quindi distinguere il contenuto di un pacchetto lecito da uno illecito, dal momento che esistono tutte queste difficoltà solo per classificare diversi tipi di traffico lecito. Quindi abbiamo preso la decisione di tralasciare il payload dei pacchetti per concentraci sulle informazioni contenute nell’header, confidando anche nel fatto che il nostro sistema dovrà affiancare un tradizionale network IDS misuse detection come ad esempio Snort e di conseguenza sarà proprio quest’ultimo che nel proprio funzionamento controllerà il contenuto dei pacchetti in transito nella rete. Tale decisione comunque non pregiudica la possibilità di integrare in futuro un’ ulteriore controllo sul payload magari come sistema complementare. 4.3 Decodifica dei Pacchetti di Rete Giunti a questo punto necessitiamo di analizzare i dati di rete. In generale tutte le utilità che permettono di ottenere una “registrazione” dei dati che passano su una rete utilizzano un formato di file compatibile, definito nei sistemi Unix nelle librerie di cattura dei pacchetti libpcap. Queste librerie sono infatti utilizzate anche da Snort, durante il proprio lavoro, per la cattura dei pacchetti. In ambiente Windows esiste un port di tali librerie chiamato winpcap, realizzato dal Politecnico di Torino. Winpcap che in realtà è un driver, è sviluppato in C++ e distribuito anche con i file sorgente. Esiste inoltre un software gratuito denominato Ethereal che consente di analizzare in modo completo il traffico di rete, sia catturandolo che recuperandolo da un dump (cioè una registrazione) salvato in precedenza in formato libpcap. Ethereal è dotato di utili funzioni di decodifica di protocollo a vari layer, oltre alla possibilità di filtrare pacchetti e ricostruire comunicazioni TCP. Citiamo questo applicativo perché è stato molto utile durante le fasi di debug del software sviluppato per il funzionamento del sistema realizzato. 73 Capitolo 4 – Metodologia e Sistema Implementato Winpcap si basa su due file DLL: packet.dll e wpcap.dll. La figura 4.2 mostra la struttura di questo driver ed il ruolo dei due file DLL su cui si basa il suo funzionamento. Figura 4.2 Funzionamento del driver winpcap Abbiamo deciso di utilizzare le librerie winpcap poiché, il dataset utilizzato (che verrà descritto nel capitolo 5, paragrafo 1), per testare il lavoro da noi proposto è stato generato utilizzando gli standard definiti nelle librerie libpcap. Tali librerie ci permettono grazie ad un sistema di buffer di analizzare un pacchetto alla volta e soprattutto solo quando ne abbiamo veramente bisogno; attraverso la chiamata di una funzione che restituisce un puntatore ad un’area di memoria contenente il pacchetto letto dalla scheda di rete. Per decodificare i dati relativi al pacchetto presenti in memoria dobbiamo far ricorso alle specifiche dei pacchetti dei protocolli TCP/IP, che sono contenute negli appositi RFC: Protocollo IPv4: RFC 791; Protocollo TCP: RFC 793; Protocollo UDP: RFC 791; Protocollo ICMP: RFC 792. 74 Capitolo 4 – Metodologia e Sistema Implementato Per comodità di riferimento riportiamo una descrizione ed uno schema degli header dei protocolli IP, TCP, UDP e ICMP. 4.3.1 IP Protocol Header Figura 4.3 Header IP Riportiamo di seguito la descrizione dei campi presenti nell’header IP mostrato in figura 4.3: Version: la versione del protocollo in uso. Attualmente si usa IPv4, anche se già esiste la versione 6; IHL: IP Header Length, la lunghezza dell’header IP, espressa in multipli di 32 bit; Type-of-service(TOS): ai bit di questo byte sono associati valori che consentono di gestire priorità differenziate o di richiedere determinate qualità di servizio per i pacchetti in transito. In generale queste richieste vengono onorate solo sulle reti interne, difficilmente sull’Internet globale. Total length: lunghezza totale del datagramma in ottetti (byte), incluso l’header; Identification: un valore univoco di 16 bit assegnato dal mittente; 75 Capitolo 4 – Metodologia e Sistema Implementato Campo Flags: comprendente i bit DF (Don't Fragment) e MF (More Fragments), che rispettivamente indicano che il pacchetto non può essere frammentato o che il pacchetto non è l’ultimo di una serie di frammenti; Fragment Offset: spiazzamento (in multipli di 64 bit) rispetto al datagramma iniziale; Time to Live: indicazione del numero di hop (apparecchiature di rete attraversate) che sono concesse al pacchetto per raggiungere la destinazione Quando questo valore arriva a zero il datagramma è scartato. Di solito è inizializzato a 32 o 64 (a valori minori nei vecchi sistemi), mentre il protocollo di controllo ICMP usa anche il valore massimo 255. Lo scopo è quello di eliminare eventuali pacchetti che stiano rimbalzando in un loop; Protocol: indica il protocollo di livello superiore che sta venendo trasportato da IP. Per ICMP questo valore è 1, per TCP è 6, per UDP 17; Checksum: una checksum di 16 bit del solo header. Dato che alcuni campi cambiano ad ogni hop (ad esempio TTL) questo campo è ricalcolato da ogni router; Source Address: è l’indirizzo IP del mittente del pacchetto; Destination Address: è l’indirizzo IP del destinatario del pacchetto; Options: il campo Opzioni ha lunghezza variabile (può addirittura mancare) e contiene le seguenti opzioni: Sicurezza: il datagramma può essere classificato secondo vari livelli conformemente agli standard militari; Source Routing: il datagramma contiene un elenco di indirizzi IP che devono essere seguiti per arrivare a destinazione. In questa modalità il mittente impone l'instradamento; Record Route: usata per registrare il percorso seguito dal datagramma; Timestamp: usata dai vari router attraversati per registrare l'ora di attraversamento. 76 Capitolo 4 – Metodologia e Sistema Implementato 4.3.2 TCP Protocol Header Figura 4.4 Header TCP Riportiamo di seguito la descrizione dei campi presenti nell’header TCP mostrato in figura 4.4: Source Port: è un valore di 2 byte che identifica il processo mittente; Destination Port: un valore di 2 byte che identifica il processo destinatario; Sequence Number: è il numero sequenziale del primo byte di dati trasportato da questo segmento. Fa eccezione il caso del segmento di sincronizzazione (byte SYN posto a 1), in tal caso il numero è l’Initial Sequence Number (ISN) e il primo byte trasmesso ha numero ISN+1; Acknowledgment Number: numero del prossimo Sequence Number che il mittente del segmento si aspetta di ricevere; Data Offset: Campo di quattro bit che contiene il numero di parole da 32 bit che costituiscono l’header. Serve a individuare dove cominciano i dati; Flags: sono sei bit che rappresentano altrettante flag che consentono ai segmenti di trasportare oltre ai dati anche informazioni di controllo. Il loro significato è: 77 Capitolo 4 – Metodologia e Sistema Implementato 1. URG: indica che il campo Urgent Pointer ha significato; 2. ACK: indica che il campo Acknowledgment Number ha significato; 3. PSH: Serve a realizzare la funzione di Push; 4. RST: Reinizializza (Reset) la connessione; 5. SYN: Serve a sincronizzare i numeri di sequenza; 6. FIN: Il mittente non ha più dati da mandare. Window: è il numero di byte che si è pronti a ricevere; Checksum: la checksum è calcolata premettendo all’header TCP uno pseudoheader composto da 3 campi da 32 bit ricavati dall’header IP: 32 bit dell’indirizzo sorgente, 32 bit dell’indirizzo destinazione, 8 bit di zeri, 8 bit del campo protocollo, e 16 bit del campo TCP length, che è uguale alla TCP header length più la data length, espressa in ottetti. Si calcola quindi il checksum, come complemento a uno della somma dei complementi a uno di pseudo-header, header e dati, presi a blocchi di 16 bit, eventualmente aggiungendo zeri in fondo (padding). Per il calcolo incrementale dell’header si ricorre alle specifiche dell’RFC 1624 (che aggiorna l’RFC1141, che a sua volta aggiorna l’RFC 1071 che non è uno standard ma una implementazione suggerita); Urgent Pointer: sommato al Sequence Number punta al primo byte non urgente tra quelli del segmento dati; Options: l’unica opzione prevista dallo standard originale è un campo chiamato MSS (Maximum Segment Size) che indica la massima lunghezza del segmento che il destinatario accetta; questo campo può essere usato solo all’inizio della connessione (nei segmenti SYN). In seguito sono state definite altre opzioni. 78 Capitolo 4 – Metodologia e Sistema Implementato 4.3.3 UDP Protocol Header Figura 4.5 Header UDP Riportiamo di seguito la descrizione dei campi presenti nell’header UDP mostrato in figura 4.5: Source Port: è un valore di 2 byte che identifica il processo mittente; Destination Port: un valore di 2 byte che identifica il processo destinatario; Length: lunghezza totale del messaggio UDP sia dei dati che dell'intestazione; Checksum: questo valore è opzionale e, al contrario di quello che succedeva con il checksum nel datagramma TCP, esso non è relativo solo all'intestazione ma a tutto il datagramma, compresa la parte dati. 4.3.4 ICMP Protocol Header Figura 4.6 Header ICMP 79 Capitolo 4 – Metodologia e Sistema Implementato Riportiamo di seguito la descrizione dei campi presenti nell’header ICMP mostrato in figura 4.6: Type: identifica il tipo di informazione che il protocollo ICMP sta trasmettendo. Solitamente contiene uno dei seguenti valori: 0 Echo Reply; 3 Destination Unreachable; 4 Source Quench; 5 Redirect; 8 Echo; 11 Time Exceeded; 12 Parameter Problem; 13 Timestamp Request; 14 Timestamp Reply; 15 Information Request; 16 Information Reply; Code: identifica un particolare messaggio relativo alla classe di informazioni specificata nel campo Type; Checksum: campo di controllo dell’integrità del messaggio ICMP. 4.4 Algoritmo Statistico Nel passo successivo abbiamo dovuto affrontare le problematiche riguardanti come organizzare le informazioni estratte dai pacchetti di rete con l’ottica di permettere alla rete neurale di classificare tali informazioni nel modo più corretto possibile. L’obiettivo in questo caso è quello di catturare una correlazione temporale o statistica che un flusso di pacchetti può avere. In questo modo possiamo riconoscere eventi come “un aumento strano del flusso di richieste verso una particolare porta”, oppure “una distribuzione anomala del flusso di pacchetti rispetto al normale”, o ancora “una serie di pacchetti destinati a porte diverse sullo stesso host, provenienti dalla stessa porta dello stesso host remoto”. 80 Capitolo 4 – Metodologia e Sistema Implementato L’idea è quindi di sviluppare un algoritmo su base statistica per mettere in evidenza queste correlazioni temporali e statistiche, con lo scopo di ottenere un risultato che ci permetta di distinguere un “andamento temporale” relativo ad un traffico “normale” da uno relativo ad un possibile attacco e quindi ad un’anomalia di rete. Stiamo quindi tentando di sviluppare una sorta di “discriminatore” la cui uscita deve consentirci per il momento con una semplice ispezione visiva di distinguere un andamento temporale “normale” da uno anomalo. Successivamente, una volta verificato il funzionamento di questo approccio statistico, possiamo introdurre le reti neurali come sorta di “motore di decisione”, fornendo come ingresso da classificare l’uscita restituita dal “discriminatore” basato sull’algoritmo statistico. La successiva introduzione delle reti neurali pone un vincolo importante nel progetto del sistema statistico. La dimensione dell’ingresso di una rete neurale, infatti, non può essere variabile e deve essere fissato in fase di progetto. Occorre quindi rendere l’uscita dell’algoritmo statistico indipendente dal flusso di traffico istantaneo dell’host osservato; l’uscita non deve quindi dipendere, ad esempio, dal numero di pacchetti catturati. Passiamo a questo punto alla descrizione dell’algoritmo statistico ed alla sua implementazione. 4.4.1 Descrizione Per prima cosa prendiamo in considerazione una finestra temporale di 60 secondi durante la quale acquisiamo i pacchetti in transito nel cavo di rete grazie ad una scheda di rete posta in modalità promiscua ed alle librerie winpcap che ci permettono di catturare i pacchetti ai più bassi livelli della struttura ISO/OSI. Durante questa osservazione filtriamo, basandoci sull’indirizzo IP, solo il traffico in ingresso ed in uscita dal server a cui siamo interessati e che quindi vogliamo monitorare. Per ogni pacchetto così filtrato memorizziamo l’indirizzo IP mittente nel caso di pacchetti in ingresso o l’indirizzo IP del computer destinatario in caso di pacchetti in uscita. Questa operazione viene effettuata per il protocollo TCP, UDP e ICMP. Per i primi due cioè TCP e UDP occorre prendere in considerazione anche il numero di porta che troviamo all’interno dei pacchetti, mentre per il protocollo ICMP 81 Capitolo 4 – Metodologia e Sistema Implementato non esiste l’informazione sulle porte di comunicazione (come evidenziato in precedenza riguardo l’header ICMP) e quindi in questo caso ci concentriamo solo sull’indirizzo IP. Le porte utilizzate nelle comunicazioni attraverso Internet possono assumere valori da 0 a 65535 ed inoltre le porte che assumono valori all’interno dell’intervallo da 0 a 1024 sono chiamate privilegiate perché associate ad un particolare tipo di traffico e quindi ad un particolare protocollo; la porta 80 è associata ad esempio al traffico Http, la porta 21 al traffico FTP, la porta 23 al traffico Telnet ed infine la porta 25 al protocollo SMTP. Attenzione, però, tutto questo è vero in linea di massima infatti niente impedisce di utilizzare una certa porta per scopi diversi da quelli usuali; di conseguenza non bisogna utilizzare le porte, ad esempio, come indicatore di classificazione in quanto daremmo per scontato che ogni singola porta stia, effettivamente, venendo usata per il tipo di protocollo che usualmente la sfrutta. Analizzare anche la porta di comunicazione ha come conseguenza la necessità di fare una scelta; per ogni pacchetto, infatti, abbiamo a disposizione due possibili informazioni che riguardano le porte di comunicazione: la porta sorgente e la porta di destinazione. Questo accade ovviamente sia per i pacchetti in ingresso sia per quelli in uscita. La prima intuizione che ci potrebbe venir in mente è quella di comportarci come con gli indirizzi IP; cioè soffermarsi sulla porta di origine nei pacchetti in ingresso e sulla porta di destinazione nei pacchetti in uscita. Questo metodo però non si rileva corretto se pensiamo che le comunicazioni su Internet, come del resto in qualsiasi altro ambito, sono nella quasi totalità dei casi conformi ad uno schema client-server. Quando un host client inizia una comunicazione verso un altro, che in questo caso funge da server, presenta come indirizzo IP mittente il proprio e come porta sorgente la porta associata al processo che ha richiesto la comunicazione. Il server dopo aver elaborato la domanda del client dovrà rispedire la risposta, ed ovviamente utilizzerà come IP e porta di destinazione i valori IP e porta sorgente presenti nel pacchetto che conteneva la domanda, ricevuto in precedenza. L’intuizione di comportarsi con le porte come con gli indirizzi IP è quindi errata, in quanto porterebbe un’identica informazione ridondante osservando i pacchetti in ingresso ed in uscita di una stessa connessione. Abbiamo fatto quindi la scelta di prendere in considerazione sia per i pacchetti in ingresso che per quelli in uscita la porta sorgente. 82 Capitolo 4 – Metodologia e Sistema Implementato Cerchiamo di spiegare il perché con le seguenti figure. Per prima cosa analizziamo la situazione in cui un host richiede un servizio Http (porta 80) al server che stiamo monitorando: Figura 4.7 Schema di una connessione in cui l'host monitorato svolge il ruolo di server Nel pacchetto diretto dal client al server, quindi in ingresso al server, la porta sorgente è 32686; questa è stata assegnata dal sistema operativo al processo che ha generato la richiesta in tal caso un browser Web. Il nostro server risponderà dalla porta 80 (HTTP) verso la porta 32686 dell’host mittente. In questo caso il nostro sistema prenderà in considerazione le seguenti informazioni: Pacchetto in Ingresso : IP mittente e Porta sorgente cioè 80.121.30.48 e 32686; Pacchetto in Uscita : IP di destinazione e Porta sorgente cioè 80.121.30.48 e 80. Abbiamo quindi in qualche modo memorizzato nelle informazioni raccolte per il pacchetto in uscita, il tipo di richiesta effettuata del client; cioè se teniamo presente che, ad ogni servizio è possibile associare una particolare porta, allora sappiamo il tipo di servizio richiesto dal client, in questo caso Http (porta 80). Vediamo a questo punto il caso inverso; cioè il nostro server monitorato, magari per rispondere ad una particolare richiesta, deve domandare delle determinate informazioni ad un terzo host. In questo caso il computer da noi osservato si trasforma nell’host che richiede un particolare servizio mentre il terzo host funge da server. 83 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.8 Schema di una connessione in cui l'host monitorato svolge il ruolo di client Nella figura l’host monitorato esegue una richiesta DNS (porta 53) al server DNS della propria sottorete. Le informazioni memorizzate dal sistema, ricordando che in questa configurazione il pacchetto in uscita è quello rappresentato dalla freccia in alto diretta verso destra e quindi il pacchetto in ingresso è rappresentato dall’altra, saranno: Pacchetto in Ingresso : IP mittente e Porta sorgente cioè 81.5.3.0 e 53; Pacchetto in Uscita : IP di destinazione e Porta sorgente cioè 81.5.3.0 e 24168. In questo modo abbiamo memorizzato, nell’informazione relativa al pacchetto in ingresso un’indicazione sul tipo di servizio richiesto dall’host monitorato: la query DNS. Riprendiamo ora la descrizione dell’algoritmo statistico. Durante la finestra temporale di 60 secondi annotiamo tutte le informazioni illustrate finora; come gli indirizzi IP sorgente e le porte sorgenti di tutti i pacchetti in ingresso all’host monitorato e analogamente gli indirizzi IP di destinazione e le porte sorgenti di tutti i pacchetti in uscita. Al termine della finestra vengono generati, con i dati raccolti, tre diversi grafici sia per le comunicazioni viste in ingresso che per quelle viste in uscita per un totale quindi di sei grafici ogni 60 secondi. Il primo dei tre grafici, avrà nell’asse delle ascisse i diversi valori associati ai vari indirizzi IP osservati (questo sarà denominato grafico IP), il secondo le coppie di valori IP : Porta (denominato grafico IP : Porta) ed infine il terzo solo i diversi valori delle porte (denominato grafico Porta). Tutti i grafici hanno nell’asse delle ordinate la cardinalità associata ad ogni valore presente nell’asse delle ascisse di ciascun grafico. Tale cardinalità viene calcolata tenendo presente le informazioni osservate durante la finestra temporale. 84 Capitolo 4 – Metodologia e Sistema Implementato Insieme ai tre grafici vengono anche calcolati e memorizzati altri due valori: il totale dei pacchetti osservati sia in ingresso che in uscita. A titolo di esempio, di seguito sono riportati degli esempi relativi alle sole connessioni in uscita dei grafici generati dal sistema statistico, per una particolare finestra temporale di 60 secondi. Figura 4.9 Grafico degli indirizzi IP di destinazione contenuti nei pacchetti in uscita e osservati all’interno di una finestra temporale di 60 secondi 85 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.10 Grafico delle coppie IP di destinazione e porta sorgente contenute nei pacchetti in uscita e osservate all’interno di una finestra temporale di 60 secondi Figura 4.11 Grafico delle porte di destinazione contenute nei pacchetti in uscita e osservate all’interno di una finestra temporale di 60 secondi Per quanto riguarda il numero di pacchetti, abbiamo in uscita un totale di 521 pacchetti osservati. 86 Capitolo 4 – Metodologia e Sistema Implementato Per comodità d’ora in avanti chiameremo le finestre temporali da 60 secondi, istanti. Il sistema per catturare una possibile correlazione temporale e statistica elaborerà 5 istanti successivi, quindi 5 minuti. In questo modo vogliamo poter rilevare anomalie nel flusso dei pacchetti di rete nel tempo, senza però osservare intervalli temporali troppo lunghi che potrebbero far perdere facilmente variazioni limitate ad un ristretto periodo di funzionamento del server monitorato. In altre parole osservare il traffico, ad esempio, per 30 o 60 minuti con molta probabilità significa mascherare, in un sistema per sua natura “statistico”, delle variazioni significative del comportamento dell’host preso in considerazione che si sono verificate solo per due o tre minuti. Questo comportamento potrebbe venir sfruttato da un aggressore, che ormai ha preso il controllo del server monitorato, per sfruttare indisturbato il sistema. Basterebbe infatti far eseguire all’host compromesso il carico di lavoro “anomalo” per un ristretto intervallo di tempo senza che un sistema di rilevamento basato sulla statistica, che osserva ,finestre temporali troppo ampie se ne accorga. Il primo istante, dei 5 presi in considerazione, viene ordinato sulla base dell’occorrenza secondo un ordinamento decrescente, ottenendo quindi dei grafici con andamento decrescente. Questa scelta è stata fatta col fine di avere una base comune da cui partire per rilevare poi delle possibili variazioni nel traffico contenuto negli altri 4 istanti successivi. Nessuno, infatti, poteva immaginare a priori che forma avessero avuto i grafici ottenuti, per avere quindi una sorta di “normalizzazione” iniziale abbiamo deciso di effettuare questo riordinamento dei grafici derivanti dall’osservazione dei dati grezzi di rete. Dopo aver eseguito l’ordinamento, gli assi delle ascisse dei grafici visti in precedenza vengono bloccati ed inoltre le informazioni ricavate dai 4 istanti temporali successivi vengono aggiunte ai grafici così ottenuti. Cioè se viene rilevato, ad esempio, un pacchetto proveniente da un indirizzo IP già osservato in un istante precedente, dei 5 presi in considerazione, l’occorrenza relativa a tale indirizzo IP viene aggiornata nel grafico finora costruito. Se diversamente si presenta un pacchetto proveniente da un indirizzo IP finora sconosciuto, questo valore con la relativa occorrenza viene aggiunto in coda all’asse delle ascisse bloccato dopo aver eseguito l’ordinamento decrescente del grafico relativo al primo istante. 87 Capitolo 4 – Metodologia e Sistema Implementato La metodologia ora descritta si applica per le informazioni che andranno a costituire, ad esempio il grafico riguardante il solo indirizzo IP e per le connessioni in ingresso all’host monitorato, ma le stesse considerazioni vengono applicate anche agli altri due grafici, quelli riguardanti solo la porta e la coppia IP : Porta ed inoltre per tutti i grafici relativi alle connessioni in uscita. Ricordando che solo il primo istante, e quindi il primo grafico, viene ordinato e che gli altri 4 grafici vengono costruiti di conseguenza riportiamo come esempio 5 grafici relativi ai valori IP : Porta di 5 istanti temporali da 60 secondi consecutive costruiti a partire dai pacchetti osservati in ingresso ad un particolare server di rete. Figura 4.12 Grafico IP:Porta non ordinato relativo ai pacchetti in ingresso osservati nel primo istante da 60 secondi Il grafico in figura 4.12 rappresenta i dati grezzi catturati dalla rete nel primo da 60 secondi ed inoltre non è stato ancora ordinato. 88 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.13 Stesso grafico della figura 4.12 ma ordinato secondo un andamento decrescente Il grafico in figura 4.13 è relativo allo stesso istante temporale precedente, ossia agli stessi 60 secondi del grafico in figura 4.12, ma è ordinato in modo decrescente. Figura 4.14 Grafico relativo al secondo istante da 60 secondi, costruito a partite dal grafico di figura 4.13 89 Capitolo 4 – Metodologia e Sistema Implementato Quello in figura 4.14 riporta invece i dati relativi al secondo istante e possiamo osservare che è stato costruito a partire dal grafico precedente con l’asse delle ascisse bloccato. Infatti la coppia IP : Porta, 172.16.114.207:12294 non erano presenti nell’istante precedente e pur avendo un’elevata occorrenza sono stati aggiunti in coda all’asse X. Figura 4.15 Grafico relativo al terzo istante da 60 secondi, costruito a partite dal grafico di figura 4.14 La figura 4.15 mostra, il grafico relativo al terzo istante. Possiamo notare in coda all’asse X una nuova coppia IP : Porta osservata cioè 172.16.112.100:25, inoltre notiamo che si sono presentati nuovi pacchetti provenienti dall’indirizzo IP 172.16.114.50, porta 8860, infatti il valore dell’elemento 172.16.114.50:8860 è stato aggiornato alla nuova occorrenza 236 rispetto al valore 40 assunto all’istante precedente. 90 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.16 Grafico relativo al quarto istante da 60 secondi, costruito a partite dal grafico di figura 4.15 La figura 4.16 rappresenta il grafico relativo al quarto istante; l’ultimo elemento cioè l’IP 172.16.113.204 è associato al valore -1 per quanto riguarda la porta sorgente. Questo non è un errore, è dovuto solamente al fatto che il pacchetto in questione appartiene al protocollo ICMP che non prevede informazioni relative alla porte di origine e destinazione. 91 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.17 Grafico relativo al quinto ed ultimo istante da 60 secondi, costruito a partite dal grafico di figura 4.16 Infine la figura 4.17 riporta il grafico relativo al quinto istante. In aggiunta a tutti i grafici fin qui descritti, il sistema per ogni finestra di 5 istanti ne costruisce altri 2 relativi al numero di pacchetti osservati in ingresso ed in uscita dall’host preso in considerazione (denominati grafici NPkt). Abbiamo a questo punto cercato una grandezza che potesse caratterizzare in qualche modo l’andamento di queste curve. L’obiettivo era quello di poter cogliere una significativa variazione delle curve osservando il valore di tale grandezza, con la speranza che un flusso di traffico “normale” avrebbe prodotto un valore oscillante in un certo intervallo limitato. Valori fuori di tale intervallo significano di conseguenza un’anomalia occorsa durante i 5 istanti di osservazione e quindi durante gli ultimi 5 minuti trascorsi. La scelta è ricaduta sull’utilizzo del momento primo, secondo, terzo e varianza. Dal momento che stiamo parlando di quantità discrete il calcolo di queste grandezze si riduce ad una sommatoria. ∑ x ⋅ f (x ) m1 = ∑ f (x ) i Momento del primo ordine: i i i i 92 (4.1) Capitolo 4 – Metodologia e Sistema Implementato ∑ x ⋅ f (x ) m2 = ∑ f (x ) (4.2) ∑ x ⋅ f (x ) m3 = ∑ f (x ) (4.3) σ = m2 − m12 (4.4) 2 i Momento del secondo ordine: i i i i 3 i Momento del terzo ordine: i i i i Varianza: 2 Dove xi rappresenta l’elemento i-esimo dell’asse delle ascisse mentre f ( xi ) rappresenta il corrispondente valore di xi sull’asse delle ordinate. I valori presenti negli assi delle ascisse ( xi ) dei vari grafici, essendo di tipo alfanumerico, sono stati semplicemente convertiti nella sequenza di numeri interi: 1, 2, 3, 4, 5, 6, ecc. Al primo valore alla sinistra viene assegnato il valore 1, al secondo il valore 2, e così via. Occorre ricordare che la posizione dei valori sull’asse X vengono determinati dall’ordinamento decrescente delle occorrenze relative al primo istante della finestra. Per ognuno dei 5 grafici visti in precedenza vengono calcolati i valori di queste grandezze, ma non dobbiamo dimenticarci che contemporaneamente occorre eseguire lo stesso calcolo anche per i grafici relativi al solo indirizzo IP ed al solo valore della porta sorgente, naturalmente per i pacchetti sia in ingresso che in uscita. Per ottenere infine un solo valore caratteristico dei 5 istanti di osservazione i valori dei momenti e della varianza vengono mediati sulle 5 finestre. Per quanto riguarda invece l’informazione sul numero di pacchetti osservati in ciascun istante non vengono eseguiti i calcoli relativi ai momenti primi ed alla varianza, ma vengono solo memorizzati i valori per costruire i due grafici NPkt; uno relativo ai pacchetti in ingresso ed uno in uscita. Considerando 5 istanti per entrambe le direzioni di comunicazione abbiamo un totale di dieci valori memorizzati che riguardano il numero di pacchetti osservati. Anche in questo caso per ottenere un solo valore caratteristico dei cinque istanti di osservazione i numeri relativi ai pacchetti osservati e memorizzati in precedenza vengono mediati sulle cinque finestre ottenendo due valori; uno come al solito per le connessioni in ingresso ed uno per quelle in uscita. Occorre precisare che il valore del momento secondo, terzo e della varianza sono stati calcolati, perché a priori non era possibile stabilire se siano stati significativi o 93 Capitolo 4 – Metodologia e Sistema Implementato meno, ma dopo aver prestato attenzione ad alcuni risultati ci siamo subito resi conto che non apportavano significative informazioni utili. Infatti tali valori corrispondono a quelli relativi al solo momento primo con la differenza che sembrano moltiplicati per una costante abbastanza elevata, di conseguenza l’effetto è quello di esasperare il gap presente tra l’andamento “normale” ed l’anomalia che si discosta maggiormente da quest’ultimo. Anche se a prima vista questo comportamento può sembrare interessante sotto il punto di vista della discriminazione fra traffico “normale” ed anomalie ha come effetto negativo quello di far emergere solo l’anomalia più evidente e di mascherare quindi tutte le altre confondendole con i valori relativi ad una condizione di “normalità”. Per queste ragioni utilizzeremo come discriminante il solo valore del momento primo, fermo restando che in un ulteriore sviluppo è possibile introdurre anche l’analisi relativa agli altri momenti ed alla varianza. Il programma che implementa questo sistema statistico, infatti, calcola e gestisce tutti i momenti citati in precedenza, in modo da non dover rivedere il codice se un domani occorre prendere in analisi anche gli altri valori. Abbiamo finora preso in considerazione solo 5 istanti ma noi dobbiamo analizzare un flusso continuo di traffico e quindi una successione di istanti. Per gestire un flusso continuo di dati il sistema statistico utilizza una finestra scorrevole di 5 istanti. Ogni finestra di 5 istanti viene elaborata secondo le modalità viste precedentemente, cioè ordinando il grafico relativo al primo istante e costruendo i grafici successivi sulla base del primo. Per spiegare meglio consideriamo la seguente successione di istanti: Istante 1, Istante2, Istante3, Istante 4, Istante 5, Istante 6, Istante 7, ecc. La prima finestra comprenderà gli istanti : 1,2,3,4,5. Tutti i grafici relativi all’istante 1 vengono ordinati secondo l’ordinamento decrescente ed i seguenti 2,3,4,5 vengono elaborati partendo dal risultato ottenuto col primo istante. Come risultato finale si ottengono i valori dei momenti primi mediati sui 5 istanti presi in considerazione, nonché il valore, sempre mediato, relativo al numero di pacchetti osservati nei medesimi cinque istanti. 94 Capitolo 4 – Metodologia e Sistema Implementato Riassumendo i valori calcolati saranno in tutto 8, 4 relativi alle connessioni in ingresso e 4 relativi a quelle in uscita. Dei 4 valori, 3 rappresentano i momenti primi riferiti al grafico IP, grafico IP : Porta, grafico Porta ed 1, il numero di pacchetti osservati. Contemporaneamente una seconda finestra prenderà in considerazione gli istanti 2,3,4,5,6. Questa finestra verrà elaborata come la precedente ordinando quindi l’istante 2 ed elaborando gli altri sulla base delle informazioni dell’istante 2 stesso. Occorre notare che le due finestre (rispettivamente istanti 1,2,3,4,5 ed istanti 2,3,4,5,6) vengono trattate contemporaneamente ma separatamente ad esempio l’ordinamento dell’istante 2 nella seconda finestra non modifica l’elaborazione dell’istante 2 nella prima finestra che dipende dal risultato ottenuto con l’ordinamento dell’istante 1 della stessa finestra. Sempre contemporaneamente verrà presa in considerazione un’altra finestra da 5 istanti e precisamente gli istanti 3,4,5,6,7. Ricapitolando: Istanti 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,ecc. 1÷5 2÷6 3÷7 4÷8 5÷9 6 ÷ 10 7 ÷ 11 …….. e così via. 1a finestra con riordinati i dati relativi all’istante 1 2a finestra con riordinati i dati relativi all’istante 2 3a finestra con riordinati i dati relativi all’istante 3 4a finestra con riordinati i dati relativi all’istante 4 5a finestra con riordinati i dati relativi all’istante 5 6a finestra con riordinati i dati relativi all’istante 6 7a finestra con riordinati i dati relativi all’istante 7 Il risultato di questo sistema è fornito in due file di testo, uno relativo alle connessioni in ingresso ed un relativo a quelle in uscita dal server monitorato, che verranno successivamente elaborati dal sistema di reti neurali. Un file di testo di uscita è ad esempio mostrato nella figura seguente: 95 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.18 File di testo di uscita relativo ai pacchetti in ingresso al server monitorato Ogni riga di questo file rappresenta una finestra di 5 istanti ed è memorizzata è nel formato: campo1, campo2, campo3, campo4, campo5 Il campo1 rappresenta gli istanti di cui è composta la finestra (estremi compresi), il campo2 invece è il valore del momento primo mediato sui 5 istanti della finestra del valore relativo ai grafici IP : Porta, il campo3 si basa sui grafici che comprendono la sola informazione sulle porte sorgente, il campo4 è relativo ai grafici IP ed infine il campo5 è il valore mediato del numero di pacchetti osservato nei 5 istanti definiti nel campo1. Come ultima osservazione, spendiamo due parole sulle scelte effettuate per quanto riguarda la durata della finestra temporale iniziale, cioè 60 secondi, e per 96 Capitolo 4 – Metodologia e Sistema Implementato l’ampiezza della seconda finestra temporale che invece prende in considerazione 5 istanti consecutivi. Abbiamo provato inizialmente con questi due valori e osservando la qualità dei risultati forniti dal sistema in questa configurazione si è deciso di adottarli definitivamente. Prima però, abbiamo fatto una verifica con altri valori dei parametri per verificare che il funzionamento con quei particolari valori da noi testati, non fosse solo un caso fortunato. Abbiamo, quindi, testato il funzionamento del sistema con altri valori dei parametri ottenendo dei risultati abbastanza conformi ai predenti. Di conseguenza la scelta è ricaduta sui valori iniziali dei parametri cioè, 60 secondi per la durata della finestra temporale di osservazione del traffico di rete e 5 istanti consecutivi da prendere in considerazione per l’ampiezza della finestra scorrevole. Questo metodo di scelta dei valori dei parametri è del tutto “empirico” perciò non escludiamo la possibilità che con altri insiemi di valori da noi non testati le prestazioni del sistema possano migliorare o peggiorare. Comunque quello che mi preme sottolineare è che, come descritto finora, la scelta non è stata effettuata “ad hoc” per il funzionamento sul particolare set di dati da utilizzato. Sicuramente questi parametri sono strettamente legati alla particolare struttura di rete dove il sistema dovrà lavorare, quindi la taratura finale dei parametri andrebbe eseguita tenendo conto del particolare ambito di lavoro del sistema. Per questo motivo abbiamo fatto in modo che la scelta effettuata ora non sia vincolante in futuro. È possibile, infatti, modificare il valore dei parametri molto facilmente in quanto vengono letti dal sistema in un file di configurazione in formato testo, questo permette di variarli senza dover ristrutturare il codice sorgente del programma. 4.4.2 Implementazione Il sistema statistico descritto nel capitolo precedente è stato implementato in un programma scritto in Visual C++, utilizzando le librerie winpcap per la cattura al livello più basso della struttura ISO/OSI dei pacchetti dall’interfaccia di rete. Le finestre temporali di 60 secondi sono state determinate in base all’informazione contenuta nel timestamp dei vari pacchetti osservati. Questa scelta è stata obbligata, in quanto per gli esperimenti utilizzeremo una registrazione del traffico di rete creata appositamente per scopi di benchmark e sperimentazione su sistemi di 97 Capitolo 4 – Metodologia e Sistema Implementato intrusion detection (vedi capitolo 5 paragrafo 1 per una descrizione approfondita del dataset utilizzato). Un intervallo temporale dove essere quindi determinato rispetti agli istanti in cui si è svolta la registrazione. L’unico modo per determinare quanti pacchetti sono transitati sul filo di rete nel momento in cui si è stata effettuata la simulazione per generare il dataset che utilizzeremo, è quello di basarsi sul timestamp dei pacchetti salvati. Occorre ricordare però che il timestamp di un pacchetto viene determinato dall’orologio di sistema del computer che lo invia. In questo modo potremmo avere delle informazioni inconsistenti siccome nessuno è obbligato a mantenere l’orologio del proprio computer sincronizzato con gli altri, o semplicemente a causa dei diversi fusi orari. In altre parole potrebbe arrivare un pacchetto con timestamp che riporta un certo orario ad esempio 10:15, il pacchetto successivo riporta invece le 10:13, il seguente ancora le 10:16 e così via. Quando in realtà tutti questi pacchetti sono stati osservati nell’arco temporale di pochi secondi. Il problema nel nostro caso particolare non si pone, in quanto il sistema utilizzato per le registrazioni di rete è stato costruito appositamente per questo scopo, quindi tutti i computer della simulazione sono sincronizzati con un orario unico. Però nel momento in cui vogliamo fare un esperimento “on-line” e non “off-line”, occorre tenere presente che la durata delle finestre temporali và determinata in base all’orologio dell’host in cui è installato il nostro sistema di rilevamento delle anomalie e non in base al timestamp dei pacchetti osservati, in questo modo ci mettiamo al riparo da possibili problemi di incongruenza dei dati. Il programma nel suo funzionamento utilizza in memoria una struttura basata su una doppia lista puntata per rendere tale struttura più possibile elastica e dinamica in modo da potersi adattare ai cambiamenti operativi. Occorre, infatti, permettere al programma di adattarsi a possibili modifiche dei parametri di funzionamento, come la durata della finestra temporale di osservazione e l’ampiezza della finestra scorrevole. In secondo luogo non è possibile sapere a priori la mole di traffico che il sistema osserverà durante il proprio funzionamento e quindi la quantità di pacchetti che dovrà analizzare e memorizzare. La figura 4.19 che segue mostra la struttura a doppia lista puntata utilizzata: 98 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.19 Struttura a doppia lista puntata implementata per il sistema statistico La lista orizzontale, cioè quella formata dalla struttura A, viene utilizzata per mantenere in memoria le informazioni relative alle varie finestre scorrevoli. Ogni elemento della lista orizzontale rappresenta una particolare finestra scorrevole formata da 5 istanti. Gli elementi nelle lista orizzontale saranno 5 infatti ogni finestra viene elaborata indipendentemente dalle altre, tenendo conto dell’ordinamento decrescente del primo istante della finestra in questione per poi elaborare gli istanti successivi. Riprendiamo un momento il diagramma utilizzato per la spiegazione nel paragrafo precedente: Istanti 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,ecc. 1÷5 2÷6 3÷7 4÷8 5÷9 6 ÷ 10 7 ÷ 11 …….. e così via. 1a finestra con riordinati i dati relativi all’istante 1 2a finestra con riordinati i dati relativi all’istante 2 3a finestra con riordinati i dati relativi all’istante 3 4a finestra con riordinati i dati relativi all’istante 4 5a finestra con riordinati i dati relativi all’istante 5 6a finestra con riordinati i dati relativi all’istante 6 7a finestra con riordinati i dati relativi all’istante 7 La prima finestra, relativa agli istanti 1,2,3,4,5 sarà memorizzata nel primo elemento della lista orizzontale, la seconda finestra nel secondo elemento della lista fino 99 Capitolo 4 – Metodologia e Sistema Implementato ad arrivare alla finestra numero 5 che verrà memorizzata nell’elemento numero 5. A questo punto l’elaborazione della prima finestra è terminata in quanto, composta da 5 istanti successivi, quindi dopo aver salvato i risultati nei file di testo è possibile rimuovere la finestra dalla lista. In questo modo abbiamo liberato la prima posizione della lista orizzontale che verrà occupata dalla finestra immediatamente successiva cioè la numero 6 relativa agli istanti 6,7,8,9,10. La struttura A è formata quindi dai seguenti campi: Indicatore del primo istante della finestra, questo istante è quello che viene ordinato in modo decrescente e che quindi influenzerà l’elaborazione di tutti gli altri istanti della finestra stessa; Puntatore alla struttura B; Puntatore alla struttura C; Puntatore alla struttura D; Puntatore alla struttura E; Puntatore alla struttura E; Puntatore alla struttura E; Puntatore alla struttura F; Puntatore alla struttura A, cioè al prossimo elemento della lista orizzontale. Le strutture B, C, D, costituiscono alcune delle liste verticali e contengono le informazioni per generare i grafici visti nel paragrafo precedente. Ogni elemento della struttura B, ad esempio, corrisponde ad un elemento del grafico IP : Porta, conterrà quindi l’informazione relativa alla specifica coppia IP : Porta ed all’occorrenza osservata nelle varie finestre temporali da 60 secondi. In altre parole un elemento della struttura B contiene un valore dell’asse X ed il corrispondente valore dell’asse Y appartenenti al grafico IP : Porta. La struttura C contiene le analoghe informazioni ma per il grafico relativo alla sola porta sorgente mentre infine la struttura D contiene gli stessi dati per quanto riguarda il grafico IP. La struttura B è quindi formata dai seguenti campi: 100 Capitolo 4 – Metodologia e Sistema Implementato IP osservato nelle finestre temporali da 60 secondi; Porta relativa all’IP contenuto nel campo precedente; Valore dell’occorrenza della coppia IP : Porta dei due campi precedenti, ossia il valore dell’asse Y; Numero di corrispondenza tra l’indirizzo IP ed il valore utilizzato per il calcolo dei valori dei momenti statistici della curva, ossia il valore dell’asse X; Puntatore alla struttura B, cioè al prossimo elemento della lista verticale di tipo B. La struttura C sarà invece formata dai seguenti campi: Porta osservata nelle finestre temporali da 60 secondi; Protocollo relativo alla porta del campo precedente TCP o UDP; Valore dell’occorrenza della Porta dei due campi precedenti, ossia il valore dell’asse Y; Numero di corrispondenza tra la Porta ed il valore utilizzato per il calcolo dei valori dei momenti statistici della curva, ossia il valore dell’asse X; Puntatore alla struttura C, cioè al prossimo elemento della lista verticale di tipo C. La struttura D conterrà i seguenti campi: IP osservato nelle finestre temporali da 60 secondi; Valore dell’occorrenza dell’IP del campo precedente, ossia il valore dell’asse Y; Numero di corrispondenza tra l’IP ed il valore utilizzato per il calcolo dei valori dei momenti statistici della curva, ossia il valore dell’asse X; Puntatore alla struttura D, cioè al prossimo elemento della lista verticale di tipo D. Le strutture E, appartenenti anch’esse all’insieme delle liste verticali, vengono utilizzate per il calcolo dei momenti statistici relativi alla finestra scorrevole memorizzata nella struttura A. Un elemento di questa struttura conterrà il valore dei momenti statistici di un particolare istante all’interno della finestra scorrevole. Ogni 101 Capitolo 4 – Metodologia e Sistema Implementato struttura di questo tipo ha quindi 5 elementi, uno per ogni istante di cui è formata la finestra dell’elemento della struttura A. Ogni elemento della struttura A, ha come è possibile osservare dalla figura 4.19, tre puntatori ad altrettante strutture di tipo E. Questo perché una struttura di questo tipo contiene il valore dei momenti statistici relativi ad un particolare tipo di grafico: grafico IP : Porta oppure il grafico contenente solo la porta sorgente o infine il grafico con solo l’indirizzo IP. Vediamo quali campi sono presenti all’interno della struttura di tipo E: Numero dell’istante a cui si riferiscono i momenti memorizzati nel particolare elemento della lista verticale di tipo E; Momenti del primo, secondo, terzo ordine e varianza; Puntatore alla struttura E, cioè al prossimo elemento della lista verticale di tipo E. Infine l’ultima lista verticale è costituita da elementi della struttura F. Questa struttura viene utilizzata per memorizzare il numero di pacchetti osservati nei 5 istanti di cui è composta la finestra scorrevole salvata nell’elemento della struttura di tipo A. I seguenti campi sono contenuti nella struttura di tipo F: Numero dell’istante a cui si riferisce il numero di pacchetti memorizzati nel particolare elemento della lista verticale di tipo F; Numero di pacchetti catturati; Puntatore alla struttura F, cioè al prossimo elemento della lista verticale di tipo F. Le informazioni in queste strutture vengono continuamente aggiornate durante il funzionamento del sistema statistico per produrre l’uscita, cioè i file di testo contenenti i vari momenti statistici delle varie finestre scorrevoli. 102 Capitolo 4 – Metodologia e Sistema Implementato 4.5 Algoritmo di Preprocessamento L’introduzione di questo algoritmo si è resa necessaria a causa del carattere troppo continuo dei risultati forniti dal sistema statistico fin qui descritto. Ricordiamo che l’uscita del “discriminatore” statistico dovrà essere utilizzata come ingresso delle reti neurali, con l’obiettivo di ottenere una classificazione che ci permetta di distinguere una condizione di “normalità” da un’anomalia. Dopo un primo esperimento, in cui abbiamo utilizzato i dati forniti dal sistema statistico senza una fase di preprocessamento, ci siamo subito resi conto dell’impossibilità delle reti neurali implementate di apprendere correttamente quell’insieme di valori senza una fase di preelaborazione dei dati. L’algoritmo utilizzato si basa sulla normale idea di quantizzazione utilizzata nella conversione da valori analogici a valori digitali. Infatti il nostro obiettivo in questa fase è di discretizzare l’asse delle ordinate di tutti i grafici visti nel paragrafo precedente, ottenendo dei fronti di salita e discesa il più possibile ripidi in modo da aiutare la rete neurale nella sua classificazione. Tutto questo senza perdere ovviamente informazione; cioè il grafico quantizzato risultante deve mantenere la peculiarità di consentirci con una semplice ispezione visiva di distinguere un andamento temporale “normale” da uno anomalo. Vediamo a questo punto il funzionamento dell’algoritmo. L’asse delle ordinate viene suddiviso in intervalli di valori contigui e data una coppia di valori (X,Y) viene determinata l’appartenenza del valore relativo all’asse Y del grafico ad uno degli intervalli ottenuti. A questo punto il normale metodo di quantizzazione assegnerebbe a quel particolare valore dell’asse X, come valore della coordinata Y, quello centrale dell’intervallo individuato. Il nostro algoritmo invece, prende invece in esame il punto successivo, determinandone l’appartenenza del valore Y ad un intervallo. Abbiamo due alternative: la prima è che l’ultimo punto appartenga allo stesso intervallo del precedente, in questo caso si prende in esame il punto successivo, mentre la seconda alternativa è rappresentata dalla possibilità che l’intervallo del punto corrente si diverso da quello del punto precedente. 103 Capitolo 4 – Metodologia e Sistema Implementato In quest’ultimo caso si determina il numero di punti precedenti caduti all’interno del vecchio intervallo e si esegue un a semplice media matematica, ottenendo in tal modo un singolo valore. Tutti i valori della coordinata Y dei punti così selezionati vengono sostituiti con il valore della media calcolato. L’algoritmo procede in questo modo fino all’ultima coppia (X,Y) disponibile. Vediamo un semplice esempio per comprendere meglio il metodo utilizzato. Supponiamo di avere la seguente successione di coppie (X,Y): I. II. III. IV. V. VI. VII. VIII. IX. X. (X = 1; Y = 0,5) (X = 2; Y = 1,1) (X = 3; Y = 1,4) (X = 4; Y = 2,7) (X = 5; Y = 3,5) (X = 6; Y = 0,8) (X = 7; Y = 3,8) (X = 8; Y = 8,7) (X = 9; Y = 2,6) ……ecc. L’asse delle ordinate viene suddiviso in intervalli di ampiezza di 5 unità cioè: 0 ÷ 4; 5 ÷ 9; 10 ÷ 14; 15 ÷ 19; 20 ÷ 24; 25 ÷ 29; …. (estremi compresi) L’algoritmo determina l’appartenenza ad un intervallo della prima coppia (X,Y); in questo particolare caso otteniamo il primo intervallo (0 ÷ 4), poi prosegue con la seconda coppia, classificandola ottiene lo stesso intervallo precedente, procede quindi con la coppia seguente. Tutto ciò fino alla coppia numero VIII, la quale appartiene al secondo intervallo (5 ÷ 9); viene quindi calcolata la media matematica dei valori delle ordinate delle coppie I ÷ VII ed il valore ottenuto viene sostituito al valore delle ordinate precedenti. L’algoritmo procede a questo punto con l’elaborazione delle coppie seguenti. Il risultato di questa elaborazione sarà: I. II. III. IV. V. VI. VII. VIII. (X = 1; Y = 1,97) (X = 2; Y = 1,97) (X = 3; Y = 1,97) (X = 4; Y = 1,97) (X = 5; Y = 1,97) (X = 6; Y = 1,97) (X = 7; Y = 1,97) (X = 8; Y = ….) 104 Capitolo 4 – Metodologia e Sistema Implementato Il valore Y della coppia VIII dipende dai dati seguenti ed è stata omessa per questo motivo. Dopo aver descritto il funzionamento dell’algoritmo di preprocessamento dei dati passiamo ad analizzare come sono stati suddivisi gli assi delle ordinate dei grafici ottenuti come risultato dell’algoritmo statistico. Il grafico IP : Porta relativo alle connessioni in ingresso è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 5 unità; Il grafico IP : Porta relativo alle connessioni in uscita è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 50 unità; Il grafico IP relativo alle connessioni in ingresso è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 5 unità; Il grafico IP relativo alle connessioni in uscita è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 5 unità; Il grafico Porta relativo alle connessioni in ingresso è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 5 unità; Il grafico Porta relativo alle connessioni in uscita è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 50 unità; Il grafico sul numero di pacchetti relativo alle connessioni in ingresso è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 250 unità; Il grafico sul numero di pacchetti relativo alle connessioni in uscita è stato quantizzato scegliendo intervalli per l’asse delle Y di ampiezza 250 unità. L’ampiezza degli intervalli è stata decisa osservando i risultati del sistema statistico e tentando di rappresentare in maniera adeguata sia il traffico “normale” che le istanze di attacco. Inoltre l’ampiezza degli intervalli utilizzati per ciascuna caratteristica è costante. In alternativa è possibile basare l’algoritmo di preprocessamento su intervalli non omogenei. Ad esempio aumentando l’ampiezza degli intervalli per valori elevati ottenendo così una sorta di “quantizzazione non uniforme” che potrebbe aumentare le prestazioni dell’intero sistema. Ad esempio utilizzando per il grafico IP : Porta relativo alle connessioni in uscita intervalli del tipo seguente: 105 Capitolo 4 – Metodologia e Sistema Implementato 0 ÷ 49; 50 ÷ 99; 100 ÷ 149; 150 ÷ 199; 200 ÷ 299; 300 ÷ 399; 400 ÷ 499; 500 ÷ 699; 700 ÷ 899;….e così via. (estremi compresi) È possibile ottenere un grafico risultante con fronti di salita e discesa più ripidi rispetto a quanto ottenuto con intervalli di ampiezza omogenea. Soprattutto per quanto riguarda valori elevati, ossia valori che dovrebbero corrispondere ad un possibile attacco o ad un’anomalia, che in questo modo verrebbero riconosciuti ancora più facilmente dalla rete neurale essendo drasticamente diversi dagli altri. Riportiamo a fine paragrafo un esempio di come si presentano i quattro grafici: IP : Porta, Porta, IP e numero di pacchetti (NPkt) prima e dopo il preprocessamento. Essi sono diversi da quelli visti finora in quanto contengono direttamente i risultati finali dell’intero algoritmo statistico e non di operazioni intermedie come illustrato invece nel paragrafo precedente, essi sono inoltre disposti con orientamento orizzontale per problemi di spazio. In altre parole i grafici seguenti illustrano i risultati contenuti in uno dei due file di testo che costituiscono l’uscita del sistema statistico e precisamente quello relativo alle connessioni in uscita. 106 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.20 (a) Figura 4.20 (b) 107 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.21 (a) Figura 4.21 (b) 108 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.22 (a) Figura 4.22 (b) 109 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.23 (a) Figura 4.23 (b) 110 Capitolo 4 – Metodologia e Sistema Implementato 4.6 Sottosistema delle Reti Neurali Abbiamo dapprima descritto il funzionamento del sistema statistico, che funge da “discriminatore”, poi l’algoritmo di preprocessamento, che ha il compito di rendere, l’uscita fornita dal sistema statistico, più adatta per essere elaborata dallo stadio successivo formato dal sottosistema delle reti neurali; la cui struttura verrà illustrata in questo paragrafo. L’introduzione delle reti neurali comporta una scelta di fondo: adottiamo un addestramento supervisionato oppure non supervisionato ? Come illustrato nel capitolo 3 relativo ad una descrizione in generale delle reti neurali, l’addestramento supervisionato necessita la conoscenza a priori di quale debba essere l’uscita corretta del sistema. Nel nostro particolare ambito, come in molti altri, questo porta con sé notevoli problemi: come possiamo, infatti, decidere senza dubbio la presenza o meno di una particolare anomalia nel traffico di rete o di un attacco ? Il compito è abbastanza facilitato nei dataset disponibili per testare i sistemi IDS in ambito accademico in quanto ogni attacco presente in tali dataset è ampiamente documentato e segnalato ma nel mondo reale è quantomeno problematico stabilire a priori se un set di dati sia costituito da sole azioni lecite o anche illecite, senza avere a priori un campione di cosa sia “lecito”. Il sistema di reti neurali, nel nostro caso, deve svolgere il compito di “motore di decisione”, osservando cioè l’uscita fornita dal sistema statistico e poi rielaborata dall’algoritmo di preprocessamento, deve in qualche modo saper distinguere i valori che possono essere classificati come traffico “normale” dai valori che invece si discostano significativamente dai precedenti e che quindi sono sintomo dello svolgimento di un attacco o comunque della presenza di un’anomalia nel traffico di rete osservato. Lo svolgimento di questo compito implica implicitamente la presenza di una certa “soglia di riferimento”, possiamo infatti dire che i valori al di fuori di tale soglia potrebbero essere trattati come anomalie. Ma come possiamo a priori decidere il valore di questa soglia ? Tale valore dipende infatti da un elevato numero di fattori, primo fra tutti la particolare struttura di rete in cui il sistema dovrà operare ed inoltre dalla mole di traffico che quotidianamente il sistema deve gestire. Questa soglia inoltre sarà adatta per 111 Capitolo 4 – Metodologia e Sistema Implementato poter rilevare un attacco modificato o magari un attacco che non è stato osservato durante la fase di addestramento ? Per questi motivi è desiderabile utilizzare un algoritmo che autonomamente possa apprendere, durante l’addestramento, le caratteristiche del sistema su cui sta operando e quindi sempre autonomamente fissare al proprio interno una “soglia di decisione”. Occorre precisare che nelle reti neurali, per il loro caratteristico funzionamento, il valore della “soglia” citata in precedenza non è “scritta” esplicitamente da nessuna parte ma è implicitamente presente nelle informazioni che la rete conserva nei pesi delle connessioni tra le varie unità neurali. Questo è vero sia per le reti che si basano su un apprendimento supervisionato sia per quelle che si basano su un apprendimento non supervisionato; ma la differenza sostanziale è che per quanto riguarda l’apprendimento supervisionato l’operatore umano che addestra la rete deve scegliere a priori un valore della “soglia” per poi farla apprendere al sistema di reti neurali, mentre un apprendimento non supervisionato non ha bisogno, per sua natura, di conoscenza a priori, liberando quindi noi dall’ingrato e difficile compito di determinare un valore di “soglia” che potrebbe rivelarsi inadatta per il funzionamento reale del sistema. Un’altra caratteristica importante che caratterizza un sistema basato su un apprendimento non supervisionato è una discreta capacità di generalizzazione. Un sistema di questo tipo infatti, in presenza di un attacco denominato X, già osservato durante la fase di addestramento, ma che si ripropone durante la fase di test in una veste leggermente modificata, ha maggiori probabilità di riconoscere che si tratta di un attacco e magari di classificarlo correttamente come quel particolare attacco che già conosce denominato X, di quante non ne abbia un sistema basato invece su un apprendimento supervisionato. Quest’ultimo, in una situazione simile alla precedente, classificherebbe l’attacco nella migliore delle ipotesi come attacco Y e nella peggiore delle ipotesi (caso comunque più probabile) come situazione di pura “normalità”. Le stesse considerazioni vanno fatte per la presenza, durante il funzionamento quotidiano (paragonabile alla fase di test), di un attacco mai visto in addestramento ed anche in questo caso la maggiore probabilità di successo è dalla parte del sistema non supervisionato. Per tutte le considerazioni fatte finora abbiamo quindi scelto di adottare un apprendimento non supervisionato e precisamente abbiamo utilizzato due diverse reti 112 Capitolo 4 – Metodologia e Sistema Implementato neurali denominate Self-Organizing Maps (SOM) e Growing Neural Gas (GNG), illustrate nel capitolo precedente riguardante la descrizione in generale delle reti neurali. Stabilito il tipo di algoritmo di apprendimento e di conseguenza il tipo di reti neurali che utilizzeremo possiamo decidere in che modo organizzare le informazioni da utilizzare come ingressi per le reti stesse. Questa scelta influenzerà anche il numero di reti neurali che dovremmo utilizzare e le modalità con cui esse interagiranno tra loro. Una possibile implementazione è quella di considerare un primo stadio composta da 4 reti neurali; una per l’elaborazione delle informazioni provenienti dai grafici relativi alla coppia IP : Porta (denominata rete IP : Porta), la seconda per l’elaborazione dei dati forniti dai grafici Porta (denominata rete Porta), la terza prenderà in considerazione i valori dei grafici con il solo IP (denominata rete IP) ed infine la quarta classificherà le informazioni riguardanti il numero di pacchetti osservati in ingresso ed in uscita del server monitorato (denominata rete NPkt). È inoltre presente un secondo stadio composto da una sola rete (denominata Rete Finale) che prende in ingresso le classificazioni effettuate dalle quattro reti del primo stadio. Il secondo stadio avrà quindi il compito di comunicare in modo il più possibile “user-friendly” lo stato della rete; ossia se tutto procede normalmente oppure se siamo in presenza di un attacco conosciuto (o di un’anomalia) o se, infine, si stanno configurando le condizioni per una situazione di preallarme. In questo modo l’amministratore di rete può reagire prontamente ad una situazione di attacco o di possibile pericolo per l’integrità della rete stessa. La classificazione del particolare tipo di attacco in una particolare classe è poi compito delle quattro reti di cui è costituito il primo stadio. Ognuna delle quattro reti del primo stadio prenderà in ingresso un vettore di due elementi. Tale vettore rappresenta una riga dei due file di uscita generati dall’algoritmo statistico. Il primo elemento del vettore contiene il valore riguardante le connessioni in ingresso, mentre il secondo elemento sarà occupato dal valore relativo alla connessioni di uscita. Ciascuna rete prenderà in considerazione, dal file di uscita, e quindi come ingresso per se stessa solo il dato a cui è interessata; in altre parole la rete che dovrà classificare i valori del grafico costruito con le coppie IP : Porta leggerà dal file solo i due valori (uno per le comunicazioni in ingresso ed uno per quelle in uscita dal server monitorato) relativi alla coppia IP :Porta. 113 Capitolo 4 – Metodologia e Sistema Implementato Prima di riportare due figure per illustrare la configurazione impiegata ricordiamo brevemente che i due file di uscita sono memorizzati nel seguente formato: campo1, campo2, campo3, campo4, campo5 Il campo1 rappresenta gli istanti di cui è composta la finestra (estremi compresi), il campo2 invece è il valore mediato sui 5 istanti della finestra del valore relativo ai grafici IP : Porta, il campo3 si basa sui grafici che comprendono la sola informazione sulle porte sorgente, il campo4 è relativo ai grafici IP ed infine il campo5 è il valore mediato del numero di pacchetti osservato nei 5 istanti definiti nel campo1. Segue quindi la figura che illustra la formazione dei vettori di ingresso: Figura 4.24 Formazione dei vettori di ingresso per le varie reti neurali Continua con la figura relativa allo schema di implementazione del primo e secondo stadio: 114 Capitolo 4 – Metodologia e Sistema Implementato Figura 4.25 Primo e secondo stadio del sistema di reti neurali Come considerazione finale possiamo citare il fatto che abbiamo pensato anche ad un’implementazione alternativa. Invece di utilizzare quattro reti che prendono in ingresso un vettore di due elementi è possibile considerare solo due reti le quali prendono in ingresso vettori di quattro elementi. In questo modo abbiamo che le due reti sono: una relativa al traffico in ingresso ed una relativa al traffico in uscita. Gli ingressi sarebbero formati dai soliti quattro valori provenienti dai rispettivi grafici generati dal sistema statistico: IP : Porta, Porta, IP e NPkt. La Rete Finale e quindi il secondo stadio rimarrebbero invariati a patto di modificare il numero di ingressi da quattro a due come conseguenza della riduzione del numero di reti neurali nel primo stadio. Questo schema in qualche modo complementare al precedente, è stato scartato in quanto non si accosta all’idea di tenere distinti i valori dei quattro grafici, costruiti sulle quattro diverse caratteristiche prese in considerazione nell’algoritmo statistico, seguita finora nel nostro lavoro. 115 Capitolo 5 – Risultati Sperimentali CAPITOLO 5 5 RISULTATI SPERIMENTALI 5.1 Set di dati utilizzato Nello sviluppo di un progetto sperimentale si ha la necessità di un set di dati ampio e completo da utilizzare in molteplici occasioni: Negli esperimenti e valutazioni progettuali iniziali; Nella determinazione della correlazione tra i parametri dei vari algoritmi utilizzati, nonché la “sensibilità” degli algoritmi stessi; Nella taratura preliminare del sistema, una volta implementato, e nelle valutazioni delle prestazioni del sistema stesso; Infine, per l’addestramento e la taratura finale del sistema, al suo inserimento pratico nell’ambito dove dovrà operare. Nel nostro particolare caso, è evidente che la situazione ottimale sarebbe quella di disporre già in fase di progettazione concettuale di un dataset ricavato dal vivo sulla rete a cui il sistema è destinato. Tuttavia, questa soluzione non è praticamente attuabile per evidenti ragioni. Pertanto, fermo restando che l’addestramento finale del sistema debba essere compiuto utilizzando dati ricavati dalla specifica rete in cui dovrà operare, per le prime tre fasi avremo bisogno di un insieme di dati di riferimento. 116 Capitolo 5 – Risultati Sperimentali Questi dati devono avere le seguenti caratteristiche: Realismo: devono essere stati generati su una vera rete, dal vivo o in condizioni di funzionamento simulato realistiche; Completezza: devono contenere tutti i dati, sia la traccia delle connessioni che il contenuto dei pacchetti, possibilmente in un formato utilizzabile facilmente; Pre-classificazione: vogliamo dei dati che abbiano una legenda di riferimento, in cui eventuali situazioni anomale inserite o riscontrate abbiano una guida di riferimento che ci aiuti a individuare veri e falsi positivi; Dopo accurate ricerche, abbiamo trovato che l’unico insieme di dati oggi disponibile in rete e di libero uso che presenti contemporaneamente tutte queste caratteristiche, ed in aggiunta sia stato specificamente creato allo scopo di effettuare benchmark e sperimentazioni su sistemi di intrusion detection, è il dataset del Lincoln Laboratory del M.I.T., altrimenti noto come “DARPA IDS Evaluation dataset”. Questo set di dati è stato infatti utilizzato in moltissimi altri lavori riguardanti lo sviluppo di sistemi IDS. In particolare per gli esperimenti abbiamo usato l’intero dataset del 1999 con lo scopo di testare approfonditamente il funzionamento del nostro sistema. Nel paragrafo successivo quindi descriveremo come è stato realizzato il “DARPA IDS Evaluation dataset” dal Lincoln Laboratory del M.I.T. per mettere in evidenza la qualità del set di dati utilizzato. 5.1.1 DARPA IDS Evaluation dataset Il problema centrale risiede nel metodo utilizzato per collezionare l’insieme dei dati. Sono possibili tre principali alternative. La prima idea potrebbe essere quella di catturare il traffico durante le normali operazioni quotidiane di una vera rete prescelta ed inoltre generare degli attacchi “controllati” verso host della rete stessa. Questa proposta, anche se ideale per uno studio di ricerca, non è ovviamente attuabile per diverse ragioni come: fuga di informazioni private e confidenziali, compromissione della sicurezza e possibilità di danneggiare o interrompere importanti servizi di rete. 117 Capitolo 5 – Risultati Sperimentali Come seconda possibilità si potrebbero rimuovere le informazioni riservate o che possono in qualche modo minacciare la sicurezza della rete dalla quale sono state raccolte. Poi, in un secondo momento, inserire manualmente degli attacchi nel set di dati “filtrato” in precedenza. Questa soluzione, però, comporta in primo luogo delle difficoltà per la rimozione delle informazioni sensibili, in secondo luogo l’alta probabilità di introdurre artefatti nell’inserimento manuale degli attacchi. Infine l’ultima alternativa, che è stata utilizzata per produrre il dataset in questione, ossia ricreare un traffico normale ed un insieme di attacchi in una rete dedicata appositamente per questo scopo. Usando quindi host reali, attacchi e traffico normale di background generati dal vivo. Il traffico normale è stato generato tenendo presente sia le caratteristiche del flusso dati osservato alla base militare americana Hanscom Air Force Base, sia le statistiche sul traffico raccolte da molte altre basi. Gli attacchi ed il codice di hacking invece, sono stati prelevati da Internet o sviluppati autonomamente per essere poi eseguiti contemporaneamente al traffico di background. 5.1.2 Generazione del Dataset La figura 5.1 mostra il diagramma del sistema implementato per generare l’intero set di dati. I computer sulla sinistra simulano la base militare americana denominata rete “interna”, mentre i computer sulla destra simulano la rete Internet denominata in questo caso rete “esterna”. Alla frontiera tra le due reti è posto un router Cisco. 118 Capitolo 5 – Risultati Sperimentali Figura 5.1 Sistema implementato per generare il “DARPA IDS Evaluation dataset” Come è possibile notare dalla figura precedente non sono stati intenzionalmente utilizzati sistemi di sicurezza attivi come firewall o IDS “in line” per permettere la corretta l’esecuzione degli attacchi simulati. Applicativi software simulano centinaia di programmatori, segretarie, manager ed altri utenti che utilizzano sia applicativi UNIX, sia programmi per sistemi Windows NT. Un kernel Linux modificato e sviluppato appositamente per questa simulazione, permette ad un ristretto numero di host di apparire sulla rete e comportarsi come se fossero centinaia di host diversi con differenti indirizzi IP. In questo modo sono stati generati diversi tipi di traffico normale utilizzando una vasta gamma di applicativi di rete, ad esempio, gli utenti simulati inviano e ricevono EMail, navigano su siti Web, inviano e ricevono file utilizzando il protocollo FTP, utilizzano Telnet per connettersi in remoto ad altri computer, possono inviare e ricevere messaggi IRC, e così via. I due elenchi seguenti riassumono l’hardware ed i sistemi operativi dei principali host nella rete ed inoltre verrà specificato anche il ruolo che essi hanno. La rete interna che simula la Eyrie Air Force Base contiene i seguenti host: 119 Capitolo 5 – Risultati Sperimentali Marx.eyrie.af.mil: vittima, sistema operativo RedHat 5.0 con kernel Linux 2.0.30 su un sistema Intel, è il Web server della base. Esso ospita la homepage e quindi il sito Internet delle base che viene utilizzato da utenti sia all’interno che all’esterno della stessa. Il software utilizzato come server Web è Apache versione 1.1.3 ed inoltre Marx offre anche altri servizi di rete come Telnet e FTP; Zeno.eyre.af.mil: vittima, sistema operativo SunOS 4.1.4 su un sistema Sparc 2, è il file server della base. Esso viene utilizzato come server si posta elettronica e permette anche la condivisione di file tra utenti mediante il servizio FTP; Pascal.eyrie.af.mil: vittima, sistema operativo Solaris 2.5 su un sistema UltraOne, è il server di connessione remota della base. Gli utenti possono collegarsi a Pascal per leggere E-Mail, navigare nel Web attraverso Lynx, un browser Web in formato testo, o usufruire degli altri servizi offerti come: Telnet, SMTP, Ssh e FTP; Hume.eyrie.af.mil: vittima, sistema operativo Windows NT Server 4.0, build 1381 con Service Pack 1 su un sistema Dell Poweredge 2300. In questo host sono installati diversi servizi e software come, ad esempio, IIS (Internet Information Server) versione 2.0 che fornisce servizi come FTP, gopher e Web server ed il Resource Kit per Windows NT 4 che invece include un server di posta elettronica e Telnet; Hobbes.eyrie.af.mil: rappresenta il generatore del traffico di background nella rete interna. Il sistema operativo è RedHat 5.0 con kernel Linux 2.0.32. Questo host è dotato del kernel modificato sviluppato appositamente per tale simulazione, citato in precedenza. Grazie a ciò Hobbes simula 20 workstation differenti. Sono state installate versioni modificate di sendmail, telnet, login ed altri strumenti di generazione del traffico di rete, con lo scopo di automatizzare tali servizi e simulare diversi utenti. Hobbes inoltre svolge anche la funzione di server DNS. Esso è infatti il server DNS primario della rete interna per quanto riguarda il dominio eyrie.af.mil; Locke.eyrie.af.mil: sniffer interno, sistema operativo Solaris 2.6 su un sistema UltraOne. Locke è utilizzato per catturare il traffico nella rete interna. A tale scopo è utilizzato l’applicativo Tcpdump versione 3.3. Durante la simulazione 120 Capitolo 5 – Risultati Sperimentali sono stati raccolti da Locke più di 16 gigabytes di informazioni osservate dalla rete; Attaccanti: due workstation reali e non simulate, la prima con sistema operativo Linux e la seconda con sistema operativo Windows NT. Questi due host oltre ad essere utilizzati come punto di partenza per gli attacchi generati dall’interno della rete militare simulata, possono periodicamente svolgere anche la funzione di host vittima. Precisamente le versioni dei sistemi operativi sono: RedHat 5.0 e Windows NT Workstation 4.0 con il Service Pack 1 installato; Loud.eyrie.af.mil: router Cisco 2500 con in esecuzione IOS v.11.3 rev4. Loud rappresenta il gateway che connette la rete interna con la rete esterna. Non è stato abilitato alcun tipo di filtro ed inoltre è possibile monitorare da remoto questo router attraverso il protocollo SNMP. La rete esterna invece contiene i seguenti host: Aesop.eyrie.af.mil: sistema operativo è RedHat 5.0 su una piattaforma Intel. Aesop simula i vari Internet Web server, appare infatti come se fosse migliaia di diversi Internet Web server. Grazie alla modificazione del kernel Linux è in grado di rispondere a richieste da parte degli altri host simulando ben 2500 diversi Web server; Calvin.eyrie.af.mil: sistema operativo RedHat 5.0 con kernel Linux modificato versione 2.0.32 su una piattaforma Intel. Calvin simula la presenza di 65 diversi host, sembrando in tal modo un gateway di 65 diverse workstation. Esso è quindi utilizzato come generatore del traffico di background nella rete esterna. Per questo scopo vengono utilizzati gli stessi software presenti in Hobbes, il generatore del traffico di background presente all’interno della rete militare; Attaccanti: tre workstation reali e non simulate, due sistemi Linux RedHat 5.2 ed un sistema Windows NT Workstation. Questi tre host fisicamente distinti, sono utilizzati per lanciare attacchi diretti ad host presenti nella rete interna. Glassmac: sistema operativo Mac O/S 8.5 su un sistema Macintosh 6100/60. Glassmac simula un monitor SNMP presente in un host militare 121 Capitolo 5 – Risultati Sperimentali remoto, che controlla diversi parametri del traffico di rete della base militare Eyrie. Solomon.world.net: sniffer esterno, sistema operativo Solaris 2.6 su un sistema Sparc 2. Questo host è utilizzato per catturare il traffico nella rete esterna proveniente e diretto verso la rete militare oggetto dei vari attacchi eseguiti. Per svolgere tale compito viene utilizzato il software Tcpdump versione 3.3. Dopo la descrizione del sistema utilizzato per generare il set di dati, soffermiamo la nostra attenzione sulle modalità di svolgimento della simulazione, come la durata della stessa e le operazioni necessarie al fine di ottenere un insieme di dati il più possibile realistico, corretto e continuo nel tempo. Il sistema è stato utilizzato per cinque settimane consecutive di simulazione, producendo quindi un set di dati contenente il traffico di rete di un periodo di tempo abbastanza ampio in modo da poter testare a fondo un sistema IDS. In particolare le settimane sono composte da cinque giorni (dal lunedì al venerdì) ed inoltre le giornate sono formate da ventidue ore (dalle 8:00 alle 6:00 del mattino del giorno seguente).La tabella seguente mostra le ore di inizio e di fine simulazione, oltre ad una breve descrizione, delle cinque settimane di simulazione. Settimana Descrizione Inizio Fine 1 Traffico di background Traffico di background con bassa percentuale di attacchi Traffico di background Traffico di background con alta percentuale di attacchi Traffico di background con alta percentuale di attacchi 1/3/1999, 8:00 am 6/3/1999, 6:00 am 8/3/1999, 8:00 am 13/3/1999, 6:00 am 15/3/1999, 8:00 am 20/3/1999, 6:00 am 29/3/1999, 8:00 am 3/4/1999, 6:00 am 5/4/1999, 8:00 am 10/4/1999, 6:00 am 2 3 4 5 Le settimane 1 e 3 sono caratterizzate solo da traffico di background, quindi senza lo svolgimento di nessun attacco. La seconda settimana contiene una bassa percentuale di attacchi rispetto al traffico normale, mentre le ultime due settimane cioè la 4 e la 5 122 Capitolo 5 – Risultati Sperimentali sono contraddistinte da un discreto numero di attacchi, in percentuale superiore rispetto alla settimana numero 2. Le informazioni circa la data e l’ora sono memorizzate nel formato UNIX, quindi utilizzando il numero di secondi trascorsi dal 1 Gennaio 1980 fino al particolare istante di cui vogliamo registrare la data e l’ora. Occorre notare due cose: la prima è che la settimana di marzo del 1999 è stata saltata, quindi non abbiamo attività di simulazione registrate nei giorni relativi a tale periodo. Inoltre domenica 4 aprile è entrata in vigore l’ora legale, per questo motivo occorre tenere presente tale situazione quando si andranno ad analizzare i dati prodotti dalla simulazione. Uno degli obiettivi della simulazione era quello di fornire un insieme di dati generati nel modo il più possibile continuo nel tempo. Ma le due ore di interruzione al giorno, si sono rese necessarie per effettuare la manutenzione manuale del sistema. Ad esempio preparare il software (script) che si occuperà di generare autonomamente il traffico di background ed anche l’esecuzione di alcuni attacchi, impostare la data ed il giorno desiderati, raccogliere tutte le informazioni sulla simulazione del giorno precedente e riavviare le macchine per l’inizio di quella successiva. Tutto questo è rappresentato nella figura 5.2: Figura 5.2 Pianificazione temporale delle simulazioni e operazioni effettuate per la manutenzione manuale del sistema 123 Capitolo 5 – Risultati Sperimentali Nonostante l’elevata automazione del sistema di simulazione sono stati necessari interventi manuali anche durante l’esecuzione vera e propria. Ad esempio per complesse azioni legate alla generazione del traffico di background come: installare nuove applicazioni o aggiornare quelle gia presenti. Inoltre alcune volte Aesop, l’host che simula migliaia di Web server in Internet , ha richiesto un intervento manuale per un riavvio dopo un blocco del sistema. Azioni manuali sono richieste anche per l’esecuzione della maggior parte degli attacchi complessi, come ad esempio attacchi basati su netcat o netbus che comprendono iterazioni con finestre Windows. Oppure semplicemente per riavviare una macchina o un servizio che ha subito un crash dopo un attacco riuscito di tipo Denial of Service. 5.1.3 Generazione del Traffico di Background L’approccio utilizzato per produrre il dataset è quello di generare del traffico di rete il più possibile realistico e statisticamente simile a quello misurato nei primi mesi del 1998 nella base militare americana, Hanscom Air Force Base. Sono stati presi in considerazione anche alcuni aspetti abbastanza particolari di questo traffico come: la frequenza di alcune parole nelle E-Mail, il tipo di sessioni Telnet ed il tipo di trasferimenti FTP. Tutte queste caratteristiche sono state riprodotte nella simulazione effettuata con lo scopo di ricreare un realistico traffico di background. Come accennato in precedenza è stata ricreata un’elevata quantità di traffico Web, Telnet ed E-Mail tra PC situati all’interno della base ma soprattutto fra questi ultimi ed i PC nella rete esterna che simulano il funzionamento di Internet. Le macchine adibite alla generazione del traffico normale di background sono state presentate nel paragrafo precedente e svolgono il proprio lavoro grazie ad un kernel Linux modificato in aggiunta a software di rete personalizzati; come ad esempio server Web, telnet, mail, ecc. Il kernel mantiene una tabella di corrispondenza fra l’ID del processo UNIX che ha richiesto la comunicazione e l’indirizzo IP che aveva l’host al momento della trasmissione. In quanto per poter simulare diversi host il computer dovrà cambiare continuamente il proprio indirizzo IP. Tutti i protocolli come TCP, UDP e ICMP consultano questa tabella prima di formare i pacchetti che verranno trasmessi in modo da inserire il corretto indirizzo IP per ciascun processo. Le connessioni in ingresso ad 124 Capitolo 5 – Risultati Sperimentali host virtuali vengono prima processate da interfacce di rete virtuali gestite dallo stesso tipo di kernel Linux per poi consegnare il contenuto del pacchetto al processo proprietario stabilito grazie alla precedente tabella di corrispondenza tra ID del processo e indirizzo IP. In questo modo un’unica macchina accetta in ingresso pacchetti con diversi indirizzi IP che poi verranno gestiti dal kernel per la corretta assegnazione ad una particolare macchina virtuale. Per quanto riguarda le applicazioni di rete anche queste sono state parzialmente adattate. Ad esempio l’utilità di login del sistema UNIX controlla l’indirizzo IP virtuale di destinazione per spedire il corretto messaggio di benvenuto. Anche gli applicativi che gestiscono i vari server Web sono stati riscritti per avere un comportamento diverso a seconda dell’host virtuale che invia una richiesta. Per quanto riguarda Aesop, cioè l’host che simula diversi server Web nella rete esterna, sottolineiamo che questo contiene la cache di tutti i siti Web reali che sta simulando. In altre parole, un sever Web simulato da Aesop è ad esempio il dominio www.yahoo.com, di conseguenza avrà memorizzato nel proprio disco fisso il contenuto del sito di Yahoo. Tale cache viene aggiornata prima di ogni simulazione. L’azione di un utente finalizzata alla navigazione sul Web viene simulata da un software autonomo. Il sito da visitare viene scelto da una lista comprendente i 20 siti Web più visitati nel periodo della simulazione ed inoltre secondo una distribuzione di probabilità basata proprio su questa classifica: il sito al primo posto della classifica avrà più probabilità di essere visitato. Persino l’ora viene considerata infatti durante il giorno abbiamo più probabilità di iniziare una connessione rispetto alle ore notturne. Una volta iniziata la navigazione il software simula il comportamento di un utente in carne ed ossa. Ci sono uguali probabilità di visitare i link di una particolare pagina o secondo il metodo depth-first (ricerca in profondità) oppure col metodo breadth-first (ricerca in ampiezza). È presa in considerazione anche la possibilità di saltare ad un nuovo sito o terminare la navigazione sempre in accordo con una determinata distribuzione di probabilità in modo da approssimare il più possibile il comportamento umano. Il software di navigazione autonoma, tanto per fare un confronto si comporta come l’automa che visita le pagine Web per il famoso motore di ricerca Google, ossia GoobleBot. 125 Capitolo 5 – Risultati Sperimentali Metodologie analoghe basate su distribuzioni statistiche diverse sono utilizzate per l’automatizzazione di altri compiti come l’invio di file, lettura ed invio di E-Mail, connessioni remote tramite Telnet, ecc. Il sistema utilizzato permette quindi la generazione del traffico di background di un buon livello realistico pur utilizzando un numero ristretto di computer per evidenti esigenze di simulazione, ma tale sistema porta con sé un aspetto negativo: il carico di lavoro di un host virtuale ha influenza anche sugli altri host virtuali gestiti dallo stesso computer fisico. Ad esempio un attacco Denial of Service verso un host virtuale degraderà le prestazioni di tutti gli altri host virtuali in esecuzione sulla stessa macchina. La figura seguente mostra ad esempio, il valore medio delle connessioni per particolari servizi TCP nel traffico di background generato secondo le modalità esposte finora: Figura 5.3 Connessioni medie per diversi servizi TCP nelle settimane di simulazione 1 e 3 quindi non contenenti attacchi 126 Capitolo 5 – Risultati Sperimentali 5.1.4 Esecuzione degli Attacchi Come descritto nel primo capitolo ci sono due possibili tipi di aggressori per un sistema informatico: Script-Kiddies: privi di reali conoscenze tecniche, studiano ed utilizzano “exploit”, attacchi preconfezionati rilasciati da esperti e facilmente reperibili su Internet; Esperti: dotati di conoscenze tecniche approfondite, capaci di elaborare attacchi innovativi o di “inventare” procedimenti nuovi. Nella simulazione sono stati presi in considerazione entrambe le classi di aggressori. Per simulare l’azione della prima categoria sono stati raccolti numerosi codici sorgente per eseguire “exploit” conosciuti e sono stati eseguiti nella stessa forma trovata su Internet, senza cambiamenti. Per la seconda categoria invece si è reso necessario un ulteriore lavoro di modifica degli attacchi conosciuti per rendere il loro rilevamento più difficoltoso. Queste modifiche si basano sulle conoscenze generali utilizzate per eludere gli Intrusion Detection System. Ad esempio alcuni codici di hacking sono stati modificati utilizzando tecniche legate al polimorfismo oppure legate alle varie problematiche che riguardano la codifica Unicode. Attacchi finalizzati alla scansione di porte o di sistemi invece sono stati modificati aumentando il tempo che intercorre tra due pacchetti o due connessioni consecutive. Intervalli di indirizzi IP o di porte sono stati analizzati in modo random invece che secondo un ordine ascendente o discendente ed inoltre durante questi attacchi sono stati aggiunti pacchetti con indirizzo IP sottoposto a spoofing per mascherare l’autore del vero attacco. Gli attacchi eseguiti sono stati classificati secondo il loro scopo: Denial of Service (DOS): attacchi che hanno lo scopo di limitare o negare completamente l’accesso ad un particolare host o servizio da parte di utenti legittimi; Probe: attacchi finalizzati ad ottenere informazioni sull’esistenza o sulla configurazione di computer singoli o di reti; 127 Capitolo 5 – Risultati Sperimentali Remote to Local (R2L): questa classe di attacchi hanno lo scopo di fornire all’aggressore un accesso locale ad un sistema rispetto al quale egli ha attualmente solo un acceso remoto; User to Root (U2R): tipologia di attacco finalizzata ad ottenere i diritti di amministratore o di utente root, in sistemi UNIX, rispetto ai quali l’aggressore ha accesso solo come utente non privilegiato; Data: attacchi con lo scopo finale di ottenere informazioni riservate o comunque alle quali l’aggressore non dovrebbe avere accesso secondo le politiche di gestione della sicurezza delle organizzazioni interessate. Alcuni attacchi di questo tipo, possono anche rientrare sia nella categoria U2R, sia nella R2L. In accordo con questa classificazione e tenendo presente gli obiettivi del sistema da noi studiato ed implementato (vedi capitolo 4, paragrafo 1) saremo interessati solo alle prime due categorie in quanto gli attacchi compresi nelle altre tre saranno completamente di competenza del tradizionale sistema IDS misuse based che svolge il proprio lavoro parallelamente al nostro. Prima di concludere occorre fare una precisazione. Precedentemente durante, l’illustrazione del sistema implementato per generale il set di dati da utilizzato, è stato evidenziato il fatto che gli host da cui sono generati gli attacchi sono fisicamente reali e non virtuali. Questa scelta è stata fatta per evitare di influenzare l’esecuzione di un attacco quando si verifica contemporaneamente un eccessivo carico computazionale di un altro host virtuale in esecuzione sulla stessa macchina che gestisce la workstation sempre virtuale dalla quale dovrebbe essere lanciato l’attacco. Questa soluzione potrebbe permettere però la rilevazione di un attacco osservando solo l’indirizzo IP dal quale proviene, in quanto solo alcuni particolari host sarebbero in tal modo adibiti a funzioni di attacco. Per evitare ciò sono stati utilizzati un particolare script ed una configurazione di rete personalizzata che permette di trasferire gli indirizzi IP virtuali tra le macchine che generano il traffico di background e le macchine utilizzate per lanciare attacchi. Per verificare il corretto funzionamento dei sistemi IDS valutati con questo set di dati è stata ovviamente fornito, in un file, l’intero elenco degli attacchi eseguiti durante tutte le settimane di valutazione. Di seguito è riportata ad esempio una voce relativa ad un attacco eseguito il 29/03/1999 alle 08:18:35: 128 Capitolo 5 – Risultati Sperimentali ID: 41.084031 Date: 29/03/1999 Name: ps Category: u2r Start_Time: 08:18:35 Duration: 00:46:05 Attacker: 209.154.098.104 Victim: 172.016.112.050 Username: haraldl Ports: At_Attacker: 80{1}, 6000{2} At_Victim: 23{3} L’ID rappresenta l’identificatore univoco di ogni attacco eseguito. Possiamo poi notare il nome dell’attacco in questo caso ps. Questo particolare attacco di tipo U2R sfrutta una vulnerabilità nella versione dell’utilità “ps” fornita con Solaris 2.5 per ottenere i privilegi di utente root. È possibile trovare una dettagliata descrizione di tutti gli attacchi eseguiti nel testo in [2]. Sono riportate anche altre informazioni come l’indirizzo IP della vittime e dell’aggressore, nonché la durata e le porte utilizzate per l’attacco. L’informazione denominata Username è presente nel caso in cui l’aggressore per eseguire l’attacco deve effettuare il login sulla macchina bersaglio come utente non privilegiato, il valore di questo campo rappresenta il nome utilizzato per l’operazione di login. 5.2 Risultati Sperimentali forniti dal Sistema Statistico Come spiegato negli obiettivi del sistema da noi proposto (capitolo 4 paragrafo 1), osserveremo il comportamento di un host di una rete, un server o comunque un PC che svolge un ruolo di una certa importanza, dai pacchetti di rete che questo invia e riceve. In tal modo vogliamo determinare la presenza di un attacco o comunque di un’anomalia quando la distribuzione statistica dei suddetti pacchetti subisce una variazione significativa rispetto a quanto osservato in regime di “normalità”. Dobbiamo quindi scegliere un host da monitorare fra tutti gli host presenti nella rete interna, che simula la rete di una base militare americana, nel sistema utilizzato per produrre il dataset del Lincoln Laboratory del M.I.T. La scelta è ricaduta su Pascal.eyrie.af.mil con indirizzo IP : 172.16.112.50. Un host vittima con sistema operativo Solaris 2.5 su un sistema UltraOne, che svolge il ruolo di server di connessione remota della base. Gli utenti possono collegarsi a Pascal per leggere E129 Capitolo 5 – Risultati Sperimentali Mail, navigare nel Web attraverso Lynx, un browser Web in formato testo, o usufruire degli altri servizi offerti come: Telnet, SMTP, Ssh e FTP. Giustifichiamo a questo punto tale decisione. Siamo particolarmente interessati ad attacchi appartenenti alle categorie Denial of Service (DOS) e Probe, In quanto data la particolare struttura del sistema da noi implementato, questo tipo di attacchi hanno una maggior probabilità di essere rilevati rispetto a tutti gli altri, i quali dovrebbero comunque interessare l’IDS misuse detection che opera contestualmente con il nostro. Dopo un’osservazione dei vari attacchi svolti durante la simulazione, quindi presenti nel dataset, abbiamo notato che Pascal è stato oggetto di un maggior numero di aggressioni appartenenti alle due suddette categorie rispetto a tutti gli altri host e quindi è stato scelto per questo motivo. Rimane comunque la possibilità di ripetere tutti i nostri esperimenti prendendo in considerazione altri host della simulazione, per testare ancora più a fondo il sistema. Possibilità da noi trascurata per motivi di tempo. L’algoritmo statistico è stato quindi testato osservando il traffico di rete di Pascal per tutta l’estensione temporale della simulazione. Ossia con tutte le informazioni relative alle cinque settimane, cinque giorni alla settimana presenti nel set di dati. Prima di vedere i risultati veri e propri riassumiamo un istante in che modo l’algoritmo statistico fornisce i risultati della propria elaborazione. Vengono generati due file del tipo di quello mostrato in figura 5.4; uno per le connessioni in ingesso e uno per le connessioni in uscita. A questo punto possiamo dire che le connessioni in ingresso ed in uscita sono relative all’host Pascal.eyrie.af.mil che abbiamo deciso di monitorare. 130 Capitolo 5 – Risultati Sperimentali Figura 5.4 File di testo di uscita relativo ai pacchetti in ingresso al server monitorato Ogni riga di questo file rappresenta una finestra di 5 istanti ed è memorizzata nel formato: campo1, campo2, campo3, campo4, campo5 Il campo1 rappresenta gli istanti di cui è composta la finestra (estremi compresi), il campo2 invece è il valore del momento primo mediato sui 5 istanti della finestra del valore relativo alla caratteristica statistica IP : Porta, il campo3 si basa sulla sola informazione riguardante le porte sorgente, il campo4 è relativo ai diversi indirizzi IP presenti nella finestra temporale ed infine il campo5 è il valore mediato del numero di pacchetti osservato nei 5 istanti definiti nel campo1. Per visualizzare meglio i risultati non riporteremo i valori contenuti in questi due file ma bensì i grafici contenenti tali valori. Tutti i grafici riportati in questo capitolo rappresenteranno un’intera giornata di osservazione dell’host Pascal. Per ogni giorno 131 Capitolo 5 – Risultati Sperimentali riporteremo quindi ben otto grafici di cui quattro relativi ai pacchetti aventi come destinatario Pascal e quattro aventi questo host come mittente. I quattro grafici che interessano una particolare direzione di comunicazione riporteranno ognuno l’andamento del momento primo di una particolare caratteristica statistica. Un grafico sarà quindi relativo alla caratteristica IP : Porta, il quale prenderà come valori delle ordinate quelli presenti nel campo2, e sarà denominato come in precedenza grafico IP : Porta, il secondo, denominato Porta, sarà relativo alle informazioni circa la porta sorgente (campo3), il terzo, denominato IP, riporterà la caratteristica relativa ai diversi indirizzi IP osservati (campo4) ed infine il quarto graficherà il numero di pacchetti osservati nelle varie finestre temporali (campo5) e sarà denominato NPkt. Tutti avranno nell’asse delle ascisse il campo1 del file dei risultati ossia il numero delle finestre formate da cinque istanti consecutivi contenute nell’intera giornata di osservazione. 5.2.1 Risultati Relativi al Traffico di Background Riportiamo, in questo paragrafo, una serie di grafici risultanti dall’elaborazione del sistema statistico di una giornata di traffico normale e precisamente il secondo giorno della prima settimana. In questo modo potremmo osservare un andamento statistico tipico di una giornata contenente solo il traffico di background ed inoltre metteremo in luce anche alcune caratteristiche di questi andamenti. 132 Capitolo 5 – Risultati Sperimentali Figura 5.5 (a) Figura 5.5 (b) 133 Capitolo 5 – Risultati Sperimentali Figura 5.5 (c) Figura 5.5 (d) 134 Capitolo 5 – Risultati Sperimentali Per prima cosa, notiamo che questi grafici sono relativi alle connessioni in ingresso ed inoltre il valore dei momenti primi mediati nei grafici (a), (b), (c) oscilla al massimo intorno al valore 7. Questo comportamento si riflette anche nei grafici degli altri giorni di traffico “normale”, sempre però per quanto riguarda le connessioni in ingresso, che non riporteremo per problemi di spazio. Il numero di pacchetti, in questo caso raggiunge quota di circa 600, mentre l’andamento degli altri giorni costituiti solo dal traffico di background può anche arrivare al massimo intorno al valore di 1400, per quanto riguarda le connessioni in ingresso. È interessante capire le differenze tra i grafici (a), (b), (c).Per far ciò prendiamo in considerazione la zona contrassegnata nei due grafici corrispondente ad un valore in ascissa pari a 194-198, cioè la finestra formata dai 5 istanti consecutivi, dall’istante 194, all’istante 198, compresi gli estremi. Il valore riportato nell’asse Y corrisponde quindi al valore dei momenti primi, determinati con le modalità illustrate nel paragrafo 4.1 del capitolo 4, mediati sui 5 istanti. Il grafico IP:Porta riporta, nella zona contrassegnata, un valore di Y abbastanza elevato circa 7,43. Questa situazione non si verifica invece per il grafico Porta infatti per il particolare valore di X pari a 194-198, il corrispondente valore Y è di 4,37 che non rappresenta un valore particolarmente elevato in quanto abbondantemente nella media dell’andamento generale di tale grafico. Quello che accade con il grafico IP:Porta, invece si ripresenta nel grafico IP con un valore della coordinata Y di 6,7 pari ad un valore di picco per l’andamento del grafico in generale. Vediamo il perché di questa situazione osservando il contenuto delle finestre temporali del secondo giorno, prima settimana, relative al periodo di tempo marcato nelle figure precedenti (a), (b), (c). Le informazioni riportate di seguito sono estratte da un file che costituisce un’elaborazione intermedia del sistema statistico. Queste informazioni sono particolarmente utili sia per scopi di debug ma soprattutto per finalità di “computer forensics”. È infatti possibile risalire al perché di un determinato comportamento osservato nei grafici ed inoltre è anche possibile risalire all’indirizzo IP ed al numero di porta colpevoli di aver determinato un’anomalia nell’andamento dei suddetti grafici. 194,11:14:10.474795,11:15:10.474795,60.000000,332,0 172.16.112.20:53,16 172.16.114.148:25,14 196.227.33.189:25,11 197.182.91.233:25,11 172.16.114.50:25,12 172.16.112.194:25,13 135 Capitolo 5 – Risultati Sperimentali 172.16.112.10:123,1 172.16.113.84:24694,254 195,11:15:10.474796,11:16:10.474796,60.000000,438,0 172.16.112.149:24705,151 172.16.112.20:53,11 172.16.112.100:25,8 172.16.114.207:26218,267 172.16.112.10:123,1 196,11:16:10.474797,11:17:10.474797,60.000000,730,0 172.16.113.204:28280,712 172.16.112.20:53,8 172.16.112.100:25,9 172.16.112.10:123,1 197,11:17:10.474798,11:18:10.474798,60.000000,277,0 172.16.112.194:29068,228 172.16.112.20:53,8 172.16.112.100:25,8 172.16.112.194:31842,33 198,11:18:10.474799,11:19:10.474799,60.000000,221,0 172.16.112.194:31842,220 172.16.112.10:123,1 Ogni raggruppamento rappresenta un particolare istante è possibile ottenere delle informazioni sul particolare istante osservando la prima riga di ogni raggruppamento ad esempio: 194,11:14:10.474795,11:15:10.474795,60.000000,332,0 La riga è memorizzata nel seguente formato: campo1, campo2, campo3, campo4, campo5, campo6 Il campo1 riporta il numero dell’istante del giorno preso in considerazione, nel nostro caso il secondo giorno della prima settimana. Il campo2 ed il campo3 riportano rispettivamente l’ora di inizio e fine dell’istante comprensiva di millisecondi, il campo4 riporta la durata dell’istante, in questo caso 60 secondi, come del resto accade in tutti gli altri istanti. Il campo5 contiene il numero totale di pacchetti osservati e l’ultimo (campo6) è utile esclusivamente per informazioni di debug in quanto ci informa nel caso sia pari ad 1 che l’istante temporale non è completo ossia che il file contenente la registrazione delle attività di rete è finito prima di poter osservare tutti i 60 secondi. Le 136 Capitolo 5 – Risultati Sperimentali informazioni seguenti nel raggruppamento sono le diverse coppie IP : Porta osservate durante i secondi dell’istante in questione. Focalizziamo la nostra attenzione sull’istante 194, infatti è proprio questo che ha determinato il valore 7,43 della coordinata Y relativa alla finestra temporale da 194 a 198 (valore presente nell’asse X). In quanto rispetto agli altri è quello che ha un maggior numero di coppie IP:Porta osservate. Osserviamo a questo punto gli stessi istanti ma considerando solo l’informazione sulle diverse porte sorgente osservate: 194,11:14:10.474795,11:15:10.474795,60.000000,332,0 53,UDP,16 25,TCP,61 123,UDP,1 24694,TCP,254 195,11:15:10.474796,11:16:10.474796,60.000000,438,0 24705,TCP,151 53,UDP,11 25,TCP,8 26218,TCP,267 123,UDP,1 196,11:16:10.474797,11:17:10.474797,60.000000,730,0 28280,TCP,712 53,UDP,8 25,TCP,9 123,UDP,1 197,11:17:10.474798,11:18:10.474798,60.000000,277,0 29068,TCP,228 53,UDP,8 25,TCP,8 31842,TCP,33 198,11:18:10.474799,11:19:10.474799,60.000000,221,0 31842,TCP,220 123,UDP,1 Notiamo che la finestra temporale 194 in questo caso non si presenta significativamente differente rispetto alle altre. Questo è determinato da cinque diversi indirizzi IP (172.16.114.148, 196.227.33.189, 197.182.91.233, 72.16.114.50, 172.16.112.194) che però sono tutti associati alla stessa porta sorgente ossia la numero 25 relativa al protocollo TCP. In tal modo ben cinque righe del primo file sono state condensate in una sola nel file precedente. Il grafico IP : Porta costruito a partire dalle informazioni 137 Capitolo 5 – Risultati Sperimentali contenute nel primo file rileva quindi che l’istante 194 è “differente” dagli altri, mentre il grafico relativo alla sola porta non nota questa differenza. Abbiamo visto che invece il grafico relativo all’indirizzo IP riporta un valore per la specifica finestra comprendente gli istanti 194-198 abbastanza elevato, ora possiamo capire il motivo osservando l’ultimo file ossia quello da cui viene costruito il suddetto grafico. 194,11:14:10.474795,11:15:10.474795,60.000000,332,0 172.16.112.20,16 172.16.114.148,14 196.227.33.189,11 197.182.91.233,11 172.16.114.50,12 172.16.112.194,13 172.16.112.10,1 172.16.113.84,254 195,11:15:10.474796,11:16:10.474796,60.000000,438,0 172.16.112.149,151 172.16.112.20,11 172.16.112.100,8 172.16.114.207,267 172.16.112.10,1 196,11:16:10.474797,11:17:10.474797,60.000000,730,0 172.16.113.204,712 172.16.112.20,8 172.16.112.100,9 172.16.112.10,1 197,11:17:10.474798,11:18:10.474798,60.000000,277,0 172.16.112.194,261 172.16.112.20,8 172.16.112.100,8 198,11:18:10.474799,11:19:10.474799,60.000000,221,0 172.16.112.194,220 172.16.112.10,1 Possiamo notare, come del resto potevamo aspettarci che l’istante 194 è in questo caso diverso dagli altri in quanto sono presenti nuovamente tutti gli indirizzi IP che stanno comunicando sulla porta 25 TCP, questo determinerà la presenza di un valore elevato nel grafico IP. Riassumendo il grafico IP:Porta riporta valori abbastanza elevati nelle finestre temporali dove vengono osservati un congruo numero di indirizzi IP o comunque di porte diverse rispetto a quanto accade in presenza di valori più bassi. Il grafico IP avrà un comportamento simile solo in caso di presenza di diversi indirizzi IP ma non ci 138 Capitolo 5 – Risultati Sperimentali avvertirà nel caso in cui un unico indirizzo IP sta comunicando su un ampio intervallo di porte. Questa informazione ci verrà fornita come vedremo successivamente dal grafico Porta. I grafici relativi ai pacchetti in uscita della giornata su cui ci siamo focalizzati ossia prima settimana, secondo giorno sono riportati di seguito. 139 Capitolo 5 – Risultati Sperimentali Figura 5.6 (a) Figura 5.6 (b) 140 Capitolo 5 – Risultati Sperimentali Figura 5.6 (c) Figura 5.6 (d) 141 Capitolo 5 – Risultati Sperimentali In questo caso i grafici (a) e (b) sono contraddistinti da valori di picco di circa 50. Gli altri giorni contenenti solo traffico normale che come in precedenza non sono riportati per problemi di spazio possono contenere valori di picco per i grafici (a) e (b) ci circa 110. Il grafico (c) è sostanzialmente identico al precedente e valgono le stesse considerazioni fatte per quanto riguarda i pacchetti in ingresso. L’ultimo grafico (d) relativo al numero di pacchetti osservati in uscita ha valori di picco di circa 350, mentre nelle altre giornate di traffico normale tali valori possono arrivare a circa 1400. Il curioso andamento dei grafici (a) e (b) che inizia da circa metà giornata e prosegue fino alla fine della stessa è presente in tutti i giorni del dataset. Tale andamento è causato da query DNS che Pascal esegue verso il server DNS primario della rete interna della base militare ossia Hobbes. Come è possibile notare dalle figure questo andamento non è presente nel grafico (c) relativo alle informazioni sulla sola caratteristica IP. Questo è spiegabile in modo analogo a quanto fatto in precedenza per i grafici riportanti le connessioni in ingresso. Una richiesta DNS è caratterizzata da un unico indirizzo IP di destinazione che rappresenta il server DNS. Le porte sorgente però sono diverse in quanto Pascal, molto probabilmente ha molti processi contemporaneamente in esecuzione per rispondere a tutte le richieste di login remoto. Ognuno di questi processi farà una propria richiesta DNS quando necessario e sarà contraddistinto da una diversa porta sorgente assegnata nell’istante della richiesta dal sistema operativo di Pascal al processo interessato. Rivedendo gli stessi file precedenti generati dal sistema statistico ma per i pacchetti in uscita relativi ad un istante in cui è presente un valore di picco dei due grafici (a) e (b) è possibile convincersi di quanto affermato in precedenza. Prendiamo ad esempio la finestra temporale con gli istanti 714-718 in cui però l’istante interessante che produce quel particolare andamento è proprio il 714 dal momento che gli altri quattro hanno solo un paio di voci: 714,19:54:10.475315,19:55:10.475315,60.000000,94,0 172.16.112.100:33098,1 172.16.112.10:32785,2 172.16.112.20:34412,1 172.16.112.20:34413,1 172.16.112.20:34414,1 172.16.112.20:34415,1 172.16.112.20:34416,1 172.16.112.20:34417,1 172.16.112.20:34418,1 172.16.112.20:34419,1 142 Capitolo 5 – Risultati Sperimentali 172.16.112.20:34420,1 172.16.112.20:34421,1 172.16.112.20:34422,1 172.16.112.20:34423,1 172.16.112.20:34424,1 172.16.112.20:34425,1 172.16.112.20:34426,1 172.16.112.20:34427,1 . . . Sono state rimosse per motivi di spazio altre circa 70 righe con lo stesso indirizzo IP ossia 172.16.112.20 ed il numero di porta contraddistinto da un aumento progressivo di una unità. Questo è il file IP : Porta, quello relativo alla sola porta riportato di seguito è molto simile. 714,19:54:10.475315,19:55:10.475315,60.000000,94,0 33098,TCP,1 32785,UDP,2 34412,UDP,1 34413,UDP,1 34414,UDP,1 34415,UDP,1 34416,UDP,1 34417,UDP,1 34418,UDP,1 34419,UDP,1 34420,UDP,1 34421,UDP,1 34422,UDP,1 34423,UDP,1 34424,UDP,1 34425,UDP,1 34426,UDP,1 34427,UDP,1 . . . Ma infine il file IP è notevolmente differente: 714,19:54:10.475315,19:55:10.475315,60.000000,94,0 172.16.112.100,1 172.16.112.10,3 172.16.112.20,90 Le 90 righe presenti nei file precedenti relative all’indirizzo IP 172.16.112.20 sono state condensate solo in una in questo file. I grafici (a) e (b) riportano quindi valori molto elevati rispetto all’andamento generale come conseguenza delle 90 righe presenti 143 Capitolo 5 – Risultati Sperimentali nei file da cui i grafici sono stati generati. Mentre il grafico (c) non risente della situazioni degli altri due, dal momento che l’istante 714 è statisticamente simile per mole di traffico agli altri 4 che formano la finestra temporale 714-718. Ricapitolando, valori elevati rispetto all’andamento temporale generale del grafico IP : Porta corrispondono a situazioni in cui sono stati osservati un numero maggiore di indirizzi IP o numeri di porte diverse rispetto ad altri istanti. Il grafico IP invece conterrà valori elevati in corrispondenza di finestre con un numero elevato di IP ed infine il grafico Porta si comporterà analogamente osservando un elevato numero di valori di porte differenti nello stesso istante temporale. Inizialmente si è pensato di far funzionare il sistema statistico osservando solo la coppia IP : Porta, in seguito sono stati introdotti gli altri due grafici per distinguere se un allarme è stato causato da un eccessivo traffico di indirizzi IP diversi o inversamente da un eccessivo traffico di porte diverse. Se infatti si presentano pacchetti da “troppi” indirizzi IP diversi potremo osservare un allarme, caratterizzato da un valore elevato riportato negli assi Y dei grafici IP : Porta e IP. Mentre se un solo indirizzo IP sta comunicando su un intervallo di porte troppo elevato possiamo osservare un allarme nei grafici IP:Porta e Porta. Tutte queste considerazioni sono valide anche in presenza di un attacco o di un’anomalia con la differenza che in tal caso il delta fra il valore elevato osservato e l’andamento generale del grafico è molto maggiore rispetto ad una situazione di “normalità” visto finora. A questo punto riportiamo i risultati forniti dal sistema statistico in presenza di attacchi. 5.2.2 Risultati Relativi agli Attacchi Per determinare se un attacco è stato rilevato o meno abbiamo utilizzato la seguente procedura. Prima di tutto per ogni grafico relativo alle giornate contenti attacchi, quindi la seconda, la quarta e la quinta abbiamo verificato mediante una semplice ispezione visiva se l’andamento dei suddetti grafici fosse in qualche modo significativamente differente rispetto a quanto visto in caso di traffico normale. Se questa verifica dava esito positivo siamo passati a verificare l’ora corrispondente al momento dell’anomalia, nonché l’indirizzo IP e se possibile la porta colpevoli di averla causata. 144 Capitolo 5 – Risultati Sperimentali Questo veniva fatto basandosi su quei file visti nel paragrafo precedente che vengono salvati dal sistema durante il proprio funzionamento. Infatti data la finestra temporale con il valore mediato del momento primo in qualche modo “anormale” è possibile risalire all’ora di occorrenza della finestra temporale ed all’indirizzo IP osservando le informazioni di ogni istante memorizzate nel file suddetto. Una volta ottenute queste informazioni abbiamo verificato la presenza di un attacco in quel determinato giorno e ora, tenendo anche presente l’indirizzo IP dell’aggressore. La verifica è stata eseguita incrociando i dati presenti nel file contenente tutti gli attacchi eseguiti durante le cinque settimane di simulazione ovviamente fornito dal Lincoln Laboratory del M.I.T.. Un attacco verrà rilevato solo da alcune delle caratteristiche osservate. Ad esempio un tipo potrebbe essere notato solo dai grafici IP : Porta e IP mentre un altro solo dai grafici IP:Porta e Porta a seconda se coinvolgono rispettivamente un elevato numero di IP diversi oppure un elevato numero di porte da un ristretto insieme di IP diversi. Analogamente potrebbe essere rilevato solo dai grafici che si occupano dei pacchetti in ingresso o solo dai grafici che si occupano di quelli in uscita. Questo mette in luce il motivo principale per cui sono state contemporaneamente prese in considerazione più di una caratteristica. La speranza era quella che il sistema di reti neurali seguente potesse in qualche modo discriminare un particolare tipo di attacco dalle caratteristiche statistiche che lo hanno rilevato. I risultati forniti dal sistema di reti neurali metteranno in luce che questa speranza si è almeno in parte verificata. In seguito sempre per motivi di spazio saranno riportate per ogni istanza di attacco solo i grafici relativi alle caratteristiche statistiche che lo hanno rilevato. Gli altri non riportati infatti non hanno significative variazioni rispetto a quelli generati a partire dal traffico “normale”. In questo paragrafo riporteremo gli attacchi raggruppando in un particolare sottoparagrafo tutti quelli dello stesso tipo ossia con lo stesso nome. Quindi nel caso di istanze multiple di attacco con lo stesso nominativo, queste verranno riportate tutte nello stesso sottoparagrafo con l’indicazione del giorno e della settimana in cui sono state osservate. 145 Capitolo 5 – Risultati Sperimentali 5.2.2.1 Attacco “Mailbomb” L’attacco denominato “Mailbomb” appartiene alla categoria Denial of Service (DOS) e si basa sull’invio di un elevato quantitativo di E-Mail ad un singolo server di posta con lo scopo di sovraccaricare la sua coda di posta con conseguente blocco del sistema. Un tipico attacco “Mailbomb” si svolge attraverso la richiesta da parte di un discreto numero di utenti di inviare ben 10000 messaggi da un kilobyte ciascuno, in totale quindi 10 megabyte di informazioni da ciascun utente. Nel dataset utilizzato sono presenti 3 diverse istanze di questo attacco con obiettivo Pascal, il server da noi osservato. In particolare abbiamo la prima aggressione il secondo giorno della seconda settimana, la seconda si è verificata il giorno dopo ed infine la terza il terzo giorno della quarta settimana. Il nostro sistema statistico è stato in grado di rilevare tutte le tre diverse occorrenze di questo attacco, come testimoniato dai grafici riportati in seguito. Tali grafici rappresentano le caratteristiche statistiche che hanno permesso di rilevare questo tipo di attacco per le tre giornate in cui si è verificato. Essi sono in ordine temporale cioè: la prima sequenza (figure 5.7) è relativa al secondo giorno della seconda settimana, la sequenza successiva (figure 5.8) è relativa al terzo giorno della stessa settimana ed infine l’ultima sequenza riporta il terzo giorno della quarta settimana. 146 Capitolo 5 – Risultati Sperimentali Figura 5.7 (a) Figura 5.7 (b) 147 Capitolo 5 – Risultati Sperimentali Figura 5.7 (c) Figura 5.7 (d) 148 Capitolo 5 – Risultati Sperimentali Figura 5.7 (e) Figura 5.7 (f) 149 Capitolo 5 – Risultati Sperimentali Figura 5.8 (a) Figura 5.8 (b) 150 Capitolo 5 – Risultati Sperimentali Figura 5.8 (c) Figura 5.8 (d) 151 Capitolo 5 – Risultati Sperimentali Figura 5.8 (e) Figura 5.8 (f) 152 Capitolo 5 – Risultati Sperimentali Figura 5.9 (a) Figura 5.9 (b) 153 Capitolo 5 – Risultati Sperimentali Figura 5.9 (c) Figura 5.9 (d) 154 Capitolo 5 – Risultati Sperimentali Notiamo che le prime due occorrenze di attacco (figure 5.8 e 5.7 (a), (b), (c), (d), (e), (f)) hanno mostrato più o meno lo stesso comportamento. Nei grafici relativi al secondo giorno della seconda settimana l’attacco si è presentato nell’intorno della finestra temporale 390-394. Per tale valore dell’asse X infatti il picco che ha permesso l’identificazione dell’attacco ha superato notevolmente i valori visti nel caso di traffico normale. In particolare è stato raggiunto il approssimativamente il valore di 850 per quanto riguarda i grafici IP : Porta e Porta per i pacchetti in uscita, mentre i stessi grafici relativi ai pacchetti in ingresso hanno raggiunto quota 28. I due grafici invece relativi al numero di pacchetti osservati sia in ingresso che in uscita hanno raggiunto entrambi il valore 1440 leggermente superiore al massimo valore raggiunto da questi grafici durante l’osservazione del solo traffico di background. La rilevazione del giorno seguente in cui l’attacco è stato eseguito ad un’ora corrispondente alla finestra 350-354 è praticamente identica a quella già vista questo presuppone che l’attacco sia stato eseguito con le stesse modalità e che quindi abbia raggiunto la stessa intensità. La situazione è diversa per quanto riguarda l’ultima aggressione di questo tipo, il terzo giorno della quarta settimana. L’attacco avvenuto nella finestra 534-538 ha evidenziato valori leggermente più bassi dei precedenti per i grafici IP : Porta e Porta mentre il grafico NPkt, prima al limite, ha raggiunto anch’esso valori notevolmente più bassi e per questa ragione non è stato riportato. Implicitamente quindi abbiamo deciso che questa aggressione non è stata rilevata dalla caratteristica statistica legata al numero di pacchetti, conseguenza del fatto che magari è stata meno intensa rispetto alle altre due. 5.2.2.2 Attacco “Smurf” Attacco legato alla categoria Denial of Service (DOS). Questo tipo di attacco esegue una negazione del sevizio della rete contro l’host di destinazione, nel nostro caso Pascal, affidandosi all’aiuto di un intermediario. L’aggressore, effettuando lo spoofing dell’indirizzo IP sorgente dell’host di destinazione, genera una grossa quantità di traffico eco ICMP (Internet Control Message Protocol) diretto verso indirizzi IP di broadcast. L’intermediario, detto anche amplificatore di smurfing, invia sul suo 155 Capitolo 5 – Risultati Sperimentali percorso la trasmissione broadcast. Ogni host che riceve il broadcast risponde all’IP sorgente sottoposto a spoofing con una replica eco e, secondo il numero di host sulla rete, sia l’intermediario, sia l’host bersaglio possono essere inondati di traffico. Lo schema di tale attacco è riportato nella figura 5.10. Figura 5.10 Schema di un attacco Smurf L’attacco “Smurf” è stato lanciato nella simulazione tre volte contro Pascal. Precisamente, il primo giorno della quarta settimana, il quinto giorno della stessa settimana ed infine il primo giorno della quinta settimana. Anche in questo caso il sistema statistico ha rilevato tutte le tre istanze di questa aggressione. Come in precedenza, riporteremo i grafici in ordine temporale cioè: la prima sequenza (figure 5.11) è relativa alla prima istanza di “Smurf”, la seconda (figure 5.12) è relativa quinto giorno della quarta settimana ed infine l’ultima sequenza riporta l’ultima istanza. 156 Capitolo 5 – Risultati Sperimentali Figura 5.11 (a) Figura 5.11 (b) 157 Capitolo 5 – Risultati Sperimentali Figura 5.11 (c) 158 Capitolo 5 – Risultati Sperimentali Figura 5.12 (a) Figura 5.12 (b) 159 Capitolo 5 – Risultati Sperimentali Figura 5.13 (a) Figura 5.13 (b) 160 Capitolo 5 – Risultati Sperimentali Come avvenuto per l’attacco “Mailbomb” anche in questo caso non tutte le istanze dell’attacco “Smurf” si sono verificate allo stesso modo e con la stessa intensità. La prima occorrenza è stata segnalata dai grafici IP : Porta e IP delle connessioni in ingresso, con valori di picco di circa 100. Inoltre il grafico NPkt sempre relativo alle connessioni in ingresso ha raggiunto quota 10000. La seconda istanza di attacco invece è stata riconosciuta solo dai grafici IP : Porta e IP i quali hanno raggiunto in questo caso il valore 120. Analogamente per l’ultima istanza di attacco il primo giorno della quinta settimana. Spendiamo due parole per descrivere meglio gli ultimi due grafici relativi al primo giorno della quinta settimana. Il picco del grafico IP :Porta che rappresenta l’aggressione a cui siamo interessati in questo momento è quello evidenziato. Pur essendo infatti più basso rispetto all’altro raggiunge la quota di circa 770 contro dei valori approssimativamente intorno ad 8 nel caso “normale”. L’altro picco in figura è dovuto ad un altro tipo di attacco che vedremo in seguito. 5.2.2.3 Attacco “Portsweep” Questo tipo di attacco rientra nella categoria Probe, infatti consiste nella scansione di determinate porte di un singolo host con lo scopo di capire che tipo di servizi di rete sono in esecuzione sul computer obiettivo. Nella simulazione sono stati effettuati cinque diversi tentativi di scansione delle porte verso Pascal. Il sistema di rilevamento in questo caso non si è comportato alla perfezione come in precedenza ma è stato in grado di rilevare solamente due dei cinque tentativi. Questo comportamento però era in qualche modo prevedibile infatti una scansione delle porte è rilevabile attraverso un algoritmo statistico che controlla il flusso del traffico di rete solo se coinvolge un ampio raggio di porte o magari più host contemporaneamente. Infatti le altre tre aggressioni non identificate sono caratterizzate da un ristretto numero di pacchetti inviati pel la scansione. Un’ulteriore conferma di questa affermazione è rappresentata dal fatto che due su tre delle aggressioni non notate dal sistema statistico sono state lanciate in modo da renderle meno evidenti, ad esempio controllando solo poche porte, come se fossero state eseguite da hacker esperti ai quali non occorre avere molte informazioni su un sistema per capire che tipo di servizi ha in esecuzione. 161 Capitolo 5 – Risultati Sperimentali Gli attacchi rilevati e di conseguenza riportati in questo paragrafo sono quindi due. Precisamente il quinto giorno della seconda settimana ed il terzo giorno della quinta settimana. 162 Capitolo 5 – Risultati Sperimentali Figura 5.14 (a) Figura 5.14 (b) 163 Capitolo 5 – Risultati Sperimentali Figura 5.14 (c) Figura 5.14 (d) 164 Capitolo 5 – Risultati Sperimentali Figura 5.15 (a) Figura 5.15 (b) 165 Capitolo 5 – Risultati Sperimentali Portsweep è stato rilevato dalla caratteristiche IP : Porta e dalla caratteristica Porta. Il comportamento è corretto in quanto l’attacco è lanciato da un solo indirizzo IP che tenta di comunicare con un elevato numero di porte del server Pascal, per tale motivo ha dato l’allarme proprio il grafico Porta. 5.2.2.4 Attacco “Udpstorm” Con questa aggressione ritorniamo nella categoria Denial of Service (DOS). Udpstorm sfrutta un bug del demone inetd del sistema operativo Solaris per creare mediante l’invio di un solo pacchetto sottoposto a spoofing da parte dell’aggressore, un flusso infinito di pacchetti tra due macchine vulnerabili. Il procedimento è il seguente: per prima cosa l’aggressore invia un pacchetto con indirizzo IP sorgente sottoposto a spoofing, attribuendo in questo modo la provenienza del pacchetto alla prima vittima. Questo pacchetto viene inviato alla porta in cui ascolta il demone inetd (porta echo) della seconda vittima. Il servizio in questione risponde inviando a propria volta un messaggio echo all’indirizzo IP contenuto nel pacchetto ricevuto, ossia l’IP della prima vittima. La prima vittima, ricevuto il pacchetto di risposta ad una domanda che in realtà non ha mai fatto, invia un ulteriore messaggio echo alla seconda vittima pensando che essa abbia iniziato la trasmissione. Questo scambio di pacchetti continuerà fino al crash del servizio inetd e quindi del sistema dei due obiettivi. Durante le settimane di simulazione questo attacco è stato lanciato contro Pascal due volte ed entrambe le volte è stato rilevato dal nostro sistema. I grafici seguenti sono relativi alle due giornate contenenti l’attacco suddetto, ossia il primo ed il secondo giorno della quinta settimana. 166 Capitolo 5 – Risultati Sperimentali Figura 5.16 (a) Figura 5.16 (b) 167 Capitolo 5 – Risultati Sperimentali Figura 5.17 (a) Figura 5.17 (b) 168 Capitolo 5 – Risultati Sperimentali Come prima osservazione possiamo dire che l’attacco è stato rilevato solo dal grafico NPkt. Questo è dovuto alla particolare struttura dell’aggressione e contemporaneamente alla struttura del sistema statistico che si occupa delle altre caratteristiche statistiche come IP : Porta, Porta e IP. L’attacco si manifesta infatti come un’infinita quantità di pacchetti UDP provenienti tutti dallo stesso IP, l’IP della seconda vittima supponendo che Pascal sia la prima, e dalla stessa porta ossia la porta del demone inetd. Per tale ragione le altre tre caratteristiche statistiche su cui si basa il nostro sistema statistico non hanno sollevato l’allarme. Nella finestra interessata, sono stati sì osservati più di 6000 pacchetti ma purtroppo tutti provenienti da un solo indirizzo IP e dalla stessa porta. Quindi ci siamo trovati costretti ad inserire nelle caratteristiche statistiche osservate anche il numero di pacchetti processati in una finestra temporale, rischiando un aumento di falsi positivi, ma catturando anche questo tipo di attacco. Per quanto riguarda i grafici del primo giorno della quinta settimana il picco dell’attacco Udpstorm è quello evidenziato, l’altro è relativo ad un altro attacco occorso nello stesso giorno. 5.2.2.5 Attacco “SshProcessTable” Sshprocesstable appartiene alla categoria Denial of Service (DOS). Questo attacco sfrutta una limitazione del kernel del sistema operativo dell’host vittima. Questa limitazione riguarda il numero di processi che riesce a gestire contemporaneamente. L’aggressore inizia un elevato numero (solitamente centinaia) di connessioni alla vittima via Ssh senza però completare il login in nessuna connessione. In tal modo se il timeout per un login non ancora avvenuto è sufficiente, è possibile riempire la tabella dei processi dell’host vittima esaurendo le risorse di sistema per i nuovi processi. Essendo un attacco di tipo Denial fo Service il sistema è stato in grado di riconoscere correttamente l’unica istanza di questo attacco presente nella simulazione. Riportiamo quindi i grafici relativi alle caratteristiche statistiche che hanno evidenziato l’aggressione del giorno in questione ossia il quarto giorno della quarta settimana. 169 Capitolo 5 – Risultati Sperimentali Figura 5.18 (a) Figura 5.18 (b) 170 Capitolo 5 – Risultati Sperimentali 5.2.2.6 Attacco “Neptune” Ancora un attacco appartenente alla categoria Denial of Service (DOS). In particolare Neptune è un attacco di tipo SYN Flood che ha lo scopo principale di degradare le prestazioni del sistema e viene eseguito inviando le richieste di connessione TCP più velocemente di quanto il sistema di destinazione le possa elaborare. Il sistema vittima conserva le risorse per tenere traccia di ciascuna connessione, quindi un cospicuo numero di SYN in arrivo può far sì che l’host bersaglio esaurisca le risorse destinate alle nuove connessioni legittime. L’indirizzo IP sorgente è, come di consueto, sottoposto a spoofing: in tale modo, quando il sistema bersaglio tenta di rispondere con la seconda fase dell’handshaking a tre fasi, ovvero SYN-ACK, non riceve alcuna risposta. È presente un solo attacco Neptune in tutta la simulazione, il primo giorno della quinta settimana, ed è stato rilevato, come evidenziato dai grafici seguenti, da diverse caratteristiche statistiche. 171 Capitolo 5 – Risultati Sperimentali Figura 5.19 (a) Figura 5.19 (b) 172 Capitolo 5 – Risultati Sperimentali Figura 5.19 (c) Figura 5.19 (d) 173 Capitolo 5 – Risultati Sperimentali Figura 5.19 (e) Figura 5.19 (f) 174 Capitolo 5 – Risultati Sperimentali Questo è il famoso attacco che abbiamo visto accoppiato in precedenza ad altri il primo giorno della quinta settimana. Anche in questo caso in presenza di due picchi nello stesso grafico occorre considerare quello evidenziato. 5.2.2.7 Attacco “Mscan” Ultimo attacco facente parte della categoria Probe. Mscan in realtà è un tool di scansione che usa sia tecniche di trasferimento DNS sia scansione a forza bruta di vari indirizzi IP in cerca di vulnerabilità conosciute. L’attacco si è verificato due volte durante la simulazione. Come avvenuto in precedenza, con l’altro attacco appartenete alla categoria Probe, ossia Portsweep, il sistema non si è comportato in modo ottimale come nei casi appartenenti alla categoria Denial of Service (DOS), rilevando solo una delle due istanze occorse. I grafici seguenti sono relativi al quarto giorno della quinta settimana, il giorno in cui si è verificata l’aggressione Mscan rilevata. 175 Capitolo 5 – Risultati Sperimentali Figura 5.20 (a) Figura 5.20 (b) 176 Capitolo 5 – Risultati Sperimentali 5.2.2.8 Attacco “Secret” Questo attacco è particolare rispetto agli altri, infatti fa parte della categoria Data comprendente attacchi con lo scopo finale di ottenere informazioni riservate. Secret infatti si verifica quando l’aggressore trasferisce in modo illecito informazioni sensibili da un particolare host. Questo attacco, pur non appartenendo alle due categorie che il sistema ha dimostrato di riconoscere, ed essendo solitamente associato ad aggressioni di tipo R2L o U2R il cui riconoscimento è affidato al sistema IDS misuse detection parallelo, è stato rilevato. Perché? I pacchetti coinvolti in questa aggressione sono provenienti da un indirizzo IP che è stato vittima nello stesso giorno di un attacco Httptunnel (R2L) partito da Pascal, il server che stiamo monitorando. Questa affermazione è conseguenza dell’osservazione dei file prodotti dal sistema proposto contenenti le informazioni (ora di ricezione o di invio dei pacchetti, indirizzi IP e porte) relative a ciascun istante che compongono le varie finestre temporali graficate nelle figure di questo paragrafo. Come detto in precedenza infatti tali file possono essere di ausilio nel capire il perché di un particolare comportamento permettendo una naive metodologia di “computer forensics”. Ritornando allo scenario di attacco, l’aggressore dopo aver portato a termine con successo l’attacco R2L ha iniziato a sfruttare la situazione per “rubare” delle informazioni sensibili dall’host compromesso. Tali informazioni partivano quindi in modo illecito dalla vittima alla volta di Pascal dove l’aggressore le attendeva sfruttando l’ignaro server di login sul quale ha un accesso lecito. Il sistema proposto ha notato il trasferimento di queste informazioni in quanto l’aggressore per accedere a quante più informazioni possibili ha iniziato un trasferimento in massa obbligando Pascal ad utilizzare più porte contemporaneamente e quindi a modificare il proprio comportamento rispetto ad una condizione di “normalità”. Tutto ciò alimenta la speranza che il sistema proposto sia almeno in parte in grado di rilevare un comportamento anomalo di un server, in conseguenza allo sfruttamento dell’host da parte di un aggressore che agisce protetto da un rootkit o da un modulo maligno del kernel. Egli, infatti, attraverso una vulnerabilità o comunque per mezzo di un attacco R2L per qualche ragione non rilevato dal tradizionale sistema IDS misuse detection ha violato il server e dopo aver nascosto la propria presenza può utilizzare 177 Capitolo 5 – Risultati Sperimentali l’host a proprio piacimento. L’unico segnale rilevabile di questa presenza è un flusso anomalo di pacchetti nel filo di rete, provenienti e diretti verso il server violato. Uno degli obiettivi del nostro lavoro era di rilevare questo tipo di anomalia il più velocemente possibile, per poi avvertire della situazione l’amministratore di rete che conseguentemente può correre ai ripari per porre fine al possibile sfruttamento, o alla fuga di informazioni, dal server compromesso della propria rete. La rilevazione da parte del sistema statistico dell’attacco Secret in questione mostra che abbiamo intrapreso la strada giusta per raggiungere l’obiettivo prefissato. In seguito sono riportati i grafici del quinto giorno della quinta settimana, giorno in cui si è verificata l’anomalia descritta. 178 Capitolo 5 – Risultati Sperimentali Figura 5.21 (a) Figura 5.21 (b) 179 Capitolo 5 – Risultati Sperimentali 5.3 Risultati Sperimentali forniti dal Sistema di Reti Neurali Per prima cosa ricordiamo che le reti neurali hanno il compito di “motore di decisione”, osservando cioè l’uscita fornita dal sistema statistico e poi rielaborata dall’algoritmo di preprocessamento, devono in qualche modo saper distinguere i valori che possono essere classificati come traffico “normale” dai valori che invece si discostano significativamente dai precedenti e che quindi sono sintomo dello svolgimento di un attacco o comunque della presenza di un’anomalia nel traffico di rete osservato. Nel paragrafo “Sottosistema delle Reti Neurali” nel capitolo 4, abbiamo descritto in che modo vengono scambiati i dati tra il sistema statistico ed il sistema delle reti neurali. L’implementazione utilizzata è quella di un primo stadio composto da quattro reti neurali; una per l’elaborazione delle informazioni provenienti dai grafici relativi alla coppia IP : Porta (denominata rete IP : Porta), la seconda per l’elaborazione dei dati forniti dai grafici Porta (denominata rete Porta), la terza prenderà in considerazione i valori dei grafici con il solo IP (denominata rete IP) ed infine la quarta classificherà le informazioni riguardanti il numero di pacchetti osservati in ingresso ed in uscita del server monitorato (denominata rete NPkt). È inoltre presente un secondo stadio composto da una sola rete (denominata Rete Finale) che prende in ingresso le classificazioni effettuate dalle quattro reti del primo stadio. Il secondo stadio avrà quindi il compito di comunicare in modo il più possibile “user-friendly” lo stato della rete; ossia se tutto procede normalmente oppure se siamo in presenza di un attacco conosciuto (o di un’anomalia) o se, infine, si stanno configurando le condizioni per una situazione di preallarme. Occorre ricordare che il comportamento del sistema di reti neurali dipende da quello del sistema statistico. Quindi se un attacco non è stato ad esempio rilevato da una particolare caratteristica statistica, sicuramente non sarà rilevato dalla corrispondente rete neurale che prende in ingresso l’uscita della caratteristica statistica in questione. Abbiamo utilizzato questa struttura con due diverse reti neurali la Self-Organizing Maps (SOM) e la Growing Neural Gas (GNG). 180 Capitolo 5 – Risultati Sperimentali In questo paragrafo riporteremo i comportamenti di entrambe le reti neurali utilizzate, evidenziando le scelte fatte per l’addestramento e per quanto riguarda la SOM anche per la scelta della topologia che infatti è fissa in questa rete. L’uscita, sia per le reti del primo stadio che per l’unica rete del secondo, consiste in una classe in cui la rete neurale associata con quella particolare uscita ha classificato l’ingresso proposto in quel momento. Ogni ingresso rappresenta una finestra temporale composta da cinque istanti consecutivi. L’obiettivo è di ottenere una classificazione del traffico normale in particolari classi, sia da parte delle reti del primo stadio che da parte della rete del secondo. Un attacco invece, dovrebbe essere classificato in classi che non sono mai state riempite in precedenza durante il traffico di background. Meglio ancora se particolari classi vengono riservate per la classificazione di un solo particolare attacco, tali classi quindi non dovrebbero essere riempite da finestre relative ad altri attacchi ma soprattutto al traffico “normale”. Realisticamente potremmo anche accettare che attacchi diversi siano classificati in una stessa classe, fermo restando il fatto che tale classe non deve essere utilizzata dal sistema per la classificazione di valori “normali” dei momenti primi mediati delle finestre temporali. Come in precedenza vedremo prima le risposte fornite con il solo traffico di background per poi focalizzare l’attenzione sulle varie istanze di attacco. 5.3.1 Risultati Forniti dalle SOM La topologia della SOM è stata scelta a priori. In particolare le quattro reti che compongono il primo stadio sono bidimensionali di ampiezza 5x5, quindi ciascuna avrà a disposizione 25 classi diverse in cui classificare i pattern di ingresso. La rete del secondo stadio è invece ad una sola dimensione e contiene 9 unità neurali. Per quanto riguarda il secondo stadio, 9 unità neurali dovrebbero essere utilizzate per distinguere gli otto diversi attacchi che sono stati visti tutti in precedenza nei risultati del sistema statistico, più ovviamente una riservata alla classificazione del traffico “normale”. Queste scelte all’inizio fatte senza particolari motivazioni teoriche si sono dimostrate abbastanza valide e per questo motivo dopo aver visto i risultati ottenuti non abbiamo cambiato la topologia di nessuna rete. Risolto il problema della topologia passiamo al problema relativo a quali e quanti giorni del dataset utilizzare come insieme di addestramento. Come primo tentativo si è 181 Capitolo 5 – Risultati Sperimentali pensato di utilizzare entrambe le settimane contenenti solo il traffico di background. Questo significa fornire in addestramento al sistema delle reti neurali le giornate della prima e della terza settimana. In tal modo però non abbiamo ottenuto risultati incoraggianti, in quanto, se durante l’addestramento, le reti neurali possono osservare solo il traffico normale tenderanno ad occupare tutte la classi a propria disposizione solo per questo tipo di traffico, eseguendo una classificazione più fine. Di conseguenza nella fase di test finestre temporali relative ad istanze di attacco sono state classificate nelle classi già utilizzate dalla rete per il riconoscimento di finestre invece con solo il traffico di background. Abbiamo quindi pensato di includere nell’addestramento anche giornate in cui sono stati lanciati degli attacchi con obiettivo Pascal. Nel tentativo seguente quindi abbiamo presentato in addestramento al sistema di reti neurali i file di uscita del sistema statistico, sottoposti prima alla fase di preprocessamento, della seconda e quinta settimana. La seconda settimana contiene principalmente traffico di background con una bassa percentuale di istanze di attacco, mentre la quinta contiene un’alta percentuale di attacchi. Prima della fase di addestramento le varie unità neurali non vengono inizializzate random ma utilizzando alcuni valori relativi a finestre temporali di cinque istanti prelevati in modo equamente distribuito dall’insieme che abbiamo deciso di adottare per l’addestramento successivo. Nella fase di addestramento vera e propria, invece presentiamo un’intera giornata alla volta, partendo dalla prima finestra della giornata fino all’ultima, per permettere alle reti neurali di osservare l’andamento temporale delle caratteristiche statistiche in una giornata completa, che come è possibile vedere dai risultati del sistema statistico, ha un carattere abbastanza ripetitivo e ciclico. Basti pensare al fatto che di giorno abbiamo sicuramente un volume maggiore di traffico di rete rispetto alle ore notturne; questo comportamento si ripete con una certa regolarità in tutti giorni della simulazione. L’algoritmo di addestramento è quindi uguale a quello presentato nel sesto paragrafo del terzo capitolo in cui viene descritta la rete Self-Organizing Maps (SOM). Prima di passere ai risultati, spendiamo due parole per parlare del numero di epoche utilizzate in addestramento, ossia il numero di volte che viene proposto alla rete neurale l’insieme di addestramento. Con una sola epoca le reti neurali SOM hanno evidenziato grossi problemi di classificazione dei pattern di ingresso. Infatti valori di 182 Capitolo 5 – Risultati Sperimentali picco di qualsiasi caratteristica statistica, senza distinzioni, relativi ad avvenimenti del tutto “normali” e leciti sono stati considerati dal sistema di reti neurali come istanze di attacco. La situazione è notevolmente migliorata utilizzando dieci epoche di addestramento. Ad ogni diversa epoca le giornate appartenenti all’insieme di addestramento vengono presentate secondo sequenze random differenti. A questo punto riportiamo i risultati della fase di test, successiva alle fase di addestramento di dieci epoche, in cui abbiamo presentato in ingresso tutte le cinque settimane del set di dati. 5.3.1.1 Risultati Relativi al Traffico di Background Allo scopo di avere un’informazione su quali classi siano riservate o meno, da ciascuna rete neurale nel primo stadio e quindi anche dalla Rete Finale, per il traffico di background, sono state calcolate alcune percentuali. In ogni giorno di traffico di background abbiamo calcolato le percentuali di utilizzo di ciascuna classe da parte di ciascuna rete neurale. In altre parole la percentuale rappresenta il numero di finestre temporali classificate nelle diverse classi rispetto al numero totale occorso durante la giornata stessa. Tali percentuali così calcolate sono state poi mediate su entrambe le settimane e approssimate all’intero più vicino ottenendo una sorta di rappresentazione del traffico di background da parte delle reti neurali SOM. La rappresentazione è riportata nella seguente tabella, in cui la prima colonna da sinistra rappresenta le possibili classi. Le atre quattro colonne contengono rispettivamente le percentuali ottenute per la rete IP : Porta, la rete Porta, la rete IP, e la rete NPkt. Le classi in cui non è presente alcun valore hanno una percentuale di classificazione pari a zero. Ricordando che stiamo parlando di traffico di background, questo significa che le classi con percentuale nulla o non sono state utilizzate dalla rete neurale e quindi sono da considerarsi “unità morte” o più probabilmente molte verranno utilizzate per la classificazione degli attacchi che vedremo in seguito. 183 Capitolo 5 – Risultati Sperimentali Classe 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Rete IP : Porta Rete Porta Rete IP Rete NPkt 1% 1% 2% 41% 4% 26% 3% 2% 3% 17% 27% 11% 1% 1% 1% 16% 16% 4% 11% 9% 1% 16% 34% 4% 5% 2% 12% 8% 3% 1% 5% 21% 2% 1% 12% 20% 1% 2% 18% 21% 1% 6% 1% 5% 1% La seguente tabella contiene invece le stesse informazioni ma per quanto riguarda la rete che costituisce il secondo stadio. 184 Capitolo 5 – Risultati Sperimentali Classe Rete Finale 0 1 2 3 4 5 6 7 8 4% 92% 1% 3% 5.3.1.2 Risultati Relativi agli Attacchi La classificazione degli attacchi è fortemente influenzata dall’uscita del sistema statistico. Ovviamente le reti neurali saranno in grado di rilevare solo gli attacchi identificati correttamente dal sistema statistico. Inoltre le reti neurali che rileveranno una particolare istanza di attacco saranno quelle associate alle caratteristiche statistiche che in precedenza hanno permesso la rilevazione dell’attacco da parte del sistema statistico. Passiamo a questo punto alla classificazione delle istanze di attacco. Procederemo in modo analogo a quanto fatto in precedenza per i risultati del sistema statistico, ossia le istanze di attacco verranno riportate raggruppate a seconda del nome dell’attacco stesso. In questo modo vogliamo mettere in evidenza il comportamento del sistema in presenza di attacchi dello stesso tipo. Alla fine possiamo avere una panoramica delle classi che rappresentano le aggressioni o comunque una situazione di anomalia. 5.3.1.3 Attacco “Mailbomb” Le istanze di attacco Mailbomb che il sistema statistico è stato in grado di rilevare sono tre, ricordiamo che sono state notate tutte le occorrenze di questo attacco lanciate nella simulazione verso Pascal, il server che stiamo osservando. Vediamo prima come è stata classificata l’anomalia occorsa il secondo giorno della seconda settimana. 185 Capitolo 5 – Risultati Sperimentali Rete IP : Porta classe 15; Rete Porta classe 23; Rete NPkt classe 16; Rete Finale classe 8. La classificazione della rete IP non è riportata in quanto, la caratteristica statistica relativa all’indirizzo IP non ha notato questo particolare attacco come conseguenza della struttura dello stesso. L’attacco Mailbomb coinvolge un elevato numero di porte da un ristretto intervallo di valori di indirizzi IP per tale motivo le rete IP ha classificato i valori di queste finestre temporali in classi appartenenti al traffico di background. Il secondo attacco ossia quello avvenuto il giorno dopo è stato classificato così: Rete IP : Porta classe 15; Rete Porta classe 23; Rete NPkt classe 16; Rete Finale classe 8. Questa due prime istanze dell’attacco Mailbomb sono state classificate nelle stesse classi dalle quattro reti che le hanno identificate. La terza istanza, avvenuta il terzo giorno della quarta settimana, purtroppo non è stata classificata altrettanto bene. Rete IP : Porta classi 15 e 10; Rete Porta classi 22, 23 e 24; Rete NPkt classe 16; Rete Finale classe 8. Le prime due reti ossia, IP : Porta e Porta, hanno classificato l’istanza in questione parzialmente nelle stesse classi delle due precedenti, ossia rispettivamente classe 15 e 23, ma allo stesso tempo sono state occupate anche altre classi comunque abbastanza adiacenti. 186 Capitolo 5 – Risultati Sperimentali Questo comportamento è sicuramente legato al fatto, come possiamo osservare dai grafici che rappresentano i risultati statistici, che l’ultima istanza Mailbomb si è presentata con un aspetto leggermente diverso: i valori di picco dei grafici IP : Porta e Porta sono più bassi in questo caso. Sempre per questa ultima istanza di attacco il valore raggiunto dal grafico NPkt si trova al di sotto dei valori di picco ottenuti in caso di traffico di background. Nonostante questo però il valore è stato ugualmente classificato in classe 16 come nelle due istanze precedenti. Di conseguenza nella classe 16 della rete NPkt verranno inseriti valori che si trovano in un intorno del valore di picco raggiunto in caso di traffico “normale”, ossia un valore di circa 1400. Questo comportamento porterà però, anche ad un ristretto numero di falsi positivi come vedremo in seguito. Nonostante queste differenze tutti gli attacchi Mailbomb sono stati comunque sempre classificati dalla Rete Finale in classe 8. 5.3.1.4 Attacco “Smurf” L’attacco Smurf è presente tre volte nel dataset utilizzato e per tre volte è stato rilevato correttamente dal sistema statistico. Vediamo quindi la classificazione della rete neurale per la prima istanza di attacco del primo giorno della quarta settimana. Rete IP : Porta classe 3; Rete IP classe 3; Rete NPkt classe 21; Rete Finale classe 5. La seconda istanza dell’attacco Smurf è avvenuta il quinto giorno della quarta settimana ed è stata classificata così: Rete IP : Porta classe 3; Rete IP classe 3; Rete NPkt classe 22; Rete Finale classe 3. 187 Capitolo 5 – Risultati Sperimentali La classificazione è abbastanza simile alla precedente, ma la rete NPkt ha classificato questa istanza nella classe 22 invece che nella classe 21. Questo ha comportato anche la variazione del comportamento della Rete Finale che ha classificato l’istanza in classe 3 invece che in classe 5 come in precedenza. La classe 3 è utilizzata dalla Rete Finale anche per classificare finestre temporali relative al solo traffico di background. Questo può sembrare un grosso problema. Abbiamo però dei fattori mitiganti: per prima cosa la classe in questione ha una percentuale del solo 3% ottenuta tenendo conto di tutti i valori della prima e terza settimana. Un secondo luogo le classi utilizzate sempre per questa istanza dalle altre tre reti non sono mai state utilizzare dalle rispettive reti per la classificazione del traffico normale. L’ultima istanza del primo giorno della quinta settimana è invece caratterizzata dalle seguenti classi: Rete IP : Porta classi 3 e 2; Rete IP classi 3 e 4; Rete NPkt classe 22; Rete Finale classe 3. In questo caso abbiamo invece una classificazione anche in altre due classi adiacenti da parte delle reti IP : Porta e IP rispetto ai casi precedenti, mentre la rete NPkt e la Rete Finale hanno nuovamente classificato l’istanza rispettivamente nelle classi 22 e 3. 5.3.1.5 Attacco “Portsweep” Nella simulazione sono stati effettuati cinque diversi tentativi di scansione delle porte verso Pascal, l’attacco Portsweep infatti rientra nella categoria Probe. Il sistema statistico ha rilevato solo due di questi tentavi di scansione delle porte. Il motivo è da ricercare nell’elaborazione effettuata nelle istanze non rilevate per renderle appunto più nascoste agli occhi di un IDS. Tale elaborazione consiste nel sondare solo un numero 188 Capitolo 5 – Risultati Sperimentali limitato di porte inviando quindi pochi pacchetti. Questo a causa della natura statistica del sistema non è stato rilevato perché mascherato dal traffico di background. In questo paragrafo riporteremo quindi la classificazione del sistema di reti neurali relativa ai due attacchi riconosciuti. La prima è avvenuta il quinto giorno della seconda settimana e la classificazione è la seguente: Rete IP : Porta classe 20; Rete Porta classe 22; Rete NPkt classe 16; Rete Finale classe 8. La classe utilizzata dalla Rete Finale è la 8, diversa quindi da quelle utilizzate per il traffico di background ma è la stessa in cui è stato classificato l’attacco Mailbomb. Analoga situazione per la classe 16 della rete NPkt. Questo avviene perché i valori di picco raggiunti da questi attacchi sono più o meno gli stessi ed il sistema si basa proprio su questi valori per distinguere un attacco da un altro. In questo caso quindi l’attacco è stato classificato in una classe contenente anche un’altra aggressione evidenziando comunque la presenza di un’anomalia, ossia adempiendo all’obiettivo fondamentale del sistema proposto. La seconda istanza è avvenuta il terzo giorno della quinta settimana: Rete IP : Porta classe 6; Rete Porta classe 2; Rete Finale classe 2. La classificazione effettuata in questo caso è completamente differente dalla precedente, inoltre la Rete Finale ha utilizzato la classe 2 che viene riempita anche in caso di traffico di background. Ma la classe 6 e la classe 2 rispettivamente utilizzate dalla rete IP : Porta e Porta non sono mai state impiegate per la classificazione del traffico “normale”, mantenendo un questo modo una distinzione tra l’anomalia ed il traffico “normale”. 189 Capitolo 5 – Risultati Sperimentali 5.3.1.6 Attacco “UdpStorm” Entrambe le istanze di questo attacco presenti nella simulazione sono state correttamente segnalate dal sistema statistico. Riportiamo a questo punto la classificazione della prima istanza occorsa il primo giorno della quinta settimana: Rete NPkt classe 20; Rete Finale classe 4. Las seconda istanza del giorno seguente è stata classificata nello stesso modo, ossia: Rete NPkt classe 20; Rete Finale classe 4. In questo caso possiamo ritenerci completamente soddisfatti in quanto entrambe le volte le reti neurali sono state coerenti eseguendo la stessa classificazione. Inoltre le classi utilizzate, la 20 per la rete NPkt e la 4 per la Rete Finale non sono mai state riempite in altre occasione riservandole solo per l’attacco Udpstorm. 5.3.1.7 Attacco “Sshprocesstable” L’unica istanza di attacco Sshprocesstable presente nel dataset è stata lanciata contro Pascal il quarto giorno della quarta settimana. Essendo stata riconosciuta correttamente dalle caratteristiche statistiche IP : Porta e Porta riportiamo la classificazione delle due reti neurali associate più ovviamente quella della Rete Finale. Rete IP : Porta classe 3; Rete Porta classi 2 e 9; Rete Finale classe 3. 190 Capitolo 5 – Risultati Sperimentali Ancora una volta la rete del secondo stadio ha utilizzato la classe 3, nella quale vengono classificate anche le finestre relative al traffico di background. Comunque le altre reti hanno utilizzato esclusivamente classi relative alle aggressioni permettendo in tal modo una rilevazione senza possibilità di confusione. 5.3.1.8 Attacco “Neptune” Questo attacco si è verificato una sola volta durante lo svolgimento della simulazione ed è stato correttamente rilevato dal sistema statistico. Di seguito è riportata la classificazione delle finestre temporali che riguardano l’aggressione facenti parte del traffico di rete del primo giorno della quinta settimana. Rete IP : Porta classe 0; Rete Porta classe 4; Rete NPkt classe 10; Rete Finale classe 7. Questa classificazione è perfetta in quanto sono state riempite classi differenti da quelli utilizzate per gli altri attacchi e ovviamente differenti dalle classi che caratterizzano la “normalità”. 5.3.1.9 Attacco “Mscan” Mscan che rientra nella categoria Probe è stato rilevato dal sistema statistico una sola volta rispetto alle due occorrenze lanciate verso Pascal. La motivazione è analoga a quanto visto per l’altro attacco di questa categoria ossia Portsweep. L’aggressione è stata rilevata il quarto giorno della quinta settimana ed è stata classificata nel modo seguente: Rete IP : Porta classi 4 e 8; Rete Porta classe 2; Rete Finale classe 3. 191 Capitolo 5 – Risultati Sperimentali In questo caso sono state utilizzate classi in cui sono ricaduti altri attacchi ed inoltre come avvenuto già altre volte la Rete Finale ha classificato l’aggressione in classe 3 utilizzata anche se per una limitata percentuale per i campioni relativi al traffico di background. Fattore mitigante come negli altri casi è che le altre due reti neurali hanno utilizzato classi in cui ritroviamo solo attacchi. 5.3.1.10 Attacco “Secret” Attacco facente parte della categoria Data. Attacco un po’ particolare perché finalizzato alla fuga di un informazioni sensibili sfruttando il successo di un altro attacco eseguito prima di tipo R2L. La descrizione di questo attacco ed i motivi del perché tale attacco è stato rilevato dal sistema statistico pur non rientrando nelle due categoria a cui siamo interessati (Denial of Service e Probe) è riportata appunto nel paragrafo relativo al rilevamento di questa aggressione da parte del sistema statistico. Qui ci limiteremo a riportare la classificazione del sistema di reti neurali. Rete IP : Porta classi 4 e 8; Rete Porta classe 2; Rete Finale classe 3. La classificazione è identica a quanto visto per l’aggressione Mscan, valgono quindi le stesse considerazioni. 5.3.1.11 Considerazioni Finali e Falsi Allarmi Preso visione delle classi in cui sono stati classificati i vari attacchi siamo ritornati a considerare i risultati forniti per le giornate del solo traffico di background. Lo scopo è quello di vedere se alcune classi utilizzate per gli attacchi sono state riempite in precedenza anche per questo tipo di traffico, generando quindi falsi allarmi. La stessa operazione è stata svolta anche nelle giornate relative alle aggressioni ma tenendo in considerazione solo le finestre “normali” tra un attacco e l’altro. 192 Capitolo 5 – Risultati Sperimentali Considerato l’intero dataset quindi, il sistema ha generato sei falsi allarmi. Tutti sono stati causati dall’utilizzo della classe 16 da parte della rete NPkt, con la conseguenza che poi la Rete Finale ha classificato le stesse finestre nella classe 8. Questi falsi allarmi sono dovuti quindi ad un intenso uso della rete che ha portato ad un numero di pacchetti osservati elevato raggiungendo e talvolta superando leggermente i valori di picco relativi al traffico di background. Abbiamo già esposto in precedenza che l’introduzione dalla caratteristica statistica sul numero di pacchetti controllati avrebbe portato probabilmente a dei problemi di falsi positivi, ma abbiamo fatto la scelta di mantenerla comunque per rilevare l’attacco Udpstorm, altrimenti non rilevabile a causa della sua particolare struttura. I falsi allarmi si sono presentati quindi: Il quarto giorno della prima settimana; Il primo giorno della quarta settimana (due volte); Il terzo giorno della quinta settimana; Il quarto giorno della quinta settimana; Il quinto giorno della quinta settimana. Prima di passare alla rete GNG, spendiamo due parole sull’utilizzo delle classi 2 e 3 da parte della Rete Finale per la classificazione di un numero comunque molto ristretto di attacchi. Queste classi infatti vengono utilizzate per la classificazione del traffico di background, anche se per una percentuale molto più bassa rispetto alla classe 1 che caratterizza tale tipo di traffico. Inoltre come accennato in precedenza le altre reti neurali hanno classificato gli stessi attacchi in classi utilizzate solo per la classificazione di aggressioni. Questo permette di distinguere ancora senza dubbio la presenza o meno di un attacco di questo tipo. È possibile utilizzare le classi 2 e 3 della Rete Finale come classi di preallarme. Cioè se alcune finestre temporali vengono classificate in queste classi dal secondo stadio, ma le altre reti neurali stanno fornendo classificazioni che caratterizzano il traffico “normale”, allora siamo in presenza di una situazione che si discosta leggermente dall’andamento classico ma che non significa di per sé lo svolgimento di un attacco. Inversamente se le reti del primo stadio forniscono una valutazione opposta 193 Capitolo 5 – Risultati Sperimentali significa che siamo in presenza di un comportamento che ha i sintomi di un attacco conosciuto e identificato dalla particolare classificazione delle reti neurali del primo stadio. Questa interpretazione è sostenuta dal fatto che in molti casi le finestre temporali immediatamente precedenti e successive quelle dell’aggressione vera e propria sono state classificate in classe 3 dalle Rete Finale, nello stesso tempo le altre reti ancora stavano fornendo informazioni che caratterizzano un traffico di background. 5.3.2 Risultati Forniti dalle GNG Una rete neurale GNG è in grado di modificare autonomamente la propria topologia in fase di addestramento per questo motivo non è necessario deciderla a priori come nel caso della SOM. L’insieme di addestramento è lo stesso utilizzato per le SOM, ossia la seconda settimana contenente traffico di background con una bassa percentuale di attacchi e la quinta settimana , contenente invece un’alta percentuale di attacchi. Come descritto nell’algoritmo di addestramento delle reti GNG nel terzo capitolo, tale rete parte inizialmente con due sole unità neurali. L’inizializzazione dei valori di queste unità è stata fatta, come nel caso delle SOM, prendendo pattern dall’insieme di addestramento, ossia valori relativi a finestre temporali di cinque istanti prelevati in modo equamente distribuito. Nella fase di addestramento, vera e propria, invece presentiamo un’intera giornata alla volta, partendo dalla prima finestra della giornata fino all’ultima, per permettere alle reti neurali di poter osservare l’andamento temporale delle caratteristiche statistiche in una giornata completa, che come è possibile vedere dai risultati del sistema statistico, ha un carattere abbastanza ripetitivo e ciclico. Il numero di epoche di addestramento invece costituisce una differenza rispetto a quanto visto con SOM. Anche in questo caso abbiamo fatto una prima prova con una sola epoca di addestramento. Diversamente a quanto successo con le SOM i risultati sono stati abbastanza incoraggianti. Siamo quindi passati a dieci epoche di addestramento, nella speranza di ottenere risultati migliori. Come successo per le SOM in ogni diversa epoca le giornate appartenenti all’insieme di addestramento vengono 194 Capitolo 5 – Risultati Sperimentali presentate secondo sequenze random differenti. La speranza di ottenere risultati migliori con dieci epoche rispetto a quelli ottenuti con una si è rilevata vana. Una possibile motivazione potrebbe essere che le reti neurali appartenenti al primo stadio si specializzano “troppo”. Infatti osservando più volte lo stesso insieme di addestramento riescono a cogliere andamenti e informazioni in modo più capillare rispetto a quanto avviene con una sola epoca di addestramento. Questo è giustificato anche dal fatto che il numero di unità neurali delle quattro reti presenti nel primo stadio sono notevolmente aumentate passando a dieci epoche. Con una sola epoca abbiamo che, la rete IP : Porta è composta alla fine dell’addestramento da 51 unità , la rete Porta da 54, la rete IP da 59, la rete NPkt da 30 ed infine la Rete Finale è composta da 4 unità. La situazioni con dieci epoche è notevolmente diversa: , la rete IP : Porta sarà composta da 349 unità , la rete Porta da 339, la rete IP da 582, la rete NPkt da 215 ed infine la Rete Finale da 9 unità. Questo comportamento di per sé non è negativo, trascurando il carico computazionale, ma i risultati forniti dalle reti con questa configurazione sono notevolmente peggiorati rispetto a quelli ottenuti con un’epoca di apprendimento. Per prima cosa un attacco viene sempre classificato in un numero elevato di classi da ciascuna rete neurale del primo stadio. Un solo attacco di media durata, viene infatti classificato normalmente in 10 classi diverse da ciascuna rete. Questo crea non pochi problemi alla Rete Finale che in base alle informazioni ricevute dalle reti precedenti deve decidere la presenza o meno di un’anomalia o un attacco nella finestra temporale esaminata. La situazione potrebbe essere immaginata come se le reti fornissero informazioni discordanti come conseguenza di una troppa specializzazione. È come se l’informazione di un attacco venisse suddivisa idealmente in diversi livelli, tutti i livelli significano attacco ma in un modo leggermente diverso l’uno dall’altro. La Rete Finale di conseguenza non riesce più a decidere correttamente, classificando infatti un congruo numero di attacchi in classi utilizzate per il traffico di background. Per limitare l’aumento incontrollato delle unità neurali è possibile agire su due parametri dell’algoritmo di addestramento: il numero di pattern in ingresso che devono essere presentati alla rete in apprendimento prima di inserire un nuovo nodo (parametro λ) e il numero massimo di nodi per ciascuna rete. Tentando però di aumentare il parametro λ oppure limitare il numero di unità abbassando il numero massimo di nodi delle reti appartenenti al primo stadio abbiamo ottenuto almeno parzialmente l’obiettivo con reti da al massimo 100 unità neurali, ma anche un grosso effetto collaterale. Il 195 Capitolo 5 – Risultati Sperimentali numero di unità della Rete Finale è sceso a 2. Due unità neurali è un numero insufficiente in quanto riusciamo solo a discriminare tra un traffico “normale” ed un attacco, perdendo l’informazione sul tipo di attacco e comunque perdendo completamente la possibilità di avere una classe di preallarme. In alternativa è possibile pensare di modificare l’algoritmo di addestramento vero e proprio della rete neurale; imponendo la creazione di una nuova unità non ogni λ pattern presentati in ingresso ma quando l’errore medio commesso dalle unità neurali della rete supera un certo valore. Tale possibilità non è stata però sperimentata per problemi di tempo. Confrontando quindi i risultati ottenuti addestrando la SOM per dieci epoche e la GNG per una sola epoca, la prima ha ottenuto risultati migliori anche considerando il fatto che ha potuto osservare più volte i pattern di ingresso. Le reti GNG ad esempio hanno classificato in classi appartenenti al traffico “normale”, anche in elevata percentuale, le finestre temporali relative a tre diversi attacchi avvenuti durante la simulazione e correttamente rilevati dal sistema statistico. Con questo non si intende dire che la SOM fornisce universalmente risultati migliori in quanto ci sono altri studi molto più approfonditi sull’argomento. Semplicemente per il nostro particolare ambito e per la struttura del sistema decidere i valori ottimali dei parametri di addestramento della GNG, come ad esempio il parametro λ e il numero massimo di unità neurali, si è rilevato molto complicato. Infatti studiando approfonditamente il comportamento delle reti neurali al variare di tali parametri molto probabilmente si giungerà a dei valori con cui è possibile aumentare le epoche di addestramento con un conseguente aumento di prestazioni delle reti e non un degrado come si è verificato nel nostro caso. La ricerca dei valori ottimali di questi parametri non è stata fatta per un motivo principale, infatti una volta trovati sarebbero adatti solo per il particolare set di dati utilizzato. Cambiando dataset quindi o l’ambito di lavoro del sistema proposto lo studio in questione andrebbe rifatto dall’inizio per trovare i nuovi valori dei parametri di addestramento adatti alla nuova distribuzione di ingresso. Riporteremo quindi anche se non verranno commentati approfonditamente come fatto in precedenza per le SOM i risultati del sistema di reti neurali basato sulle GNG, addestrate con lo stesso algoritmo riportato nel settimo paragrafo, in cui viene descritta la rete Growing Neural Gas (GNG), del terzo capitolo e per una sola epoca. 196 Capitolo 5 – Risultati Sperimentali 5.3.2.1 Risultati Relativi al Traffico di Background Per ottenere una rappresentazione del traffico normale con le reti GNG abbiamo seguito la stessa procedura utilizzata per le reti SOM. Abbiamo quindi calcolato, per ogni rete, la percentuale che rappresenta il numero di finestre temporali classificate nelle diverse classi rispetto al numero totale occorso durante la giornata stessa. Tali percentuali sono state poi mediate su entrambe le settimane con solo traffico di background e approssimate all’intero più vicino. Le percentuali sono riportate nelle seguenti tabelle che contengono solo le classi con una percentuale diversa da zero. Inoltre a causa del diverso numero di classi di ciascuna rete neurale, come conseguenza di un numero diverso di unità neurali, ad ogni tabella è associata una particolare rete neurale. Rete IP : Porta Rete Porta Classe Percentuale Classe Percentuale 7 8 42 97% 2% 1% 3 16 19 52 1% 97% 1% 1% Rete IP Rete NPkt Classe Percentuale Classe Percentuale 5 10 14 15 17 30 52 56 58 19% 12% 3% 2% 37% 8% 4% 2% 13% 5 7 8 10 83% 2% 2% 13% 197 Capitolo 5 – Risultati Sperimentali Rete Finale Classe Percentuale 1 3 1% 99% Come possiamo vedere dalle tabelle la classificazione del traffico normale è molto buona, pur con una sola epoca. Infatti, ad eccezione della rete IP, abbiamo sempre la presenza di una classe con una percentuale di classificazione uguale o superiore al 83%, questo significa che il traffico normale è ben rappresentato da quella classe. È preferibile infatti avere meno classi con un’alta percentuale che un numero più elevato di classi con una bassa percentuale di classificazione ciascuna, in quanto sono tutte riferite al solo traffico normale. Sotto questo punto di vista, tenendo sempre presente la limitazione di una sola epoca la GNG si comporta meglio rispetto alla SOM, dove le classi che caratterizzano il traffico normale sono di più ed ovviamente ciascuna ha una bassa percentuale di classificazione. 5.3.2.2 Risultati Relativi agli Attacchi Passiamo a questo punto alla classificazione delle istanze di attacco. Procederemo in modo analogo a quanto fatto in precedenza per le reti neurali SOM, ossia le istanze di attacco verranno riportate raggruppate a seconda del nome dell’attacco stesso. In questo modo vogliamo mettere in evidenza il comportamento del sistema in presenza di attacchi dello stesso tipo. Alla fine possiamo avere una panoramica delle classi che rappresentano le aggressioni o comunque una situazione di anomalia. 198 Capitolo 5 – Risultati Sperimentali 5.3.2.3 Attacco “Mailbomb” Istanza dell’attacco Mailbomb avvenuta il secondo giorno della seconda settimana: Rete IP : Porta classe 50; Rete Porta classe 53; Rete NPkt classe 15; Rete Finale classe 0. Aggressione del giorno successivo: Rete IP : Porta classi 50 e 24; Rete Porta classi 53 e 25; Rete NPkt classe 15; Rete Finale classe 0. Ultima aggressione il terzo giorno della quarta settimana: Rete IP : Porta classi 38, 40 e 46; Rete Porta classi 37, 41 e 47; Rete Finale classe 1. 5.3.2.4 Attacco “Smurf” Primo attacco Smurf il primo giorno della quarta settimana: Rete IP classi 24, 26, 41 e 42; Rete Finale classe 2. Seconda istanza il quinto giorno della quarta settimana: Rete IP classi 24, 26 e 44; Rete Finale classe 2. 199 Capitolo 5 – Risultati Sperimentali Terza e ultima istanza il primo giorno della quinta settimana: Rete IP classi 24 e 57; Rete NPkt classe 28; Rete Finale classe 1. 5.3.2.5 Attacco “Portsweep” Prima aggressione il quinto giorno della seconda settimana: Rete IP : Porta classe 43; Rete Porta classe 30; Rete Finale classe 1. Seconda ed ultima aggressione il terzo giorno della quinta settimana: Rete IP : Porta classe 43; Rete Porta classe 30; Rete Finale classe 1. 5.3.2.6 Attacco “UdpStorm” Prima istanza il primo giorno della quinta settimana: Rete NPkt classe 29; Rete Finale classe 2. La seconda ed ultima istanza è avvenuta il giorno seguente: Rete NPkt classi 16, 18 e 22; Rete Finale classe 2. 200 Capitolo 5 – Risultati Sperimentali 5.3.2.7 Attacco “Sshprocesstable” L’unica istanza di attacco avvenuta il quarto giorno della quarta settimana non è stata rilevata in quanto le finestre temporali relative sono state classificate nelle classi relative al traffico di background viste in precedenza. 5.3.2.8 Attacco “Neptune” Attacco del primo giorno della quinta settimana: Rete IP : Porta classi 1, 2 e 30; Rete Porta classi 1, 2 e 44; Rete NPkt classi 1, 2, 15 e 22; Rete Finale classe 0. 5.3.2.9 Attacco “Mscan” L’unico attacco Mscan il quarto giorno delle quinta settimana non è stato rilevato. 5.3.2.10 Attacco “Secret” Anche l’unico attacco Secret il quinto giorno delle quinta settimana non è stato rilevato. 5.3.2.11 Considerazioni Finali e Falsi Allarmi Osservando i risultati forniti, oltre ai tre macroscopici problemi che risiedono nei rispettivi tre attacchi non rilevati ma che sono stati a loro volta riconosciuti dal sistema statistico, si possono evidenziare anche altri errori di classificazione. La terza istanza dell’attacco Mailbomb ad esempio, anche se leggermente diversa dalle prime due è stata classificata nella stessa classe delle prime due dalle Rete Finale 201 Capitolo 5 – Risultati Sperimentali utilizzando le SOM. In questo caso invece la rete dell’ultimo stadio ha classificato quest’ultima istanza in una classe diversa rispetto alle precedenti due. Inoltre l’attacco Neptune diverso nella forma e nell’intensità da qualsiasi altro attacco nella simulazione lanciato contro Pascal, è stato infatti classificato nel caso delle SOM dalla Rete Finale in una classe riservata, mentre con le GNG è ricaduto nella classe in cui sono state classificate le prime due istanze di attacco Mailbomb. Il numero di falsi positivi è un altro fattore, assieme alla capacità di classificazione del traffico “normale”, in cui il sistema di reti neurali formato dalle GNG hanno mostrato un certo vantaggio rispetto alle SOM. Teniamo sempre presente comunque che per problemi di elevata difficoltà nell’impostazione dei parametri di addestramento della GNG dovuti alla nostra particolare implementazione del sistema di reti neurali, stiamo testando tale rete con solo un’epoca di addestramento, in quanto con un numero maggiore le prestazioni peggiorano. Con tutti i dati della simulazione abbiamo ottenuto solo due falsi allarmi dovuti ad un eccessivo numero di pacchetto osservati con la conseguente attivazione della classe 15 da parte della rete NPkt e della classe 0 della Rete Finale. Precisamente questo è avvenuto il primo giorno della quarta settimana ed il terzo giorno della quinta settimana. 202 CAPITOLO 6 6 CONCLUSIONI E SVILUPPI FUTURI In questo lavoro abbiamo illustrato le problematiche fondamentali connesse alla sicurezza dell’informazione, e come queste conducano naturalmente alla formulazione del problema di Intrusion Detection. Abbiamo illustrato gli approcci all’Intrusion Detection che si riscontrano nel panorama attuale, ed abbiamo discusso i tipici problemi che i sistemi IDS devono affrontare nel “mondo reale”. Abbiamo proposto un modello innovativo di sistema di rilevamento delle anomalie nel traffico di una rete informatica. Tale sistema si basa su un approccio “anomaly detection” ed inoltre si pone a metà tra un sistema “host based” e “network based”, nel tentativo di sfruttare i vantaggi derivanti da entrambe le rappresentazioni. Il sistema proposto è formato da due sottosistemi che interagiscono tra loro. Il primo è il sottosistema statistico che svolge il ruolo di “discriminatore”, dal momento che consente una prima distinzione tra un andamento “normale” ed un andamento “anomalo”, sulla base di alcune caratteristiche statistiche del traffico di rete. Il secondo sottosistema è caratterizzato da un’architettura di reti neurali che ricevono in input l’uscita del primo sottosistema, e svolgono il compito di “motore di decisione”, ossia hanno il compito di comunicare lo stato della rete; se tutto procede normalmente oppure se siamo in presenza di un attacco conosciuto (o di un’anomalia). Allo scopo di dimostrare la validità del sistema proposto, sono stati riportati una serie di risultati sperimentali, utilizzando come insieme di dati di riferimento il dataset del Lincoln Laboratory del M.I.T., altrimenti noto come “DARPA IDS Evaluation dataset”. Il sottosistema statistico è stato in grado di rilevare il 100% delle aggressioni facenti parte della categoria Denial of Service (DOS) eseguite contro il server da noi monitorato. Inoltre, sono state rilevate il 67% delle istanze di attacco appartenenti alla categoria Probe. La rilevazione delle istanze di attacco della categoria U2R e R2L, che 203 Capitolo 6 – Conclusioni e Sviluppi Futuri un sistema basato su un approccio ”anomaly detection” potrebbe non rilevare a causa della sua natura statistica, è affidata ad un sistema tradizionale di Intrusion Detection System “misuse based”. Uno dei principali obiettivi di questo sistema è stato quello di rilevare, dalle informazioni ricavate dal traffico di rete, il comportamento di un aggressore che nascondendo la propria presenza mediante l’installazione di un rootkit o di un modulo maligno del kernel può sfruttare il più a lungo possibile e a proprio piacimento un host compromesso in precedenza. Nei risultati sperimentali il sistema statistico ha rilevato un’istanza di attacco finalizzata al furto di informazioni “sensibili”, appartenente alla classe Data, che si svolge in maniera analoga allo scenario descritto in precedenza. In questo attacco infatti, l’aggressore attraverso una vulnerabilità o comunque per mezzo di un attacco R2L ha violato un altro server e dopo aver nascosto la propria presenza, utilizza il server che stiamo monitorando, sul quale ha un accesso lecito, per “rubare” informazioni dall’host compromesso. Il sistema proposto ha notato il trasferimento di queste informazioni in quanto l’aggressore per accedere a quante più informazioni possibili ha iniziato un trasferimento in massa obbligando il server osservato a modificare il proprio comportamento rispetto ad una condizione di “normalità”. Il sottosistema delle reti neurali ha innanzitutto mostrato la capacità di rappresentare in modo corretto il traffico “normale”. Alcune classi vengono infatti riservate dalle reti neurali esclusivamente per la classificazione del solo traffico di background senza attacchi. Per valutare le “performances” di due differenti tipologie di reti neurali autoorganizzanti, il sottosistema neurale è stato implementato utilizzando, in un primo caso le reti Self-Organizing Maps (SOM), e in un secondo caso le Growing Neural Gas (GNG). Per quanto riguarda la prima rappresentazione, quella basata sulle SOM, il secondo stadio del secondo sottosistema ha classificato correttamente il 92% delle finestre relative al traffico “normale” in classe 1. Mentre utilizzando le GNG questo risultato è migliorato, dal momento che la Rete Finale ha classificato in classe 3 ben il 99% dei pattern di ingresso relativi al solo traffico di background. Il fatto di classificare istanze di attacco in classi separate rispetto al traffico “normale” mette inoltre in evidenza la capacità delle reti neurali di distinguere i risultati 204 Capitolo 6 – Conclusioni e Sviluppi Futuri del sottosistema statistico riguardanti appunto il traffico “normale” da quelli riguardanti le varie istanze di attacco. Utilizzando le SOM, inoltre in alcuni casi la Rete Finale ha saputo riconoscere un particolare attacco classificando tutte le istanze in una sola classe. Questo è successo ad esempio nel caso delle tre diverse istanze Mailbomb (classificate in classe 8), le due istanze di attacchi Udpstorm (classificate in classe 4) ed infine due delle tre istanze di attacco Smurf (classificate in classe 3). In aggiunta la Rete Finale ha riservato particolari classi per la classificazione di un solo tipo di attacco, ciò vuol dire che gli unici pattern classificati in una particolare classe saranno rappresentati solo da ingressi di un particolare attacco e da nessun altro (compreso il traffico di background). Un esempio di queste classi sono: la classe 8 per le istanze di attacco Udpstorm, la classe 7 per l’attacco Neptune e la classe 5 in cui è stata classificata una sola istanza di attacco Smurf. Le GNG pur mantenendo la capacità di distinguere un’aggressione dal traffico di background, non hanno riservato particolari classi per la classificazione di un solo tipo di attacco, cioè pattern relativi a diversi attacchi dello stesso tipo sono stati classificati in classi diverse. Questo è dovuto al fatto che le reti SOM sono state addestrate con 10 epoche, nel caso delle GNG invece aumentando il numero di epoche di addestramento si è rilevato un degradamento delle prestazioni. Da questo fatto si può prendere spunto per uno studio futuro sulla criticità dei parametri di addestramento della rete GNG. Alternativamente è possibile pensare di cambiare l’algoritmo di addestramento vero e proprio, in modo da non generare una nuova unità neurale ogni λ pattern di ingresso presentati, ma bensì quando l’errore medio commesso dalle rete supera una certa soglia. Sarebbe interessante percorrere anche questa strada per analizzare meglio il comportamento delle reti GNG nel nostro particolare campo di applicazione. Un’ulteriore sviluppo futuro è rappresentato da uno studio approfondito sulle possibili variazioni dei parametri di funzionamento dell’algoritmo statistico presentato e l’impatto dovuto ad una loro variazione sulle prestazioni dell’intero sistema. I parametri interessanti sotto questo punto di vista sono principalmente due ossia l’ampiezza della finestra temporale di osservazione, per la quale abbiamo scelto un valore pari a 60 secondi nelle varie prove sperimentali, e l’ampiezza della finestra scorrevole, attualmente di cinque istanti consecutivi. 205 Capitolo 6 – Conclusioni e Sviluppi Futuri Infine sarebbe sicuramente interessante svolgere altri esperimenti con dataset diversi e magari su una rete on-line, in quanto tutto il sistema proposto è stato pensato e quindi implementato per poter operare, senza dover ristrutturare l’intera l’architettura, anche on-line. 206 BIBLIOGRAFIA [1] J. P. Anderson, “Computer Security Threat Monitoring and Surveillance”, Technical Report, James P. Anderson Company, Fort Washington, Pennsylvania (Aprile 1980) [2] J.W. Haines, R.P. Lippmann, D.J. Fried, M.A.Zissman, E. Tran, S.B. Boswell, Group 62 "1999 DARPA Intrusion Detection Evaluation: Design and Procedures", Technical Report 1062, Massachusetts Institute of Technology, Lincoln Laboratory [3] Computer Security Institute – Federal Bureau of Investigations, “The 2002 CSI/FBI computer crime and security survey”, disponibile online, http://www.gocsi.com/press/20020407.html [4] David R.Mirza Ahmad, Ido Dubrawsky, Hal Flynn, Joseph “Kingpin” Grand Robert Graham, Norris L. Johnson, K2, Dan “Effugas” Kaminsky, F. William Lynch, Steve W.Manzuik, Ryan Permeh, Ken Pfeil, Rain Forest Puppy, Ryan Russel “Hack Proofing Seconda Edizione”, McGraw-Hill [5] E. “Aleph1” Levy, “Smashing the stack for fun and profit”, Phrack magazine, vol. 7, issue 49 (Novembre 1996) http://www.phrack.org/phrack/49/P49-14 [6] http://www.sans.org/top20 [7] T. Kohonen, “Self-Organizing Maps”, 3a edizione, Springer-Verlag, Berlino (2001) [8] B. Fritzke, “Growing Cell Structures, A self organizing neural network for unsupervised and supervised learning”, 1994 [9] B. Fritzke, “A growing neural gas network learns topologies”, in G. Tesauro, D. S. Tou-retzky and T. K. Leen (Eds.): Advances in Neural Information Processing Systems [10] www.tcpdump.org [11] http://winpcap.polito.it/ [12] www.ethereal.com [13] J. Postel, “RFC 791: Internet Protocol” (1981) ftp://ftp.rfc-editor.org/in-notes/rfc791.txt [14] J. Postel, “RFC 793: Transmission Control Protocol” (1981) ftp://ftp.rfc-editor.org/in-notes/rfc793.txt 207 Bibliografia [15] J. Postel, “RFC 768: User Datagram Protocol” (1980) ftp://ftp.rfc-editor.org/in-notes/rfc768.txt [16] J. Postel, “RFC 792: Internet Control Message Protocol” (1981) ftp://ftp.rfc-editor.org/in-notes/rfc792.txt [17] P. Lichodzijewski, A. N. Zincir-Heywood, M. I. Heywood, “Dynamic Intrusion Detection Using Self Organizing Maps”, 14th Annual Canadian Information Technology Security Symposium (Maggio 2002) [18] K. Labib, R. Vemuri, “NSOM: A Real-Time Network-Based IntrusionDetection System Using Self-Organizing Maps”, Technical Report, Department of Applied Science, University of California, Davis [19] S. Zanero, “Un Sistema di Intrusion Detection Basato su Tecniche di Apprendimento non Supervisionato”, tesi di laurea, Politecnico di Milano, Facoltà di Ingegneria 208