Blokirati ToR ili ne? Pitanje je sada…

306px-Tor-logo-2011-flat.svg

Prošli vikend sam surfovao po ToR-ovim skrivenim servisima jer mi je bio plan da za ovaj blog post napišem nešto kao “Turistički vodič kroz Darknet”. Od te teme sam na kraju odustao, ali mi je jedna stvar zapala za oko: dok sam preko ToR-a pristupao sajtovima na “običnom” internetu, nisam naišao ni na jedan koji bi me blokirao. Zar nema baš nikoga ko ne želi da mu neko pristupa anonimno? Čak ni e-banking sajtovi me nisu blokirali, pa čak ni Paypal.

Na sajtu ToR-a sam ipak našao informaciju o nekim sajtovima koji blokiraju ToR na ovaj ili onaj način, ali kao što se vidi sa spiska, takvih sajtova nema mnogo (obratite pažnju da većina navedenih servisa ne blokira ToR u potpunosti, pogotovo ne na IP nivou):

https://trac.torproject.org/projects/tor/wiki/org/doc/ListOfServicesBlockingTor

Zbog čega bi se neko odlučio da blokira dolazni ToR saobraćaj, a zbog čega mnogi to ne rade?

Zašto blokirati ToR?

Koristeći ToR browser, bilo ko na vrlo jednostavan način može anonimno pristupiti vašem sajtu (u smislu da njegovu pravu IP adresu ne možete saznati). Ali da li se ToR može iskoristiti za anonimizaciju aktivnosti nekih rugih alata? Port skenera? Vulnerability skenera? Da li bi se preko ToR-a mogli izvršiti i napadi?

Da počnemo od port skenera. ToR browser jeste najjednostavniji način da se zakačimo na ToR, ali ako bi napadač želio da pokrene neki alat za skeniranje portova preko ToR-a, ToR browser mu ne bi bio od pomoći. Za tu svrhu bi se morao instalirati ToR klijent. Njegova uloga je da izigrava SOCKS proxy preko koga se saobraćaj prosledjuje do destinacije preko ToR mreže. Da bih pokazao koliko je to jednostavno, demonstriraću na primjeru kako bi se to moglo izvesti.

Ovog puta neću koristiti Kali Linux za testove, već ću iskorisiti priliku da demonstiriram distribuciju pod nazivom Tails. Prednost ove distribucije za napadača je što je prilagođena za rad preko ToR mreže i anonimnost je u prvom planu. Tails možete podići sa CD-a ili USB diska pri čemu ova distribucija neće ostaviti nikakvih tragova na hard disku računara, a prilikom gašenja, svi podaci koje ste koristili putem Tails-a biće obrisani (sa USB diska i iz RAM-a). Mana svega toga je da sve alatke koje instalirate na Tails morate uvijek ponovo instalirati nakon restarta, a gube se i ostali snimljeni ili keširani fajlovi. Postoji opcija kreiranja enkriptovane particije koja će se naći na istom USB disku i sa koje podaci neće biti brisani ni nakon restarta. ToR klijent ne morate instalirati na Tails-u jer je to već odrađeno, a podešen je da se kači na ToR odmah nakon podizanja sistema. Firewall u Tails-u (iptables) blokira sav saobraćaj koji ide ka internetu, a koji nije usmjeren kroz ToR, čime se sprječava da napadač greškom oda svoju pravu lokaciju. Da bi napadač pokrenuo anoniman port scan preko ToR-a, dovoljno je da podigne Tails i instalira sledeća 2 alata:

  • nmap – port skener
  • proxychains – alat za prosledjivanja saobraćaja drugih programa kroz ToR (ili kroz neki proxy)

Instalacija ova 2 alata je relativno jednostavna – treba izvršiti sledeće komande kroz Linux terminal:

sudo apt-get update

sudo apt-get install -y nmap proxychains

U situacijama kada ne koristimo ToR, najprostiji primjer upotrebe nmap-a bi izgledao ovako:

nmap ipadresa(ili hostname)

Kao rezultat dobijamo spisak otvorenih portova na izabranom sistemu.

Ukoliko želimo da skeniranje uradimo anonimno, tj. preko ToR-a, ispred komande nmap moramo samo ukucati komandu proxychains:

proxychains nmap -Pn ipadresa

Proxychains je po default-u podešen da sav saobraćaj komande koju smo naveli šalje preko ToR-a, čime taj saobraćaj postaje anoniman.

Nmap obično prije skeniranja pokuša da pinguje destinaciju koju treba da skenira. Ako ping nije uspješan, skeniranje se ne izvršava. S obzirom da preko ToR-a možemo poslati samo TCP saobraćaj, ping, koji koristi ICMP protokol, neće raditi. Zato sada moramo korisiti parametar -Pn koji govori nmap-u da skeniranje izvrši bez prethodnog ping-ovanja destinacije (ili moramo koristiti TCP ping sa parametrom -PT). Ovo važi i za ostale funkcionalnost-i nmap-a, tj. kroz ToR će raditi samo one funkcionalnosti nmap-a koje su bazirane na TCP protokolu.

