jeudi 25 juin 2009

Tor sans Privoxy?

Tor est un logiciel permettant d'utiliser les services internet de manière anonyme.
Cet anonymat repose sur l'adresse IP source présentée aux services visités et uniquement cette IP source.

Tor est basé sur un nuage de noeuds Tor, dans lequel la communication client entre, effectue un certain nombre d'opérations de routage, puis s'extrait par un noeud de sortie.
Le destinataire ne connaît donc que l'IP du noeud de sortie Tor, et tor est construit de façon à ce que même le possesseur du noeud de sortie ne puisse pas reconstruire le chemin menant à l'IP source réelle.

Ceci dit, un internaute laisse énormément plus d'informations personnelles qu'une simple IP source. La nature même du trafic peut renseigner sur l'identité de l'internaute (consultation de sa messagerie. Message laissé sur un forum, etc..) Les outils réseaux comme un navigateur web fournissent de plus un grand nombre d'informations au site distant: plateforme utilisé, version, encodage utilisé. Ces informations peuvent être alors utilisées pour tracer l'internaute.
Il existe de nombreux autres problèmes concernant le surf sur le web ou l'insertion judicieuse de scripts javascripts ou d'enregistrement DNS permettent de tracer l'IP source réelle naviguant sur des pages web.
Consulter la FAQ de Tor à ce sujet sur https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ

Pour le surf internet, Tor recommande Privoxy. Nous verrons que privoxy n'est en aucun cas incontournable. Tout d'abord nous verrons succintement comment fonctionne privoxy, ensuite comment l'utiliser sans privoxy tout en conservant un niveau d'anonymat acceptable.
Les recommandations faites pour les clients web seront vraies pour tout type de client internet.

1/
Le fonctionnement de Tor.
Tor n'est pas un proxy HTTP. Toute tentative d'utilisation de Tor comme proxy HTTP se solde par un message:
tor@exploitability:~$ export http_proxy=127.0.0.1:9050
tor@exploitability:~$ wget http://www.google.fr
--2009-06-25 16:24:01-- http://www.google.fr/
Connexion vers 127.0.0.1:9050...connecté.
requête Proxy transmise, en attente de la réponse...
Jun 25 16:24:01.771 [warn] Socks version 71 not recognized. (Tor is
not an http proxy.)
501 Tor is not an HTTP Proxy
2009-06-25 16:24:01 ERREUR 501: Tor is not an HTTP Proxy.

tor@exploitability:~$

(Le message d'erreur vient de tor et non de wget)

Privoxy est un proxy HTTP pouvant se chaîner sur un proxy socks. Ainsi, la chaîne complète est:

Firefox -> privoxy -> Tor -> routage Tor -> Destination

Le destinataire ne peut pas remonter jusqu'à la source. Privoxy propose aussi de nombreuses extensions permettant d'anonymiser également les informations envoyées par le navigateur. La conjonction de ces deux facteurs, anonymat de Tor au niveau IP et anonymat de privoxy au niveau client, justifie cet usage.
Ceci dit, nous pouvons nous en passer.

2/
Un proxy HTTP permet d'effectuer des requêtes HTTP sans réaliser des requêtes DNS préalables. Pour se passer de privoxy, il faudra donc utiliser le proxy socks, faire attention aux requêtes DNS et faire attention aux informations envoyées par les clients.

Firefox permet d'utiliser un proxy internet socks:


Concernant les autres logiciels, il suffit de les paramétrer pour utiliser socks.

A titre d'exemple, wget ne sait pas utiliser un proxy socks, mais curl le peut:

tor@exploitability:~$ curl --socks5 127.0.0.1:9050 -o /dev/null http://www.google.fr
Jun 25 17:06:26.540 [warn] Your application (using socks5 to port 80) is
giving Tor only an IP address. Applications that do DNS resolves themselves
may leak information. Consider using Socks4A (e.g. via privoxy or socat)
instead. For more information, please see
http://wiki.noreply.org/noreply/TheOnionRouter/TorFAQ#SOCKSAndDNS.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5319 0 5319 0 0 340 0 --:--:-- 0:00:15 --:--:-- 1674
tor@exploitability:~$
On peut par ailleurs noter que l'utilisation de tor entraîne un certain ralentissement du débit internet; 15s pour télécharger la page google.

Ce message d'erreur sera indiqué également lorsque firefox sera utilisé. Ce message est bénin tant que le risque pris par le téléchargement est fait à partir d'adresses IP connues ou que le DNS utilisé est sûr et fiable, ce qui n'est pas forcément toujours le cas.
Pour éviter ce message, deux possibilités sont offertes:

A/
Utiliser un paramétrage de l'outil. Concernant firefox, il suffit de taper about:config dans la barre d'adresse, chercher la clé network.proxy.socks_remote_dns et la mettre à true. Pour curl, utiliser le flag --socks5-hostname:

tor@exploitability:~$ curl --socks5-hostname 127.0.0.1:9050 -o /dev/null http://www.google.fr
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5319 0 5319 0 0 514 0 --:--:-- 0:00:10 --:--:-- 1270
tor@exploitability:~$


B/
Une autre méthode consiste à utiliser le proxy DNS que peut mettre en oeuvre tor. Une règle iptables suffira pour rediriger toutes les requêtes DNS vers ce service tor

Cette directive tor est indiquée par:

DNSPort PORT
If non-zero, Tor listens for UDP DNS requests on this port and
resolves them anonymously. (Default: 0).

Donc une solution consiste à ajouter une ligne:

tor@exploitability:~$ grep DNSPort /usr/local/etc/tor/torrc
DNSPort 5353


Puis à rediriger les requêtes provenant de chaque client vers ce circuit tor; par exemple pour le client se présentant à partir de 192.168.1.1:

iptables -t nat -A PREROUTING -s 192.168.1.1 -p udp --dport 53 -j REDIRECT --to-ports 5353


Bien entendu, ce n'est pas suffisant. Il faut de plus interdire toute autre communication DNS afin d'éviter qu'une requête puisse sortir.

Enfin, concernant les informations renvoyées par les clients, il est également possible de limiter ou de limiter cette fuite. Firefox permet également de modifier son user-agent, et d'autres informations. Il faut de plus faire attention aux extensions ajoutées pouvant elles aussi divulguer de l'information.
curl permet de modifier son User-agent ou tout autre champ d'entêtes web.

CONCLUSION/
Donc, en paramétrant finement son client web, en utilisant des règles de filtrage iptables il est parfaitement possible de surfer à l'aide de tor sans privoxy tout en conservant un niveau d'anonymat aussi haut que celui offert par tor+privoxy.
Privoxy n'est donc qu'une facilité de configuration pour les utilisateurs.

Bien entendu je ne déconseille pas l'utilisation de privoxy. Cet article pointe juste du doigt les raisons d'usage de privoxy. Il est bien plus simple d'utiliser privoxy pour tout client HTTP 'lourd' comme firefox. Mais dans d'autres usages, il est tout aussi rapide d'utiliser curl en mode socks5-hostname.

Pour aller un peu plus loin/

Pour tous les autres services (SMTP, IRC, autres...), il est possible d'utiliser la méthode proxy Socks + redirection DNS vers DNSPort.
Pour les services ne sachant pas utiliser un proxy socks, il faut alors employer un hack comme tor+socat, ou bien utiliser d'autre méthode indiquée sur cette même page.
https://wiki.torproject.org/noreply/TheOnionRouter/TorifyHOWTO#Socat

Aucun commentaire:

Enregistrer un commentaire