Capire l’Internet: guida pratica per il surfista dilettante

Di recente, stavo chattando con un mio amico riguardo a certi temi come privacy, Tor e VPN e questo mio amico ad un certo punto mi ha anche fatto alcune domande più tecniche.

A quel punto, affinché le risposte fossero pienamente soddisfacenti, ho capito che era necessario che avesse un po’ più chiaro il funzionamento di Internet.

La spiegazione gli è piaciuta molto e mi ha suggerito di postarla qui, e siccome effettivamente mi ha richiesto diverso tempo per scriverla, mi sono detto «perché no?».

Quello che segue quindi sono i miei messaggi, un po’ sistemati per la pubblicazione. In ogni caso, certi concetti sono volutamente non precisi per chiarezza espositiva. Inoltre, in generale, il tutto è stato scritto tenenedo in mente le conoscenze del mio amico. Le note a piè di pagina indicano alcune precisazioni, che però non serve capire per comprendere il resto del contenuto.

Non escludo che ci potrebbero essere anche errori non voluti, d’altronde ho scritto tutto di sana pianta, basandomi sulle mie conoscenze acquisite col tempo, sia all’Università, che informandomi su diverse fonti.

Una pila di matriosche

Le telecomunicazioni sono regolate da protocolli, che sono degli insiemi di regole e possono definire tantissime cose, a partire da come devono essere i segnali elettrici, per arrivare a cosa contengono i messaggi che vengono scambiati tra i vari dispositivi: dipende da cosa regola quel determinato protocollo.

Infatti le telecomunicazioni sono divise in layer (livelli), che vanno a formare una pila - la stack ISO/OSI. Ci sono esattamente 7 livelli, dove il numero 1 è il livello fisico, che comprende i fili e le releative questioni elettriche, mentre i livelli 5-6-7 riguardano il software… E questi li lasciamo perdere.

I livelli sono come delle Matriosche: i dati mandati sul livello 1 contengono i dati del livello 2, che contengono a loro volta i dati del livello 3 etc. Questa cosa viene anche detta incapsulamento: i dati (frame Ethernet, o pacchetto IP, etc) del layer n contengono una parte di intestazione (header) e una parte di carico/contenuto (payload); quest’ultima solitamente coincide appunto con i dati del layer (insieme di header e payload) n + 1.

Per le cose di cui vogliamo discutere, i livelli 2-3-4 sono i più interessanti.

Il 2 è il livello di collegamento e si divide in due sottoparti, LLC e MAC (medium access control, il controllo di accesso al mezzo).

A questo livello ci sono, per esempio, Ethernet e 802.11, conosciuto ai più col nome sbgliato di WiFi.

Fondamentalmente l’obiettivo di questo livello è permettere a due dispositivi di collegarsi, e.g. il tuo PC al router, o un PC ad un altro PC.

Non avremmo vantaggi ad esaminare il funzionamento di tecnologie di questo livello, diciamo solo che:

  • ci consentono di scambiare messaggi tra dispositivi che sono tra di loro direttamente connessi, dove per direttamente intendo, per esempio, elettricamente, o senza fili, purché siano a portata, oppure otticamente;
  • il MAC address serve a far funzionare la comunicazione su questo livello1 e a volte è detto impropriamente anche “numero seriale di una scheda di rete”, perché effettivamente ogni scheda ha un indirizzo MAC univoco a livello mondiale.

Intermezzo: commutazione di circuito vs di pacchetto

È già venuto fuori il termine pacchetto e tornerà ulteriormente, quindi vorrei un attimo chiarire perché si parla di pacchetto, e cosa sono la commutazione di circuito e quella di pacchetto.

Una volta c’era il telefono: facendo un numero, si riservava una serie di collegamenti elettrici, che rimanevano occupati durante tutta la telefonata. Questa è la commutazione di circuito, un sistema semplice, ma costoso e inefficiente per il trasporto di dati. L’inefficienza deriva dal fatto che i dati non sono scambiati di continuo, a differenza di quanto avviene in una conversazione, e che creare e distruggere il circuito per ogni scambio di dati richiederebbe diverso tempo.

Quindi venne inventata la commutazione di pacchetto: i dati vengono racchiusi in unità, chiamate per l’appunto pacchetti, che viaggiano su un’infrastruttura condivisa. I vantaggi sono minor costo e maggior flessibilità che però vanno a discapito di una maggiore complessità e di altri possibili problemi.

IP: una gran genialata

Tornando ai livelli, i messaggi scambiati al livello 2 contengono i messaggi del livello 3, che è il livello di rete.2

Praticamente l’unico protocollo di livello degno di nota è il Protocollo Internet (IP, Internet Protocol). Di per sé è abbastanza semplice, ma è veramente una cosa geniale.

