O principu sítě Tor jsme tu už několikrát psali, takže jen stručně: jde o síť serverů, které si mezi sebou posílají komunikaci jednotlivých uživatelů. Ta je několikrát zašifrovaná a každý server po cestě má přístup pouze k první šifrované vrstvě, kterou odstraní a zbytek neznámého obsahu pošle dál.
Jakmile poslední server na cestě zjistí, že po rozšifrování své „slupky“ objevil data určená do internetu, jednoduše je tam vyšle. Totéž se děje při cestě zpět: paket je zabalen do několika „slupek“ a poslán do sítě. Právě díky tomuto vícenásobnému balení dostala síť název cibulový router (The Onion Router).
Uvnitř Tor sítě je možné provozovat také anonymní server, takže ani jedna strana pak vlastně netuší, s kým komunikuje. Vše je překryto neznámým množstvím uzlů po celém světě.
Princip samotné sítě je poměrně bezpečný a nějakých zásadních problémů se tu nemusíme obávat. Software za nás řeší vše podstatné a my jen vesele komunikujeme. Past se ale skrývá na straně uživatelského systému. Tor nás totiž neochrání proti tomu, co všechno o sobě prozradíme do internetu. Pokud bude něco opravdu špatně, může nám uniknout naše reálná adresa a celá naše maškaráda se sesype.
Nedávno byl úspěšně proveden útok na webový prohlížeč Firefox 17, který je součástí balíčku Tor Browser Bundle. Díky zneužití této chyby se (zatím) neznámému útočníkovi podařilo posbírat reálné adresy napadených uživatelů. Přesně tohle je situace, které se pokusíme následujícím postupem zabránit.
Cílový stav by tedy měl být takový, že i pokud se podaří kompromitovat klientský počítač na nejvyšší úrovní (třeba získat práva roota), nebude možné zjistit reálnou IP adresu, kterou počítač používá.
Bezpečná virtuální síť
Pro provoz našeho bezpečného počítače použijeme virtualizaci. Já jsem pro svůj postup zvolil VirtualBox, ale v principu je možné nasadit cokoliv. Virtuální počítač bude připojen do „oddělovací sítě“, která ovšem nebude routovaná do internetu. V ní bude vidět jediná IP adresa, která bude nabízet služby DNS resolveru a SOCKS proxy vedoucí přes Tor do internetu.
Co budeme potřebovat:
- počítač s Linuxem (v mém případě Debian)
- virtualizační nástroj (třeba VirtualBox)
- balíček
uml-utilities
- operační systém do virtuálu
Já jsem si jako virtuální operační systém vybral Slax, ale opět je možné použít prakticky libovolnou distribuci nebo i třeba MS Windows. Můžete použít i live systém Tails, který kombinuje Debian, Tor, Firefox a různé doplňky zajišťující lepší anonymitu a bezpečnost.
Hostitel
Nejprve vytvoříme na hostitelském počítači virtuální rozhraní (síťovou kartu) tap1
, kterému přidělíme IP adresu z nějakého nekolizního rozsahu a aktivujeme jej.
# tunctl -t tap1 -u petr # ip addr add 10.1.1.1/24 dev tap1 # ip link set up dev tap1
Poté (stále na hostiteli) nastavíme Tor klienta. To se provádí v souboru /etc/tor/torrc
a na jeho konec přidáme následující konfiguraci:
VirtualAddrNetwork 10.192.0.0/10 AutomapHostsOnResolve 1 SocksListenAddress 10.1.1.1 DNSPort 53 DNSListenAddress 10.1.1.1
Poté nahodíme Tor, který začne na našem virtuálním rozhraní poslouchat na dvou portech jako SOCKS server a jako DNS resolver.
# /etc/init.d/tor start
Nepovinné, ale doporučené: DHCP server a firewall
Pokud si chceme usnadnit práci a nechce se nám konfigurovat síť ve virtuálním počítači, můžeme si na hostiteli spustit DHCP server. Stačí nainstalovat balíček dnsmasq
a do /etc/dnsmasq.conf
připsat následující dva řádky:
interface=tap1 dhcp-range=tap1,10.1.1.2,10.1.1.100,255.255.255.0,1h
Poté už stačí jen službu nahodit:
# /etc/init.d/dnsmasq start
Další důležitou věcí, kterou doporučuji nastavit, je firewall. Desktopový počítač obvykle nemá nastavený forwarding paketů, ale pro jistotu zařízneme pokusy protlačit pakety do internetu. Navíc můžete občas na počítači spouštět různé malé serverové služby (třeba web server pro sdílení souborů po síti) a nechcete, aby se k nim dostal náš virtuální systém. Použijeme několik pravidel, která nám povolí jen DHCP, DNS a přístup na Tor proxy.
# iptables -I FORWARD -i tap1 -j DROP # iptables -I INPUT -i tap1 -j DROP # iptables -I INPUT -i tap1 -p udp --dport 67:68 -j ACCEPT # iptables -I INPUT -i tap1 -p udp --dport 53 -j ACCEPT # iptables -I INPUT -i tap1 -p tcp --dport 53 -j ACCEPT # iptables -I INPUT -i tap1 -p tcp --dport 9050 -j ACCEPT
Postupně to máme: zákaz procházení paketů přes router, zahazování cizích paketů na rozhraní, povolení DHCP, povolení DNS přes TCP a UDP a nakonec povolení SOCKS proxy.
Virtuální stroj
Nyní nastal čas na VirtualBox. Založíme nový počítač, vybereme parametry hardware podle operačního systému a především zvolíme správné síťové rozhraní. Virtuální kabel našeho systému totiž povede do rozhraní tap1 a nikam jinam.
Poté už můžeme virtuální stroj spustit a nechat nastartovat svůj oblíbený operační systém. Pokud jsme si spustili na hostiteli DHCP server, máme teď usnadněnou práci a čerstvě nastartovaný systém už bude mít přidělenou správnou IP adresu. Pokud nám DHCP neběží, budeme muset adresu zadat ručně.
Adresa musí být v našem případě z rozsahu 10.1.1.0/24, bránu můžeme s klidným srdcem vynechat (stejně nám přes ni nic neprojde) a jako DNS server uvedeme 10.1.1.1.
Teď už zbývá jen nakonfigurovat webový prohlížeč. Ten se nesmí (a ani nemůže) připojovat k internetu přímo, ale musí využít SOCKS proxy server na počítači 10.1.1.1 a portu 9050. Ve Firefoxu je to Menu → Předvolby → Předvolby → Rozšířené → Síť → Nastavení připojení.
Pokud jsme vše udělali správně, měl by se prohlížeč dokázat spojit přes proxy do internetu. Můžeme to vyzkoušet na adrese check.torproject.org, kde nám prozradí, zda jsme přišli přes Tor.
Bezpečný sandbox
Výsledkem snažení je virtuální počítač zcela oddělený od naší sítě, který ale může komunikovat se světem skrz Tor. Pokud potřebujeme, můžeme zároveň používat virtuální i reálný počítač a přecházet tak z běžného do anonymního světa.
Pokud by se někomu podařilo ve virtuálním počítači například prolomit zabezpečení prohlížeče a dostat se k operačnímu systému, nemůže zjistit žádné informace o naší síti. Dozví se jen vymyšlenou místní IP adresu a na síti uvidí jediný počítač poskytující DNS a SOCKS rozhraní, které ho ale do reálné sítě také nepřivedou.