Dua perkara yang sangat berbeza dipanggil menyekat teks jelas pada Android. Satu ialah dasar dalam aplikasi yang mengarahkan tindanan rangkaiannya sendiri menolak HTTP biasa. Satu lagi ialah susunan peringkat peranti yang cuba melindungi segala-galanya pada telefon sekali gus, biasanya dengan menyalurkan trafik melalui VPN. Kedua-duanya menyelesaikan masalah berbeza, dan yang kedua tidak boleh membaiki yang pertama: terowong melindungi segmen antara telefon dan pintu keluar, manakala aplikasi yang bercakap HTTP terus bercakap HTTP dengan apa sahaja di sebalik pintu keluar itu.

Dua masalah di bawah satu nama

Masalah pertama ialah muatan: aplikasi menulis kelayakan atau token ke dalam permintaan yang tidak disulitkan hujung ke hujung, jadi setiap hop yang boleh melihatnya boleh membacanya. Yang kedua ialah laluan: aplikasi mungkin sempurna, dan anda masih mahu pengendali Wi-Fi setempat tidak mengetahui apa-apa tentang ke mana ia bersambung. VPN menangani yang kedua dan hanya yang kedua.

Perbezaan itu menentukan pemilik pembaikan. Muatan milik sesiapa yang menghantar aplikasi, kerana hanya kod itu yang menentukan URL mana dipanggil dan sama ada sijil disahkan. Laluan milik peranti atau rangkaian, kerana ia tentang ke mana paket bergerak, bukan apa yang dikandungnya.

Laluan satu: aplikasi yang anda kawal

Jika anda menghantar aplikasi, pembaikannya ialah keputusan pengangkutan serta dasar yang menguatkuasakannya. Halakan setiap titik akhir ke HTTPS, biarkan pengesahan nama hos dan sijil dihidupkan, dan hapuskan sandaran HTTP biasa daripada membiarkannya satu bendera konfigurasi jauhnya. Ubah hala tidak membantu di sini: permintaan HTTP yang menerima 301 sudah menghantar pengepala dan badannya secara terbuka, jadi kelayakan tidak boleh sekali-kali bergerak dengan andaian bahawa ubah hala akan melindunginya.

Pada Android 7.0 dan selepasnya, Network Security Configuration menyatakan dasar itu. Fail di bawah ialah versi berguna terkecil: ia menolak teks jelas di mana-mana kecuali pengecualian khusus domain menyatakan sebaliknya.

<network-security-config>
    <base-config cleartextTrafficPermitted="false" />
</network-security-config>

Rujuk sumber itu daripada manifes, kemudian baca pengecualian yang sudah wujud sebelum menghantar. Domain nyahpepijat lama atau entri SDK penyedia pembayaran boleh membenarkan semula teks jelas secara senyap untuk hos yang anda cuba lindungi.

Dua butiran versi wajar diketahui. Aplikasi yang menyasarkan API 28 atau lebih baharu sudah menolak teks jelas secara lalai, jadi aplikasi yang masih bercakap HTTP biasa sama ada menyasarkan tahap API lebih lama atau mempunyai pengecualian di suatu tempat. Dan apabila konfigurasi keselamatan rangkaian hadir, atribut manifes lama android:usesCleartextTraffic tidak lagi menentukan persoalan itu, sebab itulah menukar bendera tersebut kadangkala kelihatan tidak melakukan apa-apa.

Laluan dua: aplikasi yang anda tidak kawal

Bagi aplikasi pihak ketiga yang dipasang, anda tidak boleh menulis semula konfigurasi keselamatannya melalui tetapan pengguna. Pilihan realistik ialah kawalan sambungan selamat produk itu sendiri, alternatif yang diselenggara yang sudah menggunakan TLS, atau dasar peranti terurus yang mengehadkan apa yang boleh dijalankan oleh peranti. Itu komitmen berbeza, dan hanya yang ketiga berskala kepada seluruh armada.

Peraturan rangkaian ialah pengganti yang lebih lemah daripada kelihatan. Membenarkan hanya port 443 tidak menguatkuasakan TLS yang disahkan, kerana banyak protokol teks jelas boleh dipindahkan ke port itu, dan menyekat port 80 tidak meliputi teks jelas pada port lain. Mod hanya-HTTPS pelayar juga terhad kepada pelayar itu, bukan kepada aplikasi mel atau sembang berasingan pada telefon yang sama.

Memasang sijil pintasan supaya trafik kelihatan disulitkan ialah perubahan kepercayaan, bukan pembaikan. Ia menggantikan pengesahan pelayan aplikasi dengan pengesahan anda, dan aplikasi yang tidak mengesahkan sijil sejak awal tidak dibaiki olehnya; anda hanya memindahkan siapa yang boleh membaca aliran itu.

Di mana VPN membantu dan di mana tidak

Terowong ialah alat yang betul apabila keperluannya ialah rangkaian setempat tidak mengetahui apa-apa tentang sambungan, atau aplikasi mencapai perkhidmatan peribadi yang tidak dapat dicapai sebaliknya. Ia alat yang salah untuk membuat klien HTTP bercakap HTTPS, kerana permintaan meninggalkan terowong tepat seperti ia masuk.

Android menambah kekangan praktikal: platform menjalankan satu perkhidmatan VPN pada satu masa. Aplikasi penapisan setempat yang mengambil tempat itu bersaing dengan terowong jauh yang benar-benar anda perlukan, dan bertukar antara keduanya ialah operasi peringkat peranti, bukan peringkat aplikasi. Satu tempat itu menjadi sebab baik untuk meletakkan dasar muatan dalam aplikasi dan menyimpan terowong untuk laluan.

Satu-satunya kes apabila kedua-duanya bertindih ialah pelayan peribadi yang anda juga kendalikan. Di sana terowong boleh menjadikan laluan peribadi walaupun protokolnya masih teks jelas, yang mengurangkan pendedahan tetapi tidak mengubah apa muatannya. Anggap itu sebagai pengurangan risiko, bukan penyulitan data.

Apa yang perlu diuji sebelum menyebutnya disekat

Mulakan dengan lalai yang mengejutkan orang: aplikasi yang menyasarkan API 28 atau lebih baharu sepatutnya sudah menolak teks jelas, jadi periksa tahap sasaran sebelum menambah konfigurasi yang menduplikasi lalai. Kemudian uji kes kegagalan dengan sengaja: permintaan ke hos HTTP biasa mesti gagal, bukan berjaya secara senyap melalui sandaran.

adb shell dumpsys package com.example.app | grep -E 'targetSdk|versionName'
adb logcat | grep -i cleartext

Bagi kes kejayaan, sahkan bahawa panggilan HTTPS mengesahkan rantaian sijil sebenar dan proksi dengan sijil tidak dipercayai ditolak, bukan ditoleransi. Jabat tangan yang berjaya terhadap mana-mana sijil tidak membuktikan apa-apa tentang keselamatan pengangkutan.

Bagi aplikasi pihak ketiga, catatkan had yang benar-benar boleh anda kuatkuasakan, sama ada dasar peranti terurus, peraturan rangkaian atau tiada, dan nyatakan itu dalam kriteria penerimaan. panduan konfigurasi keselamatan Android menyenaraikan lalai platform dan komponen mana yang mematuhi dasar itu, dan bahagian itulah yang menentukan sama ada konfigurasi anda melakukan apa-apa pun.

Artikel berkaitan