Keamanan aplikasi

Elemen Aplikasi

Android menyediakan platform sumber terbuka dan lingkungan aplikasi untuk perangkat seluler. Sistem operasi inti didasarkan pada kernel Linux. Aplikasi Android paling sering ditulis dalam bahasa pemrograman Java dan dijalankan di mesin virtual Dalvik. Namun, aplikasi juga dapat ditulis dalam kode asli. Aplikasi diinstal dari satu file dengan ekstensi file .apk.

Blok pembangun aplikasi Android utama 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. Ini juga menentukan izin mana yang diperlukan.

  • Aktivitas : Aktivitas , umumnya, adalah kode untuk satu tugas yang berfokus pada pengguna. Biasanya mencakup menampilkan UI kepada pengguna, tetapi tidak harus -- beberapa Aktivitas tidak pernah menampilkan UI. Biasanya, salah satu Aktivitas aplikasi adalah titik masuk ke aplikasi.

  • Layanan : Layanan adalah kumpulan kode yang berjalan di latar belakang. Itu 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: bahkan ketika pengguna keluar dari UI pemilihan media, pengguna mungkin masih menginginkan musik untuk terus diputar. Layanan membuat musik tetap berjalan bahkan ketika UI telah selesai.

  • Broadcast Receiver : BroadcastReceiver adalah objek yang dipakai ketika 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 Application Sandbox . Secara default, aplikasi Android hanya dapat mengakses berbagai sumber daya sistem yang terbatas. Sistem mengelola akses aplikasi Android ke sumber daya yang, jika digunakan secara tidak benar atau berbahaya, dapat berdampak buruk pada pengalaman pengguna, jaringan, atau data pada perangkat.

Pembatasan ini diterapkan dalam berbagai bentuk yang berbeda. Beberapa kemampuan dibatasi oleh kurangnya API yang disengaja untuk fungsionalitas sensitif (misalnya, tidak ada API Android untuk memanipulasi kartu SIM secara langsung). Dalam beberapa kasus, pemisahan peran memberikan ukuran keamanan, 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 meliputi:

  • Fungsi kamera
  • Data lokasi (GPS)
  • Fungsi Bluetooth
  • Fungsi telepon
  • Fungsi SMS/MMS
  • Koneksi jaringan/data

Sumber daya ini hanya dapat diakses melalui sistem operasi. Untuk menggunakan API yang dilindungi pada perangkat, aplikasi harus mendefinisikan kemampuan yang dibutuhkan dalam manifesnya. Semua Android versi 6.0 dan yang lebih tinggi menggunakan model izin waktu proses. 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 diterapkan ke aplikasi selama itu 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 dihapus jika aplikasi dicopot pemasangannya, jadi penginstalan ulang berikutnya akan menampilkan izin lagi.

Dalam pengaturan perangkat, pengguna dapat melihat izin untuk aplikasi yang telah mereka instal sebelumnya. Pengguna juga dapat mematikan 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 mengakibatkan pengecualian keamanan dilemparkan kembali ke aplikasi. Pemeriksaan izin API yang dilindungi diberlakukan pada tingkat serendah mungkin untuk mencegah pengelakan. Contoh pesan pengguna saat aplikasi diinstal saat meminta akses ke API yang dilindungi ditunjukkan pada Gambar 2 .

Izin default sistem dijelaskan di https://developer.android.com/reference/android/Manifest.permission.html . Aplikasi dapat mendeklarasikan izinnya sendiri untuk digunakan oleh aplikasi lain. Izin tersebut tidak terdaftar di lokasi di atas.

Saat mendefinisikan izin, atribut protectionLevel memberi tahu sistem bagaimana pengguna diberi tahu tentang aplikasi yang memerlukan izin, atau siapa yang diizinkan untuk memegang izin. Detail tentang 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 maksud siaran SMS, yang tidak tersedia untuk aplikasi pihak ketiga, tetapi dapat digunakan oleh aplikasi yang telah diinstal sebelumnya oleh OEM. Izin ini menggunakan izin signatureOrSystem.

Bagaimana Pengguna Memahami Aplikasi Pihak Ketiga

Android berusaha menjelaskan kepada pengguna saat mereka berinteraksi dengan aplikasi pihak ketiga dan menginformasikan kepada pengguna tentang kemampuan yang dimiliki aplikasi tersebut. Sebelum menginstal aplikasi apa pun, pengguna diperlihatkan pesan yang jelas tentang berbagai izin yang diminta aplikasi. Setelah menginstal, pengguna tidak diminta lagi untuk mengonfirmasi izin apa pun.

Ada banyak alasan untuk menunjukkan izin segera sebelum waktu penginstalan. Ini adalah saat pengguna secara aktif meninjau informasi tentang aplikasi, pengembang, dan fungsionalitas untuk menentukan apakah itu sesuai dengan kebutuhan dan harapan mereka. Penting juga bahwa mereka belum menetapkan komitmen mental atau finansial terhadap aplikasi, dan dapat dengan mudah membandingkan aplikasi tersebut dengan aplikasi alternatif lainnya.

