Přístup k místním síťovým službám přes anonymní síť TOR

tor_logoAnonymní 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.

TOR - Infrastruktura
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:

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 DNSPortDNSListenAddress 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:

Důležitým předpokladem je nastavení parametrů DNSPortDNSListenAddress 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:

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:

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 HiddenServiceDirHiddenServicePort.

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.

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 ExitNodesExcludeNodes můžeme řídit, ve které zemi bude TOR provoz ukončen (Exit Node), případně, kde být zakončen nesmí:

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.

1 komentář u „Přístup k místním síťovým službám přes anonymní síť TOR

  1. Pingback: Šifrování a podepisování datové komunikace s pomocí GnuPG | brichacek.net

Leave a Reply