Fondamentalmente, il suo ruolo è quello di permettere di inviare dati anche a dispositivi a cui non si è fisicamente collegati, sfruttando il livello 2, che invece richiede un collegamento fisico (nota: il wireless in un certo senso è come un collegamento fisico).

Ma come fa a funzionare il protocollo internet? Grazie ai router! (Non quelli che creano le reti senza fili, ma i router veri e propri, usati dai provider).

Come gli altri protocolli, anche i pacchetti IP si dividono in header e payload, e la parte saliente è il suo header, essendo il payload semplicemente un messaggio del livello 4.

Semplificando ulteriormente, dell’header IP ciò che ci interessa in particolare sono i due indirizzi IP contenuti: l’indirizzo della sorgente e quello della destinazione.

Senza andare troppo nel particolare, potremmo dire che, in un certo senso, gli indirizzi IP sono simili ai numeri di telefono, e che anch’essi si compongono di un prefisso e di un numero3. Il prefisso nella terminologia di IP identifica una rete, il numero invece identifica un computer/telefono/server/qualsiasi dispositivo all’interno di quella rete, in generale detto host.

La cosa bella è che se un host con più schede di rete attive (e.g. più di un cavo Ethernet attaccato a questo dispositivo), può essere configurato affinché invii tutti i pacchetti per le reti A, B, C e D col cavo 1, i pacchetti per le reti E, F, G, con il cavo 2 e tutti gli altri al cavo 3 e così via. Questa cosa si dice routing.

Ma la cosa ancora più interessante è che in base alla sua configurazione, se un PC dalla rete A (cavo 1, per il tuo) vuole inviare un pacchetto a un PC di una rete E (cavo 2, per te), può chiedere ad un terzo host di inoltrarlo.

Questo è proprio il lavoro di un router, e questo è ciò che manda avanti Internet!

In pratica un router ha una serie di interfacce che lo rendono parte di reti diverse, e lui provvede a inoltrare i pacchetti da una rete ad un altra.

Geniale il Protocollo Internet, ah?

I livelli più alti

Con IP siamo in grado di inviare pacchetti ovunque nel mondo e di riceverli, ma ci mancano lo stesso diverse funzionalità, che sono implementate nel livello 4, di trasporto.

Qui, tra gli altri, ci sono in particolare i famosi (?) TCP e UDP.

UDP è più semplice e fondamentalmente la sua unica funzione è di permettere a 65000 diverse applicazioni su un host di usare IP, altrimenti il sistema operativo potrebbe permettere solamente ad un’unica applicazione di usare IP4.

TCP permette ad ulteriori 65000 applicazioni di usare IP, ma in più rende IP stesso più affidabile e performante (in particolare IP può perdere pacchetti, TCP fa in modo che non succeda). Del modo in cui lo fa si potrebbe parlarne per ore, ma i dettagli non sono troppo importanti, passiamo al prossimo livello invece.

Livello 5, o livello di sessione: HTTP, IMAP, SSH, SMTP etc sono solo alcuni dei protocolli che lavorano a questo livello. Più in generale, si può dire che ci siano protocolli specializzati per un’applicazione anziché per un’altra (e.g. visitare siti web anziché gestire la posta elettronica). Ci interessa citare questi protocolli solo perché poi tornerà fuori il livello 5 parlando di protezione (in particolare, di crittografia).

L’obiettivo di spiegare come funziona Internet è stato raggiunto. Ora approfondiremo delle tematiche circa la privacy.

Entrino in gioco le VPN

Parlando del livello 2, ho un po’ enfatizzato che serve per connessioni dirette e/o fisiche. In realtà esitono anche dei cosiddetti adattatori virtuali, che simulano, per esempio, una scheda Ethernet.

Chiarito questo, e sapendo come funziona il routing, il funzionamento di una VPN viene quasi automatico!

Un software VPN crea una scheda di rete virtuale a cui si attacca (cioè in pratica funziona tra livello 2 e 3), dopodiché configura il PC per inviare i pacchetti per la rete destinati al fornitore del servizio alla scheda di rete reale, tutti gli altri pacchetti invece al “cavo Ethernet farlocco”.

Il software riceve vari i pacchetti IP (livello 3), li cripta e poi li butta dentro ad un bel pacchetto a livello 5, con destinazione i server del provider VPN. Qando questi pacchetti scendono la pila ISO/OSI, vengono mandati via per l’interfaccia fisica vero e proprio.

Dal punto di vista del provider (e.g. Tim/Vodafone/Fastweb etc), il cliente manda solamente dei pacchetti criptati ad un certo server del fornitore di VPN! Solo quest’ultimo sarà in grado di decifrarli, recuperare il destinatario originale e inoltrarglieli.

