EttercapでMITM (中間者攻撃)

MITM (Man-in-the-Middle : 中間者攻撃) は通信を盗聴する技術のひとつです. ここではMITMに特化したソフトウェア"Ettercap"を使ってARP Poisoningを行い,iPhone上で閲覧しているWebページを盗聴してみます. 読者は自ネットワークやソフトウェアのセキュリティ強化に関心のある開発者を想定しています. この記録に書かれている内容は自身で管理しているテストネットワーク内でのみ試してください.

私の環境

  • Ettercap 0.8.2
  • Wireshark 2.0.2
  • iPhone iOS 9.3.1 (Victim)
  • iMac OS X 10.11.4 (Attacker)

MITMとは

MITM,日本語で中間者攻撃とはその名前が説明するように,被害者(Victim)とゲートウェイの中間に攻撃者(Attacker)が入ることです. まずは下の図を見てください. これは通常の通信トポロジです. ゲートウェイ(ルータ)より外側はインターネットであるとします.
同じネットワークに接続されているコンピュータは他のコンピュータの通信内容を盗聴することが出来ません. なぜならルータ(またはスイッチ)が適切な宛先へと通信内容を割り振っているからです. 他のポートに同じ情報が流れないわけです(ミラーポートは例外). MITMとはネットワークにいたずらをして通信経路を下の図のように捻じ曲げることです.
AttackerはVictimに対して"自分はゲートウェイである"と装い,またゲートウェイに対して"自分はVictimである"と装います. 騙されたVictimとゲートウェイはAttackerへそれぞれのデータを送ってしまいます. Attackerは受信したデータをVictimとゲートウェイそれぞれに転送(フォワーディング)することで自分の存在に気付かれないようにします. 今回の場合ではVictimはiPhone,AttackerはiMacです. そして通信経路を捻じ曲げる手法がARP Poisoningになります.

対策

Victimとゲートウェイが電子証明書などを用いて相互に認証を行っていれば,異なる証明書を持つAttackerが間に入ってきた時に気付くことが出来ます. また,通信を暗号化していれば,通信経路上(Attacker)で盗聴したデータは暗号化されているため安全性が大幅に増します.

Ettercapのインストール

EttercapはMITMに特化したソフトウェアです(Ethernet Captureの略). ターミナル上で利用できるCUIモードとマウスで操作できるGUIモードがあります. 今回は利用の容易さからGUIモードも合わせてインストールします. Homebrewの使えるMacならば次のコマンドでOKです.
brew install ettercap --with-gtk+
Ettercapはソースコード形式でしか配布されていません(Homebrewは例外). Homebrewが使えない,もしくはソースコードからビルドしたい場合はEttercap公式サイトからソースコードをダウンロードしましょう. 依存関係は公式サイトのAboutページに記してあります. 依存しているソフトウェアを全てインストールしてから,INSTALLファイルの指示に従ってMake(ビルド)します. El Capitan以降のMacの場合,make installだけはsudoを付ける必要があります.

Wiresharkのインストール

Ettercapだけでも通信内容を確認出来ますが,Wiresharkのようなパケットキャプチャに特化したソフトウェアがあると便利です. Wireshark公式サイトからGUIアプリをダウンロード出来ます. 最新のものを入れておきましょう.

Macの設定と確認

MacはデフォルトでIPフォワーディングが無効になっているので次のコマンドで有効化します.
sudo sysctl -w net.inet.ip.forwarding=1
また次のコマンドでネットワークハードウェアのリストを表示/確認します.
networksetup -listallhardwareports
上のコマンドによって,次のようなリストが表示されます.
...
Hardware Port: Wi-Fi
Device: en0
Ethernet Address: XX:XX:XX:XX:XX:XX

Hardware Port: Bluetooth PAN
Device: en1
Ethernet Address: XX:XX:XX:XX:XX:XX

Hardware Port: Thunderbolt 1
Device: en2
Ethernet Address: XX:XX:XX:XX:XX:XX
...
上の場合,もしWi-Fiで接続しているのならば,そのデバイス名は"en0"です. Ettercapを立ち上げた時にこのデバイス名が必要になります. 覚えておきましょう.

EttercapでMITM

