2011年4月16日

Android版Skypeの内部データベースを確認して見た

SkypeのAndroid版にセキュリティ上の問題がある事がニュースになっている。
【注意】Android版skypeで個人情報ダダ漏れ。アンインストールしましょう。 - Hacking My Way ~ itogのhack日記

元々の発見者のブログ記事はこれの様だ。
[Updated] Exclusive: Vulnerability In Skype For Android Is Exposing Your Name, Phone Number, Chat Logs, And A Lot More | Android Police

興味があったので早速自分の携帯でチェックして見た。

とりあえずAstro File Managerで /data ディレクトリを開いて見たが、何も見れなかった。

次に、Android SDKの adb コマンドを試す。
> adb shell
で adb のシェルに入る。
$ ls -l /data
ls -l /data
opendir failed, Permission denied
$
やはり /data ディレクトリの中味は見れない。ただ、/data/data だと一覧が表示された。
$ls -l /data/data
drwxr-x--x app_135 app_135 2011-04-13 16:10 org.openintents.filemanager
drwxr-x--x app_132 app_132 2011-04-13 16:11 com.android.keepass
drwxr-x--x app_130 app_130 2011-04-10 00:41 com.thedeck.android.app
drwxr-x--x app_1 app_1 2010-08-03 20:03 com.htc.weather.agent
drwxr-xr-x app_1 app_1 2010-08-03 19:33 com.htc.CustomizationSetup
drwxr-x--x app_71 app_71 2010-10-05 01:34 com.skype.raider
...
「com.skype.raider」というのが問題のディレクトリらしい。
$ ls -l /data/data/com.skype.raider
ls -l /data/data/com.skype.raider
opendir failed, Permission denied
$
/data/data/com.skype.raider ディレクトリの一覧表示は出来なかった。もちろんこれはRoot化していないAndroid端末では当然の事(のはず)。

次に、/data/data/com.skype.raider/files/shared.xml の存在を確認してみる。
$ ls -l /data/data/com.skype.raider/files/shared.xml
ls -l /data/data/com.skype.raider/files/shared.xml
-rw-rw-rw- app_71 app_71 51210 2011-03-08 15:24 shared.xml
$
おぉ~、確かにあるある! しかもパーミションは「全ユーザーが読み書きOK」になっている。

ではいよいよファイルの中味を表示して見よう。
$ 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="168" timestamp="1299633891.14">
<lib>
<account>
<default>(Skype ID)</Default>
</Account>
<audio>
<sidipckeyprefix>/tmp/</SidIpcKeyPrefix>
確かに自分のSkype IDが表示された!

さて、さらに内部データベースが格納されているディレクトリを一覧表示。
$ls -l /data/data/com.skype.raider/files/(Skype ID)/

-rw-rw-rw- app_71 app_71 0 2010-10-05 01:35 config.lck
-rw-rw-rw- app_71 app_71 12824 2010-10-05 01:35 keyval.db-journal
drwxrwxrwx app_71 app_71 2010-10-05 01:38 chatsync
-rw-rw-rw- app_71 app_71 40960 2010-10-05 01:35 keyval.db
-rw-rw-rw- app_71 app_71 5776 2011-03-08 15:24 config.xml
-rw-rw-rw- app_71 app_71 12824 2010-10-05 01:35 griffin.db-journal
-rw-rw-rw- app_71 app_71 28672 2010-10-05 01:35 griffin.db
drwxrwxrwx app_71 app_71 2010-10-05 01:35 voicemail
-rw-rw-rw- app_71 app_71 164672 2011-03-08 15:25 main.db-journal
-rw-rw-rw- app_71 app_71 33344 2011-03-08 15:25 bistats.db-journal
-rw-rw-rw- app_71 app_71 487424 2011-03-08 15:25 main.db
-rw-rw-rw- app_71 app_71 69632 2011-03-08 15:25 bistats.db
確かに全部のファイルがパーミッション全開だ。

ではいよいよ main.db というファイルをPC側にダウンロードする。

adbのシェルから抜けてPC側で、
> adb pull /data/data/com.skype.raider/files/(Skype Id)/main.db \work\main.db
を実行すると、一瞬でPC側にmain.dbがコピーされた。

さてこの内容をどうやって確認しようかと思ったが、「SQLite Manager」というFireFoxのアドオンがあったのでこれをインストールして開いてみた。

「SQLite Manager 0.7.0」FireFox Add On
https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/


左側にテーブルの一覧が表示されている。


Accountsテーブルのフィールド一覧はこんな感じ。

(画像をクリックして拡大可能)



EmailアドレスやSkypeクレジットの残高、Call Forward用の電話番号などがあるのが分かる。

