Tor – The Onion Router

Quando parliamo di anonimato in rete, sentiamo spesso parlare di proxy, vpn e altri servizi basati su particolari protocolli, atti a garantirci l’anonimato più totale, o quasi.

TOR è uno dei Proxy più famosi e utilizzati sulla rete. TOR è l’acronimo di The Onion Router, che meglio descrive il protocollo alla base del suo funzionamento.

L’intero network TOR si affida a dei volontari che donano la propria larghezza di banda. I cosìddetti Tor Relay. Più Tor Relay ci sono, più veloce è il network Tor. Un Tor Relay gira su praticamente qualsiasi sistema operativo. Chiunque installi Tor può diventare un Relay. O più specificatamente un Non-exit relay o exit relay. La differenza sta nel dichiarare la propria volontà ad essere un nodo d’uscita dalla rete Tor per un client che usa Tor (quindi il web service a cui son indirizzate le richieste vedrà l’ip del nodo exit relay) oppure un non-exit relay, un semplice onion router che fa transitare i dati dal nodo predecessore al nodo successivo, all’interno del circuito.

Tor logo

Le caratteristiche portanti di TOR comprendono:

– segretezza perfetta.
– controllo della congestione
– directories servers
– controllo integrità
– politiche di uscita controllate

Caratteristiche mantenute con un perfetto bilanciamento fra anonimato, usabilità ed efficienza.

L’onion routing è un overlay, un livello soprastante a quella che è la rete effettiva di comunicazione, internet. Progettata per applicazioni basate su protocolli quali TCP.

Quel che i client fanno è scegliere un cammino nella rete costruendo un “circuito” in cui ogni nodo (onion router) conosce soltanto il nodo precedente e successivo a lui, e non gli altri nodi che formano il circuito scelto per quella comunicazione.
Il traffico fluisce sottoforma di celle, di dimensione fissa, spacchettate da una chiave simmetrica ad ogni nodo.

Nel passato un nodo ostile poteva registrare il traffico e chiedere di decriptarlo a nodi compromessi.
Tor piuttosto che usare una struttura dati basata sulla codifica multipla, usa uno schema di costruzione del percorso incrementale (telescoping): chi inizia negozia delle chiavi di sessione con ciascuno successivo hop nel circuito. Queste chiavi saranno poi cancellate e i nodi compromessi non potranno decifrare il vecchio traffico. (Perfect Forward Secrecy).

Per supportare la maggioranza di programmi TCP senza necessariamente apportarvi delle modifiche, TOR usa il generico sock proxy.

I vari flussi TCP e richieste, possono essere multiplate in uno stesso cammino, per migliorare l’efficienza. (Condivisione dei circuiti).
Tor permette al traffico di uscire dal circuito a Metà, in quella che si chiama topologia di circuito leaky-pipe (tubo che perde).
Inoltre possiede anche un controllo della congestione decentralizzato: si usano acks end-to-end per mantenere l’anonimato mentre si permette a nodi al bordo della rete di individuare congestioni, quindi inviare meno dati finchè non si smaltisce.

Tor prevede che certi nodi fidati agiscano come directory servers che forniscano la lista dei router conosciuti e il loro stato. Gli utenti scaricano via HTTP questa lista periodicamente.

In fine Tor verifica l’integrità dei dati prima che lascino la rete (end-to-end integrity checking).

Progetto

Ogni Onion Router ha una connessione TLS (Transport Layer Security) con gli altri Onion Router. Quest’ultimi hanno un Software locale, chiamato Onion Proxy, che accetta i flussi TCP e li multiplexa.

Ogni OR (Onion Router) ha una chiave di ID a lungo termine e una onion key a breve termine (pubblica).

La identity Key è usata per:

– firmare directory
– firmare OR’s router descriptor
– firmare certificati TLS

La onion key è usata per:

– decifrare le richieste utente
– ruotare periodicamente per non essere compromessa

Le celle sono le unità di comunicazione: sono di 512 byte e consistono in un header e un payload:

tor general cell struct

Il comando (CMD) serve per capire cosa fare con il payload ed in base ad esso le celle sono distinte in diversi tipi:

– control cell: comandi di padding, create, destroy.
– relay cell: hanno un header aggiuntivo e i comandi sono: relay data, relay begin, relay end, relay teardown, relay connected, relay extend, relay truncate, relay sendme. La struttura è quella mostrata di seguito:

tor relay cell struct

Il relay header ed il payload sono criptati e decriptati insieme nel corso del cammino della cella, usando come algoritmo AES CTR a 128 bit.

Ogni circuito è condiviso da vari flussi TCP e per evitare ritardi i circuiti sono costruiti preventivamente.
Gli Onion Proxy costruiscono nuovi circuiti ogni volta che quelli esistenti sono stati usati e chiudono quelli vecchi senza flussi attivi.

Un circuito è costruito incrementalmente negoziando una chiave simmetrica con ogni OR nel circuito ad ogni hop.

Protocollo TOR

Come detto in precedenza TOR usa una crittografia TLS. Ovvero Effettua lo scambio delle chiavi Simmetriche, con tecnologia a chiavi Asimmetriche (Public Key e Private Key).

Mettiamo caso Alice voglia comunicare con Bob.
Contattata i directory servers che contengono tutte le chiavi pubbliche dei nodi sul circuito.
Quindi si preleva la chiave pubblica di Bob dai directory servers per crittografare la chiave simmetrica (K1) che Alice e Bob useranno per stabilire una comunicazione sicura.
Con la chiave pubblica di Bob si è certi che soltanto Bob (possessore della chiave privata) possa aprire il messaggio.
Una volta scambiata la chiave simmetrica, si costruisce una cella d’informazioni, cifrata utilizzando la chiave simmetrica.

