知っていれば防げたはずのAndroidケーススタディ

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

※この記事は、書籍『Android Security 安全なアプリケーションを作成するために』の第1章の内容を、ThinkIT向けに特別にオンラインで公開しているものです。詳しくは記事末尾の書籍紹介欄をご覧ください。

現在、アンドロイドOSは携帯電話(スマートフォン)用のOSとして爆発的な普及を見せています。アンドロイドOSはLinuxをベースにしていますが、Linuxのすべての機能が実装されているわけではありません。また、アンドロイドアプリはJavaで開発するのが主流ですが、Javaのすべての機能が使えるわけではありません。一般的なOSとJavaの感覚でアンドロイドアプリを開発してしまうことで、意図せずにセキュリティホールを生み出してしまうことがあります。ここでは、「知っていれば防げたのに」という事例を2つ挙げてみたいと思います。

1.1 Skypeアプリの脆弱性

Skypeとは、インターネットを使って音声通話やビデオ通話等を行うサービスで非常に有名なアプリケーションです。2011年4月16日にアンドロイド版Skypeに個人情報を取得できる脆弱性が発見され、同年4月21日に修正が行われています。

脆弱性により流出する情報:

  • Skypeに登録した個人情報
  • Skypeコンタクト情報
  • チャットの履歴

原因:

  • 設定ファイルとデータベースファイルのアクセス許可がすべてのアプリケーションから読み書きできる状態になっている
  • データが暗号化されずに平文で格納されている

通常のアンドロイドアプリでは、設定情報などを保存するためにプリファレンスを利用する場合は/data/data//shared_prefsディレクトリにファイルが保存され、データベースを利用する場合は/data/data//databasesディレクトリにファイルが保存されます。この場合、保存されたファイルはアンドロイドOSのセキュリティ機能によって保護され、アプリケーションが意図的に公開しない限り、他のアプリケーションからアクセスできないようにアクセス許可が適切に設定されます。

しかしSkypeアプリでは、設定ファイルやデータベースファイルを通常の位置ではなく、独自に生成した/data/data/com.skype.raider/filesディレクトリの下に保存しています※1。アンドロイドOSでは、パッケージ名ディレクトリの下にあるfilesディレクトリは、そのアプリケーションが自由にファイルの入出力を行うことができる場所であり、アクセス許可の設定もアプリケーション自身に任されています。今回の脆弱性は、Skypeアプリがアクセス許可の設定を適切に行っていなかったことが原因で発生しています。

1.1.1 チャット履歴の取得例

com.skype.raiderディレクトリとcom.skype.raider/filesディレクトリのアクセス許可を調べてみましょう。ディレクトリの読み取りは他のアプリケーションに許可されていないため、ここではrootユーザで実行します。

リスト1-1 /data/data/com.skype.raiderディレクトリ

# ls -l /data/data/com.skype.raider/
ls -l /data/data/com.skype.raider/
drwxrwx--x app_158  app_158           2011-07-12 16:42 cache
drwxr-xr-x system   system            2011-07-12 16:33 lib
drwxrwx--x app_158  app_158           2011-07-12 16:29 databases
drwxrwx--x app_158  app_158           2011-07-12 16:44 files
drwxrwx--x app_158  app_158           2011-07-12 16:29 shared_prefs

リスト1-2 /data/data/com.skype.raider/filesディレクトリ

# ls -l /data/data/com.skype.raider/files
ls -l /data/data/com.skype.raider/files
-rwxrw-rw- app_158  app_158     54738 2011-07-03 10:56 shared.xml
drwxrwxrwx app_158  app_158           2011-07-12 19:35 (Skype ID名ディレクトリ(※2))
-rwxrw-rw- app_158  app_158         0 2011-06-30 10:37 shared.lck
-rwxrw-rw- app_158  app_158        16 2011-06-30 10:37 csf
-rwxrwxrwx app_158  app_158   2559052 2011-06-30 10:37 skypekit

設定ファイル/data/data/com.skype.raider/files/shared.xmlがすべてのユーザから読み取り可能であることがわかります。このファイルからユーザのSkype IDを読み取ることができます。アプリケーションがインストールされると、アンドロイドOSによってアプリケーションごとにユーザIDが作成されます。この端末にインストールされたSkypeアプリの場合、ユーザIDは「app_158」です。以降の操作は、「app_158」ユーザ以外の一般的なアプリケーション権限を持つユーザとして実行したものです。

  • ※1 com.skype.raiderはSkypeアプリのパッケージ名。
  • ※2 実際にはSkype IDがディレクトリ名となります。
著者
タオソフトウェア株式会社

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

連載バックナンバー

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

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

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

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