■ 牢屋に入れられても、生き延びるんだっ!
写真を間違えた。まぁかわいいのでご愛嬌。
■ tcpdumpからWiresharkへ!
これまでMacのターミナルで、tcpdumpを使ってネットワーク通信を観察してきました。
最初はIPアドレスや数字の羅列を見ても、何が何だか分からない状態でした(笑)。
でも、ARP、ICMP、TCPと勉強していくうちに、少しずつ通信の仕組みが理解できるようになってきました。
特に印象に残っているのが、TCPの3ウェイハンドシェイク。
SYN → SYN/ACK → ACK
この3回のやり取りで接続が確立するなんて、普段Webサイトを見ているだけでは気づきません。
そして今回は、ネットワーク通信を画面で分析できるWiresharkに挑戦します!
■ Wiresharkって何?
Wireshark(ワイヤーシャーク)は、ネットワーク通信を取得して分析できる無料のソフトウェアです。
tcpdumpはターミナルに文字で通信を表示しますが、Wiresharkはパケットを一覧表示し、詳しい内容を画面で調べることができます。
通信を「見る」だけでなく、IPアドレスやポート番号、TCPフラグなどを細かく分析できるのです。
なんだかホワイトハッカーらしくなってきました!(笑)
■ MacにWiresharkをインストール!
まずは公式サイトからWiresharkをダウンロードしました。
https://www.wireshark.org/download.html
インストールを終えて起動すると、ネットワークインターフェースが一覧表示されます。
今回使うのは、いつものWi-Fiインターフェース「en0」です。
さっそく通信を取得しようとすると……。
You don't have permission to capture on local interfaces.
いきなりエラーです!
どうやら、Macで通信を取得するための権限が足りないようです。
■ ChmodBPFって何?
Wiresharkの警告には、ChmodBPFをインストールするように書かれていました。
ChmodBPFは、WiresharkがmacOSのパケットキャプチャ用デバイスにアクセスできるよう、権限を設定する仕組みです。
Wiresharkのインストール用ディスクイメージから「Install ChmodBPF.pkg」を実行しました。
そして、再ログインしてWiresharkを起動。
今度は無事にパケットが流れ始めました!
おおっ!通信が見える!
画面には次々とパケットが表示されます。
普段、何気なくインターネットを使っているだけなのに、裏側ではこんなに通信しているんですね。
■ 表示フィルターを使ってみる
Wiresharkには、取得した通信から必要なものだけを表示する「表示フィルター」があります。
画面上部の「Apply a display filter」という入力欄です。
ここに次の文字を入力します。
icmp
そしてEnterキーを押します。
これでICMPのパケットだけを表示できます。
ちなみに、Wiresharkにはキャプチャフィルターという別の機能もあります。
キャプチャフィルターは取得する通信を制限し、表示フィルターは取得済みの通信から表示するものを絞り込みます。
似ていますが、役割は違うんですね。
■ 実験①:pingを送信してみる
次は、Macのターミナルからpingを送信して、Wiresharkで観察してみます。
実行するコマンドはこちら。
ping -c 4 1.1.1.1
このコマンドは、指定したIPアドレスに4回pingを送信します。
Wiresharkで確認したいのは、次の2つです。
Echo Request:Macから送信する問い合わせ
Echo Reply:相手から返ってくる応答
この2つが表示されれば、ICMPの要求と応答を確認できます。
tcpdumpで見ていた通信を、今度は画面で詳しく調べてみたいと思います。
■ 実験②:TCPの通信も見てみたい!
ICMPの次は、以前tcpdumpで観察したTCP通信です。
Wiresharkの表示フィルターに、次の条件を入力します。
tcp.port == 80
これはTCPの80番ポートに関係するパケットを表示する条件です。
そしてターミナルから、次のコマンドでHTTP通信を発生させます。
curl -4 -v --http1.1 --max-time 15 http://example.com/
確認したいのは、もちろん3ウェイハンドシェイク!
SYN → SYN/ACK → ACK
さらにHTTPの「GET」や、サーバーからの「200 OK」も確認できるでしょうか?
Wiresharkには、通信の流れを図で表示する機能もあります。
これまで文字で理解していたことが、画面でつながって見えるようになれば面白そうです。
■ HTTPとHTTPSの違いも気になる!
ここで気になるのが、HTTPとHTTPSの違いです。
HTTPでは通信内容が暗号化されていないため、取得したパケットからリクエストやレスポンスの内容を確認できる場合があります。
一方、HTTPSではTLSによって通信内容が暗号化されています。
そのため、通常はWiresharkで取得しても、HTTPの本文をそのまま読むことはできません。
便利なインターネットですが、セキュリティの仕組みを知ることも大切ですね。
■ 今回のまとめ
今回は、WiresharkをMacにインストールし、パケットキャプチャができるところまで進みました。
途中で権限エラーが出ましたが、ChmodBPFを導入して解決!
そして、ついにネットワーク通信が画面に流れる様子を確認できました。
まだ詳しいパケット分析はこれからですが、tcpdumpとは違う楽しさがありそうです。
60歳からの挑戦。
分からないこともたくさんありますが、一つずつ理解できるようになるのが楽しいですね。
次回は、実際に取得したICMPやTCPのパケットを詳しく分析してみたいと思います。
ホワイトハッカーへの道、まだまだ続きます!(笑)
