Android デバイスのセキュリティ

すべてのコンピューティングデバイスと同様、Android の AIR は、ネイティブセキュリティモデルに準拠しています。同時に、AIR では、安全なインターネット接続アプリケーションを開発者が簡単に作成できるようにするための独自のセキュリティ規則を維持しています。

Android 上の AIR アプリケーションでは Android パッケージ形式を使用するので、インストールには Android セキュリティモデルが適用されます。AIR アプリケーションインストーラーは使用されません。

Android セキュリティモデルには、次に示す主要な 3 つの要素があります。

  • 権限

  • アプリケーションの署名

  • アプリケーションユーザーID

Android 権限

Android の多くの機能は、オペレーティングシステムの権限メカニズムによって保護されます。保護された機能を使用するには、アプリケーションに権限が必要であることを AIR アプリケーション記述子で宣言する必要があります。ユーザーがアプリケーションをインストールしようとすると、Android オペレーティングシステムでは、インストールを続行するために必要な権限がすべて表示されます。

ほとんどの AIR アプリケーションでは、アプリケーション記述子に Android 権限を指定する必要があります。デフォルトでは、権限は含まれていません。AIR ランタイムを通じて公開される Android の保護された機能を使用するには、次の権限が必要です。

ACCESS_COARSE_LOCATION
アプリケーションが、Geolocation クラスを介して Wi-Fi およびセルラーネットワーク位置データにアクセスすることを許可します。

ACCESS_FINE_LOCATION
アプリケーションが Geolocation クラスを介して GPS データにアクセスすることを許可します。

ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE
アプリケーションが NetworkInfo クラスを介してネットワーク情報にアクセスすることを許可します。

CAMERA
アプリケーションがカメラにアクセスすることを許可します。

INTERNET
アプリケーションがネットワーク要求を行うことを許可します。また、リモートデバッグも許可します。

READ_PHONE_STATE
着信呼び出しがあったときに、AIR ランタイムがオーディオをミュートすることを許可します。

RECORD_AUDIO
アプリケーションがマイクにアクセスすることを許可します。

WAKE_LOCK および DISABLE_KEYGUARD
アプリケーションが、SystemIdleMode クラス設定を使用してデバイスのスリープ状態を防ぐことを許可します。

WRITE_EXTERNAL_STORAGE
アプリケーションがデバイスの外部メモリカードへ書き込むことを許可します。

アプリケーションの署名

Android プラットフォーム用に作成されたすべてのアプリケーションパッケージには署名が必要です。Android 上の AIR アプリケーションはネイティブの Android APK 形式でパッケージ化されるので、アプリケーションの署名は AIR の規則ではなく Android の規則に従って行われます。Android と AIR で使用するコード署名はよく似ていますが、次のような大きな違いがあります。

  • Android では、開発者が秘密キーを所有しているかどうかが署名によって検証されますが、開発者の ID の検証には署名が使用されません。

  • Android マーケットに送信されるアプリケーションの場合、少なくとも 25 年間有効な証明書が必要です。

  • Android では、別の証明書へのパッケージの署名の移行がサポートされません。更新の署名が別の証明書によって行われている場合、ユーザーは、更新されたアプリケーションをインストールする前に元のアプリケーションをアンインストールする必要があります。

  • 同じ証明書を使用して署名された 2 つのアプリケーションでは、互いにキャッシュやデータファイルにアクセスできる共有 ID を指定できます(このような共有は AIR では容易ではありません)。

アプリケーションユーザーID

Android では Linux カーネルを使用します。インストールされたすべてのアプリケーションには Linux タイプのユーザー ID が割り当てられます。この ID によって、ファイルアクセスなどの操作の権限が決定されます。アプリケーションディレクトリ、アプリケーション記憶領域ディレクトリ、および一時ディレクトリ内のファイルは、ファイルシステムの権限によってアクセスから保護されます。外部ストレージへ書き込まれるファイル(つまり、SD カード)は、SD カードがマスストレージデバイスとしてコンピューターにマウントされている場合、他のアプリケーションまたはユーザーが読み込み、変更、削除を行うことができます。

インターネット要求とともに受信されるクッキーは、AIR アプリケーション間で共有されません。

アプリケーションのインストール

デフォルトで、Android 上の AIR アプリケーションは、アドビが管理および更新する共有ランタイムライブラリを使用します。AIR 3 からは、「キャプティブ」ランタイムでアプリケーションをバンドルできます。デバイス上には共有 AIR ランタイムも存在するかもしれませんが、キャプティブランタイムでインストールされたアプリケーションは、共有 AIR ランタイムではなくこのバージョンのランタイムを使用します。新しいバージョンの AIR ランタイムの公開時に、キャプティブランタイムは自動的には更新されません。

重要: キャプティブランタイムを使用する場合は、関連するセキュリティのアップデートが公開された際に、自身でランタイムを更新する必要があります。

Android における暗号化されたデータ

Android 上の AIR アプリケーションでは、ビルトイン SQL データベースに用意されている暗号化オプションを使用して、暗号化されたデータを保存できます。

EncryptedLocalStore クラスは、データの保存に使用できますが、そのデータは暗号化されません。代わりに、Android セキュリティモデルはアプリケーションユーザー ID を使用して他のアプリケーションからのデータを保護します。共有のユーザー ID を使用するアプリケーションと、同じコード署名証明書で署名されたアプリケーションは、同じ暗号化されたローカルストアを使用します。

重要: ルート権限のある電話では、ルート権限を使用して実行するアプリケーションからは他のどのアプリケーションのファイルにもアクセスできます。したがって、暗号化されたローカルストアを使用して保存されるデータは、ルート権限のあるデバイス上では保護されません。