Androidで作るセキュアなアプリのポイントとは
※この記事は、書籍『Android Security 安全なアプリケーションを作成するために』の第2章の内容を、ThinkIT向けに特別にオンラインで公開しているものです。詳しくは記事末尾の書籍紹介欄をご覧ください。
本章では、セキュアなアプリケーションを作成する上で検討すべきポイントについて説明します。守る必要のあるものとないものを整理していくための基準となるアンドロイドのセキュリティの考え方について見ていきます。
2.1 セキュリティ要件とは
一口にセキュリティといっても、さまざまな捉え方があります。想定すべき脅威は何か、どのようなデータを守るのか、どの程度の強度で守るのか、といった点で指針となるものの基本的な考え方をセキュリティポリシーと呼びます。アプリケーションを設計する際には、アプリケーションが提供する機能とセキュリティポリシーを踏まえ、設計、実装などの技術でどこまでをカバーし、運用でどこまでをカバーするのかを確定しておく必要があります。これをセキュリティ要件と呼びます。あらかじめセキュリティ要件を決定しておくことにより、個々の開発者のセキュリティ意識に依存することなく、アプリケーションを構成するすべてのモジュールを統一されたセキュリティレベルで設計/開発することが可能になります。
2.2 保護すべき項目の範囲
悪意のある第三者によってアプリケーションが不正使用されたり、データを盗まれて悪用されたりすることがないよう、通信を含めたすべてのアプリケーションデータを暗号化し、アプリケーションが使用するリソース情報も暗号化し、さらにアプリケーションを使用するときに利用者認証を行うなどして、アプリケーションのセキュリティを強化できます。しかし、すべてを暗号化してしまうと、アプリケーションの処理効率や、データサイズ、製造コストの面でデメリットが大きいことは明らかです。守るべきデータと守る必要のないデータを区別し、本当に必要な処置だけを施すのが理想的です。アンドロイド端末は普通の携帯電話と比べてオープンであり、アプリケーションの自由度も高いと言えます。セキュリティ要件を検討する際には、「多機能電話機」という視点ではなく、「持ち運びできるPCに電話機能が付いたもの」という視点で捉えることで、守るべきデータの範囲を検討するとよいでしょう。少なくとも、以下の4点について検討しておく必要があります。
- プライバシー保護
- 著作権保護
- アプリケーションの悪用抑止
- アプリケーションの不正利用抑止
2.3 プライバシー保護
2.3.1 連絡先アプリのデータ
ほとんどのアンドロイド端末には、連絡先アプリがプリインストールされています。連絡先アプリはいわゆる住所録であり、住所、氏名、電話番号、電子メールアドレスなどを登録できます。
一方、アンドロイドOSでは、パーミッションを設定するだけでアプリケーションが連絡先情報にアクセスすることが可能です。OSがデータを公開している以上、ユーザのプライバシーに属する情報が漏洩するかどうかは、データを使用する各アプリケーションの振る舞いに依存することになります。開発者は自分のアプリケーションが情報漏洩の引き金にならないように注意する必要があります。
また、このデータはアプリケーションが野方図に使用してよいと考えるべきではないでしょう。アンドロイドOSは、連絡先にアクセスするアプリケーションのインストール時に、アプリケーションが要求するパーミッションをユーザに通知してインストールの許可を求めますが、これだけでは十分とは言えません。アプリケーションは、連絡先のデータを使用する目的をアプリケーション自身が用意したユーザインターフェースを通じてユーザに通知し、ユーザの許可を得るようにしたほうがよいでしょう。これは、後述するプライバシー情報についても同じことが言えます。
2.3.2 プライバシー情報の範囲
スマートフォンが普及し、さまざまなサービスが登場している中で、プライバシー情報の範囲も広がってきています。また、情報がユーザのプライバシーに関わるものであるかどうかを判断する基準はあいまいであるのが現状です。プライバシー侵害ではないかとユーザからクレームが多数寄せられ、停止に追い込まれたサービスも出てきている現状を考えると、アプリケーションの開発者はユーザのプライバシー保護を重要な設計項目として考える必要があります。直接的な個人情報ではありませんが、ユーザのプライバシーに関わる情報の一例として以下を挙げることができます。
- アプリケーションの起動履歴
いつどのようなアプリケーションを起動したのかを履歴で確認できるので、ユーザが興味を持っている分野を特定できる情報と言えます。 - ブラウザのURL参照履歴
ユーザが興味を持っている情報分野の傾向をある程度捕捉できる情報と言えます。 - 位置情報
ユーザの行動範囲を捕捉できる情報と言えます。
これらの情報を使用するアプリケーションを作成する場合には、連絡先と同様、情報を取得することをユーザに明示し、ユーザの許可を得ることが望ましいと言えます。基本的には、オプトイン※1の形で許可を求めるのがよいでしょう。また、取得した情報の用途をユーザに明示するとともに、情報の利用をユーザがいつでも停止できる手段を用意しておく必要もあるでしょう。取得した情報については、情報を利用するアプリケーションの用途と管理するデータの内容に応じて保護レベルを検討することになりますが、個人情報であるという認識を持ち、できる限り対策を施すべきです。
※1 ユーザが許可を出して初めて機能を有効にすること。
2.3.3 個人情報保護法
業務用アプリケーションの場合は、個人情報保護法も意識する必要があります。現在、個人情報の保護に関する法律(略称は個人情報保護法)が施行されており、個人情報取り扱い事業者には、情報の取得方法や利用目的の特定、制限などについて義務が課せられています。
個人情報保護法第2条第1項は次のように定義されています。
- 第2条第1項
- この法律において「個人情報」とは、生存する個人に関する情報であって、当該情報に含まれる氏名、生年月日その他の記述等により特定の個人を識別することができるもの(他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを含む)をいう。
業務用アプリケーションは、取り扱うデータの規模によっては、個人情報保護法の適用を受ける可能性があり、適用を受ける場合、情報は法律に従って厳重に管理される必要があります。
たとえば、業務用のデータをOS標準の連絡先アプリに登録するのは非常に危険であると言えるでしょう。重要なデータはできる限り端末内には保存しないようにし、サーバから適宜ダウンロードするように設計するのが理想的です。やむを得ずデータを端末内に保存する場合は、データの暗号化といったデータ抜き取りへの対策を施す必要があります。また、個人情報を送受信するようなアプリケーションの場合は、パケット盗聴に対する対策として通信データを暗号化する必要もあります。
同様に、サーバ上の業務用の顧客データにアクセスするアプリケーションも個人情報保護法の対象となる可能性があります。情報にアクセスすべきではない第三者がアプリケーションを不正に使用して顧客データにアクセスすることがないよう対策を施す必要があります。