Beberapa platform lain menggunakan pendekatan berbeda untuk pemberitahuan pengguna, meminta izin di awal setiap sesi atau saat aplikasi sedang digunakan. Visi Android adalah membuat pengguna beralih antar aplikasi dengan mulus sesuka hati. Memberikan konfirmasi setiap kali akan memperlambat pengguna dan mencegah Android memberikan pengalaman pengguna yang luar biasa. Memiliki izin tinjauan pengguna pada waktu penginstalan memberi pengguna opsi untuk tidak menginstal aplikasi jika mereka merasa tidak nyaman.

Juga, banyak studi antarmuka pengguna telah menunjukkan bahwa terlalu banyak meminta pengguna menyebabkan pengguna mulai mengatakan "OK" untuk setiap dialog yang ditampilkan. Salah satu tujuan keamanan Android adalah menyampaikan informasi keamanan penting secara efektif kepada pengguna, yang tidak dapat dilakukan dengan menggunakan dialog yang akan dilatih untuk diabaikan oleh pengguna. Dengan menyajikan informasi penting sekali, dan hanya jika penting, pengguna lebih mungkin untuk berpikir tentang apa yang mereka setujui.

Beberapa platform memilih untuk tidak menampilkan informasi apa pun tentang fungsionalitas aplikasi. Pendekatan itu mencegah pengguna dengan mudah memahami dan mendiskusikan kemampuan aplikasi. Meskipun tidak mungkin bagi semua pengguna untuk selalu membuat keputusan dengan informasi yang lengkap, 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 kritis tentang fungsionalitas aplikasi dan membagikan kekhawatiran mereka di tempat-tempat seperti Google Play yang dapat dilihat oleh semua pengguna.

Izin di Pemasangan Aplikasi -- Google Maps Izin Aplikasi Terpasang -- Gmail
Izin di Pemasangan Aplikasi -- Google MapsIzin Aplikasi Terpasang -- Gmail

Gambar 1. Tampilan izin untuk aplikasi

Komunikasi Antarproses

Proses dapat berkomunikasi menggunakan mekanisme tipe UNIX tradisional. Contohnya termasuk sistem file, soket lokal, atau sinyal. Namun, izin Linux masih berlaku.

Android juga menyediakan mekanisme IPC baru:

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

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

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

  • ContentProviders : ContentProvider adalah gudang 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 oleh aplikasi lain melalui ContentProvider, dan aplikasi juga dapat menentukan ContentProviders-nya sendiri untuk mengekspos datanya sendiri. Lihat https://developer.android.com/reference/android/content/ContentProvider.html .

Meskipun dimungkinkan untuk mengimplementasikan IPC menggunakan mekanisme lain seperti soket jaringan atau file yang dapat ditulis dunia, ini adalah kerangka kerja IPC Android yang direkomendasikan. Pengembang Android akan didorong untuk menggunakan praktik terbaik seputar mengamankan data pengguna dan menghindari pengenalan kerentanan keamanan.

API Biaya-Sensitif

API yang sensitif terhadap biaya adalah fungsi apa pun yang mungkin menimbulkan biaya bagi pengguna atau jaringan. Platform Android telah menempatkan API yang sensitif terhadap biaya dalam daftar API yang dilindungi yang dikontrol oleh OS. Pengguna harus memberikan izin eksplisit kepada aplikasi pihak ketiga yang meminta penggunaan API yang sensitif terhadap biaya. API ini meliputi:

  • Telepon
  • SMS/MMS
  • Jaringan/Data
  • Penagihan Dalam Aplikasi
  • Akses NFC

Android 4.2 menambahkan kontrol lebih lanjut pada penggunaan SMS. Android akan memberikan pemberitahuan jika aplikasi mencoba mengirim SMS ke kode pendek yang menggunakan layanan premium yang dapat menyebabkan 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) pada memori kartu SIM. Aplikasi juga tidak dapat mengakses perintah AT, karena 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 menyediakan 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 OS Android untuk melindungi data dari aplikasi pihak ketiga.

Akses ke data pengguna yang 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 kemungkinan berisi informasi pribadi atau informasi pribadi seperti kontak dan kalender telah dibuat dengan izin yang teridentifikasi dengan jelas. Perincian ini memberi pengguna indikasi yang jelas tentang jenis informasi yang mungkin diberikan ke aplikasi. Selama penginstalan, aplikasi pihak ketiga dapat meminta izin untuk mengakses sumber daya ini. Jika izin diberikan, aplikasi dapat diinstal dan akan memiliki akses ke data yang diminta kapan saja saat diinstal.

Aplikasi apa pun yang mengumpulkan informasi pribadi, secara default, akan membatasi data tersebut hanya untuk aplikasi tertentu. Jika aplikasi memilih untuk membuat data tersedia untuk 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, terlebih dahulu harus diberikan akses secara eksplisit oleh pengguna melalui penggunaan Izin OS Android. Setelah penginstalan, penginstal akan meminta pengguna meminta izin ke sensor dengan nama.

