Halaman ini menjelaskan berbagai aspek keamanan aplikasi.
Elemen aplikasi
Android menyediakan platform dan lingkungan aplikasi open source untuk perangkat seluler. Sistem operasi intinya didasarkan pada kernel Linux. Aplikasi Android paling sering ditulis dalam bahasa pemrograman Java dan berjalan di mesin virtual Android Runtime (ART). Namun, aplikasi juga dapat ditulis dalam kode native. Aplikasi diinstal dari satu file dengan ekstensi file APK.
Elemen penyusun utama aplikasi Android adalah:
-
AndroidManifest.xml: FileAndroidManifest.xmladalah file kontrol yang memberi tahu sistem apa yang harus dilakukan dengan semua komponen tingkat teratas (khususnya aktivitas, layanan, penerima siaran, dan penyedia konten yang dijelaskan di bawah) dalam aplikasi. File ini juga menentukan izin yang diperlukan. -
Aktivitas: Aktivitas umumnya adalah kode untuk satu tugas yang berfokus pada pengguna menggunakan class
Activity. Aktivitas biasanya mencakup menampilkan UI kepada pengguna, tetapi tidak harus; beberapa aktivitas tidak pernah menampilkan UI. Biasanya, salah satu aktivitas aplikasi adalah titik entri ke aplikasi. -
Layanan: Layanan adalah kumpulan kode yang berjalan di latar belakang, berdasarkan class
Service. Aplikasi ini dapat berjalan dalam prosesnya sendiri, atau dalam konteks proses aplikasi lain. Komponen lain terikat ke layanan dan memanggil metode di dalamnya melalui remote procedure call. Contoh layanan adalah pemutar media: meskipun pengguna keluar dari UI pemilihan media, pengguna mungkin masih ingin musik terus diputar. Layanan ini membuat musik terus diputar meskipun UI telah selesai. -
Penerima siaran: Penerima siaran adalah objek kelas
BroadcastReceiver. Objek ini di-instance saat mekanisme IPC yang dikenal sebagai intent, instance classIntent, dikeluarkan oleh sistem operasi atau aplikasi lain. Aplikasi dapat mendaftarkan penerima untuk pesan baterai lemah, misalnya, dan mengubah perilakunya berdasarkan informasi tersebut.
Model izin Android: Mengakses API yang dilindungi
Semua aplikasi di Android berjalan di Sandbox Aplikasi. Secara default, aplikasi Android hanya dapat mengakses rentang sumber daya sistem yang terbatas. Sistem mengelola akses aplikasi Android ke resource yang, jika digunakan secara tidak benar atau dengan niat jahat, dapat berdampak buruk pada pengalaman pengguna, jaringan, atau data di perangkat.
Pembatasan ini diterapkan dalam berbagai bentuk yang berbeda. Beberapa kemampuan dibatasi oleh kurangnya API yang disengaja untuk fungsi sensitif (misalnya, tidak ada Android API untuk memanipulasi kartu SIM secara langsung). Dalam beberapa kasus, pemisahan peran memberikan langkah keamanan, seperti pada isolasi penyimpanan per aplikasi. Dalam kasus lain, API sensitif dimaksudkan untuk digunakan oleh aplikasi tepercaya dan dilindungi melalui mekanisme keamanan yang dikenal sebagai Izin.
API yang dilindungi ini mencakup:
- Fungsi kamera
- Data lokasi (GPS)
- Fungsi Bluetooth
- Fungsi telepon
- Fungsi SMS/MMS
- Koneksi jaringan/data
Resource ini hanya dapat diakses melalui sistem operasi. Untuk menggunakan API yang dilindungi di perangkat, aplikasi harus menentukan kemampuan yang dibutuhkan dalam manifesnya. Semua versi Android 6.0 dan yang lebih tinggi menggunakan model izin runtime. Jika pengguna meminta fitur dari aplikasi yang memerlukan API yang dilindungi, sistem akan menampilkan dialog, yang meminta pengguna untuk menolak atau mengizinkan izin.
Setelah diberikan, izin akan diterapkan ke aplikasi selama aplikasi diinstal. Untuk menghindari kebingungan pengguna, sistem tidak memberi tahu pengguna lagi tentang izin yang diberikan ke aplikasi, dan aplikasi yang disertakan dalam sistem operasi inti atau dibundel oleh OEM tidak meminta izin dari pengguna. Izin akan dihapus jika aplikasi di-uninstal, sehingga penginstalan ulang berikutnya akan menampilkan izin lagi.
Dalam setelan perangkat, pengguna dapat melihat izin untuk aplikasi yang telah diinstal sebelumnya. Pengguna juga dapat menonaktifkan beberapa fungsi secara global saat mereka memilih, seperti menonaktifkan GPS, radio, atau Wi-Fi.
Jika aplikasi mencoba menggunakan fitur yang dilindungi yang belum dideklarasikan dalam manifes aplikasi, kegagalan izin biasanya akan menghasilkan pengecualian keamanan yang dikembalikan ke aplikasi. Pemeriksaan izin API yang dilindungi diterapkan pada level serendah mungkin untuk mencegah pengelakan. Contoh pesan pengguna saat aplikasi diinstal sambil meminta akses ke API yang dilindungi ditampilkan pada Gambar 2.
Izin default sistem dijelaskan di Manifest.permission. Aplikasi dapat mendeklarasikan izinnya sendiri untuk digunakan oleh aplikasi lain. Izin tersebut tidak tercantum di lokasi di atas.
Saat menentukan izin, atribut protectionLevel memberi tahu sistem cara pengguna akan diberi tahu jika aplikasi membutuhkan izin, atau siapa yang diizinkan untuk memegang izin. Detail tentang cara membuat dan menggunakan izin khusus aplikasi dijelaskan di Checklist keamanan.
Ada beberapa kemampuan perangkat, seperti kemampuan untuk mengirim intent siaran SMS, yang tidak tersedia untuk aplikasi pihak ketiga, tetapi dapat digunakan oleh aplikasi yang diinstal terlebih dahulu oleh OEM. Izin ini menggunakan izin
signatureOrSystem.
Cara pengguna memahami aplikasi pihak ketiga
Android berupaya memperjelas kepada pengguna saat mereka berinteraksi dengan aplikasi pihak ketiga dan memberi tahu pengguna tentang kemampuan yang dimiliki aplikasi tersebut. Sebelum menginstal aplikasi apa pun, pengguna akan melihat pesan yang jelas tentang berbagai izin yang diminta aplikasi. Setelah penginstalan, pengguna tidak akan diminta lagi untuk mengonfirmasi izin apa pun.
Ada banyak alasan untuk menampilkan izin segera sebelum waktu penginstalan. Pada tahap ini, pengguna secara aktif meninjau informasi tentang aplikasi, developer, dan fungsi untuk menentukan apakah aplikasi tersebut sesuai dengan kebutuhan dan ekspektasi mereka. Penting juga untuk memastikan bahwa mereka belum membuat komitmen mental atau finansial terhadap aplikasi, dan dapat dengan mudah membandingkan aplikasi dengan aplikasi alternatif lainnya.
Beberapa platform lain menggunakan pendekatan yang berbeda untuk notifikasi pengguna, dengan meminta izin di awal setiap sesi atau saat aplikasi sedang digunakan. Visi Android adalah agar pengguna dapat beralih antar-aplikasi dengan lancar sesuai keinginan. Memberikan konfirmasi setiap kali akan memperlambat pengguna dan mencegah Android memberikan pengalaman pengguna yang luar biasa. Meminta pengguna meninjau izin saat penginstalan memberi pengguna opsi untuk tidak menginstal aplikasi jika mereka merasa tidak nyaman.
Selain itu, banyak studi antarmuka pengguna telah menunjukkan bahwa terlalu sering meminta pengguna menyebabkan pengguna mulai mengklik OK pada dialog apa pun yang ditampilkan. Salah satu tujuan keamanan Android adalah menyampaikan informasi keamanan penting secara efektif kepada pengguna, yang tidak dapat dilakukan menggunakan dialog yang dilatih untuk diabaikan oleh pengguna. Dengan menyajikan informasi penting satu kali, dan hanya saat penting, pengguna cenderung memikirkan apa yang mereka setujui.
Beberapa platform memilih untuk tidak menampilkan informasi apa pun tentang fungsi aplikasi. Pendekatan tersebut mencegah pengguna memahami dan mendiskusikan kemampuan aplikasi dengan mudah. Meskipun tidak semua pengguna dapat selalu membuat keputusan yang sepenuhnya tepat, model izin Android membuat informasi tentang aplikasi mudah diakses oleh berbagai pengguna. Misalnya, permintaan izin yang tidak terduga dapat mendorong pengguna yang lebih berpengalaman untuk mengajukan pertanyaan penting tentang fungsi aplikasi dan membagikan kekhawatiran mereka di tempat seperti Google Play yang dapat dilihat oleh semua pengguna.
| Izin saat penginstalan aplikasi — Google Terjemahan | Izin aplikasi terinstal — Gmail |
|---|---|
![]() |
![]() |
Gambar 1. Menampilkan izin untuk aplikasi.
Komunikasi antar-proses
Proses dapat berkomunikasi menggunakan mekanisme tradisional jenis Unix. Contohnya mencakup sistem file, soket lokal, atau sinyal. Namun, izin Linux tetap berlaku.
Android juga menyediakan mekanisme IPC baru:
-
Binder: Mekanisme remote procedure call berbasis kemampuan ringan yang didesain untuk performa tinggi saat melakukan panggilan dalam proses dan lintas proses. Binder diimplementasikan menggunakan driver Linux kustom. Untuk deskripsi class, lihat Binder.
-
Layanan: Layanan dapat menyediakan antarmuka yang dapat diakses secara langsung menggunakan binder. Untuk deskripsi yang lebih mendetail, lihat Elemen aplikasi
-
Intent: Intent adalah objek pesan sederhana yang merepresentasikan niat untuk melakukan sesuatu. Misalnya, jika aplikasi Anda ingin menampilkan halaman web, aplikasi tersebut menyatakan niatnya untuk melihat URL dengan membuat instance intent dan menyerahkannya ke sistem. Sistem akan menemukan bagian kode lain (dalam hal ini, browser) yang tahu cara menangani maksud tersebut, dan menjalankannya. Intent juga dapat digunakan untuk menyiarkan peristiwa menarik (seperti notifikasi) di seluruh sistem. Untuk mengetahui deskripsi class, lihat Intent.
-
Penyedia konten: Penyedia konten adalah gudang data yang menyediakan akses ke data di perangkat; contoh klasiknya adalah penyedia konten yang digunakan untuk mengakses daftar kontak pengguna. Aplikasi dapat mengakses data yang diekspos oleh aplikasi lain dengan penyedia konten, dan aplikasi juga dapat menentukan penyedia kontennya sendiri untuk mengekspos datanya sendiri. Untuk mengetahui deskripsi class, lihat ContentProvider.
Meskipun IPC dapat diimplementasikan menggunakan mekanisme lain seperti soket jaringan atau file yang dapat ditulis publik, framework IPC Android ini direkomendasikan. Developer Android dianjurkan untuk menggunakan praktik terbaik terkait mengamankan data pengguna dan menghindari munculnya kerentanan keamanan.
API yang sensitif terhadap biaya
API yang sensitif terhadap biaya adalah fungsi apa pun yang dapat menimbulkan biaya bagi pengguna atau jaringan. Platform Android telah menempatkan API yang sensitif terhadap biaya dalam daftar API yang dilindungi dan dikontrol oleh OS. Pengguna harus memberikan izin eksplisit kepada aplikasi pihak ketiga yang meminta penggunaan API sensitif biaya. API ini mencakup:
- Telepon
- SMS/MMS
- Jaringan/Data
- Penagihan dalam Aplikasi
- Akses NFC
Android 4.2 menambahkan kontrol lebih lanjut pada penggunaan SMS. Android memberikan notifikasi jika aplikasi mencoba mengirim SMS ke kode pendek yang menggunakan layanan premium yang dapat dikenai biaya tambahan. Pengguna dapat memilih untuk mengizinkan aplikasi mengirim pesan atau memblokirnya.
Akses kartu SIM
Akses tingkat rendah ke kartu SIM tidak tersedia untuk aplikasi pihak ketiga. OS menangani semua komunikasi dengan kartu SIM, termasuk akses ke informasi pribadi (kontak) di memori kartu SIM. Aplikasi juga tidak dapat mengakses perintah AT, karena perintah ini dikelola secara eksklusif oleh Radio Interface Layer (RIL). RIL tidak menyediakan API tingkat tinggi untuk perintah ini.
Informasi pribadi
Android telah menempatkan API yang memberikan akses ke data pengguna ke dalam set API yang dilindungi. Dengan penggunaan normal, perangkat Android juga mengumpulkan data pengguna dalam aplikasi pihak ketiga yang diinstal oleh pengguna. Aplikasi yang memilih untuk membagikan informasi ini dapat menggunakan pemeriksaan izin OS Android untuk melindungi data dari aplikasi pihak ketiga.

