[Articolo] Nella tua rete Tor è bloccato? Bypassiamo il blocco!

Vediamo oggi come usare Tor in presenza di sistemi/reti/ISP che ne bloccano il suo funzionamento.

Difficoltà articolo (0->10): 5

Vediamo oggi come usare Tor in presenza di sistemi/reti/ISP che ne bloccano il suo funzionamento. Innanzitutto Tor è un software appartenente alla categoria PET (Privacy Enhaced Technology), che permette di navigare in modo anonimo sul web e di “anonimizzare” una grande quantità di servizi distribuiti (chat, torrent, …).
Il suo utilizzo principale è quello di permettere la consultazione di pagine web e la fruizione di Internet senza vincoli in quei luoghi in cui sono in vigore restrizioni politiche o censure di vario genere. Tuttavia, Tor viene usato piuttosto comunemente anche per bypassare le restrizioni aziendali e poter così navigare su siti “proibiti” perché bloccati dal proxy e/o firewall aziendale. Non è raro, purtroppo, che venga usato esclusivamente per navigare su Facebook o su altri social network durante l’orario di lavoro. Per carità, Tor può essere usato anche per navigare su Facebook, ma i suoi intenti sono ben più nobili!

In ogni caso molte aziende, enti, e organizzazioni, stanno cercando da tempo meccanismi per intercettare e bloccare l’utilizzo di Tor, configurando ACL sui firewall e filtri sui proxy. Inoltre, in alcuni casi ad essere bloccato è anche l’accesso al sito di Tor, in modo da impedire il download del software e la ricerca di documentazione. Bloccare la connessione alla rete Tor non è impossibile, perché viene resa pubblica una lista dei nodi della rete Tor, aggiornata costantemente. La lista è reperibile a questi link:

Tale lista potrebbe essere usata per configurare un proxy (squid ad esempio) in modo da bloccare tutte le connessioni uscenti dirette ad uno degli IP delle lista. Il risultato di un tale blocco (vedere lo screenshot sotto) è che l’utente con il client Tor sarà impossibilitato a collegarsi alla rete Tor, e pertanto al resto della Rete.

tor_blocked
Tor bloccato dalla rete/ISP

Veniamo adesso al reale argomento del post :-): come possiamo fare se la nostra rete/ISP blocca la connessione a Tor? Quello che possiamo fare è ricorrere ad alcune contromisure in grado di bypassare il blocco imposto, garantendo anonimato e privacy, e accesso a tutte le funzionalità di Tor. Può capitare anche che venga bloccata la visualizzazione del sito del progetto Tor, ma in questo caso è possibile facilmente usare un proxy web gratuito per poter visitare il sito (esempi di proxy gratuiti sono www.hidemyass.com e zendproxy.com).

Dunque, se non ci è possibile usare Tor poiché la connessione si blocca dopo aver avviato il software, è possibile agire in 2 modi:

  1. usare obfsproxy;
  2. agire sulla configurazione di Tor.

OPZIONE 1 

Per la prima opzione, è necessario scaricare il software obfsproxy al seguente link:

obfsproxy è un software basato su Tor (è praticamente Tor a tutti gli effetti), ma in via sperimentale e con i bundle al momento non più aggiornati. Il software permette di mascherare i pacchetti inviati alla rete Tor, facendoli sembrare pacchetti “innocenti” (ad esempio semplice pacchetti HTTP) come è visibile in figura.

obfsproxy_diagram
Diagramma di funzionamento di obfsproxy

L’interfaccia e l’utilizzo di obfsproxy sono gli stessi di Tor, mentre a cambiare è la configurazione del software, come si vede in figura.

tor_obfsproxy
obfsproxy

OPZIONE 2 

In questo caso non sono necessari software aggiuntivi ma dobbiamo agire su alcuni parametri di Tor per poter aggirare i blocchi imposti da rete/ISP. I parametri da configurare sono modificabili direttamente dall’interfaccia Vidalia, e si trovano in Settings->Network come visibile in figura.

tor_settings_network
Parametri configurabili di Tor per aggirare i blocchi

Fra questi, il metodo più efficace e affidabile è quello di usare un bridge Tor, ossia la terza possibilità “My ISP blocks connections to the Tor network”. Vediamo comunque in dettaglio le 3 possibilità.

Opzione – “My ISP blocks connections to the Tor network”

Con questa opzione possono essere configurati i bridge Tor. Un bridge Tor è fondamentalmente un nodo della rete Tor che agisce da ponte (similmente a un proxy) per il collegamento tra client/utente e rete Tor. I bridge hanno la particolarità di non essere elencati nelle liste pubbliche di nodi Tor (come visto precedentemente), e pertanto difficilmente saranno rilevati e bloccati dagli amministratori di rete. Per conoscere i bridge disponibili in ogni momento, dobbiamo visitare il seguente link:

