Aturan firewall SSID berhenti menyaring setelah pergantian Wi-Fi
Firewall yang bergantung pada SSID gagal terbuka saat Android mengembalikan nama jaringan tak dikenal. Pisahkan identitas dari penegakan dan beri keadaan tak dikenal kebijakannya sendiri.
Aturannya sederhana: saring lalu lintas hanya selama ponsel terhubung ke Wi-Fi kantor. Aturan itu bertahan berbulan-bulan, lalu suatu pagi ponsel berada di SSID yang sama dengan ikon kunci yang sama dan penyaringan telah berhenti. Tidak ada yang berubah pada jaringan; yang berubah adalah apakah aplikasi dapat melihat nama jaringan. Di Android, «Wi-Fi mana yang saya pakai» dan «blokir lalu lintas ini» adalah dua pekerjaan terpisah, dan firewall yang mencampuradukkannya gagal terbuka tepat ketika nama itu tidak tersedia.
Gejalanya: identitas hilang, kebijakan mengikuti
Aturan SSID membaca sebuah nilai lalu memilih cabang. Ketika pembacaan tidak mengembalikan apa pun yang berguna, kode harus melakukan sesuatu, dan default yang umum adalah «bukan jaringan yang diharapkan, jadi jangan saring». Default itu mengubah masalah izin menjadi kebocoran lalu lintas. Ikon kunci tetap terlihat karena layanan VPN masih berjalan; ia hanya menegakkan cabang lain.
Lihat urutan kejadian, bukan jaringannya. Dialog izin yang ditolak, pembaruan sistem yang memindahkan akses SSID ke balik izin lain, layanan lokasi yang dimatikan, atau perubahan kebijakan profil kerja semuanya dapat menghasilkan hasil yang sama sementara ponsel tetap di titik akses yang sama.
Mengapa nama bisa kembali tak dikenal
WifiInfo.getSSID() mengembalikan pengenal kumpulan layanan jaringan saat ini, dan Android mendokumentasikan bahwa akses ke bidang yang sensitif lokasi bergantung pada izin. Ketika akses tidak tersedia, panggilan mengembalikan UNKNOWN_SSID alih-alih gagal dengan berisik. Jadi nilai kosong atau tak dikenal bukan bukti ponsel meninggalkan Wi-Fi; itu bukti aplikasi tidak dapat mengklasifikasikan jaringan.
Dua pemeriksaan memisahkan kasusnya. Pastikan ponsel terasosiasi dan lihat apa yang dilaporkan sistem, lalu pastikan aplikasi benar-benar memegang izin yang dibutuhkannya pada rilis Android ini:
adb shell cmd wifi status
adb shell dumpsys package <your.app> | grep -i -E "ACCESS_FINE_LOCATION|NEARBY_WIFI_DEVICES"
Jika baris status menunjukkan jaringan tersambung sementara aplikasi melihat nama tak dikenal, Anda punya masalah izin atau tingkat API, bukan masalah Wi-Fi. Perbaiki itu sebelum menyentuh aturan firewall, karena setiap aturan di hilir dievaluasi terhadap nilai yang tidak dapat dibaca aplikasi.
Di mana penyaringan sebenarnya berjalan
Firewall Android lokal biasanya memakai model VpnService tanpa mengirim lalu lintas ke server jauh: ia mengambil antarmuka virtual, menerapkan aturannya sendiri, dan meneruskan apa yang diizinkannya. Platform mengizinkan satu layanan VPN aktif per profil pengguna, dan yang kedua menggantikan yang pertama alih-alih bertumpuk di atasnya. Jadi aplikasi firewall terpisah dan VPN kerja terpisah tidak membentuk rantai dua tahap; salah satunya menang.
Itu penting bagi aturan SSID karena titik penegakan dan titik pengamatan adalah komponen berbeda. VpnService memutuskan apa yang keluar dari perangkat; API Wi-Fi hanya memasok label. Aplikasi dapat menegakkan dengan benar dan mengklasifikasikan dengan salah, dan itulah tepatnya kegagalan dalam artikel ini.
Beri keadaan tak dikenal kebijakannya sendiri
Perlakukan identitas jaringan sebagai tiga keadaan, dan tuliskan kebijakan untuk masing-masing sebelum merilis aturan. Keadaan ketiga adalah yang terlupakan, dan di situlah penyerang atau kesalahan konfigurasi akan menempatkan Anda.
| Observation | Policy to specify |
|---|---|
| Expected SSID is readable | The explicit filtering policy you designed |
| A different SSID is readable | The default policy for untrusted networks |
| Unknown, changing or unreadable | Fail closed until classification is reliable |
Gagal tertutup berarti keadaan tak dikenal mewarisi kebijakan paling ketat yang masuk akal, bukan yang paling nyaman. Jika itu membuat ponsel tidak dapat dipakai di jaringan baru, perbaikan yang benar adalah pengecualian yang disengaja dan terlihat, bukan keputusan kepercayaan senyap yang tersembunyi dalam pemeriksaan nilai kosong.
SSID yang familier adalah label, bukan bukti operator jaringan. Siapa pun dapat menjalankan titik akses dengan nama kantor, jadi kecocokan nama tidak boleh menjadi satu-satunya hal yang berdiri antara sesi sensitif dan segmen tak tepercaya.
Uji transisinya, bukan keadaan tunaknya
Pengujian pada keadaan tunak lolos di jaringan tempat Anda membangun aturan. Kegagalan hidup di transisi: izin ditolak, Wi-Fi ke seluler, satu SSID ke SSID lain, layanan VPN dimulai ulang, dan aplikasi VPN lain mengambil alih antarmuka. Untuk masing-masing, putuskan apakah koneksi yang ada ditinjau ulang dan apakah lalu lintas terlindungi tetap diblokir selama keadaan tak dikenal.
Tulis hasilnya dalam tiga kalimat: kondisi yang diamati, komponen yang menegakkan keputusan, dan cadangan yang disengaja. Jika salah satu dari ketiganya hilang, aturan itu belum menjadi kebijakan; itu tebakan yang kebetulan bekerja di jaringan kantor.