Android の権限

Android の権限は、ユーザーの認知度を高め、アプリによる機密データへのアクセスを制限するコントロールを提供します。Android 8.0 以前での権限の設定には、ホワイトリスト登録が含まれています。ホワイトリスト登録を行わないと、特権アプリは priv-app パスに含まれていても無効になります。Android 9 以降では、正しくホワイトリストに登録されていないアプリを使用しようとするデバイスは起動しません。

有害な可能性があるアプリ(PHA)に対する保護の強化により、以下が改善されました。

  • 有害な可能性があるアプリの動作に対する透明性。
  • アプリ動作のユーザー制御。
  • 権限で保護されている個人データを使用する場合のアプリ デベロッパーの裁量。

パッケージ インストールと権限

Android 9 以前は、パッケージ インストールと権限コントロールの機能が PackageInstaller パッケージ(//packages/apps/PackageInstaller)に含まれていました。Android 10 以降では、権限コントロール機能が別のパッケージ PermissionController//packages/apps/PermissionController)に含まれています。図 1 に Android 10 における 2 つのパッケージの存在を示します。

システムアプリのパッケージ インストールおよび権限コントロール機能の分離と、ユーザーがインストールしたアプリによるそれらの使用
図 1. Android 10 のパッケージ インストールおよび権限コントロール機能

ホワイトリストとアクセス

Android 6.0 以降では、ランタイム時にアプリが危険な権限へのアクセスをリクエストします。Android 10 では、危険な権限の変更または許可をユーザーに求める、操作の認識(AR)ランタイム権限が追加されています。

Android 8.0 では、/etc/permissions ディレクトリのシステム設定 XML ファイルで特権アプリを明示的にホワイトリスト登録する必要がありました。Android 9 以降では、特権権限をホワイトリスト登録しないとデバイスを起動できません。

内部 API の公開を制限し、アプリが誤ってプラットフォーム ライブラリにアクセスするのを防ぐために、Android 7.0 でネイティブ ライブラリの名前空間が導入されました。これにより、システム ライブラリがアプリ ライブラリから分離され、デバイス メーカーが独自のネイティブ ライブラリを追加できるようになりました。

Android 10 以降、アプリがデバイスの画面コンテンツにアクセスするには、署名権限とユーザーの同意の両方が必要です。スクリーンショットの撮影などでサイレント キャプチャ機能を使用する特権アプリは、代わりに MediaProjection クラスを使用する必要があります。

透明性とプライバシー

Android 6.0 以降では、Wi-Fi サービス プロバイダとパケット アナライザがアクセスできないように、デバイスの出荷時 MAC アドレスが保護されています。Android 10 以降で追加された制限により、アプリは特権権限のホワイトリストに登録されていない限り、不変のデバイス ID にアクセスできません。携帯通信会社にも影響するため、デバイス ID に関連する情報については、接続セクションで説明します。

Android 9 以前では、ユーザーはアプリに位置情報へのアクセス権を付与する際に永続的な選択を行います。Android 10 以降では、3 状態の位置情報の利用許可機能により、アプリにデバイスの位置情報へのアクセスを許可する方法が 3 つ用意されています。これらの権限要件は、ターゲット SDK に関係なく Android 10 のアプリに適用されます。

Android 10 以降での他の透明性およびプライバシー機能に対する権限の設定

簡素化された設定

Android 6.0 以降では、権限設定が簡素化されています。

  • init によって起動されるサービスのアンビエント機能は、サービス設定のすべての要素を 1 つの .rc ファイルに保持します。init によって起動されないサービスの機能を設定する場合は、代わりに fs_config.c を使用してファイル システム機能を設定します。
  • Android 7.x 以前では、デバイス固有の android_filesystem_config.h ファイルを使用してファイルシステム機能とカスタムのデバイスメーカー AID またはいずれかを指定し、Android ID(AID)メカニズムを拡張します。Android 8.0 以降は、ファイルシステム機能を拡張する新しいメソッドがサポートされています。
  • Android 8.0 では、USB コマンドの処理がデバイス固有の init スクリプト(HAL レイヤの代用)からネイティブ USB デーモンに移行されました。Android 8.0 以降で起動するすべてのデバイスに、USB HAL インターフェースを実装する必要があります。