Internetworking Protocol
Formato Datagramma IP
- version - 4 oppure 6
- hdr lnth - header length in parole - min 5 max 15
- tipo di servizio - maschera binaria
- lunghezza totale - del pacchetto, in bytes
- identificativo - aumentato di uno a ogni nuovo pacchetto
- R - riservato - non in uso
- DF - Don’t Fragment - non frammentare il pacchetto
- MF - More Fragments - altri frammenti seguono
- Time-to-Live - decrementato di uno da ogni router
- Protocol - ID del protocollo di trasporto
- Header checksum - della testata
- Source IP address - del mittente
- Destination IP address - del destinatario
- Options - opzioni facoltative
Type of Service
ToS: tipo di servizio richiesto e priorità
Si presumeva di attribuire ad ogni link fino a quattro proprietà (espandibili a cinque):
- Delay
- Throughput
- Reliability
- Cost
In realtà una tale rete non è stata sviluppata e il campo ToS è caduto in disuso
Il campo è stato di recente riciclato come:
- Differentiated Services Code Point (DSCP)
- richiesta di qualità di servizio per real-time streaming
- Explicit Congestion Notification (ECN)
- notifica di congestione senza perdita di pacchetti
- richiede che tutti i nodi di rete lo supportino
Lunghezza Totale
La lunghezza totale potenziale di un datagramma è 65535 bytes inclusa la testata
- In realtà un pacchetto è al massimo lungo quanto la capacità trasmissiva massima del link fisico: MTU - maximum Transfer Unit
- Esempio: Ethernet circa 1450 bytes
Attenzione a non presumere che il payload sia onesto
- Esempio 1: ping ha un payload e può essere modificato
- Il payload può essere crittografato
- Il payload può avere contenuto steganografico
Identificativo del Pacchetto
Campo di 16 bit -> max 65535
- Assegnazione semplice: incremento di 1
- Quando è in overflow si ritorna a 1 (rollover)
Non ci devono essere due pacchetti diversi con lo stesso identificativo
Ma: i pacchetti possono essere ricevuti fuori sequenza
- Parcheggiati temporaneamente in un buffer di ricezione in attesa dei pacchetti mancanti
- Timeout se il pacchetto non arriva
Il timeout deve essere inferiore al tempo di rollover
Timeouts sempre più piccoli con reti sempre più veloci
Time to Live (TTL)
- Ogni nodo intermedio che smista un pacchetto (router) lo decrementa di 1
- Quando il valore arriva a zero il pacchetto è scartato
- per impedire loop di routing infiniti
- Quando il valore arriva a zero il pacchetto è scartato
- Solitamente (non sempre) viene inviato al mittente un messaggio ICMP per avvertire del fatto
- se c’è un loop di routing anche il messaggio è perso
- non si mandano mai messaggi ICMP per informare della perdita di un messaggio ICMP
traceroute
Serve a scoprire il percorso compiuto dai pacchetti
- Si invia un pacchetto iniziale (sonda) con TTL=1 poi pacchetti successivi sonda col TTL incrementato di 1
- Il router che scarta il pacchetto ritorna un messaggio
ICMP TTL Time Exceeded
- Quando il pacchetto arriva a destinazione risponde con un altro messaggio
Non funziona sempre:
- Un router può non inviare un messaggio ICMP
- Il percorso può cambiare tra una sonda e l’altra
- Un firewall può semplicemente scartare la sonda e non avvertire (buco nero)
Comportamenti diversi Windows e Linux
- Windows invia una sonda
ICMP Echo Request
(ping) e riceve unICMP Echo Reply
(pong) - Linux invia una sonda
UDP
a porta improbabile e riceve unICMP Port Unreachable
Opzioni IP
Struttura delle opzioni IP:
Alcune opzioni IP:
- loose source routing (codice 0x83)
- specifica una lista di indirizzi IP che il datagramma dovrebbe attraversare
- strict source routing (codice 0x89)
- specifica una lista di indirizzi IP che il datagramma deve obbligatoriamente attraversare
- record route (codice 0x07)
- ogni router indica il suo indirizzo IP sul pacchetto
- timestamp (codice 0x44)
- ogni router indica il suo indirizzo IP sul pacchetto e l’istante di transito
All’inizio non vi erano protocolli ausiliari come DNS. Si pensava che numerose opzioni diverse potessero aiutare nello smistamento.
- 255 opzioni possibili
- solo una decina veramente implementate
Source routing contiene una lista di indirizzi IP da cui il pacchetto deve (strict) o può (loose) passare. Questo può forzare un percorso alternativo, p.es. tramite uno hacker.
I sistemi operativi moderni non usano il source routing.
In generale le opzioni IP sono deprecate:
- Firewall che scarta tutti i pacchetti che contengono opzioni
- Ma molti router fanno transitare pacchetti con opzioni
Problemi di Sicurezza di IP
- Tutti i campi possono essere scritti da un programma
- Packet crafting
- Possono essere invalidi e causare problemi: pacchetti maeziani
- I campi non sono autenticati
- Fidarsi o no
- L'indirizzo mittente può essere falso: spoofing
- Alcuni campi non sono in uso
- Si possono usare per informazioni coperte
- Se non sono vuoti e il valore dipebde dal sistema operativo sono usati nel passive fingerprinting
Packet Crafting
I protocolli TCP/IP sono scritti in C
- Chiunque puà scrivere programmi o usare strumenti che scrivono pacchetti (packet crafting) -- esempio
hping3
- Il ricevente non sa se il pacchetto è genuino o generato
Motivi:
- Canali di comunicazione stealth
- Attacchi diDenial of Service
Marziani:
- Pacchetti crafted con campi errati o assurdi che possono indurre il programma ricevente a compiere operaziomi pericolose
- Esempio: header length = 3 (Windows NT pre Service Pack 3 si piantava)
- Tutti i sistemi operativi controllano se i paccheti sono marziani, li loggano e li scartano
- Ma l'inventiva degli hacker è grande
Passive Fingerprinting
Ispezionare un pacchetto in transito può dare un idea del sistema operativo del mittente
- Valore TTL iniziale
- Se la sonda è un ping o UDP
- Payload del ping
- Valore del campo ToS
- Numero dei pings inviati
- Windows: 4, Linux: infiniti
- Opzioni e il loro valore
Nè il mittente nè il destinatario si accorgono che il pacchetto è stato ispezionato in transito
Canali Stealth
Comunicazione fuori banda in campi non usati
Esempio: un'opzione che non esiste
- Inviare un pacchetto con l'opzione p.es.. 0x42 (non esiste)
- bbiamo 38 byte di payload stealth
Principio d Umiltà dei router:
- "Se non riconosco un'ozione, puà darsi che l'abbiano inventata di recente". Il pacchetto passa.
Sicurezza più forte:
- Se un'opzione non è riconosciuta il pacchetto è scartato
Canali stealth più difficili da riconoscere:
- Uso del campo ToS
- Uso dei bit alti del campo TTL (default 32 o 64)
I canali stealth possono permettere ad uno hacker remoto di controllare il computer compromesso
Il programma malefico sul computer compromesso è stato probabilmente installato dall'utente stesso tramite tecniche di Ingegneria Sociale
Circuit Level Gateway
Transport Layer.
Contrasta i marziano e i canali stealth:
- Estrae il payload del pacchetto IP in arrivo
- Scarta la testata originale
- Crea una nuova testata pulita e la antepone al payload originale
- Fa proseguire il pacchetto
Frammentazione di Pacchetti
La frammentazione è necessaria:
- Ogni link ha una MTU: Maximum Tranfer Unit - dimensione massima del pacchetto trasferito
- Se la dimensione del pacchetto è superiore alla MTU, il pacchetto è frammentato
Ciascun frammenyo:
- Ha lo stesso ID del pacchetto originario
- Ha un campo di offset: bytes dall'inizio del pacchetto originale
- IL campo MF (more fragments) è settato a 1 se non è l'ultimo frammento
- Viene smistato indipendentemente dagli altri frammenti
- Può seguire un percorso diverso
- Può essere frammentato ulteriormente
Solo il ricevente è in grado di ricomporre i pacchetti frammentati
- Se dopo un timeot qualche frammento ancora manca, l'intero pacchetto viene scartato
Flag DF
Path MTU
Il mittente intende inviare un pacchetto di dimensione inferiore alla MTU più piccola dell'intero percorso.
I pacchetti non devono essere frammentati.
Il mittente invia un pacchetto di una certa dimensione iniziale con DF=1.
Se riceve un messaggio ICMP di errore:
- dimezza la dimensione del pacchetto
- lo rinvia con DF=1
Se la destinazione conferma la ricezione del pacchetto:
- Il mittente conosce la MTU minima
- PMTU: Path Maximum Transfer Unit
- Tutti gli altri pacchetti avranno questa dimensione
Non funziona sempre (quasi sempre): le condizioni di routing della rete variano nel tempo
Attacchi a Frammentazione
Ping of Death
Attacco Teardrop
Problemy con il Source Address
32 bits - non esiste la maschera
La maschera è un concetto di routing, non una proprietà del pacchetto
Non vi è alcuna assicurazione che il pacchetto provenga veramente dall'indirizzo mittente specificato.
Se l'indirizzo sorgente è falso, è un caso di spoofing (packet forgery), e quasi certamente un attacco hacker.
Spoofing
L'indirizzo IP sorgente è falso:
- nascondere l'identità del mittente vero
- impersonare un terzo, che spesso ha relazioni di fiducia col destinatario
Alcuni servizi compiono autenticazione solo sulla base del Source Address
Ottenere informazioni riservate è più complessp e necessita una modifica del routing, p.es. con falsi messaggi di Route Update messages o col Source Routing