« GRCのDNS BenchmarkでDNSをスピードアップ | トップページ | 公衆無線LANのセキュリティはかなりお寒い »

2010年11月22日

iPhoneアプリの通信をパケットキャプチャ

写真共有SNS「Instagram」のiPhoneアプリが、パスワードを平文で送信していた(参考記事1)。最新版1.0.4で修正されたというので、本当に直っているかどうかを確認するため、パケットキャプチャを取った。Webブラウザで使うサービスなら、通信が暗号化されているかどうかをブラウザの鍵アイコンで判別できる。しかしアプリは簡単に判別する手段がなく、パケットキャプチャを取るしかない。

iPhoneの通信をパケットキャプチャする方法はいくつか考えられるが、WindowsのICS(インターネット接続共有)を使って、Windows上のWiresharkでキャプチャすることにした。ICS以外に、ARP SpoofingによってiPhoneとADSLモデム間の通信を盗聴する方法や、無線LANの通信を第三者傍受する方法も考えられる。

我が家のネットワークは、ADSLのブロードバンドモデムに無線LANアクセスポイントをブリッジ接続し、PCやiPhoneを無線LANで接続している。無線LANアクセスポイントは4ポートのスイッチングハブを内蔵している。ここにPCを有線接続し、ICSで無線LANと有線LANをルーティングする。

(通常)
インターネット ←→ ADSLモデム ←→ 無線LAN AP ←無線→ iPhoneやPC

(ICS構成)
インターネット ←→ ADSLモデム ←→ 無線LAN AP ← 有線→  PC ←無線→ iPhone

まずPCとiPhoneを無線LANでアドホック接続する。ワイヤレスネットワーク接続のプロパティ→ワイヤレスネットワークで適当なSSIDを追加する。念のためWEPで暗号化しておく。「これはコンピュータ相互(アドホック)のネットワークで、ワイヤレスアクセスポイントを使用しない」をチェックすればアドホック接続用SSIDとなる。「ブロードキャストしていない場合でも接続する」「範囲内にあるとき接続する」もオンにしておく。この時点でPCの無線LANインタフェースにはIPアドレスが割り当てられていない。アドホックの無線LANのSSIDがiPhoneから見えて接続できるが、通信はできない。

次にICSを設定する。Windows XPの場合、ローカルエリア接続のプロパティ→詳細設定で「インターネット接続の共有」にチェックを入れればよい。

ファイアウォールが有効になっていると、パケットのルーティングができない。ファイアウォールの詳細設定で、特定のインタフェースだけ有効/無効にすることができるようだ。これを試してみる価値はあるが、今回はPC全体で無効とした。我が家のネットワークはNATルータを経由しているので、外部からの攻撃はブロックできるはずだ。もちろんパケットキャプチャが終わったらすぐ有効に戻しておく。

有線LAN側でICSを有効にすると、無線LAN側に192.168.0.1/255.255.255.0のIPアドレスが自動的に割り当てられる。このアドレスは変更できない。困ったことにADSLモデムと重複してしまう。やむなくADSLモデムを192.168.1.1に変更した。ユーザからの声が多かったのか、Windows 7で192.168.1.137に変更されたようだ。

これでiPhoneからの通信をルーティングできるはずだが、一度リブートした方がよい。リブートするまでICS用のDHCPサーバが正常に動作しないことが何回かあった。リブート後にPCとiPhoneの両方を上で設定したSSIDに接続すると、192.168.0.xxxがiPhoneに割り当てられる。ゲートウェイとDNSサーバは192.168.0.1になっているはずだ。

あとはiPhoneでアプリを起動して通信し、そのパケットをWiresharkでキャプチャすればよい。以前のバージョンのInstagramは確かにパスワードを平文で送信していた。1.0.4(注)はログイン時の通信をSSLで暗号化していて、ユーザ名やパスワードが盗聴できなくなっていいる。これで安心だ。

(注)App Store上の表記。アプリのAbout画面ではv1.9.5。

TechCrunchの記事はこう書いている。

FoursquareとGowallaにもまったく同一の問題があった。同様の欠陥がある無名のiPhoneアプリとなれば数えきれないほどだろう。

日本でも2008年12月に高木浩光氏が指摘していた(参考記事2)。

このように、(Webブラウザの場合では、WebサイトがちゃんとSSLを使っているかどうかは利用者が目視で確認することができたのに対し、)個別に作られたアプリケーションの場合は、それがちゃんと暗号化を施しているかどうかは、通信を傍受するなどして確かめてみないとわからないという問題がある。

アプリの通信を暗号化するかどうかは、開発者の判断やセキュリティ意識に任されている。SDKが暗号通信を強制したり、App Storeが審査基準に加えたりしないかぎり、この手の問題は繰り返すだろう。App Storeにあるアプリをホイホイとダウンロードして、パスワードなど本来秘密にすべき情報を入力するのは、かなり危険な行為である。見られると困る写真をアップロードしているわけではないと言う人がいるかもしれない。しかしパスワードを盗まれてヌード写真などをアップロードされてしまうと、SNS内でその人の評判はあっという間に落ちてしまう。自分がやったのではないと証明したり評判を回復したりするのはそう簡単ではない。

(参考記事)

InstagramもiPhoneアプリでセキュリティー無視(数日後には修正の予定)
http://jp.techcrunch.com/archives/20101118yet-another-hot-startup-leaves-a-gaping-security-hole-in-its-iphone-app/

公衆無線LANで使うと危ないiPod touchアプリに注意(高木浩光@自宅の日記)
http://takagi-hiromitsu.jp/diary/20081206.html

|

« GRCのDNS BenchmarkでDNSをスピードアップ | トップページ | 公衆無線LANのセキュリティはかなりお寒い »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« GRCのDNS BenchmarkでDNSをスピードアップ | トップページ | 公衆無線LANのセキュリティはかなりお寒い »