Dopo aver trovato i bridge Tor disponibili, è necessario configurarli in Setting->Network, come visibile nella figura seguente.

Add_bridge_to_Tor
Aggiunta di un bridge Tor.

In alternativa, è possibile creare un proprio bridge privato, se abbiamo a disposizione un server o un pc con connessione flat (ad esempio nella propria abitazione), e collegarsi ad esso quando siamo fuori e in una rete in cui Tor è bloccato. Per creare un bridge privato è sufficiente avviare Tor sulla macchina che fungerà da bridge, e selezionare in Settings->Sharing la voce “Help censored users reach the Tor network“, come visibile in figura.

Tor_setting_bridge
Configurazione di un bridge Tor privato.

Opzione – “I use a proxy to access the Internet”

Nel caso in cui la propria rete o il proprio ISP blocchi anche i bridge Tor, è possibile ricorrere all’uso di un proxy. Tramite un proxy i pacchetti uscenti dal proprio sistema, e quindi dal client Tor, sono indirizzati al proxy stesso e non alla rete Tor, e in questo modo viene oltrepassato il blocco imposto dalla rete/ISP. Nella figura sottostante è mostrato il collegamento attraverso un proxy.

tor.e.proxy.visio
Connessione a Tor attraverso un proxy.

Per questa soluzione il punto cruciale è la scelta di un proxy adeguato, che dovrà essere sicuro e affidabile, e supportare inoltre sia il protocollo HTTP che il quello HTTPS. Per ricercare un proxy possiamo usare questa lista (oppure cercare altre liste di proxy semplicemente con google), controllando che il proxy supporti HTTPS, sia di tipo anonymous, e abbia una buona affidabilità. Dopo aver scelto un proxy, dobbiamo controllare che sia attivo e supporti realmente sia HTTP che HTTPS. Quindi configuriamo Tor con le impostazioni del proxy, come visibile nella figura sotto.

Tor_setting_proxy
Configurazione di un proxy in Tor.

Per configurare il proxy sono necessari:

  1. indirizzo IP o hostname del proxy;
  2. porta utilizzata dal proxy;
  3. eventuali username/password se il proxy richiede l’autenticazione.

Questa soluzione è più tediosa rispetto all’utilizzo di un bridge, poiché i proxy open non offrono solitamente grandi garanzie e spesso le performance non sono eccelse. Difatti un proxy potrebbe non essere più attivo nel giro di poche ore o giorni, costringendoci a cercarne e configurarne un altro.

Opzione – “My firewall only lets me connect to certain ports”

L’ultima opzione configurabile deve essere utilizzata solo quando abbiamo la certezza che il firewall della nostra rete blocchi verso l’esterno alcune porte (in genere ad essere bloccate solo le porte esterno per connessioni verso l’interno). In questo caso è possibile selezionare la voce e specificare le porte che sono aperte sul firewall. La connessione alla rete Tor passerà dunque per le porte specificate.

Riepilogando, in questa piccola guida abbiamo visto come sia possibile usare Tor praticamente in ogni situazione, anche quando sono stati creati filtri ad hoc dagli amministratori/provider nel vano tentativo di limitare la libertà e la privacy personale.

“Per ogni blocco esiste sempre una contromisura, basta trovarla o idearla!”

roghan

GPG parte 2 – Criptare e decriptare un messaggio

Vediamo in questo articolo come criptare e decriptare un messaggio con GPG tramite shell.

GPG è un software che implementa lo standard OpenPGP, e dunque utilizza un sistema di crittografia a chiave pubblica, anche detto crittografia asimmetrica. E’ possibile trovare una spiegazione dettagliata della crittografia asimmetrica su wikipedia:

http://it.wikipedia.org/wiki/Crittografia_asimmetrica

Fondamentalmente con questa tipologia di algoritmi entrambe le persone coinvolte nella comunicazione devono disporre di 2 chiavi, una pubblica e una privata. La chiave pubblica, come dice il nome, deve essere distribuita pubblicamente, mentre deve restare assolutamente segreta la chiave privata. Lo schema di funzionamento di un algoritmo asimmetrico è questo […]

Vediamo in questo articolo come criptare e decriptare un messaggio con GPG tramite shell.