Ecco qui perché una VPN aiuta: non fa sapere al provider con chi il cliente comunichi. Ma c’è anche un rovescio della medaglia: poi è il gestore della VPN a sapere con chi e talvolta cosa comunichi!! Quindi sarebbe meglio che ci fossero anche altre protezioni. Un esempio? HTTPS.

HTTPS e TLS

Come funziona HTTPS? E a che livello è nella pila, a questo punto? E quindi, che vantaggi/svantaggi offre?

HTTPS fondamentalmente è il buon vecchio HTTP con aggiunta di TLS (transport layer security). Quindi tutta la sicurezza di HTTPS è in verità la sicurezza di TLS, che può proteggere anche altri servizi, come la posta elettronica.

Come dice il nome, TLS si inserisce tra livello 4 e 5: un attaccante che può vedere il contenuto protetto TLS (o il provider, oppure il gestore di VPN se usi una VPN) può sapere con chi stai comunicando e può fare un’ipotesi su che servizio stai usando (e.g. un sito web, oppure posta elettronica), ma non potrà sapere il contenuto della comunicazione!5

Ora, ipotizziamo che tutto quello che fai è solo cercare cose su Google, guardare video su YouTube, usare la posta elettronica di Gmail da web, Google Drive e Google Docs, insomma, usare solo servizi web di Google. A meno che tu non sia in Cina, non ti serve troppo una VPN: il tuo provider vede che, come tanti, ti stai connettendo ai server web di Google, ma grazie ad HTTPS non sa cosa stai facendo.

Inoltre se hai fatto il login su Google, loro sanno chi sei, quindi ti interessa poco che sappiano o meno il tuo indirizzo IP6.

In generale, VPN e HTTPS sono un’ottima accoppiata.

Tor

A volta però, si desidera un livello di anonimato ancora maggiore. Dopotutto, alcuni provider VPN potrebbero conservare dei log e, spesso, per via del pagamento, conoscono l’identità dei loro clienti.

Quindi arriva in soccorso Tor (The Onion Router, ma pur essendo una sigla, lo si indica solo con la T maiuscola e il resto in minuscolo).

Da un punto di vista tecnico, Tor ingloba sempre pacchetti di livello 3, ma è diverso da una VPN perché, oltre fare in modo che il servizio non conosca l’utente7, fa in modo che nessun altro possa associare allo stesso tempo l’utente al servizio.