Gambar 2. Akses ke data pengguna sensitif hanya tersedia melalui API yang dilindungi.
Penyedia konten sistem yang kemungkinan berisi informasi pribadi atau informasi yang dapat mengidentifikasi seseorang, seperti kontak dan kalender, telah dibuat dengan izin yang diidentifikasi dengan jelas. Perincian ini memberikan indikasi yang jelas kepada pengguna tentang jenis informasi yang dapat diberikan ke aplikasi. Selama penginstalan, aplikasi pihak ketiga dapat meminta izin untuk mengakses resource ini. Jika izin diberikan, aplikasi dapat diinstal dan memiliki akses ke data yang diminta kapan saja saat diinstal.
Secara default, setiap aplikasi yang mengumpulkan informasi pribadi akan membatasi data tersebut hanya untuk aplikasi tertentu. Jika aplikasi memilih untuk menyediakan data tersebut bagi aplikasi lain melalui IPC, aplikasi yang memberikan akses dapat menerapkan izin ke mekanisme IPC yang diterapkan oleh sistem operasi.
Perangkat input data sensitif
Perangkat Android sering kali menyediakan perangkat input data sensitif yang memungkinkan aplikasi berinteraksi dengan lingkungan sekitar, seperti kamera, mikrofon, atau GPS. Agar aplikasi pihak ketiga dapat mengakses perangkat ini, aplikasi tersebut harus diberi akses secara eksplisit oleh pengguna terlebih dahulu melalui penggunaan Izin OS Android. Setelah penginstalan, penginstal akan meminta izin ke sensor berdasarkan nama kepada pengguna.
Jika ingin mengetahui lokasi pengguna, aplikasi memerlukan izin untuk mengakses lokasi pengguna. Setelah penginstalan, penginstal akan meminta pengguna untuk mengizinkan aplikasi mengakses lokasi pengguna. Kapan pun, jika pengguna tidak ingin aplikasi apa pun mengakses lokasi mereka, pengguna dapat menjalankan aplikasi Setelan, membuka Lokasi & Keamanan, dan membatalkan pilihan Gunakan jaringan nirkabel dan Aktifkan satelit GPS. Tindakan ini akan menonaktifkan layanan berbasis lokasi untuk semua aplikasi di perangkat pengguna.
Metadata perangkat
Android juga berupaya membatasi akses ke data yang tidak secara intrinsik sensitif, tetapi dapat secara tidak langsung mengungkapkan karakteristik tentang pengguna, preferensi pengguna, dan cara mereka menggunakan perangkat.
Secara default, aplikasi tidak memiliki akses ke log sistem operasi, histori browser, nomor telepon, atau informasi identifikasi hardware atau jaringan. Jika aplikasi meminta akses ke informasi ini saat waktu penginstalan, penginstal akan meminta pengguna untuk mengizinkan aplikasi mengakses informasi tersebut. Jika pengguna tidak memberikan akses, aplikasi tidak akan diinstal.
Certificate authority
Android menyertakan serangkaian Certificate Authority sistem yang diinstal, yang dipercaya di seluruh sistem. Sebelum Android 7.0, produsen perangkat dapat mengubah kumpulan CA yang dikirimkan di perangkat mereka. Namun, perangkat yang menjalankan Android 7.0 dan yang lebih tinggi memiliki serangkaian CA sistem yang seragam karena modifikasi oleh produsen perangkat tidak lagi diizinkan.
Agar ditambahkan sebagai CA publik baru ke set standar Android, CA harus menyelesaikan Proses Penyertaan CA Mozilla, lalu mengajukan permintaan fitur terhadap Android ( https://code.google.com/p/android/issues/entry) agar CA ditambahkan ke set CA Android standar di Proyek Open Source Android (AOSP).
Masih ada CA khusus perangkat yang tidak boleh disertakan dalam set CA inti AOSP, seperti CA pribadi operator yang mungkin diperlukan untuk mengakses komponen infrastruktur operator secara aman, seperti gateway SMS/MMS. Produsen perangkat dianjurkan untuk menyertakan CA pribadi hanya di komponen/aplikasi yang perlu memercayai CA ini. Untuk mengetahui detail selengkapnya, lihat Konfigurasi Keamanan Jaringan.
Penandatanganan aplikasi
Penandatanganan kode memungkinkan developer mengidentifikasi penulis aplikasi dan memperbarui aplikasi mereka tanpa membuat antarmuka dan izin yang rumit. Setiap aplikasi yang dijalankan di platform Android harus ditandatangani oleh developer. Aplikasi yang mencoba diinstal tanpa ditandatangani akan ditolak oleh Google Play atau penginstal paket di perangkat Android.
Di Google Play, penandatanganan aplikasi menjembatani kepercayaan Google terhadap developer dan kepercayaan developer terhadap aplikasinya. Developer tahu bahwa aplikasi mereka disediakan tanpa dimodifikasi ke perangkat Android; dan developer dapat dimintai pertanggungjawaban atas perilaku aplikasinya.
Di Android, penandatanganan aplikasi adalah langkah pertama untuk menempatkan aplikasi di Sandbox Aplikasi. Sertifikat aplikasi yang ditandatangani menentukan ID pengguna mana yang terkait dengan aplikasi mana; aplikasi yang berbeda berjalan di bawah ID pengguna yang berbeda. Penandatanganan aplikasi memastikan bahwa satu aplikasi tidak dapat mengakses aplikasi lain kecuali melalui IPC yang ditentukan dengan baik.
Saat aplikasi (file APK) diinstal ke perangkat Android, Pengelola Paket akan memverifikasi bahwa APK telah ditandatangani dengan benar menggunakan sertifikat yang disertakan dalam APK tersebut. Jika sertifikat (atau, lebih tepatnya, kunci publik dalam sertifikat) cocok dengan kunci yang digunakan untuk menandatangani APK lain di perangkat, APK baru memiliki opsi untuk menentukan dalam manifes bahwa APK tersebut berbagi UID dengan APK lain yang ditandatangani serupa.
Aplikasi dapat ditandatangani oleh pihak ketiga (OEM, operator, marketplace alternatif) atau ditandatangani sendiri. Android menyediakan penandatanganan kode menggunakan sertifikat yang ditandatangani sendiri yang dapat dibuat oleh developer tanpa bantuan atau izin eksternal. Aplikasi tidak harus ditandatangani oleh otoritas pusat. Android saat ini tidak melakukan verifikasi CA untuk sertifikat aplikasi.
Aplikasi juga dapat mendeklarasikan izin keamanan di tingkat perlindungan tanda tangan, membatasi akses hanya ke aplikasi yang ditandatangani dengan kunci yang sama sambil mempertahankan UID dan Sandbox Aplikasi yang berbeda. Hubungan yang lebih dekat dengan Sandbox Aplikasi bersama diizinkan melalui fitur UID bersama di mana dua aplikasi atau lebih yang ditandatangani dengan kunci developer yang sama dapat mendeklarasikan UID bersama dalam manifesnya.
Verifikasi aplikasi
Android 4.2 dan yang lebih tinggi mendukung verifikasi aplikasi. Pengguna dapat memilih untuk mengaktifkan Verifikasi Aplikasi dan meminta aplikasi dievaluasi oleh pemverifikasi aplikasi sebelum diinstal. Verifikasi aplikasi dapat memperingatkan pengguna jika mereka mencoba menginstal aplikasi yang mungkin berbahaya; jika aplikasi tidak layak, fitur ini dapat memblokir penginstalannya.
Pengelolaan Hak Digital
Platform Android menyediakan framework manajemen hak digital (DRM) yang dapat di-extend yang memungkinkan aplikasi mengelola konten yang dilindungi hak sesuai dengan batasan lisensi yang terkait dengan konten. Framework DRM mendukung banyak skema DRM; skema DRM yang didukung perangkat diserahkan kepada produsen perangkat.
Framework DRM Android diimplementasikan dalam dua lapisan arsitektur (lihat gambar 3):
-
API framework DRM, yang diekspos ke aplikasi melalui framework aplikasi Android dan berjalan melalui VM ART untuk aplikasi standar.
-
Pengelola DRM kode native, yang menerapkan framework DRM dan mengekspos antarmuka untuk plugin DRM (agen) guna menangani pengelolaan hak dan dekripsi untuk berbagai skema DRM

Gambar 3. Arsitektur DRM di platform Android.

