- Android'de bazı uygulama·durum kombinasyonlarında DNS sorguları VPN tüneli dışına çıkabiliyor; Mullvad, nedenin VPN uygulamasından çok Android OS hatası olduğunu düşünüyor
- Sızıntı, VPN açık olsa bile DNS sunucusunun boş olduğu durumlarda, tünel yeniden yapılandırılırken, VPN uygulaması zorla kapatıldığında veya çöktüğünde oluşan kısa geçiş aralıklarında meydana gelebiliyor
- Etki,
getaddrinfo'yu doğrudan çağıran uygulamalarda yoğunlaşıyor; Android API'si olan DnsResolver'ı kullanan uygulamalarda sızıntı tespit edilmedi - Always-on VPN ve “Block connections without VPN” açık olsa da sorun tamamen engellenmiyor; Android 14 dahil birden çok sürümde doğrulandı
- Mullvad, geçici olarak sahte bir DNS sunucusu ayarlayarak bazı durumları hafifletmeyi planlıyor; ancak yeniden bağlantı sırasında oluşan sızıntının OS düzeyinde düzeltme olmadan tamamen engellenmesi zor
Android'de DNS sızıntısının ortaya çıktığı koşullar
- Mullvad, 22 Nisan'da bir Reddit kullanıcı raporu üzerinden, “Block connections without VPN” açıkken VPN kapatılıp yeniden açıldığında DNS sızıntısı oluşabileceğini doğruladı
- İç incelemede, Android OS'nin DNS trafiğini VPN dışına gönderebildiği ek senaryolar da ortaya çıktı
- VPN etkin ama DNS sunucusu yapılandırılmamışsa
- VPN uygulaması tüneli yeniden yapılandırırken
- VPN uygulaması zorla sonlandırıldığında veya çöktüğünde oluşan kısa süre içinde
- Bu davranış Android OS'nin beklenen davranışı değil ve daha üst OS seviyesinde düzeltilmesi gerekiyor
Etkilenen uygulamalar ve ad çözümleme yolu
- Sızıntının, alan adı çözümlemesi için C fonksiyonu
getaddrinfo'yu doğrudan çağıran uygulamalarda meydana geldiği görülüyor - Android API'si olan DnsResolver'ı kullanan uygulamalarda sızıntı tespit edilmedi
- Chrome tarayıcısı,
getaddrinfo'yu doğrudan kullanabilen bir uygulama örneği- İlgili Chromium kod konumu da herkese açık
getaddrinfokullanımı başlı başına yanlış değil; tüm Android kullanıcılarını korumak için OS düzeyinde bir çözüm gerekiyor
Always-on VPN ve engelleme ayarlarının sınırları
- Doğrulanan sızıntılar, Always-on VPN ve “Block connections without VPN” etkin olsun ya da olmasın meydana geliyor
- “Block connections without VPN” açıksa, şifreli WireGuard trafiği dışında hiçbir şeyin cihaz dışına çıkmaması gerekir; ancak yeniden üretim sırasında düz metin DNS trafiği yönlendiricide gözlemlendi
- Mullvad, bu ayarın adıyla veya belgelenmiş davranışıyla uyumlu olmadığını ve birden fazla kusur içerdiğini değerlendiriyor
- Yukarıdaki koşullarda DNS trafiği sızabiliyor
- Daha önce bildirildiği gibi bağlantı kontrol trafiği de hâlâ sızıyor
Mullvad uygulamasındaki geçici azaltma ve kalan sorunlar
- Mullvad uygulaması şu anda engelleme durumunda DNS sunucusu ayarlamıyor
- Tünel kurulumu geri döndürülemez biçimde başarısız olursa uygulama engelleme durumuna geçiyor
- Bu durumda trafik cihaz dışına çıkmıyor, ancak DNS sunucusu boş kaldığı için sızıntı koşulu oluşabiliyor
- Mullvad, OS hatasını dolaşmak için şimdilik sahte bir DNS sunucusu ayarlayarak yanıt vermeyi planlıyor ve bu düzeltmeyi içeren bir sürümü yakında yayımlamayı hedefliyor
- Tünelin yeniden bağlanması sırasında oluşan sızıntıyı uygulama tarafında hafifletmek daha zor
- Mullvad bir çözüm arıyor
- Tünel yeniden yapılandırma sayısını azaltmak mümkün olabilir, ancak şu aşamada bu sızıntının tamamen önlenebileceğini düşünmüyor
- Mullvad, sorunu ve iyileştirme önerisini Google'a bildirdi
WireGuard ve Chrome ile yeniden üretilen gözlem
- İkinci senaryo olan VPN tüneli yapılandırması değişirken yaşanan sızıntı, WireGuard uygulaması ve Chrome kullanılarak yeniden üretilebiliyor
- WireGuard, Android VPN uygulamasının referans örneği olarak kullanılıyor
- Mullvad, bunun diğer Android VPN uygulamalarında da yeniden üretilebileceğini düşünüyor
- Chrome,
getaddrinfokullandığı doğrulanmış bir uygulama olduğu için sızıntıyı tetiklemek amacıyla kullanıldı
- Yeniden üretim adımları şu unsurları içeriyor
- spam_get_requests.html dosyasını indirmek
- WireGuard uygulamasını ve Chrome'u yüklemek
- wg1.conf ve wg2.conf dosyalarını WireGuard'a içe aktarmak
- WireGuard'da wg1 tünelini etkinleştirip VPN iznini vermek
- Android VPN ayarlarında WireGuard için Always-on VPN ve “Block connections without VPN” seçeneklerini etkinleştirmek
- Yönlendiricide
tcpdump -i <INTERFACE> host <IP of android device>ile yakalamayı başlatmak - WireGuard ve Chrome'u bölünmüş ekranda açıp, Chrome'da
spam_get_requests.htmldosyasını çalıştırdıktan sonra WireGuard'da wg1 ve wg2 arasında dönüşümlü geçiş yapmak
- Yönlendiricide, Android cihazdan OpenWrt yönlendiricisinin 53 numaralı portuna giden A kaydı sorguları ve NXDomain yanıtları gözlemlendi
- DNS sızıntısı, kullanıcının yaklaşık konumunu veya ziyaret ettiği web siteleri ile servisleri belirlemek için kullanılabileceğinden gizlilik etkisi büyük olabilir
- Tehdit modeline bağlı olarak hassas kullanım senaryolarında Android'den kaçınmak veya sızıntıyı önlemek için başka azaltma yöntemleri uygulamak gerekebilir
- Mullvad uygulaması kullanıcıları, kısmi azaltma içerebileceği için uygulamayı güncel tutmalı
1 yorum
Hacker News görüşleri
Mullvad kullanmıyorum ama gerçekten saygı duymaya başladım. Sorunun açıklaması, kısa vadeli geçici çözüm, başkalarının kullanabileceği olası geçici çözümler ve Android’de düzeltilmesi gereken noktalar; hepsi bilgi yoğun ve iyi düzenlenmiş
Dezavantajı, benim durumumda ping sürelerinin quad9 veya cloudflare’den epey yüksek olması
Bu başlıkta DNS düzeyinde reklam engelleme yöntemi ve cloudflare ile ilgili bilgileri yazmıştım: https://news.ycombinator.com/item?id=40056162
Ödeme sorununu hızla çözdüler; iptables konusunda da çeşitli çözümlerin artı ve eksilerini içeren ayrıntılı bir yanıt aldım. Tek kelimeyle harika
rethinkdns geliştiricisiyim
“Bu sorunların, hangi uygulama kullanılırsa kullanılsın tüm Android kullanıcılarını korumak için işletim sisteminde çözülmesi gerekir” sözüne gelirsek, Android’in paranoyak ağ yönetimi her zaman sistem uygulamaları ve OEM uygulamaları, yani Google uygulamaları dahil istisnalar barındırdı
Bu tür hata düzeltmelerinin çoğunun da o temel varsayımı değiştirmesi pek olası değil. İlgili kod için: https://github.com/celzero/rethink-app/issues/224
“Tünel yeniden bağlanırken oluşan sızıntıyı uygulama içinde hafifletmek daha zor. Hâlâ bir çözüm arıyoruz” kısmına gelince, Android yeniden yapılandırma sırasında iki TUN aygıtı arasında kesintisiz geçişi destekliyor. Doğru uygulaması zor ama mümkün
Android’de çok eskiden beri var olan bir sorun. Yalnızca dahili DNS sunucularını kullanmasını isteseniz bile Android gerekli gördüğünde ya da istediğinde hücresel ağa geçip o DNS’i kullanıyor
Yakın zamanda kablosuz bağlantının neden/ne zaman koptuğunu görmek için adb debug çıktısını izledim; sonunda canlılık kontrolü sırasında bir şeyi göremez veya yorumlayamazsa hücresel veriyi açıp deniyor
Yalnızca içeride bulunan DNS kayıtlarını kullanırken telefonda rastgele çalışmaması özellikle sinir bozucu. Cihaz, söz konusu kaydı barındıran dahili DNS sunucusunu sağlayan Wi‑Fi’a bağlı olsa da Android bir nedenle dışarıdan çözümleme yapıyor
Apple’ın nasıl olduğunu bilmiyorum ama temelde kendi “privacy” VPN’leri üzerinden DNS’i bile DoH ile proxy’lemeye çalıştıklarına bakınca, rakip sayılabilecek bir şey kullanırken daha iyi olacağını hayal etmek zor; Apple’ın bu tür ürünlere nasıl davrandığını da biliyoruz
Gerçek bir örnek için şu sistem geneli reklam engelleyiciye bakılabilir: https://myxxdev.github.io/depictions/MYbloXXforiOS/MYbloXXfo...
Yaşadığım tek sorun, düzgün çalışan bir kablosuz AP’ye bağlı olmasına rağmen cihazın internet yok göstermesiydi. Aslında çalışıyordu; ancak durum çubuğu simgesi ve diğer dahili sistem kodu amaçları için internetin çalışıp çalışmadığını Google sunucularıyla kontrol ediyor gibiydi
Gizliliğe önem veriyorsanız Android’den uzak durmak iyi olur; muhtemelen genel olarak teknolojide de dikkatli olmak gerekir
Birkaç yıl önce bir proje için çeşitli VPN yapılandırmalarını test ederken, bilgisayar ile ana yönlendirici arasına bir MikroTik güvenlik duvarı cihazı koyardım. Amaç yalnızca PC’nin bağlanmaya çalıştığı VPN sunucusu IP adresi hedef olmayan tüm trafiği engellemekti
Bu yöntem, PC’den VPN sunucusuna giden yolun dışına trafik sızmamasını garanti etmekte çok iyi çalıştı. Kullandığınız VPN sunucusunun IP adresi neredeyse hiç değişmez; değişse bile MikroTik güvenlik duvarında değiştirmek kolaydır
Sunucu IP’sini bilmiyorsanız veya değişiyorsa, VPN sunucusunun kullandığı port/protokol çiftinden başka tüm trafiği engellemek de mümkün. Örneğin VPN türüne bağlı olarak hedefi UDP 1194 olmayan trafiği düşürmek gibi
MikroTik yönlendiricilerde trafiği hızlı ve kolayca görmeyi sağlayan torch adlı küçük bir araç da var ve paket yakalamayı da destekliyor. Fiyatları 30 dolardan 3000 dolara kadar değişiyor; yazılım lisansı yok ve kullanmayı biliyorsanız çok güçlü ve yetenekli
Kesin konuşmak gerekirse gerçek bir slug, IP adresi tanımlanmamış şeffaf bir katman 2 güvenlik duvarıdır; ama burada bu ayrıntıya takılmaya gerek yok
https://john.kozubik.com/pub/NetworkSlug/tip.html
Kaynak/hedef adresi ve portuna göre çıkış yönlü filtreleme, güvenlik duvarlarının temel kavramı ve tüm güvenlik duvarı-yönlendirme platformlarında standart yapılandırmadır. Ağ geçidine göre filtreleme yapan ilke tabanlı yönlendirme de aynı bağlamdadır: https://en.wikipedia.org/wiki/Policy-based_routing
Genel olarak varsayılan olarak tüm çıkış trafiğine izin verenler yalnızca tüketici ya da yarı profesyonel ürünlerdir. Bu yapılandırmada “ana yönlendirici”nin ne olduğunu merak ediyorum. ISS’nin sağladığı ekipman mıydı?
Telefon uygulamaları ile modem arasına bir güvenlik duvarı yerleştirebilsek iyi olurdu
Android’deki DNS sorunu, bu platformda kendi IPv6 DNS sunucunuzu ayarlayamamanızda. Wi‑Fi’da bir şey değiştiği her seferinde değişip gidiyor
Root’lu Android’de bile işletim sisteminin bunu değiştirmesini engelleyen bir uygulama yok
Sürekli IPv6 adresi dağıtan ve bunu kapatmanıza izin vermeyen bir yönlendirici kullanıyorsanız, fiilen engellenmiş oluyorsunuz
O yönlendiricinin arkasına bir güvenlik duvarı cihazı kurup yönlendiricinin duyurduğu IPv6 DNS sunucusunu kaldırmak mümkün mü, onu da bilmiyorum
DNS isteklerinin sızmasını önemsiyorsanız zaten DoT ya da DoH kullanmanız gerekir
Wi‑Fi tethering’de de aynı şey oluyor mu merak ediyorum. Telefonun Wi‑Fi’ı üzerinden bağlanan bir dizüstünde VPN kullanırsanız aynı şekilde sızar mı?
En güvenli yapılandırma, telefonun mobil verisini kapatıp VPN’i telefonun üst tarafında işleyen bir OpenWRT hotspot taşımak gibi görünüyor
“Her zaman açık VPN” yalnızca Apple’ın onayladığı bir kuruluşun MDM çözümüyle “supervised” durumdaki cihazlarda ayarlanabiliyor. Belgelenmiş bir başvuru ve mevcut bir çalışanla telefon görüşmesi gerekiyor
Ya da Mac’te Apple Configurator uygulamasını kullanarak “always-on VPN” anahtarını içeren bir yapılandırma profili oluşturmanız gerekiyor
Bildirimler de sık sık gecikiyordu
Kendi ağım değilse mobil yönlendirici olmadan doğrudan bağlanmamak daha iyi
The Grugq 10 yıl önce bu amaçla bir araç yapmıştı. Ne yazık ki artık bakımı yapılmıyor: https://github.com/grugq/portal
Hacker’lar için operasyon güvenliği sunumunun bir parçasıydı; ünlü ya da kötü şöhretli birçok hacker’ın güvende olduklarını düşündükleri hâlde sonunda yakalandığı örneklerle ilgileniyorsanız izlemeye değer: https://www.youtube.com/watch?v=9XaYdCdwiWU
root erişimi olmayan sistemler tanım gereği güvenli değildir. Android ve iOS gülünç durumda
Bilgisayar olarak yalnızca çoğunlukla medya tüketimi ve özel veri toplama için tasarlanmış cihazlarla büyümüş ya da büyüyecek çocuklara üzülüyorum
https://en.wikipedia.org/wiki/PinePhone_Pro
Böyle bir cihazdaki SSH özel anahtarımın bir kopyasını alabilirseniz, sorgusuz sualsiz nakit 100 bin dolar veririm
Bu tanım anlamsız; akıl yürütme ya da iletişim için de işe yaramıyor
“VPN olmadan bağlantıyı engelle” seçeneğinin, açık büfedeki özdenetimim kadar güvenilmez olduğu ortaya çıkıyor. Yanılmıyorsam bu tür DNS sızıntıları, ziyaret edilen siteleri ve konumu bile epey açığa çıkarabildiği için VPN’in amacını baştan çökertiyor
Android, VPN açık olsa bile DNS bilgisini sızdırabildiğinden, gizliliğe gerçekten hassassanız Android kullanmanın ötesini düşünmek ya da hassas işleri telefondan çıkarmak daha iyi
Bazen bu tür “hata”ların kasıtlı olarak iyi yerleştirilmiş olup olmadığından şüpheleniyorum. Özellikle büyük teknoloji şirketlerinin çeşitli istihbarat kurumlarıyla işbirliği yapmış olduğu gerçeği varken
Android’de bu tür bir hatayı ilk kez duymuyorum; bu kadar çok hatanın “istemeden” girdiğine artık inanmak zor
Eskiden beri bunun böyle olabileceğinden bir ölçüde şüpheleniyordum. Android’de VPN’i açsanız bile MMS ve Visual Voicemail hâlâ çalışıyor
İkisi de doğrudan mobil erişim gerektirebiliyor ya da aksi hâlde reddedilebiliyor. Yalnızca mobil ağdayken çalışabiliyor veya istek mobil ağın içinden gelmiyorsa reddedilebiliyor. VoLTE’nin de aynı şekilde olduğunu sanıyorum. VPN varken bu işlevler karışabilir
Mobile Linux’ta VPN’i açınca bu işlevlerin hepsinin bozulmasından bunu anlıyorsunuz
Android’de beklenen birçok işlevi bozmadan bunu düzeltmenin açık bir yolu yok gibi görünüyor
VPN açıkken iOS’ta AT&T’nin ileri destek ekibiyle VVS sorunu yüzünden uğraşmış biri olarak, bu sorunun yalnızca Android’le sınırlı olmadığını doğrulayabilirim
Farklı bearer’lar farklı önceliklere/QCI’ye, yani hizmet kalitesine sahip olabilir. Yoğun bir LTE ağında VoLTE’nin, daha düşük öncelikli bir bearer üzerindeki VOIP’e göre daha iyi bir deneyim sunması gerekir