- Pada sebagian kombinasi aplikasi dan status di Android, kueri DNS dapat keluar dari terowongan VPN, dan Mullvad menilai penyebabnya adalah bug Android OS, bukan aplikasi VPN
- Kebocoran dapat terjadi pada fase transisi singkat seperti saat VPN aktif tetapi server DNS kosong, konfigurasi ulang terowongan, atau aplikasi VPN dihentikan paksa/terjadi crash
- Dampaknya terutama terkonsentrasi pada aplikasi yang memanggil
getaddrinfosecara langsung, sementara kebocoran tidak ditemukan pada aplikasi yang hanya memakai API Android DnsResolver - Mengaktifkan Always-on VPN dan “Block connections without VPN” pun tidak sepenuhnya mencegah masalah ini, dan telah dikonfirmasi di beberapa versi termasuk Android 14
- Mullvad sementara akan menetapkan server DNS palsu untuk meredakan sebagian situasi, tetapi kebocoran saat penyambungan ulang sulit diblokir sepenuhnya tanpa perbaikan OS
Kondisi kebocoran DNS yang terjadi di Android
- Mullvad mengonfirmasi melalui laporan pengguna Reddit pada 22 April bahwa kebocoran DNS dapat terjadi saat VPN dimatikan lalu dinyalakan kembali dalam kondisi “Block connections without VPN” aktif
- Dalam investigasi internal, ditemukan lebih banyak skenario ketika Android OS dapat mengirim lalu lintas DNS ke luar VPN
- VPN aktif tetapi server DNS tidak dikonfigurasi
- Saat aplikasi VPN mengonfigurasi ulang terowongan
- Dalam waktu singkat ketika aplikasi VPN dihentikan paksa atau crash
- Perilaku ini bukan perilaku yang diharapkan dari Android OS, dan harus diperbaiki di level OS yang lebih tinggi
Aplikasi yang terdampak dan jalur resolusi nama
- Kebocoran tampaknya terjadi pada aplikasi yang secara langsung memanggil fungsi C
getaddrinfountuk resolusi nama domain - Kebocoran tidak ditemukan pada aplikasi yang hanya menggunakan API Android DnsResolver
- Browser Chrome adalah contoh aplikasi yang dapat menggunakan
getaddrinfosecara langsung- Lokasi kode Chromium terkait juga tersedia secara publik
- Penggunaan
getaddrinfoitu sendiri bukanlah hal yang salah, dan untuk melindungi semua pengguna Android diperlukan solusi di tingkat OS
Batasan Always-on VPN dan pengaturan pemblokiran
- Kebocoran yang telah dikonfirmasi terjadi terlepas dari apakah Always-on VPN dan “Block connections without VPN” diaktifkan atau tidak
- Jika “Block connections without VPN” aktif, seharusnya tidak ada lalu lintas selain lalu lintas WireGuard terenkripsi yang keluar dari perangkat, tetapi dalam proses reproduksi, DNS teks biasa teramati di router
- Mullvad menilai pengaturan ini tidak memenuhi nama maupun perilaku yang didokumentasikan, dan memiliki beberapa kelemahan
- Dalam kondisi di atas, lalu lintas DNS dapat bocor
- Seperti yang sebelumnya dilaporkan, lalu lintas pemeriksaan koneksi juga masih bocor
Mitigasi sementara aplikasi Mullvad dan masalah yang tersisa
- Aplikasi Mullvad saat ini tidak menetapkan server DNS dalam status terblokir
- Jika penyiapan terowongan gagal dengan cara yang tidak dapat dipulihkan, aplikasi masuk ke status terblokir
- Dalam status ini, lalu lintas dicegah keluar dari perangkat, tetapi karena server DNS kosong, kondisi kebocoran dapat muncul
- Untuk sementara, Mullvad akan merespons dengan menetapkan server DNS palsu guna mengakali bug OS, dan berencana segera menyediakan rilis yang menyertakan perbaikan ini
- Kebocoran yang terjadi saat penyambungan ulang terowongan lebih sulit dimitigasi dari sisi aplikasi
- Mullvad sedang mencari solusi
- Ada kemungkinan untuk mengurangi jumlah konfigurasi ulang terowongan, tetapi untuk saat ini mereka tidak menilai kebocoran ini dapat dicegah sepenuhnya
- Mullvad melaporkan masalah dan usulan perbaikan kepada Google
Observasi yang direproduksi dengan WireGuard dan Chrome
- Skenario kedua, yaitu kebocoran saat perubahan konfigurasi terowongan VPN, dapat direproduksi menggunakan aplikasi WireGuard dan Chrome
- WireGuard digunakan sebagai contoh acuan implementasi VPN Android
- Mullvad menilai kemungkinan ini juga dapat direproduksi pada aplikasi VPN Android lain
- Chrome digunakan sebagai pemicu kebocoran karena telah dikonfirmasi menggunakan
getaddrinfo
- Prosedur reproduksi mencakup elemen berikut
- Mengunduh spam_get_requests.html
- Memasang aplikasi WireGuard dan Chrome
- Mengimpor wg1.conf, wg2.conf ke WireGuard
- Mengaktifkan terowongan wg1 di WireGuard dan mengizinkan izin VPN
- Mengaktifkan Always-on VPN dan “Block connections without VPN” untuk WireGuard di pengaturan VPN Android
- Memulai capture di router dengan
tcpdump -i <INTERFACE> host <IP of android device> - Membuka WireGuard dan Chrome dalam split screen, menjalankan
spam_get_requests.htmldi Chrome, lalu bergantian beralih antara wg1 dan wg2 di WireGuard
- Di router, teramati kueri record A dari perangkat Android ke port 53 router OpenWrt serta respons NXDomain
- Kebocoran DNS dapat digunakan untuk mengetahui perkiraan lokasi pengguna atau situs web/layanan yang dikunjungi, sehingga dapat memiliki dampak privasi yang besar
- Bergantung pada threat model, untuk penggunaan sensitif mungkin perlu menghindari Android atau menerapkan mitigasi lain untuk mencegah kebocoran
- Pengguna aplikasi Mullvad harus menjaga aplikasi tetap terbaru karena mitigasi parsial mungkin disertakan
1 komentar
Opini Hacker News
Saya tidak memakai Mullvad, tetapi jadi sangat menghormatinya. Penjelasannya tentang masalah, solusi sementara jangka pendek, solusi potensial yang bisa dipakai orang lain, hingga bagian yang perlu diperbaiki di Android sangat padat informasi dan tersusun rapi
Kekurangannya, dalam kasus saya waktu ping-nya jauh lebih tinggi daripada quad9 atau cloudflare
Saya menuliskan cara pemblokiran iklan di tingkat DNS dan informasi terkait cloudflare di thread ini: https://news.ycombinator.com/item?id=40056162
Masalah pembayaran diselesaikan dengan cepat, dan untuk iptables pun saya mendapat jawaban terperinci yang mencakup kelebihan dan kekurangan beberapa solusi. Singkatnya, luar biasa
Saya pengembang rethinkdns
Terkait pernyataan “masalah-masalah ini harus diselesaikan di OS untuk melindungi semua pengguna Android, apa pun aplikasi yang mereka gunakan”, jaringan paranoid Android selalu memberi pengecualian untuk aplikasi sistem dan aplikasi OEM, termasuk aplikasi Google
Kemungkinan besar sebagian besar perbaikan bug seperti ini pun tidak akan mengubah asumsi inti tersebut. Lihat kode terkait: https://github.com/celzero/rethink-app/issues/224
Untuk bagian “kebocoran saat penyambungan ulang tunnel lebih sulit dimitigasi di aplikasi. Kami masih mencari solusi”, Android mendukung peralihan mulus antara dua perangkat TUN saat konfigurasi ulang. Sulit diimplementasikan dengan benar, tetapi memungkinkan
Ini masalah yang sudah lama ada di Android. Meski ingin hanya menggunakan server DNS internal, Android akan beralih ke seluler dan memakai DNS itu jika merasa perlu atau menginginkannya
Baru-baru ini saya mengamati debug adb untuk melihat mengapa/kapan koneksi nirkabel terputus, dan pada akhirnya jika Android tidak melihat atau tidak bisa menafsirkan sesuatu dalam proses pengecekan konektivitas, ia menyalakan data seluler lalu mencobanya
Ini sangat menyebalkan saat memakai catatan DNS yang hanya ada secara internal, karena ponsel bekerja secara acak. Perangkat terhubung ke Wi-Fi yang menyediakan server DNS internal berisi catatan tersebut, tetapi karena suatu alasan Android menyelesaikannya dari luar
Saya tidak tahu bagaimana Apple melakukannya, tetapi melihat bahwa mereka pada dasarnya mencoba mem-proxy DNS melalui DoH lewat VPN “privacy” mereka, sulit membayangkan kondisinya lebih baik saat memakai sesuatu yang bisa dianggap produk pesaing, dan kita juga tahu bagaimana Apple memperlakukan produk seperti itu
Contoh nyatanya bisa dilihat pada pemblokir iklan seluruh sistem ini: https://myxxdev.github.io/depictions/MYbloXXforiOS/MYbloXXfo...
Satu-satunya masalah yang saya alami adalah perangkat menampilkan bahwa tidak ada internet meski terhubung ke AP nirkabel yang berfungsi normal. Sebenarnya koneksinya berjalan, tetapi tampaknya untuk ikon status bar dan tujuan kode sistem internal lainnya, Android mengecek apakah internet berfungsi lewat server Google
Kalau Anda mengutamakan privasi, sebaiknya jauhi Android, dan mungkin teknologi secara umum juga perlu diwaspadai
Beberapa tahun lalu saat menguji beberapa konfigurasi VPN untuk sebuah proyek, saya biasa menaruh perangkat firewall MikroTik di antara komputer dan router utama. Tujuannya hanya memblokir semua traffic yang tujuannya bukan alamat IP server VPN yang ingin dihubungi PC
Cara ini bekerja sangat baik untuk memastikan traffic tidak bocor keluar dari jalur PC ke server VPN. Alamat IP server VPN yang digunakan hampir tidak pernah berubah, dan kalau berubah pun mudah diganti di firewall MikroTik
Jika tidak tahu IP servernya atau IP itu berubah, ada juga cara memblokir semua traffic yang bukan pasangan port/protokol yang dipakai server VPN. Misalnya, tergantung jenis VPN, membuang traffic yang tujuannya bukan UDP 1194
Router MikroTik juga punya alat kecil bernama torch untuk melihat traffic dengan cepat dan mudah, serta mendukung packet capture. Harganya bervariasi dari 30 dolar hingga 3000 dolar, tidak ada lisensi perangkat lunak, dan jika Anda tahu cara menggunakannya, perangkat ini sangat kuat dan mumpuni
Secara ketat, slug sejati adalah firewall layer 2 transparan tanpa alamat IP yang didefinisikan, tetapi tidak perlu memperdebatkan detail itu di sini
https://john.kozubik.com/pub/NetworkSlug/tip.html
Pemfilteran keluar berdasarkan alamat serta port sumber/tujuan adalah konsep dasar firewall dan konfigurasi standar di semua platform firewall-routing. Policy-based routing yang memfilter berdasarkan gateway juga berada dalam konteks yang sama: https://en.wikipedia.org/wiki/Policy-based_routing
Umumnya, hanya produk konsumen atau semi-profesional yang secara default mengizinkan semua trafik keluar. Dalam konfigurasi ini, saya penasaran apa yang dimaksud dengan “router utama”. Apakah perangkat yang disediakan ISP?
Akan menyenangkan kalau kita juga bisa menyisipkan firewall di antara aplikasi ponsel dan modem
Masalah DNS di Android adalah platform ini tidak memungkinkan kita menetapkan server DNS IPv6 sendiri. Setiap kali ada perubahan pada Wi-Fi, pengaturannya berubah lagi
Bahkan di Android yang sudah di-root, tidak ada aplikasi yang bisa mencegah sistem operasi mengubahnya
Kalau Anda memakai router yang selalu mendistribusikan alamat IPv6 dan dibuat tidak bisa dimatikan, praktis Anda akan mentok
Saya juga tidak tahu apakah bisa memasang perangkat firewall di belakang router itu untuk menghapus server DNS IPv6 yang diiklankan router
Kalau Anda peduli soal kebocoran permintaan DNS, bagaimanapun Anda memang harus memakai DoT atau DoH
Saya penasaran apakah hal yang sama terjadi pada tethering Wi-Fi. Jika memakai VPN di laptop yang terhubung melalui Wi-Fi ponsel, apakah bocornya juga dengan cara yang sama?
Konfigurasi paling aman tampaknya adalah mematikan data seluler di ponsel dan membawa hotspot OpenWRT yang menangani VPN di hulu ponsel
“VPN yang selalu aktif” hanya bisa diatur pada perangkat berstatus “supervised” melalui solusi MDM dari organisasi yang disetujui Apple. Perlu pengajuan terdokumentasi dan panggilan telepon dengan karyawan saat ini
Atau, hanya dengan memakai aplikasi Apple Configurator di Mac, Anda bisa membuat profil konfigurasi yang berisi kunci “always-on VPN”
Notifikasi juga sering tertunda
Kalau bukan jaringan saya sendiri, sebaiknya jangan tersambung langsung tanpa router seluler
The Grugq membuat alat untuk tujuan seperti ini 10 tahun lalu. Sayangnya sekarang tidak lagi dipelihara: https://github.com/grugq/portal
Itu bagian dari presentasi keamanan operasional untuk peretas, dan layak ditonton jika Anda tertarik pada kasus beberapa peretas terkenal atau tersohor buruk yang mengira diri mereka aman tetapi akhirnya tertangkap: https://www.youtube.com/watch?v=9XaYdCdwiWU
Sistem tanpa akses root secara definisi tidak aman. Android dan iOS itu menggelikan
Saya merasa kasihan pada anak-anak yang tumbuh, atau akan tumbuh, dengan satu-satunya komputer yang mereka miliki berupa perangkat yang terutama dirancang untuk konsumsi media dan pengumpulan data pribadi
https://en.wikipedia.org/wiki/PinePhone_Pro
Kalau Anda bisa mengambil salinan kunci privat SSH saya dari perangkat semacam itu, saya akan memberi uang tunai 100 ribu dolar tanpa banyak tanya
Definisi itu tidak bermakna, dan tidak berguna untuk penalaran maupun komunikasi
“Blokir koneksi tanpa VPN” ternyata sama tidak dapat dipercayanya seperti kemampuan saya menahan diri di prasmanan. Kalau saya tidak salah, kebocoran DNS semacam ini bisa cukup banyak mengungkap situs yang dikunjungi dan bahkan lokasi, sehingga menggagalkan tujuan VPN itu sendiri
Android bisa membocorkan informasi DNS meski VPN aktif, jadi jika Anda benar-benar sensitif soal privasi, lebih baik berpikir melampaui penggunaan Android itu sendiri atau memindahkan aktivitas sensitif dari ponsel
Kadang saya curiga “bug” seperti ini bukan tidak sengaja ditempatkan dengan rapi. Apalagi mengingat perusahaan teknologi besar memang pernah bekerja sama dengan berbagai badan intelijen
Ini juga bukan pertama kalinya saya mendengar bug semacam ini di Android, jadi saya semakin sulit percaya bahwa sebanyak ini bug masuk “tanpa sengaja”
Sejak dulu saya sudah agak curiga hal ini akan terjadi. Di Android, meski VPN aktif, MMS dan Visual Voicemail tetap berfungsi
Keduanya kadang membutuhkan akses seluler langsung atau akan ditolak. Bisa saja hanya tersedia di jaringan seluler, atau ditolak jika permintaan tidak berasal dari dalam jaringan seluler. Saya menduga VoLTE juga sama. Jika ada VPN, fitur-fitur seperti ini bisa kacau
Di Mobile Linux, hal ini ketahuan karena semua fitur tersebut rusak ketika VPN diaktifkan
Tidak terlihat ada cara yang jelas untuk memperbaiki ini di Android tanpa merusak banyak fungsi yang diharapkan
Saya pernah bergulat dengan tim dukungan lanjutan AT&T soal masalah VVS di iOS dengan VPN aktif, jadi bisa dipastikan bahwa masalah ini tidak terbatas pada Android saja
Bearer yang berbeda dapat memiliki prioritas/QCI yang berbeda, yakni kualitas layanan. Pada jaringan LTE yang padat, VoLTE seharusnya memberikan pengalaman yang lebih baik dibanding VOIP pada bearer berprioritas rendah