Praktik Terbaik Keamanan Aplikasi

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 peninjauan kode sumber secara manual dan otomatis.

  • Ikuti panduan keamanan komprehensif saat melakukan peninjauan untuk memastikan cakupan. Memanfaatkan standar internal atau eksternal yang relevan untuk memastikan tinjauan yang konsisten dan lengkap.
  • Jalankan linter, seperti Android Studio linter , 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 sanitizer LLVM, seperti AddressSanitizer dan UndefinisiBehaviorSanitizer , yang dapat digunakan untuk analisis runtime masalah terkait memori. Dikombinasikan dengan fuzzing, yang didukung di Android melalui libFuzzer , pembersih dapat mengungkap kasus-kasus edge 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 rutin.

  • Jalankan CTS versi terbaru secara rutin selama proses pengembangan untuk mendeteksi masalah sejak dini dan mengurangi waktu perbaikan. Android menggunakan CTS sebagai bagian dari integrasi berkelanjutan dalam proses pembangunan otomatis kami, yang dibangun beberapa kali per hari.
  • Mengotomatiskan pengujian keamanan antarmuka, termasuk pengujian dengan input yang salah (pengujian fuzz). Sistem build Android mendukung libFuzzer untuk menulis pengujian 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 terhadap 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 mencari kerentanan.

Untuk informasi lebih lanjut tentang PHA dan cara Google memberantasnya 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 hingga izin minimum yang diperlukan dan pastikan aplikasi tersebut 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 pada aplikasi pra-instal. Tinjau aplikasi dengan hak istimewa sistem secara menyeluruh karena aplikasi tersebut mungkin memiliki izin yang sangat sensitif.
  • Pastikan semua izin yang diminta relevan dan diperlukan untuk fungsi aplikasi tertentu.
  • Pastikan ada pengungkapan pengguna untuk semua aplikasi pra-instal yang menggunakan izin INSTALL_PACKAGES .
  • Pastikan pengembang diwajibkan secara kontrak untuk tidak memasang aplikasi apa pun sebagai UID 0.
  • Evaluasi izin yang dinyatakan dalam manifes semua aplikasi yang akan diinstal melalui jaringan pengembang.
  • Pastikan pengembang diwajibkan secara kontrak untuk memindai semua URL unduhan aplikasi pembaru dan pemasang otomatis dengan API Penjelajahan Aman Google 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 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 dan dapat diaudit.
  • Pastikan aplikasi tidak ditandatangani dengan kunci platform. Melakukan hal ini memberi aplikasi akses 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. Hal ini sering terjadi saat membuat aplikasi untuk perangkat berbeda, terutama saat menggunakan kunci platform. Jika aplikasi tidak bergantung pada perangkat, gunakan kunci yang sama di seluruh perangkat. Jika aplikasi khusus untuk 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 paling sering dari serangan eskalasi hak istimewa; mengurangi jumlah proses root mengurangi risiko peningkatan 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 tepercaya dan diakses melalui komunikasi antarproses (IPC). Misalnya, mengurangi fungsionalitas root menjadi Layanan kecil yang dapat diakses melalui Binder dan mengekspos 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 pengidentifikasi unik sistem bersama (UID). Jika aplikasi perlu menggunakan UID bersama 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.

Mengisolasi proses

Android Application Sandbox memberi aplikasi harapan isolasi dari proses lain di sistem, termasuk proses root dan debugger. Kecuali proses debug diaktifkan secara khusus oleh aplikasi dan pengguna, tidak boleh ada aplikasi yang melanggar ekspektasi tersebut.

  • Pastikan proses root tidak mengakses data dalam folder data aplikasi individual, kecuali menggunakan metode debugging Android yang terdokumentasi.
  • Pastikan proses root tidak mengakses memori aplikasi, kecuali menggunakan metode debugging Android yang terdokumentasi.
  • Pastikan perangkat tidak menyertakan aplikasi apa pun yang mengakses data atau memori aplikasi atau proses lain.