TOR ve Anonimlik

Gİrİş

İnternet üzerinde anonimlik, internetin ilk zamanlarından beri oldukça ilgi çeken konulardan birisi. İnternette %100 şekilde anonim kalmak mümkün olmasa da anonimlik seviyelerimizi günün imkan ve teknolojilerini kullanarak makul ölçülere çekmek mümkün.

Bu yazıda anonimlik ağlarının en önde gelen örneği TOR’u inceleyeceğiz.

TOR

The Onion Router ya da kısaca TOR adı ile bilinen teknoloji 2002 yılında bir araştırma projesi olarak yoluna başladı. TOR bir anonimlik ağıdır.

TOR’un mantığını kabaca anlatmak gerekirse, İnternette bir sisteme erişmek istenildiği zaman, isteğin TOR ağı üzerindeki rastgele node’lar(bilgisayarlar) üzerinden iletilip, aynı yoldan yanıtın geri gelmesi vasıtasıyla, ya da kabaca hedef sistem ile kullanıcı arasında doğrudan iletişim kaçınılmasıyla, anonimliğin sağlanması hedeflenir.

Teknik kısımlara girmeden önce değinilmesi gereken enteresan bir bilgi var. TOR’un 2012 yılı bütçesinin %80’i başta NSA olmak üzere ABD hükümetine bağlı kurumlar tarafından sağlanan bağışlarla oluşturuldu.

Güvenlik Eleştirisi

TOR sisteminin güvenlik anlamında eleştirisi yapılırsa:

TOR Çıkış Düğümü (Exit Node)

İlk noktadan, son TOR düğümüne (node) kadar iletişim şifrelidir. Her bir TOR düğümünden (node) veri iletilirken, sadece bir sonraki TOR düğümünün İP adresi deşifre edilebilir. Ama TOR çıkış düğümlerinde (exit node), kullanıcının bilgisayarından çıkacak istek tamamen deşifre edileceği için, çıkış düğümü üzerinde trafiği izlemek mümkündür. Her isteyen kendi sistemini TOR çıkış düğümü (exit node) olarak TOR ağına dahil etmesi mümkün olduğu için potansiyel olarak çok ciddi güvenlik ve gizlilik sorunları mevcuttur.

TOR Çıkış Düğümü üzerinde bir saldırıya uğramamak için yapılması gereken şey, TOR üzerinden yönlendirmesini yaptırdığınız protokol seviyesinde mümkün olduğunca şifreleme kullanmak. Web trafiği için HTTPS, FTP trafiği için FTPS gibi.

 

TOR Düğümleri Üzerinde Tutulan Kayıtlar

TOR sunucularının kayıt (log) tutmadıkları konu hakkındaki en genel yanlış algılardan birisidir. TOR yönlendirmesini yapan yazılımda log tutulmamaktadır lakin bu sistem üzerinde loglamanın yapılamayacağı anlamına gelmemektedir.

TOR yönlendirme trafiği şifreli olduğu için sadece bir önceki düğüm ve bir sonraki düğümün bilgisi ele geçirilebilir. TOR çıkış düğümündeki trafiğin tamamen şifresiz olduğunu bir önceki adımda söylemiştik. Eğer bir TOR devresini (bir noktadan diğer noktaya giderken trafiğin üzerinden geçtiği bütün TOR düğümleri) oluşturan bütün düğümler aynı gücün kontrolü altında ise, bütün düğümlerde loglama ve çıkış düğümünden trafiği geriye doğru takip ederek hedeflenen trafiğin kimliğinin açığa çıkartılması mümkün olabilmektedir.

Kendi sisteminizi TOR networküne düğüm olarak dahil etmek için gerekli yazılımı bilgisayarınıza kurmak yeterlidir. Söz konusu TOR networku tarafından sağlanan yazılım üzerinde log tutulmasa bile, kendi sisteminiz ya da networkunuzu izleyerek, trafik hakkında minimum düzeyde de olsa bilgi sahibi olabilir ve bunu kayıt altına alabilirsiniz.

Binlerce düğümün olduğu bir ağdan rastgele seçilen düğümlerin tamamını elde etmek kolay olmayabilir, lakin geçmişte TOR’da gösterilen zamanlama, ya da TOR düğümlerine DoS yapılması gibi ekstra bir yöntem ile bütün devre kontrol edilemese bile anonimlik ciddi şekilde riske girebilir.

 

TOR Giriş Düğümü (Entry Node)

TOR giriş düğümünün kötü niyetli birine ait olması durumunda o giriş düğümü üzerinden TOR ağını kullanan bütün bireylerin İP adresleri açığa çıkacaktır. Trafiğin içeriği, TOR trafiğinin şifreli olması sebebiyle anlaşılmasa bile zamanlama, profil çıkarmak, farklı noktalarda toplanan bilgilerin korelasyonu gibi ekstra metodlar ile bunu daha da ileri götürmek mümkündür.

