Snort Kullanarak Ultrasurf engelleme

Linux-güvenlik listesinde hararetli bir şekilde Ultrasurf’u engelleme konusu tartışılıyordu. Arkadaşlardan biri Ultrasurf’ün SSL bağlantısı kurarken kullandığı Client Hello mesajlarının Ultrasurf için klasik uygulamalardan farklı olduğunu bulmuş.

Buradan yola çıkarak 443. port’da bu değerin geçtiği paketleri yakalayıp engelleyerek Ultrasurf’ün sunuculara bağlantısı engellenebilir.

Gerçekten çalışıyor mu, false positive oranı nedir diye çalakalem bir Snort kuralı yazıp test ettim, evet problemsiz çalışıyor gözüküyor. Tabi Ultrareach(Ultrasurf gelistiricileri) yeni sürümlerde bu değeri değiştirirse kuralın da güncellenmesi gerekecek.

alert tcp $HOME_NET any -> $EXTERNAL_NET 443 (msg:”Ultrasurf Kullanimi!”; flow:to_server,established; content:”|16030100410100003d0301|”; classtype:policy-violation; sid:1000099;)

Snort_inline kullanıyorsanız alert yerine drop, flexresp2 kullanıyorsanız kuralın sonuna resp:reset_both eklemeniz gerekir.

Klasik bir TLS bağlantısı

Ultrasurf tarafından kurulmaya çalışılan TLS bağlantısı

Hex değerini biraz inceleyince aşağıdaki sonuçlar çıktı. (Özet olarak bu imza ile false positive üretebilir)

16030100410100003d0301 hex ifadesinde normal TLS bağlantılarından farklı tek şey Length değerleri. Ultrasurf’e ait Length değerleri eğer değişirse ya da aynı değerleri kullanan başka uygulamalar varsa onlar da engellenecektir.

16: Content Type: Handshake

03 01: Version TLS1.0

00 41: Length 65

01: Handshake Type: Client Hello

00 00 3d: Length 61

03 01:Version TLS1.0

Kaynak: http://pere.bocairent.net/?p=57