基本的にはHTTPSのサイト、またフリーWifiを使用しなければ傍受されないため、悪用するといっても今やそんなシーンが滅多にないが、定型メッセージである「悪用厳禁」と一応書いておく。

環境設定

MacOSにWiresharkをインストール(XQuartzも必要)。
今回手元にフリーWifiのような暗号化しないWifiが用意できなかったため、ローカルでの通信で代用(それならChromeだけでいいのだが、Wiresharkを使ってみたかった)。

Wiresharkの設定

メニューの「Capture」→「Options…」からWi-Fi: enXXX(任意の数字)を見つけ、
Promiscuous:プロミスキャスモード(自分以外の通信も受信するモード)
Monitor:すべての無線通信を受信するモード
にチェックがつける。

が、暗号化するWifiを使っている場合、Monitorにチェックを入れると内容が確認できないようになるため、ローカルで確認する場合はやめる。

いろいろ調べていると、暗号化にWPA(無線LANにおける暗号化規格)を利用している場合は、テンポラリーキーを生成しており、パスフレーズを知っているだけでは暗号化を復元できない(復元する場合は、アクセスポイントに接続する最初の通信あるいはテンポラリーキーの更新のタイミングでMacアドレスと使用される乱数を抜き出すことで復元できるらしい)。

その後、Capture画面で対象のWifiをクリックすることでキャプチャーが開始される。
今回の対象はWebサイトでHTTPSでは中身が見えないため、HTTPでフィルターをかける。

傍受開始

適当なHTTPサイトにアクセスする。
今回は下記のようなページでテストした。
アクセスするたびに画面上の数値が増えていく。

<?php
  session_name('target-session-name');
  session_start();
?>
<html><head><meta charset="utf-8" /></head>
<body>
<?php
  if (!isset($_SESSION['count'])){
    $_SESSION['count'] = 1;
  } else {
    $_SESSION['count']++;
  }
  echo $_SESSION['count'];
?>
</body>
</html>

初回アクセスすると「1」と表示される。
10回アクセスしてみて、このセッションを奪い取ってみる。

Wireshark上でターゲットの列を選択すると英語がいろいろ出てくるが、このうちの「Hypertext Transfer Protocol」を開き、Cookieの項目を開いてみるとCookieのキーとバリューのペアが出てくるため、それをメモする。

ChromeのDevToolsを開き、ApplicationのCookiesで該当のドメインのCookieを探し、Valueをメモした値に書き換える。
すると次にリロードしたときに11回目のアクセスとなり、セッションハイジャックに成功、となる。

所感

httpだと本当に簡単に盗まれてしまうため、マジで危険意識が高まる。
まあhttpでもそれなりに実装すれば、これほど簡単には盗まれなくなるが、httpsにすることがより手っ取り早く、(きちんと実装すれば)より安全である。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA