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 Android Runtime (ART). Namun, aplikasi juga dapat ditulis dalam kode asli. Aplikasi diinstal dari satu file dengan ekstensi file .apk.

Blok bangunan 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 sebuah aplikasi. Ini juga menentukan izin mana yang diperlukan.

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

  • Layanan : Layanan adalah kumpulan kode yang berjalan di latar belakang. Itu bisa 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 tetap diputar. Layanan membuat musik tetap berjalan meskipun UI telah selesai.

  • Penerima Siaran : BroadcastReceiver adalah objek yang dibuat ketika mekanisme IPC yang dikenal sebagai Intent dikeluarkan oleh sistem operasi atau aplikasi lain. Sebuah 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 dijalankan di Application Sandbox . Secara default, aplikasi Android hanya dapat mengakses sumber daya sistem dalam rentang terbatas. Sistem mengelola akses aplikasi Android ke sumber daya yang, jika digunakan secara tidak benar atau 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 pada fungsi sensitif (misalnya tidak ada API Android untuk memanipulasi kartu SIM secara langsung). Dalam beberapa kasus, pemisahan peran memberikan tindakan keamanan, seperti halnya 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 memanfaatkan API yang dilindungi pada perangkat, aplikasi harus menentukan kemampuan yang diperlukan dalam manifesnya. Semua Android versi 6.0 dan 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 pada aplikasi selama aplikasi tersebut diinstal. Untuk menghindari kebingungan pengguna, sistem tidak memberi tahu pengguna lagi tentang izin yang diberikan kepada aplikasi, dan aplikasi yang termasuk dalam sistem operasi inti atau dibundel oleh OEM tidak meminta izin dari pengguna. Izin dihapus jika aplikasi dihapus instalasinya, sehingga instalasi ulang selanjutnya 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 kapan pun mereka mau, seperti menonaktifkan GPS, radio, atau wi-fi.

Jika suatu aplikasi mencoba menggunakan fitur yang dilindungi yang belum dideklarasikan dalam manifes aplikasi, kegagalan izin biasanya akan mengakibatkan pengecualian keamanan dikembalikan ke aplikasi. Pemeriksaan izin API yang dilindungi diterapkan pada tingkat serendah mungkin untuk mencegah pengelakan. Contoh pengiriman pesan pengguna ketika aplikasi diinstal sambil 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 menyatakan izinnya sendiri untuk digunakan oleh aplikasi lain. Izin tersebut tidak tercantum di lokasi di atas.

Saat menentukan izin, atribut ProtectionLevel memberi tahu sistem bagaimana pengguna diberi tahu tentang aplikasi yang 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 mengirim maksud siaran SMS, yang tidak tersedia untuk aplikasi pihak ketiga, namun dapat digunakan oleh aplikasi yang sudah diinstal sebelumnya oleh OEM. Izin ini menggunakan izin SignatureOrSystem.

Bagaimana Pengguna Memahami Aplikasi Pihak Ketiga

Android berupaya untuk memperjelas kepada pengguna saat mereka berinteraksi dengan aplikasi pihak ketiga dan memberi tahu pengguna tentang kemampuan yang dimiliki aplikasi tersebut. Sebelum pemasangan aplikasi apa pun, pengguna diperlihatkan pesan yang jelas tentang berbagai izin yang diminta aplikasi. Setelah instalasi, pengguna tidak diminta lagi untuk mengonfirmasi izin apa pun.

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

Beberapa platform lain menggunakan pendekatan berbeda terhadap pemberitahuan pengguna, meminta izin di awal setiap sesi atau saat aplikasi sedang digunakan. Visi Android adalah membuat pengguna beralih antar aplikasi 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.

Selain itu, banyak penelitian antarmuka pengguna menunjukkan bahwa permintaan berlebihan terhadap pengguna menyebabkan pengguna mulai berkata "OK" pada setiap dialog yang ditampilkan. Salah satu tujuan keamanan Android adalah menyampaikan informasi keamanan penting secara efektif kepada pengguna, yang tidak dapat dilakukan menggunakan dialog yang biasanya diabaikan oleh pengguna. Dengan menyajikan informasi penting satu kali, dan hanya jika informasi tersebut penting, pengguna akan lebih cenderung memikirkan apa yang mereka setujui.

Beberapa platform memilih untuk tidak menampilkan informasi sama sekali tentang fungsionalitas aplikasi. Pendekatan tersebut mencegah pengguna memahami dan mendiskusikan kemampuan aplikasi dengan mudah. Meskipun tidak mungkin bagi semua pengguna untuk selalu mengambil keputusan yang tepat, model izin Android membuat informasi tentang aplikasi mudah diakses oleh banyak pengguna. Misalnya, permintaan izin yang tidak terduga dapat mendorong pengguna yang lebih berpengalaman untuk mengajukan pertanyaan penting tentang fungsi aplikasi dan menyampaikan kekhawatiran mereka di tempat seperti Google Play yang dapat dilihat oleh semua pengguna.

