- Little Snitch 6.1 dapat gagal melakukan enkripsi DNS dalam beberapa situasi, tetapi masalah ini telah dipersempit bukan sebagai masalah macOS secara umum, melainkan masalah pada versi tersebut, dan telah diperbaiki di 6.1.1
- Agar berfungsi normal, permintaan DNS macOS harus diteruskan ke proxy DNS Little Snitch, lalu proxy tersebut melakukan kueri terenkripsi
- Dalam investigasi, diamati bahwa sebagian permintaan melalui API lama tingkat rendah tidak mencapai proxy dan mengirim kueri UDP 53 yang tidak terenkripsi ke nameserver default sistem
- Cara reproduksinya adalah mengaktifkan enkripsi DNS di Little Snitch, menjalankan Wireshark dengan filter
port 53, lalu memanggilgetaddrinfo("dnsproxytest.com")di Xcode playground - Kueri berbasis API tingkat tinggi seperti Safari dan Chrome awalnya tampak tidak terdampak, sementara Firefox tampak terdampak, tetapi cakupan akhirnya disimpulkan sebagai masalah pada proxy DNS Little Snitch 6.1
Kegagalan enkripsi DNS yang terjadi di Little Snitch 6.1
- Fitur enkripsi DNS di Little Snitch 6 merutekan pencarian hostname ke Little Snitch agar diproses dalam bentuk terenkripsi
- Untuk itu, Little Snitch mendaftarkan proxy DNS, dan macOS seharusnya mengirim semua permintaan DNS ke proxy tersebut
- Ditemukan bahwa sebagian permintaan DNS, terutama permintaan melalui API lama tingkat rendah tertentu, tidak diterima oleh proxy
- Permintaan tersebut dapat dikirim ke nameserver default sistem dalam bentuk tidak terenkripsi, dan di Wireshark dapat dikonfirmasi sebagai trafik UDP port 53
- Trafik kueri tersebut tidak muncul di Little Snitch Network Monitor, karena kueri itu sepenuhnya melewati filter jaringan
Prosedur reproduksi dan perkembangan pembaruan
-
Prosedur reproduksi
- Aktifkan DNS encryption di pengaturan Little Snitch
- Jalankan Wireshark dengan filter tangkapan
port 53 - Jalankan kueri
dnsproxytest.comdengangetaddrinfodi Xcode playground - Kueri
dnsproxytest.comdapat terlihat di UDP 53 dalam bentuk tidak terenkripsi
-
Cakupan dampak awal
- Kueri DNS melalui API tingkat tinggi tampak tidak terdampak
- Penjelajahan web di Safari dan Chrome tampak tetap mendapatkan manfaat dari kueri terenkripsi
- Firefox tampak terdampak
-
Riwayat pembaruan
- 2024-09-17 19:10: Dikonfirmasi bahwa masalah ini mungkin sudah ada sejak macOS 14.5 Sonoma, dan sistem 14.x yang lebih lama tidak dapat diuji
- 2024-09-18 12:05: Masalah ini disimpulkan bukan sebagai masalah proxy DNS umum di macOS, melainkan masalah yang hanya memengaruhi proxy DNS Little Snitch 6.1
- 2024-09-18 15:52: Masalah telah diperbaiki di Little Snitch 6.1.1
2 komentar
Komentar Hacker News
Agak aneh rasanya bahwa getaddrinfo() diperlakukan sebagai “API lama tingkat rendah”
Situasinya mungkin sangat berbeda di macOS, tetapi di Linux dan mungkin *BSD, ini adalah cara standar yang digunakan untuk resolusi nama
Sebagian besar aplikasi macOS mungkin memakai framework semacam Foundation atau NetworkKit untuk kueri DNS, tetapi juga mengejutkan bahwa di dalamnya ternyata tidak berujung diproses lewat pemanggilan seperti getaddrinfo()
Karena GAI bersifat blocking, mungkin ada pemanggilan asinkron tingkat rendah lain
getaddrinfo_asyncNamun Apple tidak ingin pengguna akhir melakukan resolusi IP secara langsung lewat getaddrinfo atau variasi asinkron yang diekspos CF, lalu melakukan
connect()ke IP tersebutSecara umum, mereka mendorong agar koneksi dilakukan berdasarkan hostname, supaya Apple dapat menangani implementasi happy eyeballs secara internal
Mengapa Apple tidak menyukai model getaddrinfo() bisa dilihat di https://www.ietf.org/proceedings/72/slides/plenaryw-6.pdf. Ada juga catatan pembicara di bawah tiap slide
Apakah itu “tingkat rendah” atau tidak tergantung sudut pandang
Orang-orang mengasumsikan glibc sebagai cara standar di userspace Linux, tetapi tidak harus selalu begitu
Misalnya, systemd membuat mekanisme resolved sendiri, dan ternyata jauh lebih baik daripada sisi glibc
Saya juga membuat perangkat lunak standalone yang menargetkan Linux, jadi kemungkinan besar suatu saat saya akan membuat sesuatu yang mirip sendiri
https://man.openbsd.org/man3/asr_run.3
https://github.com/openbsd/src/tree/master/lib/libc/asr
Di antara varian *BSD sendiri juga ada perbedaan
Pada satu sistem, sebuah pemanggilan fungsi bisa dipertahankan selama bertahun-tahun dan menjadi “cara baku”, sedangkan pada sistem lain bisa saja benar-benar usang dan tidak berguna
Masalah yang dibahas di sini ternyata bukan masalah macOS secara umum, melainkan hanya berlaku pada Little Snitch 6.1, dan akan diperbaiki lewat pembaruan Little Snitch nanti hari ini
Dari investigasi tambahan, bug ini sudah ada setidaknya sejak macOS 14.5 Sonoma
Mungkin saja sudah ada sejak lebih lama, tetapi katanya saat ini tidak ada akses ke sistem 14.x yang lebih lama untuk diuji
Atau apakah mereka hanya melihatnya berfungsi sekali di CFNetwork, lalu belakangan menulis blog bahwa itu rusak
Hampir tidak ada alasan teknis yang membuat Apple tidak bisa mengizinkan downgrade
Sequoia, jika firewall macOS aktif dan sebuah aplikasi didaftarkan sebagai “blokir koneksi masuk”, merusak kemampuan aplikasi tersebut untuk memakai DNS, dan mungkin juga fungsi berbasis UDP secara umum
https://waclaw.blog/macos-firewall-blocking-web-browsing-aft...
Jika VPN diputus, semuanya bisa lewat
Saya penasaran apakah ini terkait. Firewall macOS aktif, tetapi tidak memblokir semua koneksi masuk
Masuk ke pengaturan DNS pada koneksi Wi-Fi lalu menambahkan server DNS Google, 8.8.8.8 dan 8.8.4.4, menyelesaikan masalah, dan menggantikan server DNS yang sebelumnya terisi otomatis
Alasan aplikasi melakukan ini adalah agar pengguna tidak bisa memblokir hal-hal seperti telemetri
Ini komputer saya, jadi saya harus punya keputusan akhir atas apa yang keluar darinya
Judulnya mengisyaratkan seolah-olah ini disengaja atau diberlakukan secara istimewa untuk Apple, tetapi sebenarnya tampaknya lebih dekat ke sekadar bug
Kalau melaporkan hal seperti ini, akan lebih baik jika juga menyertakan nomor FB dan detail laporannya
Selama tujuannya tercapai, cara implementasinya bisa sangat fleksibel
Beberapa perangkat sudah mulai memakai cara seperti itu untuk melewati pemblokiran iklan
Mungkin saya keliru, tetapi setiap kali ada rilis baru iOS atau Mac, rasanya seperti déjà vu: muncul masalah DNS yang berdampak pada hal-hal seperti Little Snitch dan Mullvad
Jika benar, saya benar-benar bertanya-tanya apa yang dilakukan Apple selama berbulan-bulan pengujian developer dan beta
Penyebutan Little Snitch sempat membingungkan, tetapi setelah membaca lebih lanjut, ini tampaknya seperti bug LS yang hanya terjadi pada kasus tertentu
Kalau ini blog LS, satu-satunya pertanyaan adalah mengapa ini digambarkan seperti bug macOS
Bukan berarti mereka salah, dan itu memang ranah mereka, bukan ranah saya, tetapi dari isi artikelnya saja pembenarannya tampak kurang kuat
Saya ingat Apple pernah menandai penggunaan API jaringan tertentu oleh developer pihak ketiga sebagai deprecated
Namun aplikasi Apple sendiri, misalnya App Store, tidak terkena pembatasan yang sama
Jadi ketika mencoba memfilter traffic jaringan melalui firewall aplikasi dengan API baru, itu gagal karena App Store memakai API lama
Ini mungkin bagian dari bug lama yang saya kira sudah diperbaiki dulu
Pengumuman seperti “Bug ditemukan di rilis OS baru! Koreksi: ternyata bug itu sudah ada cukup lama!” selalu menghibur
Saya memakai routedns [0] sebagai resolver stub lokal untuk memilih sendiri permintaan mana dikirim ke mana dan memakai metode transport apa
Ia juga bisa menangani daftar blokir, penulisan ulang, cache, load balancing, dan permintaan alternatif, jadi kontrolnya besar
Untuk permintaan lokal, saya memakai listener stub di localhost:53, dan sebagian besar permintaan diteruskan ke Cloudflare 1.1.1.1 lewat UDP QUIC dengan cache, yaitu TLS 0-RTT
Cepat dan cukup aman
[0] https://github.com/folbricht/routedns
Terima kasih atas informasi pentingnya.
Untuk saat ini, syukurlah Safari dan Chrome dikatakan aman.