Bagian ini berisi rekomendasi untuk memastikan keamanan aplikasi di perangkat Android.
Peninjauan kode sumber
Peninjauan kode sumber dapat mendeteksi berbagai masalah keamanan, termasuk yang diidentifikasi dalam dokumen ini. Android sangat menganjurkan 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 linter, seperti linter Android Studio, pada semua kode aplikasi yang menggunakan Android SDK dan perbaiki masalah yang teridentifikasi.
- Menganalisis kode native menggunakan alat otomatis yang dapat mendeteksi masalah pengelolaan memori, seperti buffer overflow dan kesalahan off-by-one.
- Sistem build Android mendukung banyak sanitizer LLVM, seperti AddressSanitizer dan UndefinedBehaviorSanitizer, yang dapat digunakan untuk analisis runtime masalah terkait memori. Jika digabungkan dengan fuzzing, yang didukung di Android melalui libFuzzer, sanitizer dapat mengungkap kasus ekstrem yang tidak biasa yang memerlukan penyelidikan lebih lanjut.
- Penilai keamanan yang berpengetahuan harus meninjau kode yang 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 sejak dini dan mengurangi waktu untuk melakukan 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 bentuk (pengujian kerentanan keamanan). Sistem build Android mendukung libFuzzer untuk menulis pengujian fuzz.
Pemindaian kerentanan
Pemindaian kerentanan dapat membantu memastikan bahwa aplikasi prainstal bebas dari kerentanan keamanan yang diketahui. Deteksi lanjutan dapat mengurangi waktu dan biaya yang diperlukan untuk mengatasi kerentanan ini serta mencegah risiko bagi pengguna dan perangkat.
- Pindai semua aplikasi bawaan menggunakan alat pemindaian kerentanan aplikasi yang diakui industri dan atasi kerentanan yang terdeteksi.
Aplikasi yang Berpotensi Membahayakan
Penting untuk 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 yang sudah dimuat sebelumnya untuk mencari kerentanan.
Untuk mengetahui 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 prainstal dapat menimbulkan risiko keamanan. Batasi aplikasi pra-instal 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 perlu kepada aplikasi yang sudah diinstal. Tinjau secara menyeluruh aplikasi dengan hak istimewa sistem 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 pra-instal yang menggunakan izin
INSTALL_PACKAGES. - Pastikan developer secara kontraktual diwajibkan untuk tidak menginstal aplikasi apa pun sebagai UID 0.
- Mengevaluasi izin yang dideklarasikan dalam manifes semua aplikasi yang akan diinstal melalui jaringan developer.
- Pastikan developer secara kontraktual diwajibkan untuk memindai semua URL download aplikasi pengupdate otomatis dan penginstal dengan Google Safe Browsing API sebelum menayangkan aplikasi ke perangkat.
Penandatanganan aplikasi
Tanda tangan aplikasi memainkan peran 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 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 modul keamanan hardware (HSM) yang memberikan akses terbatas dan dapat diaudit.
- Pastikan aplikasi tidak ditandatangani dengan kunci platform. Dengan melakukannya, aplikasi akan mendapatkan akses ke izin tanda tangan platform, yang sangat canggih dan hanya ditujukan 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. 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 untuk perangkat tertentu, buat nama paket dan kunci unik per perangkat.
Mengisolasi aplikasi dan proses
Model sandbox Android memberikan keamanan ekstra di sekitar aplikasi dan proses jika digunakan dengan benar.
Mengisolasi proses root
Proses root adalah target paling sering dari serangan eskalasi hak istimewa; mengurangi jumlah proses root akan mengurangi risiko eskalasi hak istimewa.
- Pastikan perangkat menjalankan kode minimum yang diperlukan sebagai root. Jika memungkinkan, gunakan proses Android biasa, bukan proses root. Jika proses harus dijalankan 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 ke layanan kecil yang dapat diakses melalui Binder dan ekspos layanan dengan izin tanda tangan ke aplikasi dengan hak istimewa rendah atau tanpa hak istimewa 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 sudah diinstal sebelumnya tidak boleh berjalan dengan ID unik sistem bersama (UID). 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, 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 memantau 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 folder data aplikasi individual, kecuali menggunakan metode pen-debug-an Android yang terdokumentasi.
- Pastikan proses root tidak mengakses memori aplikasi, kecuali jika menggunakan metode pen-debug-an Android yang didokumentasikan.
- Pastikan perangkat tidak menyertakan aplikasi apa pun yang mengakses data atau memori aplikasi atau proses lain.