Ultrasurf antisansür yazılımı çeşitli network güvenlik cihazlarına yakalanmamak için çok akıllı yöntemler kullanıyor. Mesela ilk başlatıldığında çeşitli gerçek domain isimlerine dns istekleri gönderiyor, bilinen sitelere(intel.com, microsoft.com, cnn.com vs 443. porttan bağlanmaya çalışıyor) arada da kendi proxylerine bağlantı isteği gönderiyor ve bağlantı kurabilirse devam ediyor, kuramazsa diğer proxy ip adreslerini deniyor. Böylece ip adresinden bloklama yapmak isteyenler logları izleyerek bloklama yaparlarsa gerçek ip adreslerine giden istekleri de bloklamış oluyorlar.
Vakti zamanında ip adresinden bloklamak için 200′e yakın ipye bağlantı yaptığını bulup bloklamıştım ama yetmedi:). Dolayısıyla bu işin ip bloklayarak olmayacağına bir iki gün kaybederek öğrendim.
Açık kod saldırı tespit ve engelleme sistemi Snort’un e-posta listelerinde de geçen gün Ultrasurf konusu açılmıştı. Birileri de hemen bir iki imza yazıp gönderdi listeye. Malesef ki imzalar tamamen ip adreslerine yapılan bağlantıları izlemeye ve dns isteklerini yakalamaya yönelikti. Her iki imza da gerçekte bloklama işine yaramıyor. Snort kurallarını inceleyerke neden işe yaramayacağına bakalım
İlk Snort kuralı;
# Rule by SERPRO-Recife Security Team
alert udp $HOME_NET any -> $EXTERNAL_NET 53 (msg:”Possible External Ultrasurf DNS Query”; content:”|00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00|”; classtype: policy-violation;threshold:type limit, track by_src,count 1, seconds5; sid: 1000059; rev:2; )
Bu kural Ultrasurf dns isteklerini yakalaybilse de alakasız dns isteklerini de yakalıyor. Yani false positive oranı çok yüksek bir kural, dolayısıyla engelleme için kullanılamaz.
İkinci Snort kuralı;
# IP POOL by Augusto Ferronato
var ULTRASURF_POOL
[205.196.136.9,210.21.31.114,118.171.251.158,202.75.48.227,61.197.186.36,202.99.10.38,131.107.100.158,66.249.93.102,218.169.186.93,203.13.134.161,59.117.240.222,72.246.89.133,114.45.22.115,
198.22.236.38,70.85.195.236,220.138.148.35,59.117.240.222,118.161.206.194,67.137.230.73,220.136.233.18,
208.96.32.3,65.49.14.12,61.197.186.36,64.62.138.28,195.39.222.218,202.67.56.65,65.49.14.12,114.44.44.158,
210.208.94.226,203.30.164.150,64.38.220.186,202.99.10.38,219.85.5.60]
alert tcp $HOME_NET any -> $ULTRASURF_POOL 443 (msg:”Ultrasurf
Connection Detected”; flow:established;classtype:policy-violation;
sid:5000000; rev:3;)
Bu da kısaca yukarıda belirtilen ip adreslerine yapılan 443 TCP bağlantılarını gördüğünde uyarı veren kural ve false positive çok yatkın zira aralarında gerçek sitelere ait ip adresleri de geçiyor. Ek olarak bunları bloklamaya başladığınızda Ultrasurf anında başka ip adreslerine bağlantı kurarak sizi uğraşlarınızla başbaşa bırakacaktır.
Peki nasıl bloklama yapacağım? Piyasada network seviyesinde sağlıklı bloklama yapabilen ticari IPS ürünleri olduğunu biliyoruz.
Bloklama konusunda en iyi ve en kesin yöntemi Squid ile anlatmıştım ama herkes Squid kullanmadığı için çoğu ortama uymuyor. Ben de bir arkadaş için alternatif yöntemler düşünürken aklıma aşağıda anlatacağım bloklama yöntemi geldi.
Firewall ile Ultrasurf bloklama;
Ultrasurf’ün bir özelliği de eğer bloklama yoksa proxy bağlantılarını hep aynı ip adresi üzerinden yapması. Eğer bu ip adresini bulabilirsem(Ultrasurf çalıştırıp 443. portu dinlemek ve sonrasında Explorer üzerinden internette gezinmek ip adresini bulmaya yetecektir.) sonra kullandığım güvenlik duvarından bu ip adresine giden paketlerin bandwidth değerini 5-6 Kb’e ayarlarsam hem ultrasurf ilgili ip adresine ulaşabileceği için ip adresi değiştirmeyecektir hem de Ultrasurf kullanan kişi bağlantının yavaşlığından dolayı Ultrasurf kullanmaktan vazgeçecektir:)
Yukardaki senaryoyu anlatan Packet Filter Güvenlik Duvarı Kuralı
ext_if=”vic0″
int_if=”vic2″
…
altq on $int_if cbq bandwidth 1Mb queue {ultrasurf, others}
queue ultrasurf bandwidth 6Kb
queue others bandwidth 994Kb cbq(default)
nat on $ext_if from !($ext_if) ($ext_if:0)
pass in quick on $int_if proto tcp from any to 65.49.2.113 port 443 queue ultrasurf
….
Diğer bir yöntem de yukarıdaki Snort kuralını aktif ederek hangi ip adreslerinin Ultrasurf kullandığını belirlemek ve ilgili ip adreslerinin sahiplerini uyarmak. Yukardaki ip adresleri eğer engelleme yapılmazsa Ultrasurf 9.4 versiyonunun default olarak ilk denediği ip adresleridir.
Bu işe kesin çözüm için yapılması gereken:
443. TCP portunu dinleyerel TLS1 bağlantılarında server hello mesajı içerisinde sertifika bilgisini aramaktır. Ultrasurf TLS bağlantısı kuruyor gözükse de sunucu tarafı hello mesajında sertifika göndermiyor IPS ile bu alanı kontrol edip sertifika alanı boş olan TLS paketlerini bloklamak kesin çözüm olacaktır.
