お前このサブネットでも同じ事言えんの?

         ,、,, ,、,, ,, ,, 
       _,,;' '" '' ゛''" ゛' ';;,, 
      (rヽ,;''"""''゛゛゛'';, ノr) 
      ,;'゛ i _  、_ iヽ゛';,
      ,;'" ''| ヽ・〉 〈・ノ |゙゛ `';, 
      ,;'' "|   ▼   |゙゛ `';, 
      ,;''  ヽ_人_ /  ,;'_ 
     /シ、  ヽ⌒⌒ /   リ \ 
    |   "r,, `"'''゙´  ,,ミ゛   | 
    |      リ、    ,リ    | 
    |   i   ゛r、ノ,,r" i   _| 
    |   `ー――----┴ ⌒´ ) 
    (ヽ  ______ ,, _´) 
     (_⌒ ______ ,, ィ 
      丁           | 
       |           | 
  • 一般的な Windows 環境でも、簡単に実験ができることがわかりましたので、試してみます

環境

実験

  • まずは Nighthawk を起動して "Enable advanced mode" を選択します

  • "Interface selection" を IPv4: 192.168.12.2/24 に設定し "Scan network" を実行すると、アドレスの一覧が現れます
  • "Target 1" に iPad のアドレス 192.168.12.3 を、"Target 2" にデフォルトゲートウェイ 192.168.12.1 を指定しましょう

  • "Start ARP spoofing" で、ARPスプーフィングが実行されている状態になります


パケットスニッフィング

  • 暗号化されていないため、通信の内容を確認することができました

セッションハイジャック
  • 次に Firesheep を入れた Firefox 3.6 を起動します
  • Ctrl+Shift+S でサイドバーを出した後、左下のアイコンから "Preferences" を開いてください
    • "Capture" で適切なインターフェースを選択

    • "Websites" で "Add" から Yahoo JAPAN を追加し、下記のスクリプトを貼り付けて保存します
register({
  name: 'Yahoo JAPAN',
  url: 'http://yahoo.co.jp',
  sessionCookieNames: [ 'T', 'Y' ],

  matchPacket: function (packet) {
    if (packet.host.match(/\.yahoo\.co\.jp$/)) {
      return true;
    }
  },

  identifyUser: function () {
    var resp = this.httpGet('http://www.yahoo.co.jp');
    this.userName = resp.body.querySelector('#pbhello span').innerHTML;
  }
});
  • "Preferences" を閉じたら、サイドバーの "Start Capturing" を押しましょう
  • iPad にて既にログイン状態の Yahoo! JAPAN を開きます

  • すると Firesheep によって、セッションクッキーを含む通信がキャプチャされ、サイドバーにそのアカウント名が表示されます
  • アカウント名をダブルクリックすると、そのアカウントになりすましてページを閲覧することが可能です

  • HTTPSに対応していないため、メールも見ることができますね

  • (アカン)
  • iPad 側でログアウトをしてみたのですが、Firesheep 側ではログイン状態が継続してしまう点が意外でした

対策

C:\>arp -s 192.168.12.1 xx-xx-xx-xx-xx-xx

C:\>arp -a

Interface: 192.168.12.2 --- 0x2
  Internet Address      Physical Address      Type
  192.168.12.1          xx-xx-xx-xx-xx-xx     static
C:\>netsh -c "interface ipv4"
netsh interface ipv4>set neighbors "ローカル エリア接続" 192.168.12.1 xx-xx-xx-xx-xx-xx

netsh interface ipv4>show neighbors "ローカル エリア接続"

インターフェイス 11: ローカル エリア接続


インターネット アドレス                        物理アドレス       種類
--------------------------------------------  -----------------  -----------
192.168.12.1                                  xx-xx-xx-xx-xx-xx  恒久
      • iOS はわかりません…

まとめ

  • ただし、ARPスプーフィングは防げても、他の手法もありますし、通信経路上でリピータハブを挿入されたら防ぐ手立てはありません
  • 根本的な解決は、サービス提供側が、適切にHTTPSを提供することにあるでしょう
  • こうやって実験してみると、普段いまいち利益がわからないHTTPSも、はっきりと必要性を感じますね