Se vogliamo inviare un messaggio criptato a Paolino Paperino tramite GPG, i passi da effettuare sono:

  1. chiedere a Paolino Paperino la sua chiave pubblica, o cercarla su un key server;
  2. importare la chiave pubblica di Paolino Paperino in GPG;
  3. criptare il messaggio;
  4. inviare il messaggio a Paolino Paperino.

Nel caso opposto, in cui vogliamo decriptare un messaggio ricevuto da Paolino Paperino, i passi sono:

  1. chiedere a Paolino Paperino la sua chiave pubblica, o cercarla su un key server;
  2. importare la chiave pubblica di Paolino Paperino in GPG;
  3. ricevere il messaggio da Paolino Paperino;
  4. decriptare il messaggio.

Vediamo adesso prima i passi per criptare e inviare un messaggio, e poi quelli per decriptare un messaggio.

Criptare e inviare un messaggio

1 – Ottenere la chiave pubblica di una persona

Per ottenere la chiave pubblica di qualcuno, la soluzione migliore è chiederla al diretto interessato, ad esempio tramite mail. La chiave può essere salvata/inviata come un file testuale con una forma simile alla seguente:

-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.4.10 (GNU/Linux)hQLNYbY1gO6GWuWNqoQsRBACBRP2QTKHM+SOQIqjqJcaGAj/ckLf8/vPseiSuzQtQqBTgHRnRu3qQhS9+rfMlnm3v3nbrJH8+qhdqZAZLklKCsyDfBeevtNRSHyKsxNUlhFlkvu7ZHr/T4OsQZT5weJ4YSsYi7JaHJaNbOu4J6R63FfwCg5kgeyY/8nQmtixlpKdCWSOQIqjqJcaGAj/ckLf8/vPs8wbA//A7JUfFBxMWAR2bEkLI90i+4ZnKBlZ0fx1NZTiISItikUOVSp+oAn24mV3xBLNYbY1gO6GWuWNqoQfDB=a9d8m30Pw—–END PGP PUBLIC KEY BLOCK—–

Alternativamente, se la persona ha pubblicato su un key server la propria chiave, è possibile recuperarla con uno di questi 3 comandi (il risultato è lo stesso):

# gpg --search-keys --keyserver hkp://server Mail_address
# gpg --search-keys --keyserver hkp://server "Person Name"
# gpg --search-keys --keyserver hkp://server key_ID

Ad esempio possiamo cercare la chiave di Paolino Paperino:

# gpg --search-keys --keyserver hkp://subkeys.pgp.net "Paolino Paperino"

————————————————————————————–
gpg: searching for "Paolino Paperino" from hkp server subkeys.pgp.net
(1) Paolino Paperino <paolino.paperino@paperopoli.com>
2048-bit RSA key, ID AC3C885F, created 2012-07-03
Keys 1-1 of 1 for "Paolino Paperino". Enter number(s), N)ext, or Q)uit >

La ricerca della chiave pubblica di una persona deve essere effettuata solo la prima volta, a meno che la persona non cambi la propria chiave.

2 – Importare la chiave pubblica

Adesso dobbiamo importare all’interno di GPG la chiave pubblica della persona. Nel caso in cui la chiave sia stata recuperata tramite un key server, è possibile importarla usando uno di questi 3 comandi (il risultato è lo stesso):

# gpg --recv-keys --keyserver hkp://server Mail_address
# gpg --recv-keys --keyserver hkp://server "Person Name"
# gpg --recv-keys --keyserver hkp://server key_ID

Se invece la chiave pubblica della persona è su un file (ad esempio inviato tramite mail), è possibile importarla con questo comando:

# gpg --import public_key.txt

In entrambi i casi, dopo aver importato la chiave è bene effettuare una verifica delle chiavi importate in GPG con il comando:

# gpg --list-keys

Tornando all’esempio, nel caso in cui vogliamo importare la chiave pubblica di Paolino Paperino che si trova nel file PaolinoPaperino_public_key.txt, i comandi sono:

# gpg --import PaolinoPaperino_public_key.txt
# gpg --list-key/home/xxx/.gnupg/pubring.gpg
-------------------------------
pub 2048R/AC3C885F 2012-07-03
uid Paolino Paperino <paolino.paperino@paperopoli.com>
sub 2048R/C624E359 2012-07-03

oppure, se la chiave è presente su un key server usiamo il comando:

# gpg --recv-keys --keyserver hkp://subkeys.pgp.net "Paolino Paperino"

Come il passo precedente, anche questo deve essere effettuato solo la prima volta. Ogni volta che poi dovremo criptare/decriptare un messaggio, GPG andrà a cercare la chiave corretta tra quelle importate al suo interno.

3 – Criptare un messaggio

