SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イベントレポート

課題山積のAndroidアプリ開発に
ソフトウェアテストの技術で立ち向かおう

「第二回Androidテスト祭り」レポート

設計段階からセキュリティを確保する

 招待講演では、タオソフトウェア株式会社代表取締役である谷口岳氏による「Androidのセキュリティと品質保証の問題について」と題したセッションが行われた。なお講演内容はタオソフトウェアが執筆した書籍『Android Security 安全なアプリケーションを作成するために』の一部を抜粋したものであり、内容の詳細は同書で学べるとのこと。

4つのセキュリティリスク

 まず谷口氏は、Androidアプリケーション開発で要求される品質保証の方向性が最近変化してきていると言及した。一年前までは「アプリを落とさない」といった要求が強かったが、最近はセキュリティにも注目が集まっているそうだ。ただ現状、落ちるアプリケーションは減っているものの、セキュリティに問題あるアプリケーションは少なからず存在するという。

 セキュリティ対策については、「(「hello world」といった単純なアプリなどを除けば)100%安全であると保証するのは不可能」という現実を認識した上で、「何を守るのか、どのくらい守るのか」を考えて、設計段階から対策すべき、と述べた。守るべき対象の具体例として、「アプリケーション内の著作権データ」「アプリケーションの不正利用」「アプリケーション機能の悪用」「アプリケーション内の個人データ、プライバシーデータ」の4つを挙げ、それぞれのセキュリティリスクと対策を説明していった。

著作権データはどこまで守るのかの検討が重要

 「アプリケーション内の著作権データ」については、まずAndroidアプリケーションにおいて著作権データを抜き出す方法を、PC上での解析と端末上での解析それぞれについて解説した。そして具体例として、セキュリティ用途でタオソフトウェアが開発したtPackageExplorerを紹介。またソースコードの解析方法も解説され、「Androidアプリケーション開発で使用するJavaは解析が容易であり、パスワードなどをソースコード上に直書きすると解析されやすくなる」との注意を行った。

 続いて谷口氏は「アプリケーション内の著作権データ」のセキュリティリスクの対策について解説を行った。対策としてProGuardなどによるソースコードの難読化や、NDKを使った他言語(例えばC)による実装を解説。ただそれらはあくまで時間稼ぎにすぎず、解析を諦める人は増やせるだろうが対策としては不十分と注意した。抜き取りを防止する手段はないため、コピーされると困るファイルやデータは、暗号化、サーバ側への分散、DRM、その他有償ツールの使用、といった手段も考えなければならないと言及した。

 そして、「きちんと保護を行おうとすると、それに応じてコストもかかってくる。それぞれどのレベルまでセキュリティを確保するか考え、それに応じてセキュリティ対策を用意していくのが大事」と結論付けた。

ライセンス制限でアプリの不正利用を防ぐ

 次に「アプリケーションの不正利用」については、アプリケーションを他の人がコピーして無償で公開したり、あるいは有料で転売されたりしている現状が紹介された。

 その対策として、谷口氏はまずGoogle Playが提供していた「コピー防止インストール」機能について触れたが、こちらは抜け穴がいろいろあり有効でなかったと言及。現在の選択肢としてGoogle Play Licensing Serviceを紹介。それにより公開についてライセンスで制限をかけられるようになるとのこと。

外部アプリからの悪用に注意

 3つ目の「第三者アプリがアプリを悪用する」については、アプリケーションや端末の機能を外部から意図しない用途で利用される例を紹介。権限なくとも電話機能を使用可能にしてしまうアプリケーションや、画像ファイルアップロード機能を外部から権限なしで利用可能にしてしまっていた著名なtwitterクライアントの事例が紹介された。

 そうした問題の対策として、谷口氏はリスクのある機能は外部からの呼び出しを禁止にするか、Androidのセキュリティモデルに従って適切な手段で制限すべき、と注意を行った。

