Nie zablokujesz Tora…

Krótkie przypomnienie: około pół roku temu pisałem, jak zablokować węzły wyjściowe Tora. Lista węzłów wyjściowych (exit nodes) Tora jest publiczna, więc wygląda, że mamy sielankę.

Logo Tor

Źródło: https://media.torproject.org/image/official-images/2011-tor-logo-flat.svg

Tymczasem dziś podczas rozmowy w gronie administratorów padło stwierdzenie od osoby, która badała ruch w sieci Tor, że podczas swoich eksperymentów zarejestrowała ruch z węzłów wyjściowych, których nie było na liście. Metodyka badania prosta jak budowa cepa: wyślij znane żądanie przez Tora do swojego hosta, zapisz IP z którego nadeszło połączenie, porównaj z listą exit nodes.

I wtedy mnie olśniło. Dla pewności zapytałem jeszcze na kanale IRC poświęconym Torowi czy nie ma jakiejś weryfikacji i… jak najbardziej jest to wykonalne. Po prostu jako exit node listowany jest IP, który jest podłączony do sieci Tor. Wystarczy więc, że maszyna ma więcej niż jedno IP lub przekierowuje ruch na inną maszynę (choćby iptables) i… połączenia Tor będą widoczne z nielistowanego adresu. Co więcej, może się on zmieniać w czasie…

Usłyszałem nawet znamienne zdanie na kanale: założę się, że są exit node’y, które po prostu wysyłają ruch przez VPN.  I to by było tyle w temacie prostych, błędnych odpowiedzi na pozornie proste pytania…

Własna strona w sieci Tor

Za sprawą normalnych tradycyjnych stron w sieci Tor zrobiło się ostatnio głośno z powodu Facebooka. Nie dość, że Facebook wystawił stronę oficjalnie do sieci Tor pod adresem .onion, to adres był ciekawy, a całość jest dostępna po HTTPS, czyli w wersji szyfrowanej[1]. Mniejsza o powody, dla których to uczynili. Wydaje się, że nie tyle chodziło im o anonimowość użytkowników (nie miejcie złudzeń), co o ich prywatność i bezpieczeństwo (ukrycie lokalizacji). Plus przy okazji rozwiązali sobie problem false positives przy wykrywaniu włamań, które mieli przy użytkownikach korzystających z tradycyjnych exit node[2]. Będzie zatem o własnej stronie w sieci Tor.

Tor logoŹródło: https://media.torproject.org/image/official-images/2011-tor-logo-flat.svg

Tak czy inaczej, wygląda, że Tor został dostrzeżony przez dużych w z właściwej perspektywy, czyli po prostu jako medium transmisji, a nie odrębna sieć, używana przez złoczyńców[3]. Myślę, że można spodziewać się kolejnych naśladowców.

Warto zauważyć, że to co zrobił Facebook to nie jest typowy hidden service w sieci Tor. W typowym chodzi o ukrycie tożsamości właściciela, miejsca hostowania itp. Czyli masa pracy poświęcona uszczelnianiu systemu i serwera WWW, która nie jest przedmiotem tego wpisu. Na stronie projektu Tor też się tym nie zajmują, ale zainteresowani znajdą tam ogólne wskazówki. Tu przeciwnie – wszystko jest dostępne, a tożsamość jest potwierdzona certyfikatem SSL, czyli wersja znacznie łatwiejsza w wykonaniu.

I właśnie takim przypadkiem zajmę się w tym wpisie. Całość opisana jest dokładnie na stronie projektu Tor. Widzę jednak, że pojawiają się pytania jak to zrobić, więc zamieszczę wersję skróconą i uproszczoną. Tak naprawdę całość sprowadza się do dwóch linii w pliku konfiguracyjnym. Zakładam, że Tor jest już skonfigurowany jako relay node lub bridge node. I nawet nie do napisania, tylko do odhashowania/edycji.

Przede wszystkim w pliku konfiguracyjnym[4] szukamy sekcji dotyczącej hidden services, zaczynającej się od linii:

############### This section is just for location-hidden services ###

Następnie odhashowujemy/edytujemy dwie linie:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 IP_SERWERA_WWW:80