Bu durumun olasılığını düşürmek için (tamamen engellemek mümkün olamayacağından) TOR “Entry Guard”ları denen bir sistem kullanmaktadır. Kabaca TOR istemci uygulaması bir kaç rastgele TOR düğümü seçer ve giriş düğümü olarak hep bu düğümleri kullanır. Bu binlerce düğüm arasından seçilen bir kaç tane düğümde sorun yok ise bu tehdit sizin için ortadan kalkmış demektir. Ama düşük ihtimal gerçekleşir ve şansınıza kötü niyetli biri tarafından kontrol edilen bir sistem gelirse bu maddede anlatılan sorundan etkilenebilirsiniz.

 

İstemciye Yönelik Ataklar

Bu kategori benim önceden düşündüğüm ve zaman zaman da dillendirdiğim bir olaydı ki pratiğini de FBI’ın bu yaz Freedom Hosting’e düzenlediği operasyonda görmüş olduk. Operasyonu kabaca anlatmak gerekirse bir çok TOR gizli servisinin host edildiği Freedom Hosting sunucuları FBI tarafından hack’lendi ve başta çocuk pornosu içeren web siteleri olmak üzere bir çok TOR gizli servisinin anasayfasına bir JavaScript exploit’i yerleştirildi. Exploit sadece TOR bundle ile gelen Firefox sürümünü etkiliyordu. Exploit kullanıcının ethernet kartının MAC adresini. bilgisayar ismini ve IP adresini  Northern Virginia’daki bir sunucuya doğrudan bağlanarak (TOR’u aradan çıkartmak vasıtasıyla) bildiriyordu.

Özetle, hangi istemciyi (browser, ssh, ftp ya da herhangi bir client) kullanıyorsanız kullanın, TOR üzerinden gelen yanıt o istemci tarafından işleneceği için, o istemci üzerinde bulunan güvenlik açıkları da gizliliğinizi riske atmaktadır. Özellikle de web tarayıcılar ve eklentilerindeki güvenlik açıkları bu kadar çok ve yaygın şekilde kullanılıyorken.

 

Güvenlik Tavsiyeleri

TOR ile ilgili riskleri belirttikten sonra şimdi de bir kaç güvenlik tüyosundan bahsedelim.

NoScript ile JavaScript/Flash/Java’yı Devre Dışı Bırakmak

Bu ilk akla gelen öneri olmakla birlikte NoScript kurulumun son derecek olay olması da başka bir avantaj. TOR Browser Bundle‘ında gelen NoScript’ın varsayılı ayarlarda JavaScript’i devre dışı bırakmadığını hatırlatmakta yarar var. Ek olarak Flash ve Java’yı aslında hiç kurmamış olmak çok daha yerinde bir karar olacaktır.

 

HTTPS Everywhere ile Sadece HTTPS Sayfalara Bağlanmak

Bir çok site HTTPS ile çalışmasına karşın, HTTPS kurulum ve konfigürasyonunun oldukça ayrıntılı olmasından ötürü sıkça yanlışlar yapılıyor ve bu durumda HTTPS pek bir işe yarayamayabiliyor, örneğin HSTS (HTTP Strict Transport Security) implemente edilmemesi ve ilk isteğin HTTP porta yapılması ya da basit bir JavaScript dosyasının HTTP üzerinden yüklenmesi, secure cookie’nin HTTP üzerinden yollanması vs. gibi. Bu gibi durumların en azından bir kısmının önüne geçmek için Electronic Frontier Foundation ve TOR ekibi tarafından geliştirilen HTTPS Everywhere isimli Firefox/Chrome eklentisini kullanabiliriz.

 

Firewall Kuralları ile TOR’suz Bağlantıları İzin Vermemek

Bu güzel bir olay zira bir şekilde Freedom Hosting olayındaki gibi istemciniz exploit edilse dahi bilgisayarınızın başka bir sunucuyla doğrudan bağlantısını engelleyerek gizliliğinizi koruyor. Bu olay aklıma gelince Google’da bir arama ile kuralların yazılmışını bulmuştum, buradan da paylaşayım. Betik’teki test2 kullanıcısını kendi kullanıcı adınız ile değiştirmeyi unutmayın:

#! /bin/sh
#this needs to be chmod'd 755
#update-rc.d firewall defaults 20 (not the correct way to do this)
#script works with ubuntu/debian based systems

iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT DROP

#allow tor and polipo access to loopback
iptables -I INPUT -j ACCEPT -i lo -p tcp --dport 8118:9050 --sport 1:65000
iptables -A OUTPUT -j ACCEPT -o lo -p tcp --dport 1:65000 --sport 8118:9050