次のコマンドでEttercapをGUIモードで立ち上げます.
sudo ettercap -G
オプションのGは大文字です(GUIモードを表す). また,Macではsudoが必要です.
メニューバーからSniff > Unified sniffingを選択するか,もしくはCtrl+Uキーを押します. ダイアログが表示されるので,ここから先ほど確認したデバイス名を選択します. 今回はWi-Fiで接続しているため"en0"を選択してOKをクリックします.
次にネットワークに接続されているデバイスを探します. Hosts > Scan for hosts(Ctrl+S)を選択しましょう. 上手く通信できていればプログレスバーが表示されます. スキャンが終えたらHosts > Hosts list(Ctrl+H)を選択し,スキャンされたデバイス一覧を表示します.
この中からゲートウェイ(ルータ)と攻撃対象デバイス(Victim)を見つけます. ゲートウェイは192.168.11.1です. Host listからそのアドレスを選んでAdd to Target 1ボタンをクリックします. 次にVictimを選択します. ここではiPhoneである192.168.11.3の通信を盗聴したいため,そのアドレスを選択してAdd to Target 2をクリックします. ターゲット(騙す対象)を2人追加出来たらMitm > ARP poisoningを選択します. ダイアログが表示されるので"Sniff remote connections."にチェックを付けてからOKします. これで各ターゲットにARP Poisoningを行えたはずです. 通信経路が捻じ曲げられ,ターゲット間の通信がこのコンピュータを経由するようになりました. ARP Poisoningを止める時はMitm > Stop mitm attack(s)を選択します. 数秒でARP Poisoning前の状態へと復元してくれます.

Wiresharkでパケットキャプチャ

ARP Poisoningに成功するとVictim - ゲートウェイ間の通信内容はこのコンピュータを経由するようになります. このコンピュータを流れるパケットを取得すれば,どのような通信が行われているか調べることが出来ます. Wiresharkの出番です.
Wiresharkを立ち上げ,初期化が済むと,上のような画面になります. ここから通信しているインターフェース(デバイス名)をダブルクリックで選択します. 今回はWi-Fi接続なので"en0"です(通信量に応じたグラフも表示されるため分かりやすいかと思います). これで"en0"でやりとりされている通信内容が時系列に表示されるようになります. 今回は攻撃対象であるiPhoneが閲覧しているWebページを取得することが目的なので,HTTP通信だけを抽出して表示するようにフィルタをかけましょう. Wiresharkの"Apply a display filter"欄に次の文字列を入力し,欄の右にある青地の矢印→をクリックします.
http && !udp
UDP通信を排除することでSSDPを除外することが出来ます. これでWebページを盗聴する準備が整いました. iPhone上でいつも通りWebブラウジングをして見ましょう. 今回はSafariを使って,このブログ"The Strange Storage"へアクセスしてみました(残念ながらまだHTTPS通信に対応していないため). するとWiresharkがその通信内容をキャプチャし始めます.
必要なだけキャプチャできたら(Webページのロードが完了したら)ウィンドウ左上の停止ボタン(赤い四角)をクリックすると良いでしょう. これでキャプチャを停止出来ます. さて,取得できた通信内容を調べてみましょう. まず,上の画像の下部"Host: ..."と書かれた部分を見るとアクセスしたアドレスが見えます.
上の画像で選択しているパケットの様にInfoが"HTTP/1.1 200 OK (text/html)"とあるものはHTML(Webページ本体)を含んだ返信です. そのパケットのLine-based text data: text/htmlを右クリックし,Export Packet Bytes(Cmd+H)を選択,任意の名前で保存します. その保存したファイルの拡張子をデフォルトのbinからhtmlへ変更することで,iPhone上で閲覧していたページを下画像のように再現することが出来ます.
このようにMITMによって通信経路を捻じ曲げ,盗聴することで,デバイス上で閲覧しているWebページをも再現することが出来ます. 今回はHTTP通信の盗聴に焦点を当てましたが,HTTPに限らずあらゆる通信がAttackerの手に渡ることを考えると通信における暗号化の意味が見えて来ると思います.

終わりに

以上のように,通信の盗聴はものの数分で行えます. 同じネットワークに入れば上の手順で盗聴出来てしまうため,例えば公共の無線LANを利用している場合,悪意ある者が同じネットワークに居れば,通信内容を盗聴される他,セッションハイジャックによりSNSやWebアプリなどにログインされてしまう可能性もあります. 開発者として実際に攻撃を体験してみることで,その対策方法も見えて来るかと思います. 利用者としてはリスクを避けるためVPNを利用して安全な経路を確保したり,可能な場合はHTTPS(TLS)のような暗号化通信を行うなど,日常からのセキュリティ意識が大切になります. どれほど優れた攻撃検知機能や防止機能を盛り込んだところで,最大の脆弱性は人(ユーザ)であることを意識しておきましょう.
7742392064112384819 http://www.storange.jp/2016/04/ettercapmitm.html http://www.storange.jp/2016/04/ettercapmitm.html EttercapでMITM (中間者攻撃) 2016-04-24T11:30:00+09:00 http://www.storange.jp/2016/04/ettercapmitm.html Hideyuki Tabata 200 200 72 72