Androidにおけるセキュリティ設計と動作(前編)

2012年3月8日(木)
タオソフトウェア株式会社

3.3 ユーザIDとファイルアクセス

アプリケーションのインストール時に、アプリケーションごとに一意なユーザIDが付与されます。別のアンドロイド端末に同じアプリケーションをインストールしても、同じIDは付与されません。また、一度アンインストールしてから再びインストールした場合も、同じIDが付与されるとは限りません。なお、ユーザIDはアプリケーションがアンインストールされるまで変更されません。

アンドロイドで作成されるファイルへのアクセスは、このユーザIDによって制御されます。アプリケーションが作成する主なファイルはデータベースファイルやプリファレンスファイルなどですが、アプリケーションごとにユーザIDが異なることにより、アプリケーションが明示的に許可しない限り、そのアプリケーションが作成したファイルに他のアプリケーションがアクセスすることはできません。また、アプリケーションは一般に別プロセスで動作するため、互いのメモリ空間にアクセスすることもできません。

3.4 パーミッション

アンドロイド端末には、電話をかけたり、SMSを送ったり、通信を行ったりする機能や電話帳などの機能があります。これらの機能がアプリケーションから無制限に利用できてしまうと、アプリケーションが勝手に電話をかけて料金を発生させたり、電話帳からデータを抜き出して外部のサーバにアップロードしたりする恐れがあります。このためアンドロイドでは、アプリケーションのインストール時にアプリケーションがどのような機能を使用するのかを表示し、ユーザに確認とインストールの許可を求めます(図3-4)。

図3-4:インストール時にユーザに許可を求める(クリックで拡大)

ユーザが許可を与えなかった場合、アプリケーションはインストールされません。ユーザが許可を与えた場合、アプリケーションはアンインストールされるまでの間、許可された機能を使用できます。機能の使用について許可を求めるのはインストール時だけであり、それらのパーミッションをインストール後に変更することはできません。

アプリケーションが使用するパーミッションはAndroidManifest.xmlファイルに記載されます。アプリケーションがそれらの機能を使用することを宣言するには、要素を指定します。

リスト3-2 AndroidManifest.xmlへの電話をかけるパーミッションの記載例

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="jp.co.taosoftware.android.sb.contentprovider"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-permission android:name="android.permission.READ_CONTACTS" />
  ...
</manifest>

アンドロイドOSが提供するパーミッションはAndroid DevelopersサイトのManifest.permissionに記載されています。アンドロイドOS 4.0の時点で、110種類以上のパーミッションが存在します。

表3-1 代表的なパーミッション

権限 説明
CALL_PHONE 電話発信
CAMERA カメラの使用
READ_CONTACTS 電話帳データの読み取り
INTERNET ネットワークの利用
ACCESS_NETWORK_STATE ネットワーク状態の取得
BATTERY_STATS バッテリー状態の取得
WRITE_EXTERNAL_STORAGE 外部記憶装置(SDカードなど)の利用

3.4.1 パーミッションによるアクセス制限

要素の記載は、アプリケーション内でどのようなパーミッションを使用するかの制限でしたが、アンドロイドではインテントを使用することで、アプリケーションを構成する部品であるコンポーネントを他のアプリケーションから呼び出すことができます。呼び出される側の機能が他のすべてのアプリケーションから無制限にアクセスできる状態になっているのは問題なので、コンポーネントごとにパーミッションを設定してアクセス制限をかけるという仕組みがあります。

Activityパーミッション
要素に記述します。アクティビティの呼び出しを制限します。呼び出し元がパーミッションを持っていない場合は、呼び出し元でSecurityExceptionを発生させます。
Serviceパーミッション
要素に記述します。サービスの開始とバインドを制限します。呼び出し元がパーミッションを持っていない場合は、呼び出し元でSecurityExceptionを発生させます。
BroadcastReceiverパーミッション
要素に記述します。ブロードキャストの受信が可能かどうかを制限します。SecurityExceptionが発生してもキャッチできない場合があります。
ContentProviderパーミッション
要素に記述します。コンテントプロバイダが提供するデータのアクセスを制限します。コンテントプロバイダではより細かなアクセス制限が可能です。他のパーミッションとは異なり、読み込み(android:readPermission)と書き込み(android:writePermission)の2種類の属性が存在します。その呼び出し元がパーミッションを持っていない場合はSecurityExceptionを発生させます。

コンテントプロバイダでは、URIパーミッションを使ってアクセスを制限することに加えて、さまざまな方法でアクセスを制限することが可能です。詳しくは「第7章 コンテントプロバイダ」を参照してください。

3.4.2 パーミッションの作成

アンドロイドOSが用意しているパーミッションに加えて、独自のパーミッションを作成し、使用することもできます。

独自のパーミッションを作成することはあまりありませんが、他のアプリケーションからコンテントプロバイダへのアクセスを禁止したい場合や、複数のアプリケーションが連動するようなシステムを作成し、システム内のアプリケーションやデータに外部からアクセスできないようにしたい場合に使用できます。

リスト3-3 パーミッションの定義例

<uses-permission
  android:name="jp.co.taosoftware.android.sb.contentprovider.permission.READ_DATA"
/>
<permission
  android:name="jp.co.taosoftware.android.sb.contentprovider.permission.READ_DATA"
  android:protectionLevel="dangerous"
  android:label="@string/permlab_read_data"
  android:description="@string/permdesc_read_data"
  android:permissionGroup="android.permission-group.COST_MONEY"
/>

AndroidManifest.xmlに情報を追加すると、独自のパーミッションを作成できます。作成したパーミッションを使用するには、アンドロイドOSで用意されているパーミッションと同じように、要素を使って宣言します。なお、パーミッションを使用するアプリケーションがその宣言元であっても、要素を指定する必要があります。

この記事のもとになった書籍
Android Security 安全なアプリケーションを作成するために

Android Security 安全なアプリケーションを作成するために

システムの脆弱性を突くスパイウェアの手法を学び、ユーザの個人情報や企業データを情報漏洩のリスクから守る。セキュリティ対策チェックシートや用語集も収録! アンドロイドアプリの開発者が知っておくべき実践ノウハウが満載の一冊です。Android 4.0:Ice Cream Sandwich(APIレベル14)に関する最新情報にも対応!

タオソフトウェア株式会社 著
価格:3,360円 (本体 3,200円+税)
発売日:2012年01月06日発売
ISBN:978-4-8443-3134-6
発行:インプレスジャパン

 
著者
タオソフトウェア株式会社

2005年創業の独立系ソフトハウス、代表取締役 谷口 岳
サーバサイドアプリケーション開発会社としてスタート。Google社のアンドロイドに発表当初より着目し、研究開発を開始。現在はアンドロイド専業(受託開発)として、アンドロイド端末上で動作するアプリケーションやアンドロイド端末と連携して動作するサーバ側アプリケーションを数多く手がけている。日経BP社主催Android Application Award 2010 Springにて「tWakeUpCallMaker」が大賞を受賞。2010年5月に、プログラミング不要でアンドロイドアプリを作成できる「DOROKURI」サービスを開始。記事執筆、講演など多数。
ブログ(開発者向け情報を発信)

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています