Konu Başlıkları Gizle
Giriş
Bir süredir geliştirmekte olduğum IHateDPI projesi sayesinde, DPI sistemleri ve farklı İnternet Servis Sağlayıcıların (İSS) kullandıkları yöntemler hakkında kapsamlı bilgi toplama şansım oldu. Yaptığım yoğun testler sonucunda çıkardığım analizler, bu sistemlerin zaaflarını ve çalışma mantıklarını büyük ölçüde ortaya koyuyor. Bu makalede, çalışan ve çalışmayan yöntemleri birbirinden ayıracak; çalışanların neden başarılı olduğunu, çalışmayanların ise neden başarısız olduğunu teknik bir perspektifle inceleyeceğiz.DPI Sistemleri Nasıl Çalışıyor?
Yaptığım tüm testler ve araştırmalar gösteriyor ki, bütün DPI mekanizması "Client Hello" paketini yakalamak üzerine kurulu. DPI sistemlerinin elindeki tek ayırt edici veri bu pakettir.Client Hello Paketi Nedir?
Basitçe anlatmak gerekirse, "Client Hello" adından da anlaşılacağı üzere istemcinin (yani cihazınızın/tarayıcınızın) sunucuya "Merhaba" demesidir. Cihazınız sunucu ile şifreli bir iletişim başlatmak istediğini belirtir ve karşılığında sunucudan "Server Hello" paketi döner.Client Hello'nun İçeriği ve Önemi
Paket içerisinde pek çok teknik bilgi yer almakla birlikte, DPI sistemlerini (ve bizi) en çok ilgilendiren kısım SNI (Server Name Indication) alanıdır. SNI değeri, bağlanmak istediğiniz domain adresini (örneğin; google.com) açık olarak barındırır. DPI sistemleri, ağdan geçen Client Hello paketlerini izler ve içerisindeki SNI değerini okur. Eğer bu değer kara listedeki bir siteyle eşleşirse, sistem bağlantıyı (TCP Reset veya Drop ile) anında keser.Modern Web Mimarisi: Merkeziyetçiliğin İronisi
Modern web dünyası, günümüzde hiç olmadığı kadar merkezileşti. İnternet trafiğinin büyük çoğunluğu artık Cloudflare, Google ve Amazon gibi birkaç devasa sağlayıcının üzerinden akıyor. Normal şartlarda internetin bu denli tekelleşmesi pek arzu edilen bir durum değildir. Ancak konu DPI mekanizmaları olduğunda, bu "olumsuz" durum beklenmedik bir teknik avantaja dönüşüyor."Her şerde bir hayır vardır."
Bu devasa merkezi yapı, engelleme yapmak isteyenlerin elini kolunu bağlayan en güçlü faktör haline gelmiş durumda.
Eskiden denklem çok basitti: Her IP adresinin arkasında genellikle tek bir sunucu bulunurdu. Yasaklanmak istenen siteye ait IP adresi engellenir ve konu kapanırdı. IP adresleri, web'in telefon rehberi gibiydi; numara belliydi, hedef belliydi. DPI araçlarına dahi gerek yoktu. Ancak bulut teknolojileriyle bu düzen değişti.
IP adresleri artık kişisel birer "telefon numarası" olmaktan çıkıp, binlerce farklı dairenin bulunduğu devasa bir "gökdelen adresine" dönüştü. Tek bir IP adresi arkasında binlerce, hatta on binlerce farklı site barınabiliyor. Bugün bir IP adresine yasak koymak; sadece hedefteki siteyi değil, o IP'yi paylaşan binlerce masum siteyi, e-ticaret platformunu veya kurumsal sistemi de erişime kapatmak anlamına geliyor.
Bu "yan hasar" riski, günümüzde IP tabanlı engellemeyi neredeyse imkansız hale getirdi. Merkezi yapı, ironik bir şekilde IP banlarının önüne geçen bir kalkana dönüştü. Bir IP'yi yasaklamak, interneti tamamen fişten çekmekten farksız bir kaos yaratacak duruma geldi. İşte bu teknik kısıt, DPI sistemlerini tek bir çıkış yoluna mecbur bıraktı: Client Hello içindeki SNI adını okumak.
Sistemi Kandırmak: Bypass Yöntemleri
DPI sistemleri, trafiği yavaşlatmamak için tüm paketleri inceleyemez. Sadece belirli bir desene sahip olan Client Hello paketlerini ararlar (örneğin ilk bayt0x16 mı diye bakarlar). Eğer bir eşleşme bulurlarsa SNI'ı okurlar, bulamazlarsa akışa izin verirler. Sunucu ile "Handshake" tamamlandıktan sonra trafik tamamen şifrelenir ve DPI sizi artık takip edemez.Yani tüm hikaye DPI'ı bir şekilde uyutup, Client Hello'yu sunucuya ulaştırmaktan ibaret.
1. Yöntem: Sahte (Fake) Client Hello
Günümüzde en stabil çalışan yöntemlerden biri, sisteme orijinal paketten önce gerçekçi bir sahte Client Hello paketi vermektir.Nasıl Çalışır? Orijinal isteğimizden hemen önce, DPI'ı tetikleyecek ancak zararsız bir domain (örneğin google.com) içeren sahte bir Client Hello paketi göndeririz.
- DPI sistemi sahte paketi görür, analiz eder ve güvenli bir siteye gidildiğini düşünerek o TCP akışını "güvenli" olarak işaretler.
- DPI akışı serbest bıraktığı anda, bizim asıl (yasaklı siteye giden) Client Hello paketimiz arkadan gelir.
- Sistem artık o akışı denetlemeyi bıraktığı için gerçek paketimiz filtreden takılmadan geçer.
2. Yöntem: "İlk Gelen Kazanır" (Gelişmiş Parçalama)
Yaptığım analizler sonucunda, eski bir teknik olan "TCP Fragmentation" (paket parçalama) yöntemini modifiye ederek yeni bir yaklaşım geliştirdim. Standart parçalama artık pek işe yaramıyor çünkü modern DPI cihazları parçalanmış paketleri birleştirip yine de okuyabiliyor.Geliştirdiğim yöntemin mantığı şöyledir:
- Client Hello paketini parçalara ayırırız. İlk parça (header kısmı) sunucuya gönderilir.
- Hemen ardından, SNI değerinin bulunduğu 2. parça yerine, 2. parçaymış gibi davranan bir "çöp veri" gönderilir.
- DPI sistemi bu parçaları belleğine alır ve birleştirmeye çalışır.
- Bu esnada gerçek 2. parça da gönderilir.
- DPI sistemi veya aradaki ağ cihazları, "Bende zaten 2. parça (çöp olan) var, bu yeni gelen tekrar gönderim olmalı" diyerek gerçek paketin denetimsiz geçmesine izin verir veya işlemez.
- Ancak birleştirilen veri (ilk parça + çöp veri) anlamsız olduğu için DPI bunu bloklayamaz veya sunucu tarafında geçersiz sayılır, fakat arkadan gelen gerçek parçalar sunucu tarafından doğru şekilde işlenir.
Malum İSS Analizi: Neden Bu Kadar Dirençli?
Malum İSS üzerinde yaptığım testler, kullandıkları DPI altyapısının diğerlerinden çok daha farklı bir çalışma mantığına sahip olduğunu gösterdi.Kendi geliştirdiğim ve diğer ağlarda başarıyla çalışan "çöp veri" yöntemini burada ilk denediğimde, standart (küçük) boyutlu verilerin hiçbir etkisi olmadığını gördüm. Yöntem çalışmayınca, sistemin davranışını daha iyi analiz edebilmek ve olası direnç noktalarını (buffer limitlerini) tespit edebilmek adına strateji değiştirdim; araya sıkıştırdığım çöp verinin boyutunu şişirmeye başladım.
Veri boyutu belirli bir eşiği aştığında sistemin zorlanmasını ve güvenlik önlemi olarak trafiği kesmesini bekliyordum. Diğer İSS'lerdeki testlerim de bunu doğruluyordu; limiti aşmak genellikle bağlantının kopmasıyla sonuçlanırdı. Ancak malum İSS'te şaşırtıcı bir durumla karşılaştım: Çöp verinin boyutunu ne kadar devasa hale getirirsem getireyim bağlantı kopmuyor, sistem en ufak bir tepki dahi vermiyordu. Bu "tepkisizlik", karşımdaki filtrenin sadece boyuta veya basit taşmalara duyarlı olmadığının, arka planda çok daha seçici bir mekanizmanın çalıştığının işaretiydi.
Sistemin çalışma mantığını anlamak için sahte paketleri modifiye etmeye başladım. İçi boş paketlerden başlayıp, adım adım gerçeğe daha yakın Client Hello paketleri oluşturdum. Bu testlerin sonucunda şaşırtıcı bir keşif yaptım: Bu İSS'in DPI sistemi, sadece boyuta ve daha da önemlisi desene değil, içeriğin tutarlılığına da bakıyordu.
Client Hello paketini bölüp araya çöp veri sıkıştırdığımda veya tutarsız bir Client Hello oluşturduğumda, sistem verinin standart bir TLS yapısına uymadığını fark ediyor. Yani paketi bir "manipülasyon girişimi" olarak değil, doğrudan "bozuk/geçersiz veri" olarak görüyor ve belleğe almıyor. Dolayısıyla manipülasyon girişimimiz, sistem paketi ciddiye almadığı için başarısız oluyor.
Sonuç net: Sistem oldukça dirençli. Yalnızca RFC standartlarına birebir uyan ve yapısal bütünlüğü bozulmamış, gerçekçi Client Hello paketlerini işleme alıyor. Bu seçici yapı, söz konusu ağda bypass işlemini gerçekleştirmeyi diğerlerine kıyasla çok daha zorlu hale getiriyor.
Sonuç ve Gelecek: ECH (Encrypted Client Hello)
Araştırmalarım bir süre daha devam edecek, özellikle Encrypted Client Hello (ECH) üzerine yoğunlaşıyorum. ECH, basitçe anlatmak gerekirse Client Hello paketinin (SNI dahil) tamamen şifrelenmiş halidir. Şu anki çalışmalarım uygulamaları ECH kullanmaya zorlamak üzerine, ancak bunun hiçbir garantisi yok. Konu ile ilgili araştırma yapıyorum yalnızca.Özetle: Mevcut durumda en kararlı yöntem hala Sahte Client Hello metodudur. Malum İSS haricindeki sağlayıcılarda ise geliştirdiğim yöntem, daha hafif bir alternatif olarak tercih edilebilir.
IHateDPI Kaynak Kodları
Releases
Konfigürasyon
Son düzenleme: