- Little Snitch 6.1’de DNS şifrelemesi bazı durumlarda başarısız olabiliyordu; ancak bunun macOS genelinde bir sorun değil, ilgili sürüme özgü bir sorun olduğu netleşti ve 6.1.1’de düzeltildi
- Doğru çalışması için macOS’in DNS isteklerinin Little Snitch’in DNS proxy’sine iletilmesi, proxy’nin de şifreli sorguyu gerçekleştirmesi gerekiyor
- İnceleme sırasında bazı düşük seviyeli eski API isteklerinin proxy’ye ulaşmadan sistemin varsayılan ad sunucusuna şifrelenmemiş UDP 53 sorguları gönderdiği gözlemlendi
- Yeniden üretme yöntemi: Little Snitch’te DNS şifrelemesini açıp Wireshark’ı
port 53filtresiyle çalıştırdıktan sonra Xcode playground’dagetaddrinfo("dnsproxytest.com")çağırmak - Safari ve Chrome gibi yüksek seviyeli API tabanlı sorgular başlangıçta etkilenmemiş gibi görünüyordu; Firefox’un etkilendiği düşünülüyordu, ancak nihai kapsam Little Snitch 6.1’in DNS proxy’si olarak belirlendi
Little Snitch 6.1’de yaşanan DNS şifreleme başarısızlığı
- Little Snitch 6’nın DNS şifreleme özelliği, ana makine adı sorgularını Little Snitch’e yönlendirerek bunları şifreli biçimde işler
- Bunun için Little Snitch bir DNS proxy kaydeder ve macOS’in tüm DNS isteklerini bu proxy’ye göndermesi gerekir
- Bazı DNS isteklerinin, özellikle belirli düşük seviyeli eski API’ler üzerinden yapılanların proxy’ye ulaşmadığı keşfedildi
- Bu istekler sistemin varsayılan ad sunucusuna şifrelenmemiş biçimde gönderilebiliyordu ve Wireshark’ta UDP port 53 trafiği olarak görülebiliyordu
- Little Snitch Network Monitor’da bu sorgu trafiği görünmüyordu; çünkü sorgu ağ filtresini tamamen atlıyordu
Yeniden üretme adımları ve güncellemelerin seyri
-
Yeniden üretme adımları
- Little Snitch ayarlarında DNS encryption etkinleştirilir
- Wireshark
port 53yakalama filtresiyle çalıştırılır - Xcode playground’da
getaddrinfoilednsproxytest.comsorgusu çalıştırılır dnsproxytest.comsorgusu UDP 53 üzerinde şifrelenmemiş biçimde görünebilir
-
İlk etki kapsamı
- Yüksek seviyeli API üzerinden yapılan DNS sorgularının etkilenmediği görülüyordu
- Safari ve Chrome’da web gezintisinin şifreli sorguların avantajını koruduğu görülüyordu
- Firefox’un etkilendiği görülüyordu
-
Güncelleme geçmişi
- 2024-09-17 19:10: Bu sorunun macOS 14.5 Sonoma’dan beri mevcut olabileceği doğrulandı; daha eski 14.x sistemler test edilemedi
- 2024-09-18 12:05: Sorunun macOS’in genel DNS proxy sorunu olmadığı, yalnızca Little Snitch 6.1’in DNS proxy’sini etkilediği netleşti
- 2024-09-18 15:52: Sorun Little Snitch 6.1.1’de düzeltildi
2 yorum
Hacker News yorumları
getaddrinfo()’nun “düşük seviyeli eski API” olarak ele alınması biraz tuhaf geliyor
macOS’te durum çok farklı olabilir, ama Linux ve muhtemelen *BSD’de ad çözümleme için kullanılan standart yöntem bu
macOS uygulamalarının çoğu DNS sorguları için Foundation ya da NetworkKit türü framework’leri kullanıyordur, ama bunların içinin sonunda getaddrinfo() gibi çağrılara inip işlemediği de şaşırtıcı
GAI bloklayıcı olduğu için muhtemelen başka bir düşük seviyeli asenkron çağrı vardır
getaddrinfo_asyncgibi bir varyant kullandığını hatırlıyorumAncak Apple, son kullanıcıların IP’yi getaddrinfo ya da CF’nin sunduğu asenkron varyantlarla doğrudan çözüp sonra o IP’ye
connect()yapmasını istemiyorGenel olarak ana makine adıyla bağlanmaya yönlendiriliyorsunuz; böylece Apple içeride happy-eyeballs uygulamasını halledebiliyor
Apple’ın getaddrinfo() modelini neden tercih etmediğini https://www.ietf.org/proceedings/72/slides/plenaryw-6.pdf adresinde görebilirsiniz. Her slaydın altında konuşmacı notları da var
“Düşük seviyeli” olup olmadığı bakış açısına göre değişir
İnsanlar glibc’nin Linux kullanıcı alanında standart yöntem olduğunu varsayıyor, ama böyle olmak zorunda değil
Örneğin systemd kendi resolved mekanizmasını yaptı ve glibc tarafındakinden çok daha iyi olduğu ortaya çıktı
Ben de Linux’u hedefleyen bağımsız yazılımlar geliştirdiğim için bir gün benzer bir şeyi kendim yapmam oldukça olası
https://man.openbsd.org/man3/asr_run.3
https://github.com/openbsd/src/tree/master/lib/libc/asr
*BSD’ler arasında da farklar var
Bazı sistemlerde bir fonksiyon çağrısı yıllarca korunup “doğru yol” olabilirken, başka sistemlerde gerçekten eskimiş ve kullanışsız olabilir
Burada ele alınan sorunun macOS genelinde bir sorun değil, yalnızca Little Snitch 6.1 için geçerli olduğu ortaya çıktı ve bugün ilerleyen saatlerde bir Little Snitch güncellemesiyle düzeltilmesi bekleniyor
Ek inceleme sonucunda bu hatanın en az macOS 14.5 Sonoma’dan beri zaten var olduğu anlaşıldı
Belki daha da eskiden beri vardı, ama şu anda test edilebilecek daha eski bir 14.x sisteme erişimleri olmadığı söyleniyor
Yoksa CFNetwork’te bir kez çalıştığını görüp bırakmışlar, sonra da bozuldu diye blog yazısı mı yayımlamışlar, emin değilim
Apple’ın downgrade’e izin verememesinin teknik bir nedeni neredeyse yok
Sequoia, macOS güvenlik duvarı açıkken ve bir uygulama “gelen bağlantıları engelle” olarak kayıtlıysa, o uygulamanın DNS kullanma yeteneğini, muhtemelen UDP tabanlı işlevlerin genelini de bozuyor
https://waclaw.blog/macos-firewall-blocking-web-browsing-aft...
VPN’i kapatınca hepsi geçiyor
Bununla ilgili mi merak ediyorum. macOS güvenlik duvarı açık, ama tüm gelen bağlantılar engelli değil
Wi‑Fi bağlantısının DNS ayarlarına girip Google DNS sunucuları olan 8.8.8.8 ve 8.8.4.4’ü ekleyince düzeldi; daha önce otomatik girilmiş DNS sunucularının yerini aldı
Uygulamaların bunu yapmasının nedeni, kullanıcıların telemetri gibi şeyleri engelleyememesini sağlamak
Bu benim bilgisayarım; dışarı neyin çıkacağı konusunda son karar bende olmalı
Başlık bunun kasıtlı olduğu ya da Apple’a ayrıcalıklı biçimde uygulandığı izlenimini veriyor, ama gerçekte daha çok sıradan bir hata gibi görünüyor
Böyle bir şeyi bildirdiklerini söylerken FB numarasını ve bildirim ayrıntılarını da paylaşmaları iyi olurdu
Hedefe ulaşıldığı sürece uygulama yöntemi son derece esnek olabilir
Bazı cihazlar reklam engellemeyi aşmak için zaten bu yöntemi kullanmaya başladı
Yanılıyor olabilirim ama iOS ya da Mac’in her yeni sürümünde DNS sorunları çıkıp Little Snitch, Mullvad gibi şeyleri etkiliyormuş gibi bir déjà vu var
Doğruysa Apple’ın aylar süren geliştirici ve beta testleri boyunca ne yaptığını gerçekten merak ediyorum
Little Snitch’ten söz edilmesi kafamı karıştırmıştı; biraz daha okuyunca bunun yalnızca belirli durumlarda çalışan bir LS hatası gibi göründüğünü fark ettim
Bu LS bloguysa, tek sorum bunun neden macOS hatası gibi anlatıldığı
Yanlış olduklarını söylemiyorum; bu onların alanı, benim değil, ama metin tek başına bunu pek haklı çıkarmıyor gibi
Apple’ın üçüncü taraf geliştiriciler için belirli bir ağ APIsinin kullanımını kullanımdan kaldırdığını hatırlıyorum
Ama Apple’ın kendi uygulamaları, örneğin App Store, aynı sınırlamaya tabi değil
Bu yüzden yeni API ile bir uygulama güvenlik duvarı üzerinden ağ trafiğini filtrelemeye çalışınca, App Store eski API’yi kullandığı için başarısız oluyordu
Bu, eskiden düzeltildiğini sandığım eski bir hatanın parçası olabilir
“Yeni OS sürümünde hata bulundu! Düzeltme: Aslında epey uzun süredir var olan bir hataymış!” türü duyurular her zaman eğlenceli oluyor
Yerel stub çözümleyici olarak routedns [0] kullanıp hangi isteklerin nereye gönderileceğini ve hangi aktarım yönteminin kullanılacağını kendim seçiyorum
Engelleme listeleri, yeniden yazma, önbellek, yük dengeleme ve alternatif istek işleme de mümkün olduğundan epey kontrol sağlıyor
Yerel istekler için localhost:53 üzerindeki stub listener’ı kullanıyorum; isteklerin çoğunu da önbellekle birlikte UDP QUIC, yani TLS 0-RTT üzerinden Cloudflare 1.1.1.1’e iletiyorum
Hızlı ve oldukça güvenli
[0] https://github.com/folbricht/routedns
Önemli bilgi için teşekkürler.
En azından Safari ve Chrome’un güvende olabileceği söyleniyor, bu da sevindirici.