知っていれば防げたはずのAndroidケーススタディ
※この記事は、書籍『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がディレクトリ名となります。