■NexusOneにWhisperCoreをインストールしたメモ
以前にAndroidでの個人情報漏えい対策(DroidWall)の記事に「WindowsのZoneAlarmやMacOSXのLittle Snitchのように、通信時にアラームをあげてくれるタイプの製品が登場することを期待したい」と書いたのだが、その通りのパーソナルファイアウォール実装がWhisperMonitorとしてリリースされたので試してみたメモ。
WhisperCore
http://www.whispersys.com/whispercore.html
WhisperCore 0.4アップデートメモ
http://blog.isnext.net/issy/archives/1173
WhisperCore 0.5アップデートメモ
http://blog.isnext.net/issy/archives/1272
■WhisperCoreをインストールする
WhisperMonitorはWhisper SystemsからWhisperCoreというカスタムROMに含まれるアプリとして提供されているため、以下のページからNexusOne用のインストーラをダウンロードして端末にカスタムROMとしてインストールを行う。(カスタムROMをインストールしたことない人、ROM Manager以外で標準ROMに戻す方法を知らない人はインストールしない方が賢明です、きっと。)
WhisperMonitor説明
http://www.whispersys.com/whispermonitor.html
WhisperCoreインストーラダウンロード
http://www.whispersys.com/whispercore.html
今回はMacOSX版をダウンロードして実験。CyanogenMod 7.0.2.1がインストール済み(oem unlock済み、root化済み、CWM Recovery導入済み)のNexusOneを書き換え。Whisper Core Installerは端末のoem unlockを実行するので、保証を無くしたくない人は実行してはいけない(現時点でWhisperCoreが対応しているNexusOneやNexusSを使っている人でそういう人は少数だと思うが)。
1)USBデバッグをonの状態でMacにUSB接続する。
2)MacにダウンロードしたWhisper Core Installerを起動する
3)ダイアログに沿って進める
4)完了 とっても簡単w
5)端末の起動時にパスフレーズを設定する(毎回起動時に入力するため)
WhisperCoreはセキュリティ強化?したカスタムROMのため、標準で内蔵ストレージが初期化&暗号化される。SDcardの暗号化はオプションとなっていてインストール過程では勝手に暗号化されることはないが、念のためインストール前にROMのバックアップとSDcardに保存されたバックアップデータをPCのストレージに退避させておくことをオススメ。WhisperCoreとして元のROMに戻す機能も用意されていないので、元に戻すためには自分で準備をしておくことが必要になる。
■WhisperCoreのレビュー
インストール再起動後のアンドロイドバージョンは2.3.3、モデル番号が Full Android on Passion、カーネルバージョン 2.6.35.7-59427-ga04760d-dirty moxie@searching #70、ベースバンドバージョン 32.36.00.28H_4.06.00.12_7、ビルド番号 full_passion-userdebug 2.3.3 WS0.3 eng. moxie.20110502.221518 test-keysとなっている。カスタムROMの内容自体はほぼ標準のAndroid2.3.xでレスポンスも悪くない感じ。アプリケーションとして WhisperCore Updater と WhisperMonitor が独自にインストールされている。また日本語環境にも対応しており、言語設定で日本語に設定することが可能で、日本語入力プログラムとしてオムロンソフトウェア社のJapanese IME Ver.1.3.5が導入されているのですぐに利用が可能。
インストール直後にはWhisperMonitorはdisableの設定になっているが、アプリを起動してメニューを出してEnableしてあげれば即座に有効になる。その後ブラウザなどを利用するとダイアログが出て、宛先のホスト名 or IPと通信ポートが表示され、どのように許可を出すのか求められるようになる。許可の方法は以下の2つの項目の組み合わせ。
1)宛先
・ホストとポートをセットで限定した許可(To this address and port)
・ホストのみ限定した許可(To this address)
・ポートのみ限定した許可(To this port)
・限定なしで許可(Anywhere)
2)許可期間
・一度だけ許可(Once)
・再起動するまで許可(Until reboot)
・常に許可(Always)
サンプルで許可(Allow)前提で書いているが、もちろん拒否(Deny)することも可能。条件を選んで許可か拒否のいずれかを選ぶことになる。ダイアログ上はアクセスしようとしているアプリ名 or システム名が宛先とポート番号とセットで提示されるので表示項目としては必要最低限ではないかと思われる。実際のところIPアドレスで表示される場合も多くどこが所有しているアドレスなのかわからないので微妙だなぁと思う。ある程度判断材料を提示しようとするならIP表示の場合は可能な限りwhoisなどで所有者まで表示してほしいと思う。
一度設定した許可/拒否の条件は、WhisperMonitorアプリのFilter Rulrsタブでアプリ単位に確認できる。アプリをクリックすると設定された条件がリストされるので、変更したい条件を長押しするとPOPメニューからルールの削除やテンポラリ化ができる。アプリ毎の許可条件をわかりやすく確認できるのでこれは嬉しい。表示される条件は許可/拒否共に、再起動するまで or 常に の条件に設定されているもののみで、一度だけのものは表示されないので注意。Connection Historyタブには一度だけ条件も含めて許可/拒否した履歴がアプリのアイコンと共にリストされるため確認には非常に便利になっている。
実際にこれらを使用してみると、如何にアプリがたくさんのアクセスをバックグラウンドでしようとしているか(広告表示のアクセスを含め)実感することができる。残念ながらこちらで記事にしていたTaintDroidのように通信パケットの内容までは表示してくれないのだが、いずれそうした中身も確認&フィルタリングできるようになってくれると嬉しいなぁと思う。久しぶりにTaintDroidもその後をさらりと調べてみたが、まだ実装したROMについての言及は無いようで見つけることはできなかった。ディスカッションフォーラムもあまり活気無くやや残念な感じ。どこかでひっそり着々と開発実装が進んでいることを期待したい。
とりあえずまだ改善の余地はあるものの、アプリ単位宛先単位で通信が制御できるようになるこの実装は非常に素晴らしい試みであると思われる。
■WhisperCoreのroot
仕組み的にrootが有効になっていないと実現できないはずと思ったので、WhisperCoreのroot状況について確認してみた。MacのTerminalからadb shellで接続してsuしてみると、実にあっさりとrootになることができた。これはフォントの入れ替えもできるかな?と思い、日本語フォントの入れ替え手順を実行してみると、SDCardにインストールされたbusyboxを使って当然のように入れ替え可能。フォント自体は端末再起動しないとちゃんと反映されなかったが、adb shellからはroot権限でいろいろ実行することが可能。
じゃあ要rootアプリはどうだろうと言うことでROM Managerをインストールしてみたところ、「特権コマンドを実行中にエラーが発生しました」ということでやはりNG。superuserアプリをインストールすればいいかな?と思ったが、インストール後、suのupdateインストールまでは再起動込みでなんとかできたところ、ROM Managerからはやはりエラーになりroot権限が利用できない状況は変わらず…。これについてはまた時間のある時に確認したい。
とりあえずコマンドラインではrootでいろいろできそうなので、しばらくこの環境上で常用するアプリの動作など試してみようと思う。TaintDroidも言及していたが、こうしたレベルのセキュリティを実装するためにはAndroidではカスタムROMという手法を取らざるを得ないというのが残念に思う。むしろAndroidに標準で組み込んで欲しい機能だと思うだが…携帯として利用するエンドユーザ層を考えるといろんな意味で標準で搭載というのは難しいんだろうなぁ…と思ってしまう。せめて標準の範囲内で利用可否の選択肢を提供してもらえるといいんだが…iOSとの差別化の観点からも実現してもらいたいと切に願う。