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.

ObservationPolicy to specify
Expected SSID is readableThe explicit filtering policy you designed
A different SSID is readableThe default policy for untrusted networks
Unknown, changing or unreadableFail 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.

Artikel terkait