Mengapa aplikasi Android yang disekat masih menunjukkan penggunaan rangkaian
Pembilang penggunaan mengukur bait pada satu sempadan, bukan permintaan yang berjaya. Semak tetingkap masa, atribusi UID dan aplikasi mana yang memiliki perkhidmatan VPN.
Anda menyekat aplikasi dalam firewall VPN Android anda, aplikasi berhenti berfungsi, dan baris penggunaannya terus meningkat. Kesimpulan yang menggoda ialah sekatan itu bocor, atau pembilangnya rosak. Tiada satu pun yang menyusul. Rekod penggunaan menyatakan bait telah diatribusikan kepada identiti itu pada satu titik pemerhatian; ia tidak menyatakan sama ada perkhidmatan jauh menerima permintaan. Sebaik anda tahu sempadan mana yang diukur dan identiti mana yang dicaj, kedua-dua pemerhatian berhenti bercanggah.
Pembilang mengukur bait, bukan penghantaran
Android mengatribusikan trafik kepada UID dan mengiranya dalam kedua-dua arah, dan ia berbuat demikian pada sempadan antara muka, bukan pada saat permintaan aplikasi berjaya.
Percubaan sambungan yang ditolak tetap menggerakkan paket: SYN, set semula atau penghantaran semula yang menyusul, serta pertanyaan DNS yang mendahului kedua-duanya. Bait itu wujud walaupun tiada apa yang dihantar, dan pada beberapa laluan ia dikira sebelum mana-mana penapis memutuskan apa yang perlu dilakukan.
Itulah sebabnya baris aplikasi yang disekat boleh meningkat walaupun setiap permintaan gagal. Pembilang menjawab «berapa banyak bait yang diatribusikan kepada identiti ini», bukan «adakah identiti ini sampai ke internet». Graf tidak dapat membezakan aliran yang diterima daripada jabat tangan yang ditolak dengan sopan, dan jumlah yang mencampurkan kedua-dua arah juga tidak dapat.
Atribusi mengikut UID, bukan ikon
Baris itu adalah per UID, dan satu UID boleh dikongsi oleh lebih daripada satu pakej, manakala aplikasi yang kelihatan boleh menyerahkan kerja kepada komponen berasingan yang berjalan di bawah identitinya sendiri. Tab pelayar yang dilukis oleh proses WebView kongsi, perkhidmatan penyegerakan latar belakang, atau pakej pendamping yang dipasang bersama aplikasi utama semuanya menghasilkan trafik yang mungkin dipaparkan oleh skrin penggunaan di bawah nama yang anda tidak jangkakan, atau di bawah aplikasi yang anda sekat. Pakej yang disekat dan pembantu yang membawa permintaannya ialah dua subjek berbeza, dan peraturan itu hanya meliputi salah satunya.
Apabila nombor kelihatan salah, bandingkan UID dan bukan label. API penggunaan ditanya mengikut UID, dan adb shell dumpsys package <package> | grep userId= mencetak nombor untuk dibandingkan, jadi dua entri dengan UID yang sama ialah identiti yang sama dari sudut pandangan pembilang.
Tetingkap masa mungkin mendahului peraturan anda
Data penggunaan dikumpulkan dalam baldi dan ditanya secara berkala, bukan distrim langsung. Jumlah harian boleh merangkumi minit sebelum anda mengaktifkan sekatan, penyegerakan latar belakang dari jam sebelumnya, atau trafik yang sudah dalam perjalanan. Membandingkan jumlah kumulatif dengan satu permintaan yang ditolak dan menyebut perbezaannya sebagai kebocoran ialah kesilapan pengukuran, bukan penemuan firewall.
Gunakan tetingkap yang lebih pendek dan permulaan yang bersih. Catat cap masa apabila anda menukar peraturan, tunggu satu selang pengumpulan, kemudian lihat hanya data selepasnya. Jika jumlah terus meningkat dalam tetingkap yang bermula selepas peraturan, ada sesuatu untuk disiasat; jika ia berhenti meningkat, pertumbuhan sebelumnya ialah sejarah yang dipaparkan.
Perkhidmatan VPN mungkin bukan yang anda konfigurasikan
Firewall VPN hanya melihat trafik yang dibawa oleh perkhidmatannya sendiri. Jika aplikasi VPN lain bermula dan mengambil sambungan aktif, penapis anda tidak lagi berada di laluan manakala antara mukanya masih wujud dalam tetapan. Senarai pintas per aplikasi melakukan perkara yang sama dengan sengaja, dan profil yang mengecualikan aplikasi bukan kebocoran apabila aplikasi itu kemudian berfungsi.
IPv4, IPv6 dan DNS juga boleh menyimpang. Penapis yang mengendalikan IPv4 mungkin membiarkan IPv6 atau penyelesai DNS peribadi di luarnya, sehingga sebahagian trafik aplikasi mengikut laluan yang tidak pernah dijelaskan oleh peraturan anda. Semak aplikasi mana yang kini memiliki VPN dan apa yang dikatakan senarai pengecualian sebelum menulis semula apa-apa:
adb shell settings get secure always_on_vpn_app
adb shell dumpsys connectivity
adb shell dumpsys netstats detail
Uji satu permintaan baharu dan catat empat fakta
Pilih permintaan yang tidak berbahaya, lakukan sekali, dan catat empat fakta: peraturan yang berkuat kuasa, UID aplikasi, keadaan rangkaian dan masa. Kemudian semak sama ada penapis anda mencatat aliran itu, dan sama ada destinasi atau gateway melihat sambungan yang sama. Satu aliran yang dikenal pasti di kedua-dua belah ialah bukti; jumlah agregat bukan.
Kesimpulan yang boleh dipertahankan menamakan apa yang ditolak dan pemerhatian mana yang mengesahkannya. «Pembilang meningkat» bukan penemuan, dan «semua pembilang penggunaan palsu» juga bukan. Slogan lapisan OSI tidak menyelesaikan ini: jawapan jujurnya ialah pembilang dan sekatan boleh kedua-duanya betul sambil menerangkan perkara yang berbeza. Rujukan NetworkStatsManager Android mendokumenkan cara baldi itu ditanya dan diatribusikan.