Wiresharkで公衆無線LANのヤバさを確認してみた

前置き

ここ数年の携帯キャリアやコンビニ業界の頑張りで、町中に公衆無線LANのAPが溢れていますが、あれって安全なんでしょうか?盗聴される的な観点で。

パスワード無しのノーガードAPは論外としても、

よく見かけるこの2タイプもやヤバそう。

試してみる前の認識

こんな感じ。

「たぶん丸見えだろう」と思いながらも自分で試してみたことはなかったので、やってみました。1つ目のタイプ想定で。

もちろん公衆無線LAN用のAPなんて手元にないので、自宅で使ってるAPを使って「同じWPAキーを知っているけど、それ以外のことは知らない」体でやっています。

参考にした記事

使用した環境

無線LAN AP

ごく普通の無線LANルータを使用。
暗号方式はWPAーPSKに設定。

Wireshark入りのMac

盗聴する人。
OSX用のWiresharkはX11上で動きます。が、最近のOSXにはX11が同梱されていないので、XQuartzも必要。

iPhone

盗聴される人。


設定手順

キャプチャオプションの設定

そのままキャプチャ開始すると自分の通信しか見えないので、プロミスキャスモードかつモニターモードに設定します。

Wiresharkのメニューから「Capture」→「Options」を開く。

Wireshark Capture Options Wi-Fiのインターフェイスをダブルクリック。この操作を知らなかったので若干ハマりました。

Edit Interface Settings

復号の有効化

Wiresharkのメニューから「Edit」→「Preferences」を開く。
Enable decryption

Decryption Keyの設定

WEP/WPAキーをWiresharkに教えてあげます。

Wiresharkのメニューから「View」→「Wireless Toolbar」にチェックを入れる。((初期状態だと表示されていないので。))
新しく増えたツールバー右端の「Decryption Keys…」をクリック。

Decryption Key Management ここでキーとSSIDの対応を設定しておくと、キャプチャ時に復号してくれます。
「New」をクリック。

Add Decryption Key

復号できるまで待つ

上記の設定を済ませてキャプチャを開始すると、IEEE802.11のフレームがじゃんじゃか流れ始めます。まだ復号できていないので、中身はさっぱり分かりませんが。

WPAではクライアントごとに暗号化用のキー((テンポラリキー))を生成しているので、実際に復号するにはこのキーを入手する必要があります。

無線LANの基本とセキュリティ技術
WPA-PSKでは、APとステーションで共有するパスフレーズから、決められたアルゴリズムに従って512bitのマスターキー(PMKと呼ばれる)を事前に生成しておきます。そして、AP-ステーション間のLINK確立後、4Way-Handshakeと呼ばれるプロトコルで乱数とお互いのMACアドレスを交換し、それらとマスターキーを組み合わせて512bit(但し、AESを使用する場合は384ビット)のテンポラリキー(PTKと呼ばれる)を生成します。

実際に暗号化につかうテンポラリキーは、「マスターキー」と「MACアドレス」と「乱数」の3つから生成されています。

今回はパスフレーズ(WPAキー)は知っている前提なので、マスターキーは既に手元にあります。残りの2つも4Way-Handshakeの最中に大っぴらに交換されるため、APに接続する最初の通信もしくはテンポラリキーの更新タイミングをキャプチャすることが出来れば、復号に必要な材料は揃ってしまうという事ですね。

とりあえず復号しているのが確認できればいいってことであれば、Wi-Fiを一旦切って繋ぎ直せばOK。((今回の例だと、iPhoneのWi-FiをOFF/ONする。))

無事にテンポラリキーを入手できれば、あとはWiresharkが勝手に復号して表示してくれます。

キャプチャを見やすく

キャプチャフィルタを設定していない状態だと、掴んだ通信を片っ端から表示していくので、一瞬でとんでもない量になってしまいます。近所にマンションがあったりするとえらいことに。
調査しているアクセスポイントだけに絞ってあげましょう。

  1. Wiresharkのメニューから「Stastics」→「WLAN Traffic」
  2. 対象のSSIDを選択して右クリック→「Apply as Filter」→「Selected」→「BSSID」

これで、関係ないSSIDは表示されないようにディスプレイフィルタがかかります。


感想

簡単にできるんだろうなーと思いつつも試したことがなかったので、やってみて良かったと思います。モニターモードに設定するところとか、今回初めて触ったし。

あとは、iPhone・Androidの通信をキャプチャしたいときに便利です。これまではAPとルータの間にバカHubを挟んで使っていたもので。

最近はSIMカードで認証するAPなんかも出てきているので、こういう危ない状態は一過性のものかもしれませんが、危ないことは意識しておきたいところ。

実は公衆無線LAN向けのAPでは何かの対策がされていたりするのかな?試してみたいけど、法に触れる予感。