Dopo aver importato la chiave pubblica di una persona all’interno di GPG, possiamo procedere a criptare e firmare un messaggio in questo modo:

# gpg --armor --recipient "Person Name" --sign --encrypt messagge.txt

oppure specificando il file in cui verrà salvato il messaggio criptato:

# gpg --output final_message.txt --armor --recipient "Person Name" --sign --encrypt messagge.txt

Analizziamo le opzioni utilizzate:

  • output è opzionale e permette di indicare il file in cui verrà salvato il messaggio criptato;
  • armor è opzionale e serve per produrre un messaggio criptato usando la codifica ASCII, altrimenti senza tale opzione viene prodotto un file binario;
  • recipient è un’opzione obbligatoria e identifica il destinatario del messaggio, dunque chi sarà in grado di decriptare il messaggio;
  • sign è opzionale e firma il messaggio;
  • encrypt è ovviamente obbligatoria e cripta finalmente il messaggio.

Veniamo all’esempio. Se vogliamo inviare un messaggio criptato a Paolino Paperino, il comando necessario sarà:

# gpg --armor --recipient "Paolino Paperino" --sign --encrypt messaggio_da_paperone.txt

Il messaggio che viene prodotto dal comando precedente può poi essere inviato al destinatario.

4 – Inviare un messaggio criptato

Dopo aver criptato il messaggio, possiamo inviarlo alla nostra destinazione.

Nel caso in cui abbiamo scelto l’opzione armor, il testo criptato avrà una forma simile a questa:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.2.10
hQEMAyAXkJC2I+NYAQf/dAPmS9pAawmTsTMxuN3qW4YSjup2E9GZZI8x4ikwAIrh
poPumljoUR5tqsf5+xvtrOpamY3qaTeUGCadtQiqCod2zrfZEA7iLUtcO2i47yuK
VCT7yY1SKWhtAvElrkd48k0CY8HMMRpGWMdXlvfnZNxl3lEo2F1oIH45xsUo9HJ8
9z0e0Jlm5oe3KCMSOPDqIQRvAeWHSruyeLtyUuaCWsdu9JaSEd1j886wxCbbCzrp
r2H6MPmd35gpthoIR8QjbAF7bzpnltXRZrs4Aex31o4YrjW4Ns/S2w==
=Yxjk
-----END PGP MESSAGE-----

Per trasmettere il testo criptato al destinatario è sufficiente copiarlo all’interno della mail da inviare.

Ricevere e decriptare un messaggio

1 – Ottenere la chiave pubblica di una persona

Il procedimento è lo stesso del punto 1 precedente, e deve essere effettuato solo la prima volta.

2 – Importare la chiave pubblica

Il procedimento è lo stesso del punto 2 precedente, e deve essere effettuato solo la prima volta.

3 – Ricevere un messaggio criptato

Un messaggio criptato può essere ricevuto tramite gli stessi mezzi dei messaggi in chiaro tradizionali, ad esempio tramite mail. Ricordo che un messaggio criptato ha solitamente una forma di questo tipo:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.2.10
hQEMAyAXkJC2I+NYAQf/dAPmS9pAawmTsTMxuN3qW4YSjup2E9GZZI8x4ikwAIrh
poPumljoUR5tqsf5+xvtrOpamY3qaTeUGCadtQiqCod2zrfZEA7iLUtcO2i47yuK
VCT7yY1SKWhtAvElrkd48k0CY8HMMRpGWMdXlvfnZNxl3lEo2F1oIH45xsUo9HJ8
9z0e0Jlm5oe3KCMSOPDqIQRvAeWHSruyeLtyUuaCWsdu9JaSEd1j886wxCbbCzrp
r2H6MPmd35gpthoIR8QjbAF7bzpnltXRZrs4Aex31o4YrjW4Ns/S2w==
=Yxjk
-----END PGP MESSAGE-----

4 – Decriptare un messaggio

Nell’ultimo passo dobbiamo decriptare il messaggio ricevuto, e il comando è questo:

# gpg --output message.txt --decrypt encrypted_message.txt

Il comando è piuttosto esplicativo in quando devono essere specificati solamente il file di output, in cui verrà memorizzato il file decriptato, e il messaggio criptato ricevuto.

Con il nostro esempio, se vogliamo decriptare un messaggio dobbiamo eseguire:

# gpg --output message_from_Paperino.txt --decrypt encrypted_message_from_Paperino.txt
---------------------------------------------
You need a passphrase to unlock the secret key for
user: "Paolino Paperino <paolino.paperino@paperopoli.com>"
2048-bit RSA key, ID AC3C885F, created 2012-07-03
Enter passphrase:

roghan