Izin pada Pemasangan Aplikasi — Google Terjemahan Izin Aplikasi yang Diinstal — Gmail
Izin pada Pemasangan Aplikasi -- Google TerjemahanIzin Aplikasi yang Diinstal — Gmail

Gambar 1. Tampilan izin aplikasi

Komunikasi Antarproses

Proses dapat berkomunikasi menggunakan mekanisme tipe UNIX tradisional mana pun. 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 langsung menggunakan pengikat.

  • Intent : Intent adalah objek pesan sederhana yang mewakili "niat" untuk melakukan sesuatu. Misalnya, jika aplikasi Anda ingin menampilkan halaman web, aplikasi tersebut akan mengekspresikan "Intent" untuk melihat URL dengan membuat instance Intent dan menyerahkannya ke sistem. Sistem menemukan beberapa bagian kode lain (dalam hal ini, Browser) yang mengetahui cara menangani Intent tersebut, dan menjalankannya. Intent juga dapat digunakan untuk menyiarkan acara menarik (seperti notifikasi) ke 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. Suatu aplikasi dapat mengakses data yang telah diekspos oleh aplikasi lain melalui Penyedia Konten, dan aplikasi juga dapat menentukan Penyedia Kontennya 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 dalam mengamankan data pengguna dan menghindari munculnya kerentanan keamanan.

API yang Sensitif terhadap Biaya

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 terlindungi yang dikendalikan 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 notifikasi jika ada aplikasi yang mencoba mengirim SMS dengan kode pendek yang menggunakan layanan premium yang mungkin akan menimbulkan 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 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 sensitif pengguna hanya tersedia melalui API yang dilindungi

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

Penyedia konten sistem yang mungkin berisi informasi pribadi atau yang dapat diidentifikasi secara pribadi seperti kontak dan kalender telah dibuat dengan izin yang diidentifikasi dengan jelas. Perincian ini memberi pengguna indikasi yang jelas tentang jenis informasi yang mungkin diberikan ke aplikasi. Selama instalasi, aplikasi pihak ketiga mungkin 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 pada aplikasi tertentu. Jika suatu aplikasi memilih untuk membuat data tersedia untuk aplikasi lain melalui IPC, aplikasi yang memberikan akses dapat menerapkan izin pada mekanisme IPC yang diberlakukan 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 instalasi, penginstal akan meminta pengguna meminta izin ke sensor berdasarkan nama.

Jika suatu aplikasi ingin mengetahui lokasi pengguna, maka aplikasi memerlukan izin untuk mengakses lokasi pengguna. Setelah instalasi, penginstal akan meminta pengguna menanyakan apakah aplikasi dapat mengakses lokasi pengguna. Kapan pun, jika pengguna tidak menginginkan 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 berupaya membatasi akses ke data yang pada dasarnya tidak sensitif, namun secara tidak langsung dapat mengungkapkan karakteristik 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 instalasi, penginstal akan meminta pengguna menanyakan apakah aplikasi dapat mengakses informasi tersebut. Jika pengguna tidak memberikan akses, aplikasi tidak akan diinstal.

Otoritas sertifikat

Android menyertakan sekumpulan Otoritas Sertifikat sistem terinstal, yang dipercaya di seluruh sistem. Sebelum Android 7.0, produsen perangkat dapat memodifikasi kumpulan CA yang dikirimkan pada perangkat mereka. Namun, perangkat yang menjalankan versi 7.0 ke atas akan memiliki serangkaian CA sistem yang seragam karena modifikasi oleh produsen perangkat tidak lagi diizinkan.

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

Masih ada CA yang khusus untuk perangkat dan tidak boleh disertakan dalam rangkaian 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 lebih lanjut, 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 pada platform Android harus ditandatangani oleh pengembangnya. Aplikasi yang mencoba memasang tanpa ditandatangani ditolak oleh Google Play atau pemasang paket di perangkat Android.

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

Di Android, penandatanganan aplikasi adalah langkah pertama untuk menempatkan aplikasi di Kotak Pasir Aplikasinya. Sertifikat aplikasi yang ditandatangani menentukan id pengguna mana yang dikaitkan dengan aplikasi mana; aplikasi yang berbeda dijalankan dengan 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, Manajer 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 APK tersebut akan berbagi UID dengan APK lain yang 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. Permohonan 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 diperbolehkan 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 mengingatkan pengguna jika mereka mencoba memasang aplikasi yang mungkin berbahaya; jika suatu aplikasi sangat buruk, aplikasi dapat memblokir pemasangan .

Manajemen Hak Digital

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

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

  • API kerangka DRM, yang diekspos ke aplikasi melalui kerangka aplikasi Android dan dijalankan melalui ART VM untuk aplikasi standar.

  • Manajer DRM kode asli, yang mengimplementasikan kerangka 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 Manajemen Hak Digital pada platform Android