Androidには、Androidアプリに必要以上の権限を持たせないように制限するための仕組みが備わっている。具体的には「権限の許可」と「ファイルのアクセス許可」である(図1)。前者は、アプリの動作に必要な権限についてアプリのインストール時にユーザーの許可を得る仕組みのことを指す。例えば、Androidアプリがインターネット接続やGPSによる位置情報取得のためには、それぞれの権限をアプリのインストール時にユーザーから許可を得る必要がある。

図1●権限を制限するための仕組み
図1●権限を制限するための仕組み
[画像のクリックで拡大表示]

 後者は、Linuxのディストリビューションのように、ファイルやディレクトリに対して、読み取り[r]、書き込み[w]、実行[x]などのアクセスを制限する仕組みを指す。Androidアプリが明示的に許可しない限り、アプリが生成するファイルは、他のアプリからのアクセスを制限するように設定されている。

 これらの仕組みにより、Androidアプリはインストール時に特に権限を要求しなければ、他のアプリのデータや機能などへのアクセスができないように制限される。

他のアプリとデータ共有や機能連携をする仕組み

 一方で完全にアプリ間でデータ交換などができないと、すべての機能を個別のアプリに実装しなければならず、アプリの開発効率が低くなってしまう。他のアプリの機能を活用して新しいアプリを作る“マッシュアップ”によるサービスの広がりも期待できない。そこでAndroidでは「Intent」、「Content Provider」と呼ばれる仕組みを用意している。

図2●Intentによる機能の呼び出しイメージ
図2●Intentによる機能の呼び出しイメージ
[画像のクリックで拡大表示]

 Intentは、Androidアプリから他のアプリの機能を呼び出す仕組みである。Intentを使用することにより、カメラ・アプリで撮影した写真を、メール・アプリに渡して友人にこれを送信するといった、アプリ間の連携を実現できる(図2)。具体的にはAndroidのシステム内でメール送信機能があるかどうかを問い合わせるIntentメッセージを発行し、これに対して該当するアプリが応答する形で動作する。複数のアプリがある場合はユーザーに選択肢を提示する。特定の処理を要求に対して、そのIntentを受け付けるかどうかはIntentの受け手側(図2ではメール・アプリ側)で宣言しておく。

図3●Content Providerの使用イメージ
図3●Content Providerの使用イメージ
[画像のクリックで拡大表示]

 Content Providerは、Androidアプリが管理するデータを他のアプリと共有するための仕組みである。他のアプリのデータに直接アクセスすることは制限されているが、アプリがContent Providerの機能を使ってデータを共有している場合は、そのデータにアクセスできる(図3)。Content Provider機能を使ったデータの共有設定は、データを提供する側(図3ではアプリB側)で実施する。なお、共有するデータに対して共有可能なアプリを制限できる他、読み取りや書き込みの制限をかけることもできる。

Androidアプリ開発者は仕組みを理解することが重要

 以上のように、Androidには、アプリが管理するデータを保護しつつ、必要に応じてアプリ同士を連携できるようにする仕組みが備わっている。ただし、Androidアプリは、電話の通話履歴やインターネットの閲覧履歴、電話帳データ、位置情報、カメラ機能で撮影された動画や静止画のデータなどといった、さまざまな情報を扱うことができるため、使い方を誤るとこうした外部のアプリから取り出せてしまう可能性がある。ユーザーが安心してアプリを利用できるように、Androidアプリ開発者はAndroidの仕組みを理解し、アプリが保有するデータや機能を適切に保護することが重要である。

 次回は、Androidの仕組みを適切に使用しなかったために作り込まれたAndroidアプリの脆弱性について例を挙げて紹介する。