Androidのアプリケーションにはどんなセキュリティ機構があるのでしょうか。いくつか見ていくことにしましょう。

 まずは、パーミッション(Permission)です。Androidアプリケーションの大きな特徴の一つに、Permissionによる権限付与というセキュリティ機能があります。アプリケーションの初期状態、何も権限を付与していない状態では、ネットワークやカメラなどのシステム機能やセンシティブな情報へのアクセスができません。

Manifestファイルの落とし穴

 もし、アプリケーションがインターネットに接続し、ファイルを送受信する場合、ネットワークに接続するための権限をユーザーに許可してもらわなければなりません。同様に、無線LANの情報を取得したい場合やカメラを使用したい場合、連絡先の情報にアクセスしたい場合などは、その権限をユーザーに許可してもらわなくてはなりません。これら権限を許可してもらって初めて、そのアプリケーションが起動できるような仕組みになっています。

 一つのアプリケーションには、複数の権限を付与できます。しかし、そのアプリケーションを使用するユーザーはそれら権限を個別に指定できません。例えば、インターネットへの接続は許可するが連絡先の情報へのアクセスは許可しない、といったことはできません。アプリケーションが求めている権限をすべて許可するかしないか、そのどちらかです。

 ユーザーが許可すると、アプリケーションを端末にインストールすることができ、アプリケーションを使用できるようになります。しかし、許可しない場合はそのアプリケーションをインストールすることはできません。

 Androidでは、多くの権限が用意されていて、開発者はアプリケーションが必要とする権限をAndroidManifest.xmlに記述します。図9の例では、インターネットへのアクセス、ネットワーク接続情報の取得、無線LAN接続情報の取得という三つの権限をユーザーに求めることになります。アプリケーションを開発していく上で権限は必要不可欠なものです。この機能を実装したい、あの機能を実装したいと考えていくと、場合によっては必要となるパーミッションが増えたり、この機能は不必要ということで減ったりすることがあります。そのたび、マニフェストファイルを変更していくことになります。人によってはこの作業が面倒、はじめからすべての権限を記述してしまえと思う人もいるかもしれません。しかし、これは誤りです。

図9●AndroidManifest.xmlで指定するパーミッションには危険な組み合わせが存在する
図9●AndroidManifest.xmlで指定するパーミッションには危険な組み合わせが存在する
[画像のクリックで拡大表示]