Keamanan aplikasi

Elemen aplikasi

Android menyediakan platform open source dan lingkungan aplikasi untuk perangkat seluler. Sistem operasi inti 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: File AndroidManifest.xml adalah file kontrol yang memberi tahu sistem apa yang harus dilakukan dengan semua komponen tingkat atas (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 isi kode yang berjalan di latar belakang. Aplikasi ini dapat berjalan dalam prosesnya sendiri, atau dalam konteks proses aplikasi lain. Komponen lain "mengikat" ke Layanan dan memanggil metode di dalamnya melalui panggilan prosedur jarak jauh. Contoh Layanan adalah pemutar media: meskipun pengguna keluar dari UI pemilihan media, pengguna mungkin masih ingin musik terus diputar. Layanan akan terus memutar musik meskipun UI telah selesai.

  • Penerima Siaran: BroadcastReceiver adalah objek yang dibuat instance-nya saat mekanisme IPC yang dikenal sebagai Intent 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 resource sistem yang terbatas. Sistem mengelola akses aplikasi Android ke resource yang, jika digunakan dengan tidak benar atau secara berbahaya, dapat berdampak buruk pada pengalaman pengguna, jaringan, atau data di perangkat.

Pembatasan ini diterapkan dalam berbagai bentuk. 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 pengamanan, seperti 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 diperlukan dalam manifesnya. Semua Android versi 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 diinstal. Untuk menghindari kebingungan pengguna, sistem tidak lagi memberi tahu pengguna tentang izin yang diberikan ke aplikasi, dan aplikasi yang disertakan dalam sistem operasi inti atau dipaketkan oleh OEM tidak meminta izin dari pengguna. Izin akan dihapus jika aplikasi di-uninstal, sehingga penginstalan ulang berikutnya akan kembali menampilkan izin.

Dalam setelan perangkat, pengguna dapat melihat izin untuk aplikasi yang telah diinstal sebelumnya. Pengguna juga dapat menonaktifkan beberapa fungsi secara global jika mereka memilihnya, seperti menonaktifkan GPS, radio, atau Wi-Fi.

Jika aplikasi mencoba menggunakan fitur yang dilindungi yang belum dideklarasikan dalam manifes aplikasi, kegagalan izin biasanya akan menyebabkan pengecualian keamanan ditampilkan kembali ke aplikasi. Pemeriksaan izin Protected API diterapkan pada tingkat serendah mungkin untuk mencegah pengelakan. Contoh pesan pengguna saat aplikasi diinstal saat meminta akses ke API yang dilindungi ditampilkan dalam Gambar 2.

Izin default sistem dijelaskan di https://developer.android.com/reference/android/Manifest.permission.html. Aplikasi dapat mendeklarasikan izinnya sendiri untuk digunakan 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 memerlukan izin, atau siapa yang diizinkan untuk memiliki izin. Detail tentang cara membuat dan menggunakan izin khusus aplikasi dijelaskan di https://developer.android.com/guide/topics/security/security.html.

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 sebelumnya oleh OEM. Izin ini menggunakan izin signatureOrSystem.

Cara pengguna memahami aplikasi pihak ketiga

Android berupaya untuk menjelaskan kepada pengguna saat mereka berinteraksi dengan aplikasi pihak ketiga dan memberi tahu pengguna tentang kemampuan yang dimiliki aplikasi tersebut. Sebelum penginstalan 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. Ini adalah saat 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 memiliki 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, meminta izin di awal setiap sesi atau saat aplikasi sedang digunakan. Visi Android adalah memungkinkan pengguna beralih antar-aplikasi dengan bebas dan lancar. Memberikan konfirmasi setiap kali akan memperlambat pengguna dan mencegah Android memberikan pengalaman pengguna yang baik. Meminta pengguna meninjau izin pada saat penginstalan memberi pengguna opsi untuk tidak menginstal aplikasi jika mereka merasa tidak nyaman.

Selain itu, banyak studi antarmuka pengguna telah menunjukkan bahwa terlalu banyak meminta pengguna akan menyebabkan pengguna mulai mengucapkan "Oke" untuk dialog apa pun yang ditampilkan. Salah satu sasaran keamanan Android adalah menyampaikan informasi keamanan penting kepada pengguna secara efektif, yang tidak dapat dilakukan menggunakan dialog yang akan dilatih pengguna untuk diabaikan. Dengan menampilkan informasi penting sekali, dan hanya jika penting, pengguna lebih 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 canggih untuk mengajukan pertanyaan penting tentang fungsi aplikasi dan menyampaikan kekhawatiran mereka di tempat-tempat seperti Google Play tempat mereka dapat dilihat oleh semua pengguna.

Izin saat penginstalan aplikasi — Google Terjemahan Izin aplikasi yang diinstal — Gmail
Izin saat Penginstalan Aplikasi -- Google Terjemahan Izin Aplikasi Terinstal — Gmail

Gambar 1. Tampilan izin untuk aplikasi

Komunikasi antar-proses

Proses dapat berkomunikasi menggunakan salah satu mekanisme jenis UNIX tradisional. Contohnya mencakup sistem file, soket lokal, atau sinyal. Namun, izin Linux tetap berlaku.

Android juga menyediakan mekanisme IPC baru:

  • Binder: Mekanisme panggilan prosedur jarak jauh berbasis kemampuan yang ringan dan dirancang untuk performa tinggi saat melakukan panggilan dalam proses dan lintas proses. Binder diimplementasikan menggunakan driver Linux kustom. Lihat https://developer.android.com/reference/android/os/Binder.html.

  • Layanan: Layanan (dibahas di atas) dapat menyediakan antarmuka yang dapat diakses secara langsung menggunakan binder.

  • Intent: Intent adalah objek pesan sederhana yang mewakili "niat" untuk melakukan sesuatu. Misalnya, jika aplikasi Anda ingin menampilkan halaman web, aplikasi akan menyatakan "Intent"-nya untuk melihat URL dengan membuat instance Intent dan menyerahkannya ke sistem. Sistem akan menemukan beberapa bagian kode lain (dalam hal ini, Browser) yang mengetahui cara menangani Intent tersebut, dan menjalankannya. Intent juga dapat digunakan untuk menyiarkan peristiwa menarik (seperti notifikasi) di seluruh sistem. Lihat https://developer.android.com/reference/android/content/Intent.html.

  • ContentProviders: ContentProvider adalah tempat penyimpanan data yang menyediakan akses ke data di perangkat; contoh klasiknya adalah ContentProvider yang digunakan untuk mengakses daftar kontak pengguna. Aplikasi dapat mengakses data yang telah diekspos aplikasi lain melalui ContentProvider, dan aplikasi juga dapat menentukan ContentProvider-nya sendiri untuk mengekspos datanya sendiri. Lihat https://developer.android.com/reference/android/content/ContentProvider.html.

Meskipun Anda dapat mengimplementasikan IPC menggunakan mekanisme lain seperti socket jaringan atau file yang dapat ditulis publik, berikut adalah framework IPC Android yang direkomendasikan. Developer Android akan didorong untuk menggunakan praktik terbaik terkait pengamanan data pengguna dan menghindari munculnya kerentanan keamanan.

API yang sensitif terhadap biaya

API sensitif biaya adalah fungsi apa pun yang dapat menimbulkan biaya bagi pengguna atau jaringan. Platform Android telah menempatkan API sensitif 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 akan memberikan notifikasi jika aplikasi mencoba mengirim SMS ke kode pendek yang menggunakan layanan premium yang dapat dikenai biaya tambahan. Pengguna dapat memilih apakah akan 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 kumpulan API yang dilindungi. Dengan penggunaan normal, perangkat Android juga akan mengumpulkan data pengguna dalam aplikasi pihak ketiga yang diinstal oleh pengguna. Aplikasi yang memilih untuk membagikan informasi ini dapat menggunakan pemeriksaan izin Android OS untuk melindungi data dari aplikasi pihak ketiga.

Akses ke data pengguna sensitif hanya tersedia melalui API
yang dilindungi

Gambar 2. Akses ke data pengguna yang sensitif hanya tersedia melalui API yang dilindungi

Penyedia konten sistem yang cenderung berisi informasi pribadi atau identitas pribadi seperti kontak dan kalender telah dibuat dengan izin yang diidentifikasi dengan jelas. Tingkat perincian ini memberi pengguna indikasi yang jelas 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 akan memiliki akses ke data yang diminta kapan saja saat diinstal.

Secara default, setiap aplikasi yang mengumpulkan informasi pribadi akan memiliki data tersebut yang hanya dibatasi untuk aplikasi tertentu. Jika aplikasi memilih untuk menyediakan data tersebut ke 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 dapat mengakses perangkat ini, aplikasi pihak ketiga harus diberi akses secara eksplisit oleh pengguna melalui penggunaan Izin Android OS. Setelah penginstalan, penginstal akan meminta pengguna untuk meminta izin ke sensor berdasarkan namanya.

Jika ingin mengetahui lokasi pengguna, aplikasi memerlukan izin untuk mengakses lokasi pengguna. Setelah penginstalan, penginstal akan meminta pengguna untuk menanyakan apakah aplikasi dapat mengakses lokasi pengguna. Kapan saja, jika pengguna tidak ingin aplikasi apa pun mengakses lokasinya, pengguna dapat menjalankan aplikasi "Setelan", membuka "Lokasi & Keamanan", dan menghapus centang pada "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 secara intrinsik tidak sensitif, tetapi secara tidak langsung dapat 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 / jaringan. Jika aplikasi meminta akses ke informasi ini pada saat penginstalan, penginstal akan meminta pengguna untuk menanyakan apakah aplikasi dapat mengakses informasi tersebut. Jika pengguna tidak memberikan akses, aplikasi tidak akan diinstal.

Certificate authority

Android menyertakan kumpulan 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 7.0 dan yang lebih baru akan memiliki kumpulan CA sistem yang seragam karena modifikasi oleh produsen perangkat tidak lagi diizinkan.

Agar dapat ditambahkan sebagai CA publik baru ke set stok 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 stok di Proyek Open Source Android (AOSP).

Masih ada CA yang khusus perangkat dan tidak boleh disertakan dalam kumpulan inti CA AOSP, seperti CA pribadi operator yang mungkin diperlukan untuk mengakses komponen infrastruktur operator dengan aman, seperti gateway SMS/MMS. Produsen perangkat dianjurkan untuk menyertakan CA pribadi hanya dalam 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 mengupdate 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 aplikasi mereka. Developer tahu bahwa aplikasi mereka disediakan, tidak dimodifikasi untuk perangkat Android; dan developer dapat dimintai pertanggungjawaban atas perilaku aplikasi mereka.

Di Android, penandatanganan aplikasi adalah langkah pertama untuk menempatkan aplikasi di Sandbox Aplikasinya. Sertifikat aplikasi yang ditandatangani menentukan ID pengguna 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 dengan 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 akan berbagi UID dengan APK lain yang ditandatangani dengan cara yang sama.

Aplikasi dapat ditandatangani oleh pihak ketiga (OEM, operator, pasar 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, yang membatasi akses hanya ke aplikasi yang ditandatangani dengan kunci yang sama sekaligus mempertahankan UID dan Sandbox Aplikasi yang berbeda. Hubungan yang lebih dekat dengan Sandbox Aplikasi bersama diizinkan melalui fitur UID bersama tempat 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 baru 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 diperluas 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 di bawah):

  • 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

Arsitektur Pengelolaan Hak Digital di platform
Android

Gambar 3. Arsitektur DRM di platform Android