Peraturan firewall SSID berhenti menapis selepas pertukaran Wi-Fi
Firewall yang bergantung pada SSID gagal terbuka apabila Android memulangkan nama rangkaian yang tidak dikenali. Pisahkan identiti daripada penguatkuasaan dan beri keadaan tidak dikenali polisinya sendiri.
Peraturannya mudah: tapis trafik hanya semasa telefon bersambung ke Wi-Fi pejabat. Ia bertahan berbulan-bulan, kemudian suatu pagi telefon berada pada SSID yang sama dengan ikon kunci yang sama dan penapisan telah berhenti. Tiada apa yang berubah pada rangkaian; yang berubah ialah sama ada aplikasi dapat melihat nama rangkaian. Dalam Android, «Wi-Fi mana saya berada» dan «sekat trafik ini» ialah dua kerja berasingan, dan firewall yang mencampurkan keduanya gagal terbuka tepat apabila nama itu tidak tersedia.
Gejalanya: identiti hilang, polisi mengikut
Peraturan SSID membaca nilai lalu memilih cabang. Apabila pembacaan tidak memulangkan apa-apa yang berguna, kod mesti melakukan sesuatu, dan lalai yang biasa ialah «bukan rangkaian yang dijangka, jadi jangan tapis». Lalai itu menjadikan masalah kebenaran sebagai kebocoran trafik. Ikon kunci kekal kelihatan kerana perkhidmatan VPN masih berjalan; ia hanya menguatkuasakan cabang lain.
Lihat urutan peristiwa, bukan rangkaian. Dialog kebenaran yang ditolak, kemas kini sistem yang memindahkan akses SSID di belakang kebenaran lain, perkhidmatan lokasi dimatikan, atau perubahan polisi profil kerja semuanya boleh menghasilkan hasil yang sama sementara telefon kekal pada titik akses yang sama.
Mengapa nama boleh kembali tidak dikenali
WifiInfo.getSSID() memulangkan pengecam set perkhidmatan rangkaian semasa, dan Android mendokumenkan bahawa akses kepada medan sensitif lokasi bergantung pada kebenaran. Apabila akses tidak tersedia, panggilan memulangkan UNKNOWN_SSID dan bukannya gagal dengan kuat. Jadi nilai kosong atau tidak dikenali bukan bukti telefon meninggalkan Wi-Fi; ia bukti aplikasi tidak dapat mengelaskan rangkaian.
Dua semakan memisahkan kes-kes itu. Pastikan telefon bersambung dan lihat apa yang dilaporkan sistem, kemudian pastikan aplikasi benar-benar memegang kebenaran yang diperlukannya pada keluaran 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 rangkaian bersambung sementara aplikasi melihat nama tidak dikenali, anda mempunyai masalah kebenaran atau tahap API, bukan masalah Wi-Fi. Betulkan itu sebelum menyentuh peraturan firewall, kerana setiap peraturan hiliran dinilai terhadap nilai yang tidak dapat dibaca oleh aplikasi.
Di mana penapisan sebenarnya berjalan
Firewall Android tempatan biasanya menggunakan model VpnService tanpa menghantar trafik ke pelayan jauh: ia mengambil antara muka maya, menggunakan peraturannya sendiri dan memajukan apa yang dibenarkannya. Platform membenarkan satu perkhidmatan VPN aktif bagi setiap profil pengguna, dan yang kedua menggantikan yang pertama dan bukannya bertindan di atasnya. Jadi aplikasi firewall berasingan dan VPN kerja berasingan tidak membentuk rantaian dua peringkat; salah satu daripadanya menang.
Itu penting untuk peraturan SSID kerana titik penguatkuasaan dan titik pemerhatian ialah komponen yang berbeza. VpnService memutuskan apa yang keluar dari peranti; API Wi-Fi hanya membekalkan label. Aplikasi boleh menguatkuasakan dengan betul dan mengelaskan dengan salah, dan itulah tepat kegagalan dalam artikel ini.
Beri keadaan tidak dikenali polisinya sendiri
Anggap identiti rangkaian sebagai tiga keadaan, dan tuliskan polisi bagi setiap satu sebelum mengeluarkan peraturan. Keadaan ketiga ialah yang terlupa, dan di situlah penyerang atau salah konfigurasi akan meletakkan 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 bermaksud keadaan tidak dikenali mewarisi polisi paling ketat yang munasabah dan bukannya yang paling mudah. Jika itu menjadikan telefon tidak boleh digunakan pada rangkaian baharu, pembetulan yang betul ialah pengecualian yang disengajakan dan kelihatan, bukan keputusan kepercayaan senyap yang tersembunyi dalam semakan nilai kosong.
SSID yang biasa ialah label, bukan bukti pengendali rangkaian. Sesiapa sahaja boleh menjalankan titik akses dengan nama pejabat, jadi padanan nama tidak sepatutnya menjadi satu-satunya perkara antara sesi sensitif dan segmen tidak dipercayai.
Uji peralihan, bukan keadaan mantap
Ujian dalam keadaan mantap lulus pada rangkaian tempat anda membina peraturan. Kegagalan hidup dalam peralihan: kebenaran ditolak, Wi-Fi ke selular, satu SSID ke SSID lain, perkhidmatan VPN dimulakan semula, dan aplikasi VPN lain mengambil alih antara muka. Bagi setiap satu, tentukan sama ada sambungan sedia ada dinilai semula dan sama ada trafik terlindung kekal disekat semasa keadaan tidak dikenali.
Tulis hasilnya dalam tiga ayat: keadaan yang diperhatikan, komponen yang menguatkuasakan keputusan, dan sandaran yang disengajakan. Jika mana-mana satu daripada tiga itu tiada, peraturan itu belum menjadi polisi; ia tekaan yang kebetulan berfungsi pada rangkaian pejabat.