公開する為にプロフィールに登録している情報だけでなく、残高やCall Forward用の電話番号など公開するべきでない情報までが平文のままで保存されているのは困る。

Account情報の他に、通話記録、チャット履歴、友人の一覧などのテーブルがある。

これはマズイ。とりあえず今すぐSkypeはアンインストールした方が良さそうだ。
(2011/4/27 追記: この問題は既に修正済みなので最新版が入っていれば今は心配はない)

そうしないと、悪意を持った他のアプリケーションがこれらの情報を自由に利用したりどこかに送信したりする事があり得る。

「悪意を持ったアプリケーションなんてインストールしてないよ」と思い込むのは危険だ。既にインストールされている普通のアプリでも、開発者がその気になればアップデートでSkypeの情報を読み取って送信する機能を付け加える事が可能だ。つまり新規インストールでなく既存アプリのアップデートでもこの脆弱性を利用して情報を盗まれる危険性があるという事だ。



それにしても、どうしてこんな基本的なミスが起こってしまったのだろうか。通常のやり方でDBを作成すれば、自動的に自分のアプリからしか参照出来ない様なパーミッションが付加されるはずだ。
throw Life - AndroidのFile入出力サンプル

ただ、下の方法を使うと他のアプリからでも読み書き可能になるらしい。
OutputStream output = openFileOutput(dst,
Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

もしこれに似たようなミスが原因だとすると、Android版を開発したプログラマは今頃、職を失っているのではないだろうか。。。いや、テスト担当者の責任になるんだろうか。いずれにせよ、開発者としては身につまされる思いがする。





2011/4/20 追記:
早速Skypeアプリが更新された。更新後、下の通りパーミッションが適切に修正されているのが確認出来た。
$ ls -l /data/data/com.skype.raider/files/shared.xml
ls -l /data/data/com.skype.raider/files/shared.xml
-rw------- app_139 app_139 54794 2011-04-20 12:54 shared.xml
$ cat /data/data/com.skype.raider/files/shared.xml
cat /data/data/com.skype.raider/files/shared.xml
/data/data/com.skype.raider/files/shared.xml: Permission denied
$



2012/4/4 追記:
CodeZineにこんな記事があったのでメモ。
AndroidアプリにおけるDBファイルの正しい使い方:CodeZine
SQLiteDatabase#openOrCreateDatabase を使うとパーミションが644になる。
Context#openOrCreateDatabaseでかつMODE_PRIVATEを指定して使うと660になる。
との事。








.

2011年4月14日

SugarSyncをLinuxで動かして見た

人気急上昇中のファイル同期サービス SugarSyncをLinuxで利用する方法

上のエントリにも書いた通り、Linuxで(強引に)SugarSyncを利用する方法は2つある。

ひとつは、Linux上でWindowsの仮想マシンを動かして、そこにSugarSyncをインストールしておき、仮想化ソフトのフォルダ共有機能を使ってLinux側にあるフォルダを同期させる方法。

2つ目は、Linux上で「Wine」を使ってWindows用のSugarSyncクライアントソフトを動作させてしまう方法。

今回、この2番目の方法を実際にやってみたのでメモしておこう。

Linuxの環境は、Ubuntu 10.10 (32bit)を使用している。

まずはWineをインストール。
sudo apt-get install wine

次に、Windows用SugarSyncクライアント(「SugarSync Manager for Windows」)をダウンロード。
https://www.sugarsync.com/downloads/
ダウンロードしたファイル(SugarSyncSetup.exe)に実行可能属性を付けた後、実行。
chmod +x SugarSyncSetup.exe
./SugarSyncSetup.exe

おもむろにインストーラが立ち上がった。


デフォルト設定のまま続行してインストール完了。

問題無し! と思いきや、日本語が表示されない。

仕方なくアンインストールし、英語を選択してやり直す。


インストール完了。

今度は無事表示された。英語なので当たり前かww。

最初に同期対象のフォルダを選べと言われるが、とりあえず全てチェックを外しておいた。

「SugarSyncファイルマネージャ」のメイン画面

「同期フォルダの管理」

「ファイル転送状態」

この様に問題なくあっさりと動作してしまった。

SugarSyncも素晴らしいけれども、今回は「Wine」のすごさに驚かされた。今までほとんど使った事が無かったが、これからもWindows版しかないソフトをLinuxで動かす必要がある場合にはまずWineを試そうと思う。


今日の結論

Wineって美味しい!





2012/6/8 関連記事を追加:
Windows/Mac/LinuxでSugarSyncの代わりに使えそうな4つのクラウドストレージ

2012/8/7 追記:
 2012年8月7日現在、Ubuntu 11.10上で再度試した限りでは、インストール時にエラーが出て動作させる事が出来なかった。
Ubuntu 11.10+Wineの環境でインストーラを起動するとほぼ最後まで順調に進むものの…

この通り最後にエラーが出てインストール出来なかった。
残念!
なので僕はLinuxでSugarSyncを使うのはほぼ諦める事にして、Wualaに移行した。WualaならLinux(Ubuntu 11.10)上でも全く問題無く動作するし、機能的にもほぼ同等だ。










.


KeePass + SugarSync + KeePassDroidで安全なパスワード管理を

永らくパスワード管理は自分の記憶力に頼る派だったのだが、最近さすがにそれにも限界を感じ始めていた。

そこでぼちぼち何かツールを使ってみようかと、評判の良いパスワード管理ツールを探してみた。
最強のパスワード管理ツール5選! : ライフハッカー[日本版]

ちょっと見た所、KeePassというのが良さそうだ。Windows、Mac、Linux、iOS、Androidで動く。

それにソースコードが公開されているというのも安心感を与えてくれる。
KeePass Password Safe

Android版はこちら
KeePassDroid

インストール方法や大体の使い方はこの辺りで
KeePassでパスワードをより厳重に管理する方法 | nanapi [ナナピ]

『KeePassDroid』~複数のID・パスワードを簡単管理!PCとも連携できる~ | andronavi (アンドロナビ)

Windows版を使って見た感想

Windows版は2.X系と1.X系の2つがあり、両方がアクティブに開発され続けているらしい。その違いはこちらに書かれている。セキュリティ的にはほとんど変わらなさそうだが、2.X系の方が少し機能が多い。今回はVersion 2.15をインストールして見た。


正直、もっと早くから使っていれば良かったと思う。今までしょっちゅう「パスワード忘れました」ボタンをクリックするはめになっていたのが、KeePassさえあればこれからは大丈夫だ。強力なパスワードの自動生成機能やブラウザへの自動入力機能も使い出すと本当に便利で手放せなくなる。

Android版を使って見た感想

Android版(KeePassDroid)の2011年4月13日時点での最新バージョンの1.9.2では残念ながらKeePass 2.X系のデータベースは編集出来ず表示のみ可能との事。

ただ表示オンリーと割りきって使えば決して使い勝手は悪くない。アプリを起動して、エントリの詳細画面を開いた時点でステータス通知領域に「Copy username」と「Copy password」というメニューが表示されるので、これを使えばユーザー名やパスワードを打ち間違える事も無くなる。

SugarSyncでの同期

複数のPC間でKeePassデータベースを同期して使うには、SugarSyncの「同期フォルダの管理」画面からKeePassデータベースの保存されているフォルダを同期対象に指定するだけでOKだ。各PC毎に同期する/しないが設定出来るし、もちろん同期先のフォルダも個別に指定可能だ。

簡単過ぎて拍子抜けしてしまう。素晴らしい!


Androidとの同期もSugarSyncを使えば可能だ。ただ自動で同期する様にはなっていないので、定期的に同期元のPCを指定してデータベースファイルを「ダウンロード」している。



Linux版も試して見た

Linux版はここからダウンロード出来る。
KeePassX – Downloads

Ubuntu 10.10を使っているので、10.04対応バージョンの設定をリポジトリに追加して、後は「システム管理」メニューの「Synapticパッケージマネージャ」でKeePassXを選んでインストールすればOKだった。

ただ現在のバージョンのKeePassXはKeePass 2.Xのデータベースは読み込めない。そこで、Windows PC側で前もってデータベースをKeePass 1.X形式でエクスポートしておく必要がある。エクスポートしたファイルをLinux側へコピーして開けば問題なく読み込む事が出来る。

読み込んだ内容をLinux側で編集する事も出来るが、それをしてしまうと今度はWindows側のデータベース(KeePass2.X)と整合性が取れなくなってしまう。仕方が無いので今はLinux側で編集する事は諦めている。

もちろん、Windows側でもKeePass 1.X系を使うのであれば、上手く同期する事さえ出来ればどちらで編集しても問題なく使う事が出来るだろう。

WindowsとLinuxでデータベースファイルを同期するために、Linux側ではWineを使ってSugarSyncのWindows版クライアントを動かす事にした。
人気急上昇中のファイル同期サービス SugarSyncをLinuxで利用する方法

結果、意外とすんなりと動いたので驚いている。これについては詳しくは別のエントリに書くことにしたい。


今日の結論

パスワード管理は厳重に。KeePassいいね!




2011年8月/23日 追記:

Version 2と1を併用するのであれば下の方法を使うとさらに便利。
KeePass で kdbx と kdb を同時に保存する方法 | ru_426


2011年11月24日 追記:

LinuxでもVersion 2が使えるとの事。今度試そう。
KeePassをバージョンアップ | 電子虚数空間