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

2012年3月9日(金)
タオソフトウェア株式会社
ANDROID_ID
ANDROID_IDは、64ビットの16進文字列として表示されるAndroid端末ごとに一意な値であり、端末を工場出荷状態にするとリセットされ、新しい値が割り当てられます。Android 2.2(Froyo)以前は、100%信頼できる値ではありませんでした。また、大手メーカー製の一部の端末にはすべて同じANDROID_IDを返すというバグがあるので注意してください。

リスト3-13 ANDROID_IDの取得

String android_id = android.provider.Settings.Secure.getString(
  getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
Log.v(TAG, "ANDROID_ID=" + android_id);

リスト3-14 出力例

10-24 14:25:53.823: V/Activity(11900): ANDROID_ID=d53d1d733aa1c9c1

ここでは、アンドロイドで使用可能な固有識別子について説明しました。これらの値は携帯電話でのみ取得可能であったり、値の有効期限が異なったりします。デバイスを識別する情報が必要なのか、ユーザを識別する情報が必要なのかに応じて、アプリケーションで使用すべきIDの種類が異なるでしょう。これらの値を使用するにあたっては、それぞれの値の特性を理解し、アプリケーションの要件を満たすかどうかについて十分に検討してください。

3.6 まとめ

アンドロイドOSが持っているセキュリティを維持するための仕組みについてまとめてみます。

1. セキュリティ機能を構成する要素
  • 証明書
  • ユーザID
  • パーミッション
  • ファイルのアクセス許可
2. 証明書
  • アプリケーションの作者を識別するだけではなく、パーミッションの一部としても使用される。
  • アンドロイドアプリの開発時は、自己証明書を使用することで問題ないが、証明書の管理は厳重に行う必要がある。
  • 証明書が一致しない場合、アンドロイドマーケットでアプリケーションの更新を行うことはできない。
  • 証明書が一致しない場合、端末上でアプリケーションをバージョンアップすることはできない。
3. ユーザID
  • アプリケーションは固有のユーザIDを持つ。
  • アプリケーションはOSや他のアプリケーションにアクセスできない。
4. パーミッション
  • 自分以外の機能やデータにアクセスする場合はパーミッションを宣言する。
  • パーミッションは静的であり、基本的に、実行時に追加または変更することはできない。
  • パーミッションは自分で作成することもできる。
5. ファイルのアクセス許可
  • アンドロイドOSはアプリケーションが作成したデータに標準のアクセス許可を付与する。
  • アプリケーションは独自のファイルアクセス許可でファイルを作成することもできる。
6. 固有識別子
識別子として使用できる情報は次のとおり:
  • UUID
    アプリケーション内で生成、管理する。アプリケーションがアンインストールされた場合や端末初期化された場合は再生成が必要。値の生成に対して特にパーミッションは必要ない。
  • IMEI
    端末メーカーが端末に設定する値であり、電話機能を持つ端末でのみ取得可能。端末と1:1に対応する値であり、端末を初期化しても値は変わらない。このため、他のサービスでも利用されていた場合、行動追跡に結び付く可能性がある。
    値の取得にはREAD_PHONE_STATEパーミッションが必要。ユーザが変わっても値が変わらないので、ユーザ識別子としては問題があり、識別子として使用することは推奨されない。
  • 電話番号、IMSI、ICCID
    SIMカードに設定されている情報であり、電話機能を持つ端末でのみ取得可能。値の取得にはREAD_PHONE_STATEパーミッションが必要。IMEIと同じ理由により、識別子として使用することは推奨されない。
  • MACアドレス
    WiFiやBluetoothのハードウェアから取得する。端末と1:1に対応する値であり、端末を初期化しても変わらない。該当ハードウェアを搭載しない端末からは値を取得できない。
  • シリアル番号
    アンドロイドOS 2.3以降で対応。端末と1:1に対応する値であり、端末を初期化しても変わらない。電話機能を持たない端末で取得でき、電話機能を持つ端末の場合は固定値などが取得される。値の取得には特にパーミッションは必要ない。
  • ANDROID_ID
    OSが用意する情報。端末を初期化したときに値が生成される。端末と1:1に対応する値であり、アンドロイドOS 2.2以前は取得した値を信用できない。値の取得に対して特にパーミッションは必要ない。
この記事のもとになった書籍
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メルマガ会員のサービス内容を見る

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