Napomenuo bih da se nmap može koristiti za mnogo više od samog skeniranja portova. Koristeći takozvani NSE (nmap scripting engine), upotrebom određenih skriptova, nmap može poslužiti za banner-grabbing (prikupljanje informacija o servisu – tip servisa, verzija…), pretraga za ranjivostima, iskorišćavanje ranjivosti i još mnogo toga (jedino TCP bazirane skripte se mogu provući kroz ToR).

Vulnerabilty Skeneri web aplikacija se još lakše mogu provući kroz ToR. Npr. Burp ili Vega u svojim podešavanjima imaju opciju da sav saobraćaj prosledjuju preko SOCKS proxy-a. Dovoljno je podesiti da se SOCKS proxy nalazi na 127.0.0.1:9050 tj. na loopback adresi i portu na kojem sluša ToR klijent, i sav saobraćaj vulnerability skenera će ići preko ToR-a. Proxychains nije potreban. Podešavanje Vega vulnerability skenera izgleda ovako:

vega

Kad su u pitanju Metasploit (framework za testiranje i izvršavanje ranjivosti) ili vulnerability skeneri Nessus i OpenVAS, takođe postoji mogućnost da se proguraju kroz ToR na ovaj ili onaj način, ali opet sve zavisi od konkretne ranjivosti koju testiramo, tj. da li ide preko TCP-a ili ne. Detalje nisam testirao.

Napomenuo bih još jednu vrlo bitnu stvar iz pogleda napadača kad je u pitanju anonimnost preko ToR-a. Jedan od najvećih uzroka “curenja” prave IP adrese napadača je DNS. Kako? Kada napadač preusmjeri neku aplikaciju preko ToR-a (npr. port skener) i preko nje želi da pristupi nekoj destinaciji koristeći hostname, neke aplikacije će prvo taj hostname razriješiti u IP adresu, pa tek onda saobraćaj provući kroz ToR. Problem je što je napadač na DNS serveru na taj način ostavili trag o svojoj pravoj IP adresi i sajtu kojem je pristupio. U idealnom slučaju, aplikacija ne bi smjela da razrješava hostname u IP, već bi hostname trebala proslijediti ToR klijentu prepuštajući njemu saznavanje IP adrese. Kako će aplikacija ovo riješiti sve zavisi od aplikacije do aplikacije, ali bi se generalno mogla napraviti sledeća podjela:

  • Aplikacije koje koriste SOCKS4 protokol – ove aplikacije samostalno razrješavaju hostname u IP adresu pa proxy-u prosledjuju samo IP adresu. Ovakve aplikacije bi trebalo izbjegavati kada je u pitanju ToR.
  • Aplikacije koje koriste SOCKS4a protokol – ove aplikacije neće samostalno razrješavati hostname u IP adresu, već će hostname proslijediti proxy serveru koji će se pobrinuti za pretvaranje hostname-a u IP adresu.
  • Aplikacije koje koriste SOCKS5 protokol – ove aplikacije se mogu podesiti da ili samostalno razrješavaju hostname u IP, ili da prosledjuju hostname proxy serveru. Treba uvijek provjeriti koje je default podešavanje.

Ovo je samo gruba podjela i ne daje nikakve garancije da će se aplikacija pridržavati pravilima.

Zbog ovakvih problema sa DNS-om, firewall (iptables) u Tails distribuciji je podešen da blokira sav DNS saobraćaj prema spolja. U log fajlu ToR klijenta se takođe može naći informacija ukoliko se sumnja da neka aplikacija pokušava samostalno da razriješi hostname u IP adresu. DNS razrješavanje na Tails-u funkcioniše tako što je DNS podešen na 127.0.0.1, a ToR klijent lokalno dočekuje sve zahtjeve i brine se oko razrješavanja (za A rekorde radi samostalno, a za ostale koristi dodatan alat ttdns).

Napadač bi alternativno mogao pomoću alatke tor-resolv da prije napada ručno razriješi hostname u IP, pa da zatim napad izvrši koristeći IP adrese.

I da ne bude zabune, DNS radi preko UDP protokola koji ToR ne podržava, ali ToR to rješava tako što DNS zahtjeve zapakuje u TCP pakete. Kada ti paketi dodju do izlaza iz ToR mreže,tj. do nekog od exit relaya, onda taj exit relay izvrši razrješavanje hostname-a u IP adresu.

DNS je samo jedan od načina da prava IP adresa napadača procuri. Ako aplikacija svoju IP adresu šalje u data sekciji IP paketa, onda ni Tails firewall neće spriječiti curenje adrese. A anonimnost treba uvijek uzeti sa rezervom. Iako se u NSA izvještajima koji su procurjeli navodi da je ToR jedan od alata sa kojima NSA ima najviše muka, poznato je i da je NSA u prošlosti našla načine da razotkrije određenu količinu ToR saobraćaja. Ali ako ToR koristite u legalne svrhe, kao što bi i trebali, ne vidim razloga za strah.