#does this allow the user and polipo to send data out to ethernet too?
#use your own username instead of test2
iptables -A OUTPUT -p tcp -j ACCEPT -m owner --uid-owner test2 -o lo
iptables -A OUTPUT -p tcp -j ACCEPT -m owner --uid-owner root -o lo
iptables -A OUTPUT -p tcp -j ACCEPT -m owner --uid-owner privoxy -o lo

#udp appears not to be needed
#iptables -A OUTPUT -p udp -j ACCEPT -o lo -m owner --uid-owner debian-tor 

#loop through all ethernet devices and allow tor out; one should be the right one unless you are using wifi; although i think this works with wifi too
NETDEVICES=`ifconfig -a | grep Ethernet | cut -d' ' -f 1 | xargs`

for DEVICE in $NETDEVICES
do
        iptables -A OUTPUT -p tcp -j ACCEPT -o $DEVICE -m owner --uid-owner debian-tor
        iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
done

Kuralları kabaca açıklamak gerekirse:

      • 8118 (privoxy) ve 9050 (TOR socks proxy) portları arasınındaki tüm portlara lo (loopback) arayüzü üzerinden erişilebilmesini ve bu portların da kendilerine erişen diğer istemcilere yanıt verebilmesini sağlıyor.
      • test2, privoxy ve root kullanıcılarının processlerine de yine loopback arayüzü üzerinde istedikleri porta paket yollayabilmelerini sağlıyor. Bu kural sayesinde örneğin çalıştırdığımız Firefox yazılımı 8118’den çalışan privoxy yazılıma erişebiliyor, bir önceki kural itibariyle de privoxy TOR’a erişebiliyor.
      • En alttaki döngü içerisinde de sadece debian-tor kullanıcısına ait olan process’lerin (TOR uygulaması) diğer interface’ler üzerinden paket yollayabilmesine izin veriliyor

Kurallar bir şekilde çalışmaz ve bütün trafiğinizi engellerse, aşağıdaki betik ile tüm IPTables kurallarını temizleyebilirsiniz.

#!/bin/sh
#Source : http://unix.stackexchange.com/a/62040
echo "Stopping firewall and allowing everyone..."

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Sanal Makine Tabanlı Koruma

NoScript ve Firewall ile doğrudan bağlantıları engellemek oldukça güzel çözümler olmasına karşın anonimliğimizi %100 sağlayacak çözümler değil. En basit senaryo ile açıklamak gerekirse, saldırgan bir şekilde Firefox’da kod çalıştırabildikten sonra başka bir Privillege Escalation ile yetkileri ele geçirip IPTables’ı da devre dışı bırakabilir.

Bu senaryodaki durumda yapılacak hareket ise bir adet sanal makine oluşturup, bu sanal makineyi, sanal makine dışındaki konfigürasyon seçenekleri ile TOR üzerinden internete çıkarmak. Bunu yapmanın bir kaç yolu var ve kurulum senaryonuza göre fark ediyor. Örneğin Windows üzerine VMware ile sanal bir makine kurup onun üzerinden TOR’a bağlanacaksanız VMware’in host makine üzerinde sanal makineyi internete çıkartan processlerin (mesela vmnat.exe) sadece entry guard TOR sunucularına bağlanmasına izin vermek.

Daha temiz bir çözümü ise bu sene BlackHat Vegas’da yayınlanan Tortilla isimli projede görebiliriz. Tortilla Windows üzerine kendi sanal ağ adaptörünü (network adapter) kuruyor ve sanal makinenizi konfigüre ederken eklediğiniz ethernet kartını Tortilla’nin adaptörüne bridge ederseniz, bütün trafik adapter üzerinden Tortilla istemci yazılımına ve onun üzerinden de TOR’a çıkıyor. Sanal makineniz başka birinin kontrolüne girse dahi, onun trafiğinin yönlendirilmesi sanal makine dışarısından olduğu için TOR tünelini devre dışı bırakmak çok mümkün gözükmüyor.

Bu başlıkta iki farklı sanal makine tabanlı senaryodan bahsedildi, güvenliği bir kaç seviye daha ilerlettiysek de kesin olarak sağlandığını söyleyemeyiz. Zira bu senaryolarda dahi sanallaştırma teknolojisi üzerindeki guest makine ile host makine arasındaki izolasyona ve host makine üzerindeki tüm bu korumayı sağlayan sistemin parçalarına (en azından ilk senaryo için firewall, diğeri için Tortilla sanal adaptörü, istemcisi ve tabii ki TOR) dayanıyoruz, eğer o noktaların herhangi birisinde bir açık bulunursa bu yöntemler de geçilebilir.

 

Ekstra Çözümler

Şimdilik araştırmaya ve burada bahsetmeye üşendiğim aşağıdaki seçenekler de mevcut:

SON

Bundan sonraki yazılarda SSL, VPN sistemleri, log tutma hadiseleri ve I2P gibi diğer anonimlik ağlarından bahsedeceğiz.

Anonimlik sizinle olsun.