Bibliografia:
Computer Networking. Cap. 3. Autori: James F. Kurose (University of Massachusetts, Amherst) Keith W. Ross (Polytechnic Institute of NYU).
Le comunicazioni su Internet sono facilmente intercettabili e gli utenti possono subire molti tipi di attacchi. L'amministratore di una rete aziendale deve distinguere il traffico generato dagli utenti che lavorano per l'azienda e gli che sono autorizzati ad accedere alle risorse della rete dal traffico generato da utenti malintenzionati. In tutte le organizzazioni, dai castelli medievali ai moderni edifici che ospitano uffici, esiste un solo punto di ingresso-uscita dove chi entra e chi esce viene sottoposto ad un controllo di sicurezza. In un castello c'era il ponte levatoio, in un edificio aziendale c'è un cancello sorvegliato da personale addetto alla sicurezza. In una rete di calcolatori, il traffico che entra e che esce dalla rete viene controllato, registrato, scartato o smistato. Queste operazioni sono affidate ai filewall, ai sistemi riconoscimento delle intrusione (IDS: intrusion detection systems) e ai sistemi di prevenzione delle intrusioni (IPS: intrusion prevention systems).
Un firewall è un calcolatore, dotato di opportuno software, che isola la rete interna di un'organizzazione dalla rete geografica Internet, consentendo ad alcuni pacchetti di passare e bloccando altri. Un firewall consente all'amministratore di una rete di controllare le comunicazioni in transito tra il modo esterno e le risorse interne alla rete amministrata, gestendo tutto il flusso del traffico che parte o è diretto a queste risorse. Un firewall ha tre scopi:
Tutto il traffico dall'esterno all'interno e vice versa, passa attraverso il firewall.
La figura mostra un firewall collocato al confine tra la rete amministrata e la rete pubblica Internet.
Le grandi organizzazioni potrebbero usare firewall a molti livelli di funzionalità, oppure potrebbero distribuirli nei vari reparti, ma l'utilizzo di un
firewall in un solo punto di transito con la rete favorsce la gestione e rafforza la politica di sicurezza applicata.
Solo il traffico autorizzato, come specificato dalla politica di sicurezza locale, sarà autorizzato a passare. Il firewall può limitare l'accesso solo al traffico autorizzato, perchè tutto il traffico è costretto ad attraversare il firewall.
Il firewall stesso è immune alle intrusioni. Il firewall è un dispositivo connesso alla. Se non viene progettato e configurato correttamente, può venire compromesso, nel qual caso fornisce solo una falsa sensazione di sicurezza (che è peggio di non avere il firewall!).
I principali produttori di firewall sono Cisco e Check Point. Un firewall (packet filter) può essere facilmente configurato anche in Linux usando iptable (un software dii pubblico dominio, normalmente già incluso in Linux).
I firewall possono essere classificati in tre categorie: un tradizionale packet filter, uno stateful filter, e un application gateways.
Normalmente, la rete aziendale è connessa al provider (e quindi a Internet) tramite un router di frontiera. Tutto il traffico che esce e che entra nella rete aziendale passa attrafverso questo router, ed è su questo router che avviene il filtraggio dei pacchetti. Un packet filter esamina separatamente ogni datagramma, determinando se quel datagramma dovrebbe essere autorizzato a passare o dovrebbe essere scartato in base a regole stabilite dall'amministratore. Le decisioni di filtraggio possono basarsi su:
indirizzo IP sorgente o indirizzo IP destinazione
tipo del protocollo specificato nel campo del datagramma IP: TCP, UDP, ICMP, OSPF, …
porta TCP o UDP sorgente e destinazione
bit nel campo flag del segmento TCP: SYN, ACK, …
tipo di messaggio ICMP
regole diverse per i datagrammi che escono e per i datagrammi che entrano nella rete
regole diverse per le varie interfacce del router
Un amministratore di rete configura il firewall in base alla politica dell'azienda. La politica può prendere in considerazione la produttività e l'uso della banda degli utenti, così come pure gli aspetti della sicurezza dell'azienda. La tabella che segue elenca alcune possibili politiche che un'organizzazione potrebbe esigere, e il modo in cui un potrebbero essere gestite da un packet filter. Ad esempio, se l'organizzazione non vuole accettare connessioni TCP entranti eccetto quelle rivolte al suo server Web pubblico, può bloccare tutti i segmenti TCP SYN tranne i segmenti TCP SYN con porta destinazione 80 e indirizzo IP destinazione corrispondente al server Web. Se l'organizzazione non vuole che i suoi utenti saturino la banda con applicazioni di streaming audio o video, può bloccare tutto il traffico UDP (perchè il traffico audio-video su Internet viaggia su UDP). Se l'organizzazione non vuole che dall'esterno si scopra la mappa degli indirizzi IP interni (traceroute), può bloccare i messaggi ICMP che escono dalla rete.
Policy | Configurazione del Firewall |
Nessun accesso esterno al server Web. | Scartare tutti i pacchetti uscenti verso ogni indirizzo IP, aventi numero di porta 80 |
Nessuna connessione TCP entrante, eccetto quelle dirette al server Web aziendale. | Scartare tutti i pacchetti entranti TCP SYN destinati a qualsiasi indirizzo IP eccetto 130.207.244.203, porta 80 |
Impedire che le applicazioni audio-video saturino la banda. | Scartare tutti i pacchetti UDP entranti eccetto quelli DNS. |
Impedire che la rete venga utilizzata per un attacco DoS. | Scartare tutti i pacchetti ping di tipo ICMP destinati a un indirizzo di broadcast (es. 130.207.255.255) |
Impedire che venga scoperta la mappa della rete (con traceroute) | Scartare tutto il traffico uscente di pacchetti ICMP avente il campo TTL scaduto |
Politiche e corrispondenti regole di filtraggio per una rete 130.27/16 avente un server Web all'infirizzo 130.207.244.203 |
Una politica di filtraggio può essere basata su una combinazione di indirizzi e numeri di porta. Ad esempio, un router potrebbe filtrare tutti i datagrammi Telnet (quelli con numero di porta 23) eccetto quelli destinati o provenienti da un elenco di specifici indirizzi IP. Questa politica permette che si possano aprire connessioni Telnet dirette o provenienti da host elencati in una lista di host autorizzati. Purtroppo, basando la politica su indirizzi esterni, viene a mancare la protezione contro i pacchetti con indirizzi IP sorgenti falsificati.
Il firewall può anche filtrare pacchetti a seconda del valore del bit ACK nel segmento TCP. Questa regola consente agli utenti interni di una organizzazione di connettersi ad un server esterno, ma impedisce a client esterni di connettersi ai server interni alla rete aziendale. Si ricordi che il primo segmento di una connessione TCP ha il bit ACK impostato a 0, mentre tutti gli altri segmenti trasmessi sulla connessione hanno il bit ACK impostato a 1. Quindi, se un'organizzazione vuole impedire che client esterni chiedano l'apertura di una connessione con i server interni, basta semplicemente filtrare tutti i segmenti entranti che hanno il bit ACK=0. Questa regola sopprime tutte le richieste di apertura di connessione provenienti dall'esterno, ma consente che si possano aprire connessioni, se la richiesta ha origine dall'interno delle rete aziendale.
Le regole dei firewall sono implementate nei router tramite le access control list. Ogni interfaccia del router ha la propria lista. La tabella che segue mostra un esempio di access control list per una rete aziendale 222.22/16. Questa access control list riguarda un'interfaccia del ruter che connette la rete aziendale all'ISP. Le regole vengono applicate a tutti i datagrammi che passano attraverso l'interfaccia, nell'ordine dall'alto verso il basso dell'elenco. Le prime due regole permettono agli utenti interni di navigare sul Web: la prima regola autorizza la trasmissione verso l'esterno di qualsiasi pachetto destinto alla porta 80, la seconda regola consente che ogni pacchetto TCP con porta sorgente 80 e con il bit ACK impostato a 1, possa entrare nella rete aziendale. Notare che se un client esterno tenta di stabilire una connessione TCP con un host interno, la richiesta verrà bloccata, anche se la porta sorgente o destinazione è 80. La seconda coppia di regole permette che i pacchetti DNS entrino ed escano dalla rete. Riassumendo, questa access control list, piuttosto restrittiva, blocca tutto il traffico, eccetto quello Web originato dall'interno dell'organizzazione aziendale e quello DNS.
azione | indirizzo sorgente | indirizzo destinazione | protocollo | porta sorgente | porta destinazione | campo flag |
permetti | 222.22/16 | esterno a 222.22/16 | TCP | > 1023 | 80 | qualsiasi |
permetti | esterno a 222.22/16 | 222.22/16 | TCP | 80 | > 1023 | ACK |
permetti | 222.22/16 | esterno a 222.22/16 | UDP | > 1023 | 53 | - |
permetti | esterno a 222.22/16 | 222.22/16 | UDP | 53 | > 1023 | - |
nega | tutti | tutti | tutti | tutti | tutti | tutti |
access control list per l'interfaccia di un router |
In un packet filter tradizionale, le decisioni di filtraggio vengono prese su ogni pacchetto, indipendentemente dagli altri. Un firewall Stateful filter osserva tutte le connessioni TCP e ne controlla l'avanzamento allo scopo di decidere se scartare o autorizzare i pacchetti di una connessione.
Per comprendere lo stateful filter, si esamini l'access control list nella tabella precedente. Sebbene questa imponga delle forti limitazioni, consente che ogni pacchetto entrante con la flag ACK=1 e numero di porta sorgente=80 venga autorizzato a entrare nella rete. Tali pacchetti potrebbero essere usati da un attaccante per tentare di danneggiare i sistemi interni usando pacchetti alterati, allo scopo di attuare un attacco DoS, oppure scoprire la mappa della rete interna. La soluzione più elementare sarebbe quella di bloccare i pacchetti TCP con al flag ACK=1, ma di conseguenza gli utenti interni non potrebbero navigare sul Web.
Gli Stateful filter risolvono questo problema registrando tutte le connessioni TCP uscenti in una tabella delle connessioni. Questo è possibile perchè il firewall può rilevare l'apertura di una nuova connessione osservando un three-way handshake (SYN, SYN ACK, e ACK); e può rilevare la chiusura di una connessione quando vede un pacchetto con la flag FIN=1, relativo a quella connessione. Il firewall può assumere che la connessione non è più attiva quando non vede transitare pacchetti per, ad esempio, 60 secondi. La tabella che segue mostra un esempio di tabela delle connessioni per un firewall. Questa tabela delle connessioni indica che, al momento, ci sono tre connessioni TCP uscenti, ognuna delle quali è stata originata da un utente interno all'organizzazione. Inoltre, lo stateful filter include una nuova colonna, "Controllo Connessione", nelle sua access control list. Notare che la tabella è identica alla tabella dell'access control list precedente, con la differenza che adesso indica che la connessione dovrebbe essere verificata per due delle regole.
L'esempio che segue intende mostrare il funzionamento della tabella delle connessioni in combinazione con l'access control list estesa. Si supponga che un attaccante tenti di inviare un pacchetto contraffatto nella rete dell'organizzazione trasmettendo un pacchetto TCP con numero di porta sorgente 80 e con la flag ACK=1. Inoltre, per ipotesi, questo pacchetto ha numero di porta sorgente 54321 e indirizzo IP sorgente 150.23.23.155. Quando questo pacchetto raggiunghe il firewall, il firewall controlla l'access control list nella tabella, che indica l'obbligo di controllare anche la tabella delle connessioni prima di permettere a questo pacchetto di entrare nella rete aziendale. Il firewall obbedendo controlla la tabella delle connessioni, si accorge che questo pacchetto non appartiene a nessuna delle connessioni TCP uscenti e scarta il pacchetto. Come secondo esempio, si supponga che un utente interno vuole visitare un sito Web esterno. Poichè questo utente invia prima un segmento TCP con la flag SYN=1, la connessione TCP dell'utente viene registrata nella tabella delle conessioni. In tutti i pacchetti di risposta del server Web la flag ACK è sempre 1, quindi il firewall controllando la tabella vede che appartengono ad una connessione esistente, il firewall consentirà a questi pacchetti di passare, senza interferire con l'attività di navigazione sul Web dell'utente.
indirizzo sorgente | indirizzo destinazione | porta sorgente | porta destinazione |
222.22.1.7 | 37.96.87.123 | 12699 | 80 |
222.22.93.2 | 199.1.205.23 | 37654 | 80 |
222.22.65.143 | 203.77.240.43 | 48712 | 80 |
Tabella delle connessioni per lo stateful filter |
Associata alla tabella delle connessioni esiste la seguente access control list
azione | indirizzo sorgente | indirizzo destinazione | protocollo | porta sorgente | porta destinazione | flag | Controllo Connessione |
permetti | 222.22/16 | esterno a 222.22/16 | TCP | > 1023 | 80 | qualsiasi | - |
permetti | esterno a 222.22/16 | 222.22/16 | TCP | 80 | > 1023 | ACK | X |
permetti | 222.22/16 | esterno a 222.22/16 | UDP | > 1023 | 53 | - | - |
permetti | esterno a 222.22/16 | 222.22/16 | UDP | 53 | > 1023 | - | X |
nega | tutti | tutti | tutti | tutti | tutti | tutti | |
access control list per lo stateful filter |
Il filtraggio a livello di pacchetto prende in esame proprietà molto generali, cioè l'indirizzo IP e l'intestazione TCP o UDP, i numeri di porta e le flag di conferma. Ma come si potrebbe soddisfare un'esigenza particolare, quale ad esempio quella di consentire un servizio Telnet ad un limitato numero di utenti interni? indipendentemente dal loro indirizzo IP. Inoltre, come si potrebbero autenticare questi utenti privilegiati prima di iniziare una sessione Telnet con il mondo esterno? Uno Stateful filter tradizionale non riesce ad offrire questi servizi. L'informazione relativa all'identità degli utenti interni è un dato del livello applicazione, che non è inclusa nell'intestazione del pacchetto TCP o UDP.
Per pervenire ad un livello di sicurezza più accurato, il firewall deve combinare le operazioni di filtraggio dei pacchetti con un application gateway. Gli Application gateway prendono decisioni esaminando, non solo le intestazioni IP/TCP/UDP dei pacchetti, ma anche i dati applicativi. Un application gateway è server specifico di una applicazione attraverso cui tutti i dati applicativi (entranti e uscenti) devono passare. Più application gateway possono essere in esecuzione sullo stesso host, ma ogni gateway è un server separato, con i suoi propri processi.
Allo scopo di comprendere il funzionamento di un application gateway, si progetti un firewall che permetta solo a un numero ristretto di utenti interni di aprire connessioni Telnet e impedisca a tutti i client esterni di aprire connessioni con host interni alla rete. Una tale politica può essere realizzato combinando un packet filter (in a router) e un application gateway Telnet, come mostrato nella figura.
Il filtro del router è configurato per bloccare tutte le connessioni Telnet tranne quelle originate dall'indirizzo IP del application gateway. Questa configurazione del filtro costringe tutte le connessioni Telnet uscenti a passare attraverso l'application gateway. Adesso si consideri un utente interno che vuole aprire una connessione Telnet con un host esterno. L'utente deve prima impostare una sessione Telnet con l'application gateway. Una applicazione in esecuzione sul gateway, ascolta le sessioni Telnet entranti, chiede all'utente un ID e una password. Quando l'utente fornisce queste informazioni, l'application gateway verifica se l'utente ha il permesso di aprire connessioni Telnet con l'esterno. Se l'utente non è autorizzato ad aprire connessioni Telnet il gateway chiude la connessioni. Se l'utente ha il permisso, il gateway (1) chiede all'utente il nome del computer eterno con cui l'utente intende collegarsi, (2) apre una sessione Telnet tra il gateway e l'host esterno, e (3) consegna all'host esterno tutti i dati che arrivano dall'utente e consegna all'utente tutti i dati che arrivano dall'host esterno. Così, application gateway Telnet non solo verifica l'autorizzazione dell'utente, ma agisce contemporaneamente da server e client Telnet, smistando le informazioni tra l'utnte e il server Telnet remoto. Notare che il filtro permetterà il passo 2 perchè il gateway inizia la connessione Telnet con l'esterno.
Le reti aziendali possono avere più application gateway, ad esempio, gateway per Telnet, HTTP, FTP, ed e-mail. Infatti, il server di posta di un'azienda e la cache Web sono application gateway.
Gli application gateway hanno alcuni svantaggi. Primo, è richiesto un un differente application gateway per ogni applicazione. Secondo, bisogna accettare un degrado delle prestazioni, perchè tutti i dati devono atraversare il gateway. Questo problema diventa particolarmente evidente in presenza di molti utenti o applicazioni che usano la stessa macchina come gateway. Infine, il software del client deve sapere come contattare il gateway quando l'utente avanza una richiesta, e deve sapere come dire all'application gateway a quale server esterno si deve collegare.
Un packet filter (tradizionale e stateful) ispezione i campi dell'intestazione dei pacchetti IP, TCP, UDP, e ICMP per decidere quali pacchetti passano e quali vengono scartati. Comunque, per riconoscere molti tipi di attacchi, si deve ispezionare più approfonditamente il pacchetto, cioè guardare anche i dati applicativi trasportati. È vero che questa operazione è affidata all'application gateway, ma questo lo fa per una sola applicazione.
Sembra evidente che sia necessario ricorrere ad un ulteriore dispositivo, uno che svolga funzioni aggiuntive di quelle di un filtro di pacchetti. Serve un dispositivo che si occupi di individuare pacchetti sospetti e impedisca loro di entrare nella rete interna. In alternativa, volendo offrire al pacchetto sospetto un possibilità, il dispositivo potrebbe segnalare il tipo di anomalia riscontrata affinchè l'amministratore prenda gli opportuni provvedimenti. Un dispositivo che genera messaggi di avviso associati al traffico potenzialmente pericoloso è chiamato intrusion detection system (IDS). Un dispositivo che blocca il traffico sospetto è chiamato intrusion prevention system (IPS). Gli aspetti tecnici più importanti di tali dispositivi riguardano la strategia per riconoscere il traffico sospetto, non se segnalare o se scartare i pacchetti sospetti. Per questa ragione nel seguito gli IDS comprendono anche gli IPS.
Un IDS può essere usato per riconoscere un'ampia varietà di attacchi, compreso la scoperta della mappa della rete, la scansione delle porte, il DoS per saturare la banda, l'introduzione di virus, lo sfruttamento di vulnerabilità del sistema opertativo e delle applicazioni. I principali produttori di IPS e di IDS sono Cisco e Check Point, ma esiste anche una soluzione di pubblico dominio: Snort.
Un'organizzazione può installare uno o più sensori IDS nella sua rete interna. La figura mostra un'organizzazione che ha tre sensori IDS nella sua rete interna.
Quando si installano più sensori, si preferisce che questi cooperino per l'interesse globale della rete, per questo motivo le segnalazioni sul traffico sospetto vengono inviate ad un IDS centrale, che raccoglie e riunifica le informazioni per avvertire l'amministratore. La rete nella figura è partizionata in due regioni: una regione con elevato grado di sicurezza, protetta da un packet filter e da un application gateway, monitorata da un sensore IDS, e una regione con un grado di sicurezza minore, indicata come demilitarized zone (DMZ), protetta solo da un packet filter e monitorata dai sensori IDS. Notare che la DMZ contiene i server aziendali che devono comunicare con il mondo esterno, come ad esempio il server Web e il server DNS della rete interna.
Ci si potrebbe chiedere qual è il motivo della presenza di più IDS. Non basterebbe affiancare l'IDS al packet filter? Un IDS, oltre ad ispezionare a fondo i pacchetti, deve anche confrontare ogni pacchetto che passa migliaia di firme (sequenze di byte di virus conosciuti). Questo confronto potrebbe introdurre un rallentamento nella comunicazione, in particolare se la velocità della linea è elevata. Posizionando gli IDS in modo che ogni sensore veda solo una frazione del traffico entrante, si distribuiasce il carico. Comunque, oggi sono disponibili IDS e IPS ad elevate prestazioni, per cui è possibile collocare un solo IDs in prssimità del router di frontiera.
Gli IDS sono classificati in sistemi basati sulla firma e sistemi basati su anomalie. Un IDS basato sulla firma gestisce un database di firme, dove ogni firma è un insieme di regole relative ad un'attività di intrusione. Una firma può essere semplicemente un elenco di caratteristiche possedute da un pacchetto (ad esempio i numeri di porta sorgente e destinazione, il tipo del protocollo e una ben precisa sequenza di bit nel payload. Oppure può riguardare una serie di pacchetti. Le firme sono create da tecnici esperti di sicurezza, ma anche un amministratore può creare una firma e aggiungerla al database.
Nella pratica, un IDS basato sulla firma intercetta tutti i pacchetti che lo attraversano e confronta ciascuno di essi con tutte le firme che ha nel database. Se un pacchetto (o una serie di pacchetti) corrisponde a una firma, l'IDS genera un messaggio di avviso. L'avviso può essere inviato all'amministratore via e-mail, al gestore della rete, oppure registrato il un file di log, che verrà esaminato periodicamente.
I sistemi basati sulla firma, sebbene molto diffusi, soffrono di alcune limitazioni. Laa firma può essere creata solo dopo che si viene a conoscenza di un attacco. In altre parole, un IDS basato sulla firma è completamente scoperto di fronte ad attacchi nuovi che non sono ancora stati registrati. Un altro svantaggio è che, persino se viene riscontrata una firma, potrebbe non trattarsi di un attacco, e quindi viene generato un falso allarme. Infine, poichè ogni pacchetto deve essere confrontato con tutte le firme presenti nel database, l'IDS potrebbe trovarsi indietro rispetto all'elaborazione reale e quindi non riconoscerebbe in tempo i pacchetti maligni.
Un IDS basato sulle anomalie crea un profilo del traffico generato durante le normali operazioni. Quindi derca flussi di pacchetti che sono statisticamente insoliti. Ad esempio viene rilevata un'elevata frequenza di pacchetti ICMP, una crescita esponenziale di scansione delle porte e ping ripetuti. Questo tipo di IDS non ha bisogno di una conoscenza preliminare dei tipi di attacchi, anzi è in grado di riconoscere i nuovi attacchi.
Snort è un IDS open source di pubblico dominio molto diffuso. Esistono versioni per Linux, UNIX, e Windows. Usa il programma libpcap di cattura dei pacchetti in transito su una interfaccia, lo stesso usato da Wireshark. Riesce a gestire 100 Mbps di traffico; Per le installazioni su canali con velocità superiori al gibabit/sec, sono richiesti più sensori. Il seguente è un esempio di come Snort individua una forma:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg: "ICMP PING NMAP"; dsize: 0; itype: 8;)
Questa firma è presente in ogni pacchetto ICMP che entra nella rete dell'organizzazione ($HOME_NET) dall'esterno ($EXTERNAL_NET), con tipo protocollo 8 (ICMP ping), ed ha un payload vuoto (dsize = 0). Poicheè nmap genera pacchetti con queste caratteristiche, questa firma è progettata per rilevare raffiche di pacchetti ping inviati da nmap. Quando si incontra un pacchetto con questa firma, Snort genera il messaggio di allarme "ICMP PING NMAP".
Snort è manutenzionato da una vasta comunità di utenti ed esperti di sicurezza che tengono sempre aggiornato il suo database di firme. Normalmente, alcune ore dopo un attacco, la comunità Snort scrive e rilascia la firma di un attacco, la quale viene poi scaricata da tutti gli Snort installati in Internet. Inoltre, usando la sintassi della firma, gli amministratori di rete possono caratterizzare le firme secondo le proprie esigenze modificando quelle esistenti o creandone di nuove.
ANONYMITY AND PRIVACY Si supponga di voler visitare un sito Web compromettente (ad esempio, quello di un'organizzazione politica) e (1) non si vuole rivelare il proprio indirizzo IP al sito Web, (2) non si vuole che il proprio provider ISP venga a conoscenza del sito che si sta visitando, e (3) non si vuole che il proprio provider veda i dati che si stanno scambiando con il sito Web. Usando il normale metodo di connettersi direttamente al sito Web senza alcuna criptografia, nessuno dei tre requisiti viene soddisfatto. Se si usa il protocollo SSL, si rivela comunque il proprio indirizzo IP, che è riportato in ogni datagramma.
Per ottenere la riservatezza e l'anonimato, si devono combinare i servizi di un proxy server fidato e SSL.
In questo modo, prima si stabilisce una conessione SSL con il proxy fidato poi, su questa connessione si trasmette la richiesta http per ricevere una pagina dal sito desiderato. Quando il proxy riceve la richiesta http, criptata con SSL, la decripta e la trasmette in chiaro al sito Web. Il sito Web risponde al proxy, che a sua volta passa la risposta sulla connessione SSL all'host di origine. Poichè il sito Web vede solo l'indirizzo IP del proxy, e non vede quello del client, si sta ottenendo l'accesso anonimo al sito Web. Poichè tutto il traffico tra il client e il proxy è criptato, l'ISP non viola la riservatezza dell'utente registrando il sito chi si sta visitando o registrando i dati scambiati. Sul Web sono disponibili (ad esempio proxify.com) molti siti che offrono proxy con tali servizi.
Naturalmente, con questa soluzione, il proxy a cui si chiede il servizio viene a conoscenza di tutto: l'indirizzo IP del client, l'indirizzo del sito Web visitato, e riesce a leggere tutto il taffico in chiaro scambiato tra il client e il proxy. Quindi questa soluzione è accettabile fintanto che ci si possa fidare del proxy. Un metodo più robusto utilizza i servizi di anonimato e riservatezza instradando tutto il traffico attraverso una serie di proxy server. In particolare, TOR permette a singoli proxy di formare un gruppo di proxy. Quando un utente si connette a un server usando TOR, il TOR sceglie a caso (dal suo gruppo di proxy) una successione di tre proxy e instrada il traffico tra il client e il sito Web lungo questa successine di proxy. In questo modo, assumendo che i proxy non tradiscano la fiducia, nessuno conosce quali comunicazioni sono avvenute tra l'indirizzo IP sorgente e il sito Web visitato. Inoltre, sebbene il testo tra l'ultimo proxy e il server Web sia in chiaro, l'ultimo proxy non conosce l'indirizzo IP con cui il server comunica.