Kako blokirati ToR (dolazni saobraćaj)

Ukoliko ne želite da se anonimno putem ToR-a može pristupiti vašem servisu i eventualno izvršiti pomenute zloupotrebe, jedino što vam ostaje je da blokirate ToR. Blokiranje dolaznog saobraćaja je relativno jednostavno jer ToR objavljuje spisak IP adresa svih exit relay-a (izlaznih tačaka iz ToR mreže), a na ovom linku možete naći python skriptu koja će iz pomenute liste napraviti iptables pravila za blokiranje dolaznog ToR saobraćaja u Linux-u. Blokiranje odlaznog ToR saobraćaja je mnogo teže i to sam opisao na kraju blog post-a.

Zašto ne blokirati ToR?

Kada bih morao da donesem odluku o blokiranju dolaznog ToR saobraćaja, vjerovatno bi prevagnuli razlozi protiv blokiranja (mada i to zavisi od kompanije do kompanije). Evo zašto:

  • Blokiranjem ToR-a bi postojala mogućnost da se servis koji štitim nađe na spisku servisa koji blokiraju ToR. To bi možda samo privuklo još više napada i blokiranjem ToR-a bih napravio veću štetu nego korist.
  • Iako blokiram ToR, napadač bi mogao da koristi proxy-e za aninimizaciju saobraćaja. Njih je mnogo teže blokirati jer ne postoji kompletna lista IP adresa kao što je to slučaj kod ToR-a.
  • Lista IP adresa ToR exit relay-a je promjenjiva, tako da i blokiranjem ne mogu garantovati da se ne može provući neki napad u vremenu izmedju 2 update-a firewall pravila na osnovu ToR liste exit relay-a.
  • Blokiranjem ToR-a praktično onemogućavate da bilo ko putem ToR-a pristupi vašem sajtu/servisu. U nekim državama gdje je prisutna cenzura interneta, ToR je jedina mogućnost da se dodje do određenih sajtova. Ukoliko je vaš servis cenzurisan, blokiranjem ToR-a onemogućujete ljudima iz takvih država da na bilo koji način dođu do vašeg sajta.

Iako bih se možda odlučio protiv blokiranja ToR-a, vjerovatno bih pokušao da odbrambene mehanizme podesim tako da obrate posebnu pažnju i da strožije reaguju na aktivnosti koje dolaze sa ToR-a.

Blokiranje odlaznog ToR saobraćaja

Zaposleni u vašoj organizaciji vam takođe mogu nanijeti štetu putem ToR-a. Npr, koristeći ToR bi mogli da zaobiđu outbound filtriranje firewall-a, a mogli bi i neprimijećeno da iznesu povjerljive dokumente iz kompanije. Ali blokiranje odlaznog ToR saobraćaja nije tako jednostavno. Kina pokušava da u okviru cenzure interneta koju sprovodi blokira i odlazni ToR saobraćaj, i moglo bi se reći da je jedina zemlja kojoj to makar djelimično polazi za rukom (mada ne pokušavaju sve zemlje da blokiraju ToR). Evo kako hronološki izgleda igra mačke i miša tj. Kine i ToR-a:

  1. Kina je uvela cenzuru internet.
  2. Korisnici interneta u Kini koriste ToR da bi zaobišli cenzuru.
  3. Kina blokira sve entry relaye ToR-a kako bi spriječila povezivanje na ToR.
  4. ToR pored javnog spiska entry relay-a kreira i skrivene entry relay-a (takozvani bridge ralay-i).
  5. Kina analizom saobraćaja kreira algoritam za prepoznavanje ToR saobraćaja i na taj način ga blokira.
  6. ToR kreira alat za kamufliranje ToR saobraćaja – obfproxy.
  7. Kina poslije nekog vremena kreira algoritam za prepoznavanje obfproxy ToR saobraćaja.
  8. ToR kreira obfproxy2, Kina ga provaljuje, ToR kreira obfproxy3, Kina ga provaljuje, ToR kreira obfproxy4…

Kao što sam rekao, blokiranje odlaznog ToR saobraćaja je vrlo teško. Naravno, velika je prednost ako u kompaniji imate potpunu kontrolu nad svim računarima koji se kače na mrežu jer na taj način možete pokušati da spriječite problem u korijenu, tj. da spriječite instaliranje ToR klijenata. Pored toga, možete blokirati javno dostupne ToR entry relay-e da bi se makar malo otežao posao štetočinama. Nisam siguran da li neki firewall-ovi mogu analizom saobraćaja možda da prepoznaju makar neke vrste ToR saobraćaja. Ako neko zna, neka baci komentar!

I kad ste već čitali dovde, lajkujte taman i facebook stranu ovog bloga: http://www.facebook.com/infosecme

Sve u ovom blogu je pisano u edukativne svrhe. Sve što radite, radine na sopstveni rizik. I uzmite sa rezervom sve što pišem.

2 thoughts on “Blokirati ToR ili ne? Pitanje je sada…

  1. Odlican tekst, svaka cast 👍

Leave a comment