Bagian ini berisi rekomendasi untuk memastikan keamanan aplikasi di perangkat Android.
Peninjauan kode sumber
Peninjauan kode sumber dapat mendeteksi berbagai masalah keamanan, termasuk masalah yang diidentifikasi dalam dokumen ini. Android sangat mendorong peninjauan kode sumber manual dan otomatis.
- Ikuti panduan keamanan yang komprehensif saat melakukan peninjauan untuk memastikan cakupan. Gunakan standar internal atau eksternal yang relevan untuk memastikan peninjauan yang konsisten dan lengkap.
- Jalankan lint, seperti lint Android Studio, di semua kode aplikasi menggunakan Android SDK dan perbaiki masalah yang teridentifikasi.
- Analisis kode native menggunakan alat otomatis yang dapat mendeteksi masalah pengelolaan memori, seperti buffer overflow dan error off-by-one.
- Sistem build Android mendukung banyak sanitizer LLVM, seperti AddressSanitizer dan UndefinedBehaviorSanitizer, yang dapat digunakan untuk analisis runtime masalah terkait memori. Dikombinasikan dengan fuzzing, yang didukung di Android melalui libFuzzer, sanitizer dapat mengungkap kasus ekstrem yang tidak biasa yang memerlukan investigasi lebih lanjut.
- Penilai keamanan yang berpengetahuan harus meninjau kode berisiko lebih tinggi, seperti kripto, pemrosesan pembayaran, dan pemrosesan PII.
Pengujian otomatis
Pengujian otomatis dapat membantu mendeteksi berbagai masalah keamanan dan harus dilakukan secara rutin.
- Jalankan CTS versi terbaru secara rutin selama proses pengembangan untuk mendeteksi masalah lebih awal dan mengurangi waktu untuk koreksi. Android menggunakan CTS sebagai bagian dari continuous integration dalam proses build otomatis kami, yang melakukan build beberapa kali per hari.
- Mengotomatiskan pengujian keamanan antarmuka, termasuk pengujian dengan input yang salah format (pengujian kerentanan keamanan). Sistem build Android mendukung libFuzzer untuk menulis pengujian fuzz.
Pemindaian kerentanan
Pemindaian kerentanan dapat membantu memastikan bahwa aplikasi bawaan bebas dari kerentanan keamanan yang diketahui. Deteksi lanjutan dapat mengurangi waktu dan biaya yang diperlukan untuk mengatasi kerentanan ini dan mencegah risiko bagi pengguna dan perangkat.
- Pindai semua aplikasi bawaan menggunakan alat pemindaian kerentanan aplikasi yang diakui industri dan tangani kerentanan yang terdeteksi.
Aplikasi yang Mungkin Berbahaya
Anda harus memastikan bahwa aplikasi yang sudah diinstal sebelumnya 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 bawaan untuk menemukan kerentanan.
Untuk informasi selengkapnya tentang PHA dan cara Google memeranginya di Play Store, lihat dokumentasi developer Google Play Protect.
Penginstalan dan izin aplikasi
Izin yang berlebihan untuk aplikasi bawaan dapat menimbulkan risiko keamanan. Batasi aplikasi bawaan ke izin minimum yang diperlukan dan pastikan aplikasi tersebut tidak memiliki akses ke izin atau hak istimewa yang tidak diperlukan. Izin aplikasi dijelaskan dalam AndroidManifest.xml.
- Jangan berikan izin atau hak istimewa yang tidak diperlukan ke aplikasi bawaan. Tinjau aplikasi dengan hak istimewa sistem secara menyeluruh karena aplikasi tersebut dapat memiliki izin yang sangat sensitif.
- Pastikan semua izin yang diminta relevan dan diperlukan untuk fungsi aplikasi tertentu tersebut.
- Pastikan ada pengungkapan pengguna untuk semua aplikasi bawaan yang menggunakan
izin
INSTALL_PACKAGES
. - Pastikan developer terikat kontrak untuk tidak menginstal aplikasi apa pun sebagai UID 0.
- Evaluasi izin yang dideklarasikan dalam manifes semua aplikasi yang akan diinstal melalui jaringan developer.
- Pastikan developer secara kontrak diwajibkan untuk memindai semua URL download aplikasi penginstal dan update otomatis dengan Google Safe Browsing API sebelum menayangkan aplikasi ke perangkat.
Penandatanganan aplikasi
Tanda tangan aplikasi berperan penting dalam keamanan perangkat dan digunakan untuk pemeriksaan izin dan update software. Saat memilih kunci yang akan digunakan untuk menandatangani aplikasi, penting untuk mempertimbangkan apakah aplikasi hanya tersedia di satu perangkat atau umum di beberapa perangkat.
- Pastikan aplikasi tidak ditandatangani dengan kunci yang diketahui secara publik, seperti kunci developer AOSP.
- Pastikan kunci yang digunakan untuk menandatangani aplikasi dikelola dengan cara yang konsisten dengan praktik standar industri untuk menangani kunci sensitif, termasuk hardware security module (HSM) yang memberikan akses terbatas dan dapat diaudit.
- Pastikan aplikasi tidak ditandatangani dengan kunci platform. Tindakan ini akan memberi aplikasi akses ke izin tanda tangan platform, yang sangat canggih dan hanya dimaksudkan untuk digunakan oleh komponen sistem operasi. Aplikasi sistem harus menggunakan izin dengan hak istimewa.
- Pastikan aplikasi dengan nama paket yang sama tidak ditandatangani dengan kunci yang berbeda. Hal 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 jika digunakan dengan benar.
Mengisolasi proses root
Proses root adalah target serangan eskalasi hak istimewa yang paling sering terjadi; mengurangi jumlah proses root akan mengurangi risiko eskalasi hak istimewa.
- Pastikan perangkat menjalankan kode minimum yang diperlukan sebagai root. Jika memungkinkan, gunakan proses Android reguler, bukan proses root. Jika proses harus berjalan sebagai root di perangkat, dokumentasikan proses tersebut dalam permintaan fitur AOSP agar dapat ditinjau secara publik.
- Jika memungkinkan, kode root harus diisolasi dari data yang tidak tepercaya dan diakses melalui komunikasi antarproses (IPC). Misalnya, kurangi fungsi root menjadi layanan kecil yang dapat diakses melalui Binder dan tampilkan layanan dengan izin tanda tangan ke aplikasi dengan hak istimewa rendah atau tidak ada untuk menangani traffic jaringan.
- Proses root tidak boleh memproses soket jaringan.
- Proses root tidak boleh menyertakan runtime tujuan umum, seperti VM Java.
Mengisolasi aplikasi sistem
Secara umum, aplikasi yang diprainstal tidak boleh berjalan dengan ID unik sistem bersama (UID). Jika aplikasi perlu menggunakan UID bersama sistem atau layanan dengan hak istimewa lainnya (misalnya, ponsel), 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, bukan menggunakan kembali UID sistem.
- Jika memungkinkan, kode sistem harus diisolasi dari data yang tidak tepercaya dan mengekspos IPC hanya ke proses tepercaya lainnya.
- Proses sistem tidak boleh memproses soket jaringan. Ini adalah persyaratan CTS.
Mengisolasi proses
Sandbox Aplikasi Android memberi aplikasi ekspektasi isolasi dari proses lain di sistem, termasuk proses root dan debugger. Kecuali jika proses debug diaktifkan secara khusus oleh aplikasi dan pengguna, tidak ada aplikasi yang boleh melanggar ekspektasi tersebut.
- Pastikan proses root tidak mengakses data dalam setiap folder data aplikasi, kecuali jika menggunakan metode proses debug Android yang terdokumentasi.
- Pastikan proses root tidak mengakses memori aplikasi, kecuali jika menggunakan metode proses debug Android yang terdokumentasi.
- Pastikan perangkat tidak menyertakan aplikasi apa pun yang mengakses data atau memori aplikasi atau proses lain.