Bagian ini berisi rekomendasi untuk memastikan keamanan aplikasi di perangkat Android.
Tinjauan kode sumber
Tinjauan kode sumber dapat mendeteksi berbagai masalah keamanan, termasuk yang diidentifikasi dalam dokumen ini. Android sangat menganjurkan tinjauan kode sumber manual dan otomatis.
- Ikuti panduan keamanan komprehensif saat melakukan tinjauan untuk memastikan cakupan. Gunakan standar internal atau eksternal yang relevan untuk memastikan tinjauan yang konsisten dan lengkap.
- Jalankan linter, seperti linter Android Studio , pada semua kode aplikasi menggunakan Android SDK dan perbaiki masalah yang teridentifikasi.
- Analisis kode asli menggunakan alat otomatis yang dapat mendeteksi masalah manajemen memori, seperti buffer overflows dan kesalahan satu per satu.
- Sistem build Android mendukung banyak pembersih LLVM, seperti AddressSanitizer dan UndefinedBehaviorSanitizer , yang dapat digunakan untuk analisis runtime dari masalah terkait memori. Dikombinasikan dengan fuzzing, didukung di Android melalui libFuzzer , pembersih dapat mengungkap kasus tepi yang tidak biasa yang memerlukan penyelidikan lebih lanjut.
- Penilai keamanan yang berpengetahuan luas harus meninjau kode risiko yang lebih tinggi, seperti kripto, pemrosesan pembayaran, dan pemrosesan PII.
Pengujian otomatis
Pengujian otomatis dapat membantu mendeteksi berbagai masalah keamanan dan harus dilakukan secara teratur.
- Jalankan versi terbaru CTS secara teratur selama proses pengembangan untuk mendeteksi masalah lebih awal dan mengurangi waktu untuk koreksi. Android menggunakan CTS sebagai bagian dari integrasi berkelanjutan dalam proses pembuatan otomatis kami, yang dibuat beberapa kali per hari.
- Mengotomatiskan pengujian keamanan antarmuka, termasuk pengujian dengan input yang salah format (pengujian fuzz). Sistem build Android mendukung libFuzzer untuk menulis tes fuzz.
Pemindaian kerentanan
Pemindaian kerentanan dapat membantu memastikan bahwa aplikasi pra-instal bebas dari kerentanan keamanan yang diketahui. Deteksi tingkat lanjut dapat mengurangi waktu dan biaya yang diperlukan untuk mengatasi kerentanan ini dan mencegah risiko bagi pengguna dan perangkat.
- Pindai semua aplikasi pra-instal menggunakan alat pemindaian kerentanan aplikasi yang diakui industri dan atasi kerentanan yang terdeteksi.
Aplikasi yang Berpotensi Berbahaya
Penting untuk memastikan bahwa aplikasi pra-instal di perangkat Anda bukan Aplikasi yang Berpotensi Membahayakan (PHA). Anda bertanggung jawab atas perilaku semua aplikasi yang disertakan di perangkat Anda. Sebelum peluncuran perangkat, pindai semua aplikasi yang dimuat sebelumnya untuk mengetahui kerentanannya.
Untuk informasi selengkapnya tentang PHA dan cara Google memeranginya di Play Store, lihat dokumentasi pengembang Google Play Protect .
Instalasi dan izin aplikasi
Izin yang berlebihan untuk aplikasi pra-instal dapat menimbulkan risiko keamanan. Batasi aplikasi pra-instal ke izin minimum yang diperlukan dan pastikan mereka tidak memiliki akses ke izin atau hak istimewa yang tidak perlu. Izin aplikasi dijelaskan di AndroidManifest.xml .
- Jangan berikan izin atau hak istimewa yang tidak perlu ke aplikasi yang sudah diinstal sebelumnya. Tinjau aplikasi dengan hak istimewa sistem secara menyeluruh karena mungkin memiliki izin yang sangat sensitif.
- Pastikan bahwa semua izin yang diminta relevan dan diperlukan untuk fungsionalitas aplikasi tertentu tersebut.
- Pastikan ada pengungkapan pengguna untuk semua aplikasi pra-instal yang menggunakan izin
INSTALL_PACKAGES
. - Pastikan pengembang secara kontrak diwajibkan untuk tidak memasang aplikasi apa pun sebagai UID 0.
- Evaluasi izin yang dinyatakan dalam manifes semua aplikasi yang akan dipasang melalui jaringan pengembang.
- Pastikan pengembang diwajibkan secara kontrak untuk memindai semua URL unduhan aplikasi pembaru otomatis dan penginstal dengan Google Safe Browsing API sebelum menyajikan aplikasi ke perangkat.
Penandatanganan aplikasi
Tanda tangan aplikasi memainkan peran penting dalam keamanan perangkat dan digunakan untuk pemeriksaan izin dan pembaruan perangkat lunak. Saat memilih kunci yang akan digunakan untuk menandatangani aplikasi, penting untuk mempertimbangkan apakah aplikasi hanya akan tersedia di satu perangkat atau umum di beberapa perangkat.
- Pastikan aplikasi tidak ditandatangani dengan kunci yang diketahui publik, seperti kunci pengembang AOSP.
- Pastikan bahwa kunci yang digunakan untuk menandatangani aplikasi dikelola dengan cara yang konsisten dengan praktik standar industri untuk menangani kunci sensitif, termasuk modul keamanan perangkat keras (HSM) yang menyediakan akses terbatas yang dapat diaudit.
- Pastikan aplikasi tidak ditandatangani dengan kunci platform. Melakukannya memberikan akses aplikasi ke izin tanda tangan platform, yang sangat kuat dan hanya dimaksudkan untuk digunakan oleh komponen sistem operasi. Aplikasi sistem harus menggunakan izin istimewa.
- Pastikan aplikasi dengan nama paket yang sama tidak ditandatangani dengan kunci yang berbeda. Ini sering terjadi saat membuat aplikasi untuk perangkat yang berbeda, terutama saat menggunakan kunci platform. Jika aplikasi tidak bergantung pada perangkat, gunakan kunci yang sama di seluruh perangkat. Jika aplikasi khusus perangkat, buat nama paket unik per perangkat dan kunci.
Mengisolasi aplikasi dan proses
Model sandboxing Android memberikan keamanan ekstra di sekitar aplikasi dan proses bila digunakan dengan benar.
Mengisolasi proses root
Proses root adalah target serangan eskalasi hak istimewa yang paling sering; mengurangi jumlah proses root mengurangi risiko eskalasi hak istimewa.
- Pastikan perangkat menjalankan kode minimum yang diperlukan sebagai root. Jika memungkinkan, gunakan proses Android biasa daripada proses root. Jika suatu proses harus dijalankan sebagai root pada perangkat, dokumentasikan proses tersebut dalam permintaan fitur AOSP sehingga dapat ditinjau secara publik.
- Jika memungkinkan, kode root harus diisolasi dari data yang tidak dipercaya dan diakses melalui komunikasi antarproses (IPC). Misalnya, kurangi fungsionalitas root ke Layanan kecil yang dapat diakses melalui Binder dan paparkan Layanan dengan izin tanda tangan ke aplikasi dengan hak istimewa rendah atau tanpa hak istimewa untuk menangani lalu lintas jaringan.
- Proses root tidak boleh mendengarkan pada soket jaringan.
- Proses root tidak boleh menyertakan runtime tujuan umum, seperti Java VM).
Mengisolasi aplikasi sistem
Secara umum, aplikasi pra-instal tidak boleh berjalan dengan pengenal unik sistem (UID) bersama. Jika aplikasi perlu menggunakan UID bersama dari sistem atau layanan istimewa lainnya (misalnya, telepon), aplikasi tidak boleh mengekspor layanan, penerima siaran, atau penyedia konten apa pun yang dapat diakses oleh aplikasi pihak ketiga yang diinstal oleh pengguna .
- Pastikan perangkat menjalankan kode minimum yang diperlukan sebagai sistem. Jika memungkinkan, gunakan proses Android dengan UID-nya sendiri daripada menggunakan kembali UID sistem.
- Jika memungkinkan, kode sistem harus diisolasi dari data yang tidak tepercaya dan hanya mengekspos IPC ke proses tepercaya lainnya.
- Proses sistem tidak boleh mendengarkan pada soket jaringan. Ini adalah persyaratan CTS.
Proses isolasi
Android Application Sandbox menyediakan aplikasi dengan harapan isolasi dari proses lain pada sistem, termasuk proses root dan debugger. Kecuali debugging secara khusus diaktifkan oleh aplikasi dan pengguna, tidak ada aplikasi yang boleh melanggar harapan itu.
- Pastikan proses root tidak mengakses data dalam folder data aplikasi individual, kecuali jika menggunakan metode debug Android yang terdokumentasi.
- Pastikan proses root tidak mengakses memori aplikasi, kecuali menggunakan metode debug Android yang terdokumentasi.
- Pastikan perangkat tidak menyertakan aplikasi apa pun yang mengakses data atau memori aplikasi atau proses lain.