← Blog

tor


2019-11-11

La comanda tor permet fer networking de forma anònima.

Explicaré com fer servir la comanda tor per terminal, que fa que qualsevol comanda que executem sigui anònima.

La xarxa tor funciona així: les peticions entrants a la xarxa queden amagades enmig d'una sèrie de redireccions aleatòries distribuïdes entre ordinadors de tot el món que fa pràcticament impossible rastrejar direccions ip.

Veiem un exemple des de zero: imaginem que no fem servir tor, i la nostra ip pública és 1.1.1.1. Aquesta ip és la que la nostra companyia telefònica li ha assignat al nostre router.

Fem una consulta a la pàgina web 'example.com', amb la comanda curl.

  $ curl 'example.com'

Resultat: codi html de la pàgina 'example.com/index.html':

  <!doctype html>
  <html>
  <head>
    <title>Example Domain</title>
    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    [...]

La petició anterior es pot entendre així:

  +------------------+     +----------------------------+
  | el teu ordinador | --> | servidor web 'example.com' |
  +------------------+     +----------------------------+
               1.1.1.1     registre:
                           "1.1.1.1 ha consultat 'index.html' a les 14:45"

Algú que tingui accés al registre d'example.com, o que estigui espiant la xarxa al moment de la consulta, si d'alguna manera averigua que 1.1.1.1 som nosaltres, o pregunta a la nostra companyia telefònica "qui és la persona que tenia la direcció ip 1.1.1.1 a les 14:45?", llavors ja ens hauran identificat.

Ara bé, si fem servir tor, la nostra petició, després de ser redireccionada unes quantes vegades, imaginem que va a parar a la direcció aleatòria 4.4.4.4. Aquesta serà la ip que farà contacte al servidor, i pot ser un ordinador que estigui a qualsevol lloc del món. El que passarà ara és:

+------------------+      +---------+      +---------------------------+
| el teu ordinador | ---> |   tor   | ---> | servidor web 'example.com'|
+------------------+      |         |      +---------------------------+
             1.1.1.1      | 1.1.1.1 |      registre:
                          |    ↓    |      "4.4.4.4 consulta 'index.html' a les 14:45"
                          | 2.2.2.2 |
                          |    ↓    |
                          | 3.3.3.3 |
                          |    ↓    |
                          | 4.4.4.4 |
                          +---------+

El servidor web rep una petició de 4.4.4.4. Llavors el servidor contesta a 4.4.4.4 el codi html demanat: la resposta del servidor viatja enrere fins a 1.1.1.1 pel mateix camí d'anada.

La nostra companyia només sap que ens hem connectat a 2.2.2.2. Si el trànsit està xifrat amb SSL (https) la companyia no pot llegir el contingut del codi html que està anant cap a 1.1.1.1, per tant, no pot veure què estem fent, només pot veure que hi ha trànsit encriptat entre dues direccions ip.

Per tant, és pràcticament impossible d'associar que la persona responsable de la consulta web feta per 4.4.4.4 és realment 1.1.1.1, ja que la persona que vol esbrinar la identitat de 4.4.4.4 hauria d'anar ordinador per ordinador a veure el camí que fan els paquets de dades durant el moment de la transmissió, ja que una vegada es tanca el circuit, el camí de direccions IP s'oblida i no queda guardat enlloc.

Per complicar-ho una mica més, sempre podem fer un reset a tor (simplement parant i reexecutant la comanda), i obtenir un nou circuit aleatori de direccions ip. Ara consultem una altra pàgina web 'unaaltrapagina.html', i ara tenim la nova ip de sortida 5.5.5.5:

+------------------+      +-----+      +---------------------------+
| el teu ordinador | ---> | tor | ---> | servidor web 'example.com'|
+------------------+      +-----+      +---------------------------+
ip:                                    registre:
"1.1.1.1"                              "4.4.4.4 consulta 'index.html' a les 14:45"
                                       "5.5.5.5 consulta 'unaaltrapagina.html' a les 14:46"

Si algú sap la nostra ip real (1.1.1.1), i es dedica a espiar la nostra xarxa per veure a quins servidors ens connectem, o busca la nostra ip als registres d'un servidor web al qual hem accedit amb tor, mai podrà saber que la ip 5.5.5.5 és realment la direcció 1.1.1.1, simplement veurà com tot el trànsit va a parar a 2.2.2.2,, no podrà espiar tota la xarxa tor, ja que està descentralitzada per tot el món.

Cal remarcar que no serveix de res connectar-se a tor si llavors ens identifiquem a pàgines com ara facebook o gmail, ja que llavors ja hi haurà en algun servidor del món algú que podrà associar la ip provinent de tor a la persona identificada.

Per instal·lar la comanda tor, ho fem com sempre:

  
  $ sudo apt install tor # linux (debian, ubuntu)
  $ brew install tor     # mac os x
  

Per executar tor, fem:

  
  $ tor
  
I tot seguit veurem com el programa es va connectant progressivament a la xarxa, i estarà a punt quan marqui 100%.

Alternativament també el podem executar al background (com un "servei"):

  
  $ service start tor       # linux (debian, ubuntu)
  $ brew services start tor # mac os x
  
Una vegada executat tor, el nostre ordinador es connectarà a la xarxa i passarà a formar-ne part. Internament, la comanda crea un "socket" a la nostra ip local, al port 9050, (tot i que podem fer servir el port que vulguem, simplement el 9050 és el que es fa servir per defecte).

És a dir, el nostre punt d'entrada local a tor és: 127.0.0.1:9050, o bé, el que és el mateix, localhost:9050. Ara que ja tenim punt d'entrada, necessitem redireccionar el trànsit que generem cap al port 9050.

Per fer això podem fer servir la comanda torify, que s'instal·la juntament amb tor, i que ens estalvia haver-ho de fer manualment amb eines com ara netcat.

Per exemple, executem la comanda curl icanhazip.com amb i sense torify, per veure'n la diferència. La pàgina icanhazip.com és una pàgina molt senzilla que simplement et diu quina direcció ip tens.

Seguint l'exemple anterior amb les mateixes direccions ip, si no fem servir torify, veurem el següent resultat:
  
  $ curl icanhazip.com
  
  
  1.1.1.1
  
Amb torify, veurem la ip del punt de sortida:
  
  $ torify curl icanhazip.com
  
  
  4.4.4.4
  
En resum: si necessitem executar una comanda de terminal que fa algun tipus de connexió a internet i no volem que se sàpiga que hem sigut nosaltres, fem servir tor + torify.

L'exemple més típic pel que podem fer servir tor és accedir a un xat IRC de forma anònima, fent servir algun client IRC per terminal, com ara irssi.

Salut!

Lluís