プライバシー保護の観点も必要

 また最後に「使用者の個人データ、プライバシーデータ」のセキュリティについて解説が行われた。そこではプライバシーデータを流出させる意思はないものの、知識不足やミスで結果的に流出リスクのあるアプリをリリースしまう例が多いという現状が紹介された。

 そして谷口氏はAndroidのセキュリティモデルを解説し、プライバシー対策として「署名」「ファイルパーミッション、ファイルオーナ」「Androidパーミッション」の説明を行った。

 まず「ファイルパーミッション、ファイルオーナ」について、設定ファイルやデータベースのアクセス権限の設定ミスで情報流出リスクを高めてしまう問題を解説。具体例として、ほかのアプリから個人情報やコンタクト、チャット履歴を閲覧可能にしてしまっていたSkypeの事例が紹介された。

 その対策として、「ファイルパーミッション」「アプリケーションデータディレクトリ」「外部記憶装置の扱い」などについての解説を行い、「特殊なことをしない(基本的にファイルアクセスは自分に限定する、特殊なファイル共有を行わない)」「SDカードと言った外部記録装置は注意が必要。だれでも読み取り可能。書き出しはパーミッション依存。SDカードに書き込むデータは抜き取られても良いデータのみにする」といった注意が行われた。

 また「Androidパーミッション」では、android:exportedの設定ミスにより、対外公開用のpublicフォルダにアカウント情報を格納できてしまうというDropBoxの過去事例が紹介された。

 そしてパーミッションにおける注意点として、パーミッションの構成や設定方法、セキュリティ対策の説明が行われた。そこでは「パーミッションの利用宣言はユーザに許可を要求するものだが、ユーザはよく見ずに流れで許可を与えてしまうことがあるので注意」「独自に定義するパーミッションは、必ずprotection levelをsignature以上にしないと制限として有効にならない」といった解説が行われた。

 その他注意すべきパーミッションとして「READ_CONTACTS+INTERNETは電話帳データをネットの悪意あるサーバに送信できる」「READ_PHONE_STATE+INTERNETはよく使われるが、端末の電話番号も取得できるし、かかってきた電話番号も収集できる」「INTERNETとの組み合わせは、広告などで必要な場合もあるが、スパイウェアと誤認されるリスクもあり安易に使うべきでない」といった解説が行われた。こうした注意は、マルウェアが増加傾向にあるために最近は特に重要だという。またそれに付随してタオソフトウェアのスパイウェア探索ツールtSpyCheckerが紹介された。

 また谷口氏は留意が必要なトピックとして、インテントに言及。インテントについてはActivityManagerがインテントの内容をLogCatに出力しており、LogCat監視プログラムで簡単にインテントの内容を習得できる点に注意が必要だという。

 例えばブラウザ立ち上げ時にURIにアカウント認証情報を含ませると、それを不正取得される可能性が出てくるという。またメール送信機能やブラウザ呼び出し、Google Map読み出しなどでも、インテントにメールアドレスや位置情報が含まれるとのこと。さらにAndroid 2.2以前のOSでは、インテントのセキュアなデータの暗号化機能が不十分で、注意が必要だという。

 結論として、インテントの情報は他のアプリから取得されるリスクがあるという認識を持って、セキュアなデータを含めてはいけないとアドバイスを行った。

 またそれに関連して「アクティビティ、サービス、ブロードキャストレシーバ」「コンテントプロバイダ」について注意が行われた。

 例えばセキュリティ確保のため、android:exportedをfalseに設定する方法があるが、AndroidManifest.xmlのセキュリティ設定では、intentfilter設定によって実質的にandroid:exportedがtrue設定扱いになることがあるという。またコンテンツプロバイダについては、Android 2.2以前ではandroid:exportedをfalseに設定してもアクセスを完全には制限できない。

 そのため、自分自身にインテントを投げたい場合や、以前のバージョンのAndroid対応を行う際は、適切な設定が有効に機能しているか注意が必要であるとのこと。

 なおコンテンツプロバイダへのアクセスとして、android:grantUriPermissionが限定的なアクセスの実現手段として有効であるとの説明も行われた。

次のページ
Androidアプリケーション開発でもJenkinsによるCIは有効

修正履歴

この記事は参考になりましたか?

イベントレポート連載記事一覧

もっと読む

この記事の著者

goyoki(ゴヨキ)

開発やテストに携わる組み込みエンジニア。個人活動としてAndroidテスト部やTDD研究会に所属し、開発を効率化するテストについて検討を続けている。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6616 2012/06/22 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー