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

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

リスト1-3 shared.xmlファイルの内容

$ ls -l /data/data/com.skype.raider/files/shared.xml
ls -l /data/data/com.skype.raider/files/shared.xml
-rwxrw-rw- app_158  app_158     54738 2011-07-03 10:56 shared.xml
$ cat /data/data/com.skype.raider/files/shared.xml
cat /data/data/com.skype.raider/files/shared.xml
<?xml version="1.0"?>
<config version="1.0" serial="29" timestamp="1310374082.19">
  <Lib>
    <Account>
      <Default>(Skype ID)</Default>
    </Account>
    <Audio>
      <SidIpcKeyPrefix>/tmp/</SidIpcKeyPrefix>
    </Audio>
  <BCM>
    <_2>
  (以下省略)

上記から取得したSkype IDを元に、/data/data/com.skype.raider/files/ディレクトリを参照し、SQLiteデータベースファイルmain.dbを取得します。main.dbもすべてのユーザから読み取り可能で、コンタクト情報やチャット履歴データが平文で保存されているため、個人情報の参照が可能です。

リスト1-4 Skype IDディレクトリ

$ ls -l /data/data/com.skype.raider/files/(Skype ID)
ls -l /data/data/com.skype.raider/files/(Skype ID)
drwxrwxrwx app_158  app_158           2011-06-30 10:38 voicemail
-rwxrw-rw- app_158  app_158     33344 2011-07-03 11:03 bistats.db-journal
-rwxrw-rw- app_158  app_158     61440 2011-07-03 11:03 bistats.db
-rwxrw-rw- app_158  app_158    135944 2011-07-03 11:03 main.db-journal
-rwxrw-rw- app_158  app_158    327680 2011-07-03 11:03 main.db
-rwxrw-rw- app_158  app_158      4904 2011-07-03 10:52 config.xml
-rwxrw-rw- app_158  app_158     40960 2011-06-30 10:38 keyval.db
-rwxrw-rw- app_158  app_158         0 2011-06-30 10:38 config.lck
-rwxrw-rw- app_158  app_158     12824 2011-06-30 10:38 keyval.db-journal
drwxrwxrwx app_158  app_158           2011-07-12 19:35 chatsync
$

データベースファイルmain.dbからチャット内容を取得しています。チャット内容が暗号化されずに保存されているため、内容を読み取ることが可能です。ここではsqlite3コマンドを使用していますが、main.dbは誰でも読み書き可能なので、他のアンドロイドアプリから読み込むこともできます。

リスト1-5 main.dbファイルの内容

$ sqlite3 /data/data/com.skype.raider/files/(Skype ID)/main.db
sqlite3 /data/data/com.skype.raider/files/(Skype ID)/main.db
SQLite version 3.7.6.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select from_dispname, body_xml, timestamp from Messages;
select from_dispname, body_xml, timestamp from Messages;
チャット送信者1|チャット内容1|タイムスタンプ1
チャット送信者2|チャット内容2|タイムスタンプ2
チャット送信者3|チャット内容3|タイムスタンプ3

1.1.2 悪意のあるプログラム

Skype社では、悪意のあるプログラムがインストールされると個人情報が抜き取られると告知しています。情報を抜き取るプログラムを作成するのは非常に簡単です。上記の手順さえ知っていれば、rootなどの特殊な権限は必要ありません。一般的なアプリケーションの権限を使って、/data/data/com.skype.raider/files/shared.xmlを読み取り、Skype IDを取得し、そこからデータベースファイルのパスを作成します。データベースファイルも読み取り可能なので、作成したデータベースを直接読み込んだり、データベースファイル自体をネットワーク経由で送信したりすれば、個人情報を収集することが可能です(図1-1)。

図1-1:Skypeアプリからのデータの収集(クリックで拡大)

1.1.3 なぜこのようなことが起こったのか

Skypeは、WindowsやMacなど、さまざまなプラットフォームで動作するように移植されています。Windows 7にインストールされたSkypeアプリの場合は、C:\Users\\AppData\Roaming\Skype\\フォルダの下にmain.dbなどのファイルが存在することがわかります(図1-2)。

図1-2:ユーザディレクトリ内のSkypeファイル(クリックで拡大)

このディレクトリ構造はアンドロイド版と同じであり、shared.xmlファイルもmain.dbも暗号化されていません(図1-3)。アンドロイド版Skypeも他のプラットフォームから移植されたと考えられます。

図1-3:main.db の内部を表示(クリックで拡大)

たとえばWindows版の場合、ユーザディレクトリ内のSkypeファイルはWindows上の他のユーザからは参照できない位置にあります。しかし、Skypeを使用しているユーザが第三者の悪意のあるプログラムをインストールした場合、アンドロイド版と同じく、Skypeに登録した個人情報やチャット履歴などのデータが漏洩することになります。本来ならばWindows版でも保存するデータを暗号化すべきところですが、受信したメールを暗号化せずに保存するアプリケーションが普通に存在するように、このレベルの問題はWindowsでは脆弱性と見なされていないと言えるでしょう。同じ仕組みであるにもかかわらず、Windows版では脆弱性として扱われないのに対し、アンドロイド版では脆弱性として扱われるということです。アンドロイドアプリはスマートフォン上で動作するため、Windowsよりも強いセキュリティが必要になります。Windowsのファイルに関する権限とユーザ権限の関係は、アンドロイドの権限構造とは異なります。セキュリティモデルについてWindowsと同じ概念を持ち込むのは非常に危険です。

Skypeは、通話データを暗号化するなど、セキュリティに関して通常より厳しいスタンスを取っています。今回そのSkype社がこのような単純な脆弱性問題※3を発生させてしまったのは、/data/data/ディレクトリの下は読み取り不能であるという勘違いと、読み取り不能なのでデータを暗号化する必要はないという判断が重なってしまったからでしょう。/data/data/の下にあるディレクトリであっても、他のアプリケーションから読み書き可能なファイルを作成できるということと、他のアプリケーションから参照可能であることは脆弱性と見なされることを知っていれば、このような問題は起きなかったのではないのでしょうか。

※3 参考:Skype社公式リリース「Android版Skypeの情報流出の脆弱性について」

著者
タオソフトウェア株式会社

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

連載バックナンバー

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

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

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

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