Se Alice decide di estendere il circuito, fino ad un terzo nodo Carol, è sufficiente inviare una cella relay extent specificando l’indirizzo del prossimo nodo (OR) e una chiave (simmetrica) per esso.
Quando Carol risponde a Bob con una created cell, Bob racchiude il payload in una relay extended cell e la passa ad Alice così che quest’ultima e Carol condividano una chiave simmetrica (K2). Quel che si forma è proprio una comunicazione con autenticazione della chiave unilaterale, perchè gli OR non sanno chi ha aperto il circuito dato che Alice rimane anonima senza usare una chiave pubblica.

L’infografica qui sotto mostra in soldoni il funzionamento:

TOR protocollo

Tor usa TLS in modo che avversari esterni non possano modificare i dati. (Integrità).

Tenete a mente che Alice può estendere il circuito senza che i nodi intermedi lo sappiano.

Usando i Socks c’è un inconveniente: alcune applicazioni danno al TOR Client l’hostname alfanumerico, ciò fa chi che si riveli la destinazione al DNS server. Non c’è una soluzione generale portabile: dove possibile si usa Privoxy che fornisce un hostname al TOR Client.

Il controllo della congestione invece è necessario perchè ad esempio vari utenti potrebbero scegliere lo stesso circuito OR-to-OR (involontariamente). Oppure un attaccante potrebbe inviare un grosso file nelle reti di TOR.

Directory Sever

Tor usa un piccolo gruppo di Onion Router ben noti, per tenere traccia del cambiamento della topologia, delle chiavi e delle politiche di uscita.

Si tratta di Directory Server, che funzionano come server HTTP, in quanto i client possono scaricare la routers list e il network state. Gli OR possono inviare il proprio stato a questi directory server.

Alcuni attacchi alla rete TOR prevedono proprio la presa di controllo di un directory server, per questo essi devono essere ridondanti e sincronizzati. Così che i client si fidino solo di directory firmate da una certa soglia di directory servers.
Essi non possono fungere da collo di bottiglia in presenza di molti utenti sul network TOR poichè dotati di meccanismi di cache.

Attacchi ai Directory Server

Destroy Directory Server: Se più della metà sono distrutti, nessuna directory avrà abbastanza firme per essere usata.

Subvert Directory Server: Si può influenzare la votazione delle directory se si controlla più della metà dei directory server. In questo modo l’attaccante può includere parecchi OR compromessi all’interno del network. Bisognerebbe assicurarsi che gli operatori dei DS siano indipendenti e attack-resistant.

OR Not Working: I Directory Server assumono che un OR funziona correttamente, se si può avviare una connessione TLS. Un OR ostile potrebbe accettare tali comunicazioni ma ignorare le cells.

Attacchi e Difese alla rete TOR

Attacchi Passivi

Osservare il traffico: Osservando il traffico si può realizzare un profilo dell’utente.

Osservare il contenuto: Tor usa Privoxy per anonimizzare i flussi.

End-to-End timing correlation: Osservando i percorsi si possono distinguere sempre lo stesso inizio con la stessa fine, in base al tempo si correlano delle informazioni. Per evitarlo TOR cerca tramite firewall di confondere il traffico che passa e quello che invece è generato dall’OR.

End-to-End size correlation: Contando i pacchetti si conferma l’end point di un flusso. Quindi è possibile correlare delle informazioni in base al numero di pacchetti. Questo è in parte evitato grazie alla topologia leaky-pipe, ovvero non tutti i pacchetti escono dallo stesso nodo della rete.

Attacchi Attivi

Compromise Keys: L’attaccante può impersonificare un OR. (Ma la rotazione periodica delle chiavi diminuisce le possibilità dell’attacco).

Host compromise: Se l’attaccante fa un’intrusione nel sistema, compromette il sistema. Però non può decodificare il traffico registrato, poichè il sistema a chiavi simmetriche multiple lo impedisce.

Run a recipient: Se l’attaccante induce gli utenti a connettersi al suo web server, ha una end connection, in questo modo si rischia di rivelare informazioni sulla propria identità. (Tor per questo si affida a Privoxy).

DoS non observed nodes: Si fa aumentare il traffico su alcuni nodi, dossandoli, in questo modo vanno giù e si fa credere alla rete che non siano affidabili. La robustezza è l’unica difesa.

Tagging attacks: Si tagga una cella alterandola, per far si che la richiesta venga associata ad altri web server. Si evita con l’integrity check.

Distribute hostile code: Si cerca di falsificare il software di TOR o di danneggiare una versione ufficiale, per scopi malevoli. Si evita facendo un confronto con le checksum di una versione affidabile.

Hidden Service e Rendezvous Points

Tor rende possibile agli utenti di nascondere la propria posizione e nel frattempo offrire una serie di servizi, come mettere su un sito web o server di instant messaging.
Usando i Rendezvous points, gli altri utenti Tor possono connettersi a questi servizi nascosti, senza che uno conosca l’identità dell’altro.

Quel che fa un Hidden Service è annunciare la sua presenza all’interno del network Tor, prima che i client siano in grado di mettersi in contatto con lui. Per farlo, in modo casuale sceglie degli onion router, ci costruisce un circuito sopra, e chiede loro di agire come “introduction points”, dando loro la sua chiave pubblica.

Torna all'inizio