Anonymní síť TOR bývá velice často spojována s provozováním nelegální činnosti v prostředí informačních technologií. Ať se jedná o řízení sítí botnetů, distribuci pornografie nebo komunikaci ilegálních a teroristických skupin, tato síť bývá velmi často využívána i například pro komunikaci disidentů, reportérů a nejrůznějšími vládními organizacemi. Pravděpodobně se jedná o největší veřejnou síť svého druhu v prostředí internetu.
Pojďme se ale podívat, jakým způsobem můžeme využít potenciál této sítě pro vlastní účely, a to zejména pro přístup k našim vlastním službám.
Síť TOR je tvořena velkým množstvím komunikačních prvků, přes které je směrován vlastní šifrovaný provoz. Díky použitým moderním technologiím je prakticky nemožné tento provoz v přenosové soustavě identifikovat a zachytit. Důležitou vlastností použitého software je otevřenost zdrojových kódů a možnost jediným programem vytvořit jakoukoli část sítě, kterou může být TOR Proxy (výchozí práce klienta TOR), TOR Relay i TOR Exit Node.
Každé zařízení, které je do sítě připojeno musí mít nainstalovaného klienta, který tento přístup zprostředkuje. Datová komunikace je následně šifrovaným tunelem předávána mezi několika nezávislými uzly TOR Relay. Pokud se přes síť TOR připojujeme k běžné internetové službě, kterou je například webový portál nebo emailový server, je komunikace ukončena na tzv. TOR Exit uzlu, a dále z tohoto uzlu probíhá již běžným spojením (např. HTTP přes TCP/IP). Uzel TOR Exit je náhodně vybírán. Může se tedy stát, že komunikujeme na cílový server umístěný v USA, ale síť TOR nás terminuje v JP. Cílový server se tedy domnívá, že komunikujeme z Japonska. Současně o naší komunikaci v rámci sítě TOR nikdo neví. Podobně lze tuto síť využít pro poskytování obsahu. V tom případě nainstalujeme na webový server TOR klienta, který bude přeposílat požadavky určené naší službě. Tím jsme vytvořili tzv. skrytou službu, která je identifikována URL končící .onion (např. agz3dejegp1utbwe.onion).
To je zjednodušený princip fungování anonymizačních služeb v prostředí sítě TOR.
Nespornou výhodou je, že jednoduchým způsobem můžeme tuto síť využít i za prvky, kterými jsou NAT a firewall. Vytvořený šifrovaný tunel je zabezpečen SSL/TLS, který je běžně v internetu používán. Nelze tedy rozeznat přenášený obsah od např. webového obsahu – protokol HTTPS.
Na internetových stránkách projektu lze stáhnout klienta, který má integrován internetový prohlížeč Firefox ESR. Tento prohlížeč je speciálně upravenou verzí Mozilla Firefox, poskytující množství bezpečnostních rozšíření a vlastností, zaručující anonymní využívání internetu. Tohoto klienta není nutné do operačního systému instalovat a je možné jej provozovat z přenosné Flash USB.
Koncové uzly TOR Exit Nodes jsou vytvářeny legálními organizacemi, vládními uskupeními a soukromými subjekty. Je zde ale nebezpečí, že je takový bod uměle vytvořen s cílem sledování přenášených dat opouštějící síť TOR v nešifrované podobě (např. HTTP). Pokud je taková činnost zjištěna, je příslušný uzel zablokován. Proto je u komunikace směřující mimo TOR doporučeno používat pouze šifrované protokoly (např. HTTPS).
Nastavení klienta pro přístup do sítě TOR
Pro přístup do sítě TOR musíme nainstalovat posledního softwarového klienta (použijeme verzi bez Firefox ESR – ta je určena zejména pro okamžitou práci bez nutnosti nastavování), kterého lze stáhnout na stránkách projektu (Windows, Linux, Mac OS X) nebo nainstalujeme tohoto klienta z naší linuxové distribuce (doporučeno). Následující popis se bude vztahovat na GNU/Linux, nicméně je nastavení podobné i pro Windows a Mac OS X.
Nastavení se provádí v souboru /etc/tor/torrc
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
User tor PIDFile /var/run/tor/tor.pid SocksPort 192.168.0.1:9050 Log notice syslog DataDirectory /var/lib/tor/ AutomapHostsOnResolve 1 DNSPort 53 DNSListenAddress 127.0.0.2 AutomapHostsSuffixes .onion HardwareAccel 1 NumCPUs 2 AllowSingleHopCircuits 0 ExcludeSingleHopRelays 1 MaxCircuitDirtiness 600 CircuitBuildTimeout 4 StrictNodes 1 NumEntryGuards 8 NewCircuitPeriod 240 |
Parametr SocksPort
udává IP adresu (síťového rozhraní) a TCP port, kde služba naslouchá pro příchozí spojení. Pokud bychom uvedli SocksPort
bez IP adresy a přidali řádek SocksListenAddress
s hodnotou 0.0.0.0
, bude TOR klient naslouchat na všech síťových rozhraních. Komunikace s klientem TOR probíhá pomocí protokolu SOCKS. Klient se tedy chová jako síťová proxy. Proto se takový uzel označuje i jako TOR proxy.
IP adresu a port uvedený výše můžeme použít pro nastavení internetového prohlížeče. V takovém případě je vhodné v prohlížeči povolit funkci „Remote DNS“, pokud to lze. V takovém případě jsou požadavky na překlad názvů (v URL) směrovány skrze protokol SOCKS a klienta TOR.
Volby DNSPort
a DNSListenAddress
můžeme použít např. pro server BIND a směrovat na něho požadavky na překlad názvů a IP adres. Jelikož je port 53/udp privilegovaným, musíme klienta TOR spustit s příslušnými právy. Např. pod uživatelem „root“. V takovém případě musíme upravit spouštěcí skript služby a nastavit parametr User
na neprivilegovaného uživatele (výchozí je „tor“).
V případě, že budeme přistupovat k TOR adresám .onion
, volba AutomapHostsSuffixes
instruuje klienta TOR, že má pro tyto názvy vyčlenit interní IP rozsah, na který jsou následně překládány. S těmito adresami poté pracuje internetový prohlížeč.
Nastavení DNS serveru
Chceme-li pro překlad DNS názvů serverem BIND používat URL s .onion
, přidáme do konfiguračního souboru named.conf
řádky:
1 2 3 4 5 |
zone "onion" IN { type forward; forwarders { 127.0.0.2; }; forward only; }; |
Důležitým předpokladem je nastavení parametrů DNSPort
a DNSListenAddress
v konfiguračním souboru klienta TOR. DNS server BIND neumožňuje směrovat dotazy na jiný port než 53/udp. Proto musíme využít rozhraní lo
a IP adresu 127.0.0.2 (o namapování IP adresy na rozhraní se nemusíme starat, ve výchozím stavu má rozhraní IP adresu 127.0.0.1 s maskou 255.0.0.0 – třída A).
Automatické nastavení proxy pro internetové prohlížeče a jiné klienty
Pro nastavení proxy v internetových prohlížečích můžeme použít autokonfigurační skripty proxy.pac
nebo wpad.dat
. V takovém případě do skriptu, funkce FindProxyForURL
, přidáme řádky:
1 2 |
var tor = "SOCKS 192.168.0.1:9050"; if (dnsDomainIs (host, ".onion")) return tor; |
Tím definujeme, že pro URL obsahující .onion
bude využit náš klient TOR (proxy).
Chceme-li směrovat přes TOR veškerý provoz, přidáme:
1 2 |
var tor = "SOCKS 192.168.0.1:9050"; return tor; |
Musíme si ale uvědomit, že pokud budeme používat TOR pouze pro adresy
.onion
, mohou webové stránky přenesené přes tuto síť obsahovat obsah (obrázky, videa) a odkazy mířící na http:// nebo https://. V tomto případě budeme kompromitováni, protože taková komunikace půjde mimo síť TOR a cílový webový server bude znát naší IP adresu, tzn. geografickou pozici, poskytovatele internetového připojení, atd.
Více o automatickém nastavení proxy lze nalézt v článku Síťová infrastruktura pro domácí prostředí a malé firmy (SOHO) – síťové služby 2.
Proxy servery a připojení přes TOR
Využíváme-li proxy server pro přístup do internetu a chceme tento přístup přesměrovat přes TOR, můžeme tak učinit. Náš proxy server ale musí podporovat přístup k nadřazeným proxy přes protokol SOCKS. Tuto podporu má např. Polipo nebo Privoxy. Proxy server Squid neumožňuje připojení k nadřazeným proxy serverům přes SOCKS. Trváme-li na Squid, musíme do cesty mezi klienta TOR a Squid zařadit právě Polipo nebo Privoxy.
Vytvoření skryté služby
Nyní se dostáváme do fáze, kdy nakonfigurujeme přístup k našemu internímu obsahu. Ten může poskytovat prakticky jakákoli služba pracující s protokolem TCP/IP.
Nastavení opět provádíme v souboru /etc/tor/torrc
. K dispozici máme parametry HiddenServiceDir
a HiddenServicePort
.
HiddenServiceDir
nastavuje adresář, kde klient TOR vytvoří soubory hostname
, obsahující název .onion
, a private_key
, s privátním RSA klíčem. Privátní RSA klíč nesmí získat nepovolená osoba, protože by mohl být obsah komunikace příslušné služby dešifrován, odposlechnut a pozměněn.
.onion
budeme používat pro připojení (URL) ke službě. Můžeme jej tedy přímo zadat do internetového prohlížeče nebo příslušného klienta služby. Přidáme-li více parametrů HiddenServicePort
pod jedním HiddenServiceDir
, bude pro všechna takto definovaná přesměrování použit stejný řetězec .onion
. Chceme-li ale pro každou službu vygenerovat jiný identifikátor, nastavíme HiddenServiceDir
pro každou takovou službu zvlášť.
Adresář HiddenServiceDir
musíme vytvořit ručně a nastavit správného uživatele (tor – viz /etc/tor/torrc) a práva 700 (rwx——) – čtení a zápis pouze pro vlastníka.
1 2 3 4 5 6 |
HiddenServiceDir /var/lib/tor/hidden_service/http HiddenServicePort 2080 127.0.0.1:80 HiddenServicePort 2443 192.168.0.2:443 HiddenServiceDir /var/lib/tor/hidden_service/ssh HiddenServicePort 2022 127.0.0.1:22 |
Parametr HiddenServicePort
obsahuje dvě hodnoty. První identifikuje číslo TCP portu, na kterém bude služba přístupná ze sítě TOR. Druhý parametr definuje IP adresu a TCP port, na který má být tato komunikace přesměrována. Pokud pro přístup ze sítě TOR použijeme TCP port, který není pro konkrétní službu výchozí (např. 80/tcp pro HTTP), musíme pro sestavení komunikace tento port samozřejmě uvést (např. pro přístup k webovému obsahu na serveru http://127.0.0.1 zadáme do internetového prohlížeče http://<naše_URL_ze_souboru_hostname.onion>:2080).
Připojení ke službě SSH přes SOCKS proxy podporuje například klient PuTTY.
Další nastavení /etc/tor/torrc
Parametry ExitNodes
a ExcludeNodes
můžeme řídit, ve které zemi bude TOR provoz ukončen (Exit Node), případně, kde být zakončen nesmí:
1 2 |
ExitNodes {hk},{kr},{jp},{lv},{ro},{be},{ch},{bg},{il},{sg},{tw},{ad},{lu},{mo} ExcludeNodes {gb},{us} |
Výhodou sítě TOR je podpora protokolu IPv6. Tu můžeme zapnout parametrem ClientUseIPv6 1
.
Klient TOR ve výchozím stavu nedovoluje zobrazovat aktivní síťová připojení, která lze vypsat příkazy netstat
, lsof
, apod. Pokud chceme tuto vlastnost vypnout, použijeme parametr DisableDebuggerAttachment 0
.
Veškeré citlivé informace, které jsou zaznamenávány během provozu služby do systémového logu, jsou anonymizovány. V případě ladění chodu aplikace můžeme zapnout detailní výpis, kde jsou tyto informace zaznamenávány. Současně můžeme nalézt i detailní proces sestavování jednotlivých šifrovaných okruhů. K tomu slouží parametr Log debug file /var/log/tor/debug.log
.
Klienta TOR lze řídit přes TCP port nastaveným parametrem ControlPort 9051
vlastním API. Toto API využívá například nástroj ARM
(Terminal Tor status monitor).
Závěr
Vzhledem k propustnosti sítě TOR bychom se měli vyvarovat přenosu velkého objemu dat. Velké datové přenosy mohou omezit dostupnost ostatním uživatelům.
Pingback: Šifrování a podepisování datové komunikace s pomocí GnuPG | brichacek.net