Per farlo, anziché far connettere direttamente l’utente a un servizio, lo fa passare attraverso (almeno) 3 nodi della rete Tor, gestiti da dei volontari (tra cui anch'io). In particolare il primo viene detto guard (o entry), l’ultimo exit relay e quelli in mezzo sono detti middle.

Il tutto funziona perché il guard conosce l’utente e il middle, ma non sa quale sarà l’exit.

Il middle conosce il guard e l’exit, ma nulla né sull’utente, né sulla destinazione. Ha il solo scopo di fare isolamento.

Infatti, l’exit conosce il middle e la destinazione, ma non conosce il guard e meno che meno l’utente.

Per risalire all’utente, l’exit dovrebbe come minimo risalire al guard, chiedendolo al middle, dopodiché il guard dovrebbe dirgli chi era l’utente. In modo analogo, per conoscere la destinazione, il guard dovrebbe chiederla all’exit, dopo averlo identificato grazie al middle.

La sicurezza di Tor si basa quindi, in particolare, sul non beccare un circuito di 3 nodi gestito tutto da una stessa entità, e.g. NSA.

In realtà, il nodo guard praticamente rimane sempre lo stesso per questioni di sicurezza, ma gli altri cambiano da destinazione a destinazione (e anche dopo un certo lasso di tempo)8, quindi costruire un circuito con 3 nodi gestiti dalla stessa entità è estremamente improbabile.

Inoltre, sempre per sicurezza, un volontario non può richiedere di essere un guard, lo può diventare solo se il suo nodo rispetta certi parametri. Invece un nodo può sempre richiedere di essere un exit, ma per impostazione predefinita la cosa è disabilitata, perché il responsabile di un exit relay deve essere pronto a subire possibili cause o problemi con la legge.

Una panacea?

Tor è sicuramente un grande aiuto, ma, anche se l’identità dell’utente è celata, l’exit relay è comunque in posizione di poter leggere e modificare la comunicazione, quindi usare HTTPS è ancora d’obbligo, anche con Tor.

Un’altra cosa, che può sembrare scontato, è che chi usa Tor deve stare attento a non rivelare la propria identità. Ciò che non è banale, è che la propria identità non è data solo da nome e cognome, ma anche da abitudini di navigazione, stile di scrittura etc.

Infine, l’uso di Tor è facilmente rilevabile, sia dal provider, e ancora di più dai servizi: questi ultimi possono accorgersi che un utente è connesso tramite Tor perché la lista degli indirizzi IP degli exit relay è pubblica. Ci sono diversi servizi che non si rendono disponibili, se visitati tramite Tor.

Per il provider la storia è simile: con la configurazione predefinita, un utente si connette a un guard il cui indirizzo IP è pubblico. Tuttavia, ci sono diverse strategie che possono occultarlo, per arginare la censura che certi governi vorrebbero porre al network.

Per evitare questi problemi, un utente potrebbe pensare a una VPN da mettere o prima o dopo Tor: connettendosi prima alla VPN, il guard vedrebbe che l’indirizzo della VPN e i servizzi vedrebbero l’exit relay; connettendosi tramite Tor alla VPN, l’exit vedrebbe solo traffico criptato verso la VPN, e i servizi vederebbero l’indirizzo della VPN. Quest’ultima possibilità avrebbe senso però solo con servizi di VPN completamente anonimi.

Per sicurezza massima (o paranoia), un utente dovrebbe andare in un posto pubblico, che però non abbia videosorveglianza, e connettersi alterando il MAC address oppure con una scheda WiFi comprata anonimamente (il MAC address talvolta è riportato sulla scatola del prodotto, non sia mai che il negoziante si tenga nota di chi ha comprato una certa scheda WiFi).

Questo era quanto, spero che sia una spiegazione utile e abbastanza semplice da seguire.

Footnotes

  1. Nonostante la maggior parte delle applicazioni indichi la destinazione dei propri pacchetti tramite indirizzi IP, una volta che i pacchetti del livello 3 vengono incapsulati in frame di livello 2, la destinazione deve essere convertita a indirizzo MAC locale. Per questo scopo esiste il protocollo ARP.
    ^top
  2. Volendo adottare una terminologia più precisa, quando si parla di livello 2 bisognerebbe parlare di frame, al livello 3 ci sono i pacchetti e i messaggi si riferiscono al livello 4.
    ^top
  3. Un’altra analogia con i numeri telefonici, è che il prefisso può essere più corto per reti più grandi, ma in generale, l’identificazione della rete può essere anche la maggior parte di un indirizzo IP. In particolare il caso di una rete coincidente con un singolo host è utile in diversi contesti.
    ^top
  4. Per essere più precisi, a meno di 256 applicazioni di farlo, perché l’header IP comprende un campo di un byte, chiamato protocol (number); TCP e UDP hanno rispettivamente il 6 e il 17.
    ^top
  5. Il chi è almeno l’indirizzo IP, quindi a volte potrebbe non essere così utile (e.g. in caso di connessione a un hoster condiviso). Tuttavia chi è nella posizione di vedere i pacchetti TLS, potrebbe benissimo vedere anche i pacchetti DNS, oppure il certificato che viene scambiato, e ottenere più informazioni da questo. L’ipotesi sul servizio può essere estratta dalle informazioni di TCP/UDP: per permettere di usare più serivzi, entrambi usano il numero di porta, che non viene criptato da TLS. Solitamente HTTPS usa la 443, IMAPS la 993 etc. Tuttavia, per bypassare certe restrizioni, a volte la porta di HTTPS viene usata anche per altri servizi. Inoltre un avversario potrebbe effettuare attacchi più avanzati, come il traffic fingerprinting.
    ^top
  6. In realtà l’indirizzo IP è un primo modo, grezzo, per il tracciamento, quindi si potrebbe non volere che l’indirizzo IP diventi noto, usando in realtà anche servizi non Google che però usano a loro volta servizi Google, come advertising, profilazione e statistiche e l’indirizzo.
    ^top
  7. Opzionalmente, anche i servizi possono celare la propria identità, se configurati come servizi nascosti. In questo caso c’è una procedura speciale per il rendez-vous, ma dopo la comunicazione avviene tramite 2 circuiti Tor normali, il cui ultimo nodo è comune, ma non deve essere per forza un exit.
    ^top
  8. Stabilito un circuito verso una certa destinazione, esso rimarrà attivo finché una connessione che lo usa sarà attiva, ovvero le connessioni lunghe (e.g. download HTTP di file grossi, o IRC) non vengono interrotte per cambiare circuito Le nuove connessioni verso quella destinazione useranno invece lo stesso circuito per 10 minuti (o per il valore specificato su MaxCircuitDirtiness) dopo che è stato usato la prima volta, le successive useranno un nuovo circuito.
    ^top