Daftar yang diizinkan untuk izin dengan hak istimewa

Aplikasi dengan hak istimewa adalah aplikasi sistem yang berada di direktori priv-app pada partisi image sistem. Partisi yang digunakan untuk rilis Android adalah:

  • Android 9 dan yang lebih tinggi: /system, /product, /vendor
  • Android 8.1 dan yang lebih lama: /system

Secara historis, produsen perangkat memiliki sedikit kontrol atas izin tanda tangan | istimewa yang dapat diberikan ke aplikasi dengan hak istimewa. Mulai Android 8.0, produsen dapat secara eksplisit memberikan izin dengan hak istimewa dalam file XML konfigurasi sistem di direktori /etc/permissions. Mulai Android 9, implementor dapat secara eksplisit memberikan atau menolak semua izin dengan hak istimewa. Jika izin dengan hak istimewa tidak diberikan, perangkat tidak akan melakukan booting.

File privapp-permissions.xml hanya dapat memberikan atau menolak izin untuk aplikasi dengan hak istimewa di partisi yang sama. Misalnya, jika aplikasi di partisi /product meminta izin dengan hak istimewa, permintaan tersebut hanya dapat diberikan atau ditolak oleh file privapp-permissions.xml di /product.

Menambahkan daftar yang diizinkan

Daftar yang diizinkan izin untuk aplikasi dapat dicantumkan dalam satu file XML atau dalam beberapa file XML yang terletak di direktori frameworks/base/etc/permissions:

  • /etc/permissions/privapp-permissions-OEM_NAME.xml
  • /etc/permissions/privapp-permissions-DEVICE_NAME.xml

Tidak ada aturan ketat yang berlaku untuk cara konten diatur. Implementator perangkat dapat menentukan struktur konten selama semua aplikasi dari /system/priv-app diizinkan. Misalnya, Google telah mengembangkan satu daftar yang diizinkan untuk semua aplikasi dengan hak istimewa. Sebaiknya gunakan organisasi berikut:

  • Izin untuk aplikasi yang sudah disertakan dalam hierarki Project Open Source Android (AOSP) tercantum di /etc/permissions/privapp-permissions-platform.xml.
  • Untuk aplikasi lain, gunakan file dalam bentuk, /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

Menyesuaikan daftar yang diizinkan

AOSP menyertakan implementasi daftar yang diizinkan yang dapat disesuaikan sesuai kebutuhan.

Jika izin harus ditolak, edit XML untuk menggunakan tag deny-permission, bukan tag permission. Contoh:

<!-- This XML file declares which signature|privileged permissions to grant to
privileged apps that come with the platform -->

    <permissions>
      <privapp-permissions package="com.android.backupconfirm">
        <permission name="android.permission.BACKUP"/>
        <permission name="android.permission.CRYPT_KEEPER"/>
      </privapp-permissions>

      <privapp-permissions package="com.android.cellbroadcastreceiver">

        <!-- Don't allow the application to interact across users -->

        <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
        <permission name="android.permission.MANAGE_USERS"/>
        <permission name="android.permission.MODIFY_PHONE_STATE"/>
        <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
        <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
      </privapp-permissions>
    ...

Menemukan izin yang tidak ada

Untuk menemukan izin yang tidak ada saat memulai perangkat baru, aktifkan mode log transisi:

ro.control_privapp_permissions=log

Pelanggaran dilaporkan dalam file log. Izin non-hak istimewa diberikan. Tindakan ini memastikan perangkat tetap dalam status berfungsi sekaligus tetap memberikan daftar pelanggaran. Format pesan error adalah sebagai berikut:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Semua pelanggaran harus diatasi dengan menambahkan izin yang tidak ada ke daftar yang diizinkan yang sesuai. Perhatikan bahwa di:

  • Android 9 dan yang lebih tinggi, pelanggaran izin dengan hak istimewa akan mencegah perangkat dimulai. Sebagai gantinya, Anda harus mengizinkan atau menolak semua izin dengan hak istimewa secara eksplisit.
  • Android 8.0 dan yang lebih rendah, izin yang tidak ada tidak diberikan ke aplikasi yang terpengaruh meskipun berada di jalur priv-app.

Menerapkan daftar yang diizinkan

Setelah membuat daftar yang diizinkan, aktifkan penerapan runtime dengan menetapkan properti build ro.control_privapp_permissions=enforce.

Daftar yang diizinkan hanya diperlukan untuk izin yang dideklarasikan oleh aplikasi dengan package="android". Status properti ro.control_privapp_permissions harus mematuhi Izin Bagian 9.1 dalam Dokumen Definisi Kompatibilitas (CDD).