Pierwsza musi wskazywać na katalog, który musi mieć prawa odczytu i zapisu dla użytkownika na którym działa demon Tor. W Debianie wystarczy odhashować.

Druga to wskazanie który port chcemy przekierowywać i na jaki adres oraz port. IPv4 działa na pewno, IPv6 nie udało mi się skłonić do działania. Jedyna zmiana, czy też wymóg konfiguracji po stronie serwera WWW, jest taki, że musi on pozwalać na dostęp do zasobów po IP, bez podania domeny (vhosta)[5].

Następnie należy zrestartować demona Tor i… gotowe. Pozostało jeszcze tylko sprawdzić, jaki adres ma nasz hidden service:

cat /var/lib/tor/hidden_service/hostname

Potem można już tylko zweryfikować działania serwisu za pośrednictwem adresu .onion. Jeśli nie mamy pod ręką normalnego dostępu do Tora, można posiłkować się bramką Tor2web.

[1] I całe szczęście, bo przypominam, że Tor nie szyfruje użycie Tora nie oznacza automatycznie szyfrowania danych. Co więcej, każdy węzeł, ma możliwość przechwycenia całej (co prawda zaszyfrowanej) transmisji. A exit node, jest w stanie podsłuchać nieszyfrowaną transmisję do końcowego hosta.

[2] Więcej w tym wpisie (ANG).

[3] Nie ukrywajmy, typowy użytkownik Tora kojarzył się do tej pory z nielegalnymi działaniami.

[4] W Debianie jest to /etc/tor/torrc, pewnie w Ubuntu i innych pochodnych jest analogicznie.

[5] Tu uwaga dla chcących stawiać bramki hidden service – z punktu widzenia zewnętrznego serwisu (i tylko jego, i tylko w przypadku połączeń poprzez adres .onion) mój klient Tor IP jest teraz exit node! W przypadku nadużyć za pośrednictwem sieci Tor i adresu .onion może się to skończyć wizytą policji. W przypadku serwisów, których nie jesteśmy właścicielami bezwzględnie należy mieć zgodę właściciela serwisu.

Blokada exit nodes Tora

Dawno temu pisałem o walce z Tor. Odsyłałem tam do strony, na której można sprawdzić, czy IP jest węzłem wyjściowym Tora, jest też stronka z listą węzłów. Niestety, stronka popełnia częsty błąd i wrzuca wszystkie węzły do jednego wora, zarówno węzły wyjściowe (exit node) jaki pośredniczące (relay node). Niestety, błąd ten później pokutuje, bo taki admin, który chce wyciąć exit nodes bierze, nie patrzy, nie rozumie i… wycina np. moje domowe IP, choć z Tora się do jego serwera nie łączę, tylko dorzucam parę groszy do projektu przerzucając czyjś ruch.

Tor logoŹródło: https://media.torproject.org/image/official-images/2011-tor-logo-flat.svg

Ponieważ potrzebowałem (no dobrze, ja jak ja…) listę węzłów wyjściowych na niezupełnie swoje potrzeby, zrobiłem własną listę. Tylko IP i tylko węzły wyjściowe. Idealne do automatycznego przetwarzania.

Dane brane są z z oficjalnej strony projektu Tor ( https://check.torproject.org/exit-addresses). Aktualizacja odbywa się raz na godzinę o pełnej godzinie (nie ma sensu pytać częściej). Jakby było zainteresowanie i potrzeba, to mogę zwiększyć częstotliwość. Mi wystarcza.

Plik dostępny jest po HTTP i HTTPS pod tym adresem: Tor exit node IP list. Udostępniam as is, bez żadnych gwarancji działania, dostępności, kompletności czy poprawności danych czy braku złośliwych danych. Jak widać wisi to na darmowej domenie, co może mieć dotyczące zawartości. You get what you pay for. 😉

Zresztą ogólnie korzystanie z tego typu automatycznych źródeł bez jakiejś weryfikacji uważam za nierozsądne.

UPDATE: Metoda nie jest doskonała. O tym, że część exit nodes może nie być widocznych przeczytasz tutaj.