Come aprire una connessione anonima verso un server con SSH e Tor

Questo che segue è il resoconto di quello che ho fatto per far funzionare OpenSSH su Tor. Questo mio interesse nasce per curiosità  diversi mesi fa, quando mi è stato aperto un account su una macchina a cui volevo accedere in maniera anonima, quanto meno in determinati casi.

SSH è un ottimo sistema per lavorare su macchine remote, oppure per tunnelizzare qualsiasi connessione si desideri dentro un canale criptato. Ma SSH crea solamente un canale criptato. Il problema è che non rende le connessioni anonime, dove con "connessioni non anonime" intendo dire che di queste connessioni rimane in linea di principio possibile, per un attaccante, determinare quale ne sia il punto di partenza e qual ne sia il punto di arrivo.

Per fortuna, per avere una connessione sia cifrata che anonima, è possibile far lavorare SSH dentro quel bel sistema di onion-routing che è Tor.

Tempo fa OpenSSH supportava roba come SOCKS5 e altri meccanismi di tunneling. Ma a un certo punto il team di sviluppo decise di smettere di supportare questa caratteristica, delegando questa funzionalità a programmi esterni. Qui entra in gioco connect, che è un programmino che, fra le altre cose, permette di "collegare" insieme SSH e Tor. In Debian e in Ubuntu connect si trova nel pacchetto connect-proxy.

Presumendo di avere Tor già bello che installato, configurato e funzionante sulla nostra macchina, è sufficiente invocare ssh in questo modo:

psylocibe@MagicBox:~ $ ssh -o ProxyCommand="/usr/bin/connect -S 127.0.0.1:9050 %h %p" someweirdserveroutthere.org

Notare che la porta 9050 è una porta scelta arbitrariamente sulla quale verrà aperta una connessione di loopback, cioè interna alla mia macchina.

Tor rallenta non poco la connessione. Dopo qualche decina di secondi, vedremo – esattamente come ci si aspetterebbe – sulla nostra shell:

Password:
Last login: Fri Feb 29 18:39:37 2008 from 192.168.0.13
psylocibe@weirdserver:~ $

A questo punto è interessante vedere da dove ci vede collegati la macchina remota:

psylocibe@weirdserver:~ $ who –all
psylocibe + pts/1        Feb 29 19:15   .          3493 (tor1.humanistische-union.de)

con buona pace per la mia privacy 🙂

La macchina remota a cui ci stiamo collegando, non sarà quindi in grado di sapere da dove ci stiamo collegando. Per esempio,  nel file wtmp non verrà memorizzata alcuna informazione significativa sull’origine della connessione. Usando questo sistema lo storico degli indirizzi IP attribuitici dal nostro provider di connessione (e relativi orari di collegamento) non sarà più in balia di un sysadmin impiccione, o di un intruso.

Giusto per non dover memorizzare questo comando abbastanza lungo, mi sono creato questi due alias e li ho messi nel mio ~/.bashrc:

alias ssh-tor=’ssh -o ProxyCommand="/usr/bin/connect -S 127.0.0.1:9050 %h %p"’
alias scp-top=’scp -o ProxyCommand="/usr/bin/connect -S 127.0.0.1:9050 %h %p"’

In questo modo per tunnelizzare OpenSSH attraverso tor mi basta usare i comandi ssh-tor e scp-tor con la stessa sintassi che ho sempre usato con ssh e scp:

psylocibe@MagicBox:~ $ ssh-tor psylocibe@someweirdserveroutthere.org

Per i paranoici, sul sito di connect viene spiegato come modificare il file di configurazione di OpenSSH per dirottare sempre tutte le connessioni SSH su Tor. Fortunatamente, il mio livello di paranoia non arriva ancora a tal punto. 🙂

A questo punto sembrerebbe tutto perfetto, ma c’è ancora un problema. Andando a guardare in fondo al log di tor, scopro questo avviso:

psylocibe@MagicBox:~ $ tail -n 1 /var/log/tor/log
Feb 29 20:02:42.055 [warn] Your application (using socks5 on port 9999) 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.

Cos’è successo? Effettivamente mi sono collegato in SSH tramite Tor, ma SSH cerca di risolvere l’hostname "someweirdserveroutthere.org" e per farlo, fa una normalissima e comunissima richiesta DNS.

Un potenziale attaccante potrebbe capire che io posso accedere in SSH alla macchina remota semplicemente sniffando le mie richieste DNS, e il mio anonimato verrebbe così compromesso. Per evitare questo è sufficiente usare tor-resolve, che viene distribuito assieme a Tor.

tor-resolve invia tutte le query DNS via Tor. Applicando questa modifica, e continuando a utilizzare i due alias che ho definito prima, useremo un comando del genere per collegarci in SSH anonimo a un server:

psylocibe@MagicBox:~ $ ssh-tor psylocibe@`tor-resolve someweirdserveroutthere.org`

oppure, per copiare un file su una macchina remota:

psylocibe@MagicBox:~ $ scp-tor ./myfile.txt psylocibe@`tor-resolve someweirdserveroutthere.org`:/home/psylocibe/
This entry was posted in Autismi. Bookmark the permalink.