Jika aplikasi ingin mengetahui lokasi pengguna, aplikasi memerlukan izin untuk mengakses lokasi pengguna. Setelah penginstalan, penginstal akan meminta pengguna menanyakan apakah aplikasi dapat mengakses lokasi pengguna. Kapan saja, jika pengguna tidak ingin aplikasi apa pun mengakses lokasinya, maka pengguna dapat menjalankan aplikasi "Pengaturan", masuk ke "Lokasi & Keamanan", dan hapus centang pada "Gunakan jaringan nirkabel" dan "Aktifkan satelit GPS" . Ini akan menonaktifkan layanan berbasis lokasi untuk semua aplikasi di perangkat pengguna.

Metadata Perangkat

Android juga berusaha untuk membatasi akses ke data yang tidak sensitif secara intrinsik, 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, riwayat browser, nomor telepon, atau informasi identifikasi perangkat keras/jaringan. Jika aplikasi meminta akses ke informasi ini pada waktu penginstalan, penginstal akan meminta pengguna menanyakan apakah aplikasi dapat mengakses informasi tersebut. Jika pengguna tidak memberikan akses, aplikasi tidak akan diinstal.

Otoritas sertifikat

Android menyertakan seperangkat Otoritas Sertifikat sistem yang diinstal, yang tepercaya di seluruh sistem. Sebelum Android 7.0, produsen perangkat dapat memodifikasi kumpulan CA yang dikirimkan pada perangkat mereka. Namun, perangkat yang menjalankan 7.0 dan di atasnya akan memiliki kumpulan CA sistem yang seragam karena modifikasi oleh produsen perangkat tidak lagi diizinkan.

Untuk ditambahkan sebagai CA publik baru ke set stok Android, CA harus menyelesaikan Proses Penyertaan CA Mozilla dan kemudian mengajukan permintaan fitur terhadap Android ( https://code.google.com/p/android/issues/entry ) agar CA ditambahkan ke CA Android stok yang disetel di Android Open Source Project (AOSP).

Masih ada CA 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 didorong untuk menyertakan CA pribadi hanya dalam komponen/aplikasi yang perlu memercayai CA ini. Untuk detail selengkapnya, lihat Konfigurasi Keamanan Jaringan .

Penandatanganan Aplikasi

Penandatanganan kode memungkinkan pengembang untuk mengidentifikasi pembuat aplikasi dan memperbarui aplikasi mereka tanpa membuat antarmuka dan izin yang rumit. Setiap aplikasi yang dijalankan di platform Android harus ditandatangani oleh pengembang. Aplikasi yang mencoba memasang tanpa ditandatangani ditolak oleh Google Play atau penginstal paket di perangkat Android.

Di Google Play, penandatanganan aplikasi menjembatani kepercayaan yang dimiliki Google dengan pengembang dan kepercayaan yang dimiliki pengembang dengan aplikasi mereka. Pengembang mengetahui bahwa aplikasi mereka disediakan, tidak dimodifikasi ke perangkat Android; dan pengembang dapat dimintai pertanggungjawaban atas perilaku aplikasi mereka.

Di Android, penandatanganan aplikasi adalah langkah pertama untuk menempatkan aplikasi di Application Sandbox-nya. Sertifikat aplikasi yang ditandatangani menentukan id pengguna mana yang dikaitkan 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 terdefinisi dengan baik.

Saat aplikasi (file APK) diinstal ke perangkat Android, Pengelola Paket 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 ia akan berbagi UID dengan yang lain secara serupa - APK yang ditandatangani.

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 pengembang 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 pada tingkat perlindungan Tanda Tangan, membatasi akses hanya ke aplikasi yang ditandatangani dengan kunci yang sama sambil mempertahankan UID dan Kotak Pasir Aplikasi yang berbeda. Hubungan yang lebih dekat dengan Application Sandbox bersama diizinkan melalui fitur UID bersama di mana dua atau lebih aplikasi yang ditandatangani dengan kunci pengembang 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 pemasangan. Verifikasi aplikasi dapat memperingatkan pengguna jika mereka mencoba memasang aplikasi yang mungkin berbahaya; jika aplikasi sangat buruk, itu dapat memblokir pemasangan .

Manajemen Hak Digital

Platform Android menyediakan kerangka kerja DRM yang dapat diperluas yang memungkinkan aplikasi mengelola konten yang dilindungi hak sesuai dengan batasan lisensi yang terkait dengan konten. Kerangka kerja DRM mendukung banyak skema DRM; skema DRM yang didukung perangkat diserahkan kepada produsen perangkat.

Kerangka kerja Android DRM diimplementasikan dalam dua lapisan arsitektur (lihat gambar di bawah):

  • API kerangka kerja DRM, yang diekspos ke aplikasi melalui kerangka kerja aplikasi Android dan berjalan melalui Dalvik VM untuk aplikasi standar.

  • Manajer DRM kode asli, yang mengimplementasikan kerangka kerja DRM dan memperlihatkan antarmuka untuk plug-in DRM (agen) untuk menangani manajemen hak dan dekripsi untuk berbagai skema DRM

Arsitektur Manajemen Hak Digital pada platform Android

Gambar 3. Arsitektur Digital Rights Management pada platform Android