1からはじめる Wireshark
こんにちは。
うっかりecho "" > /etc/passwd システムソリューション部のかわです。
今回は、以前公開したネットワーク系ツールの記事で紹介したWiresharkについて書きたいと思います。
ちなみに好きなサメ映画はディープブルーです。
Wiresharkって?
ネットワークエンジニアには必需品とも言える有名なツールです。
WindowsとmacOSに対応しており、基本的にはインストールしたPC上のパケットをキャプチャして、めちゃくちゃ簡単に可視化できます。
トラブルシューティング等でネットワーク調査に使用されることが多いです。
ダウンロードとインストール
公式サイト(https://www.wireshark.org/)の「Download」から対応するOSのファイル名をクリックしてダウンロードします。
ダウンロードができたら実行ファイルを開き、インストーラに沿って「Next」を押していきます。
(↑の項目も基本的にデフォでok)
インストールが終わったらWiresharkを開き、以下のような画面が表示されれば完了です。
ニョロニョロと波形ができているネットワークアダプタをダブルクリックして、メインで繋いでいるインターフェイスのキャプチャを見てみましょう。
Windowsのキャプチャデータの見方
インターフェイスを選択すると、すぐにキャプチャされたインバウンド/アウトバウンドのパケットが流れてきます(IPとかの情報はボカしてあります)⬇。
なんのこっちゃですね。
試しに弊社ウェブサイト宛(beyondjapan.com)にコマンドプロンプトからpingを送信してみましょう。
> ping beyondjapan.com
上部にある検索窓に「icmp」と入力しエンターを押します。
ping結果だけがソートされ、弊社ホームページ宛のICMPパケットが確認できるようになります。
下部の文字列の部分を右クリック→「すべて展開」を選ぶとパケットの中身が確認できます。
オレンジ部分:ソース/宛先アドレスや、経由しているルータの機種やMACアドレス等
緑部分:IPバージョン(今回はv4やヘッダー長)
ピンク部分:フラグ、TTLやプロトコル
赤部分:ICMPタイプやチェックサム
今回はICMPなので情報が豊富とは言えないですが、パケットが暗号化されてない限りはペイロード等詳しいデータを見ることができます(悪用厳禁)。
ちなみにかの有名な阿部寛氏のhttpサイトを見ると、どこにアクセスしたかがモロバレルです。
オレンジ部分:リクエストメソッドやHTTPのバージョン
緑部分:ホスト情報、ブラウザのユーザエージェント情報、言語、リファラなど
ピンク部分:アクセスURL、一連のアクセスに関連するフレーム番号
httpサイトで特に気をつけないといけないのはフォームに入力した情報です。
暗号化されていない状態でフォームにパスワード等を送信してしまうと、パケットキャプチャからパスワードの文字列が確認できてしまいます。
(野良Wi-Fiに繋ぐのは良くないよ、というのはこういう理由です)
フィルタのあれこれ
検索にはWiresharkの記述を使用します。
今回はよく使う記法を紹介します。正規表現など色々な書き方ができるので、APIとのやり取りにおけるトラブルシューティングにも活用できそうです。
・IPアドレスでフィルタ
ip.addr == xx.xx.xx.xx !(ip.addr==xx.xx.xx.xx) #特定IPを除外
試しに「1.1.1.1」宛にpingを送信した結果を検索します。
ping request → replyのやり取りが確認できます。
・ポート番号でフィルタ
tcp.port == xx udp.port == xx tcp.port == xx || udp.port == xx #orで複数検索 !(tcp.port == xx) #特定ポートを除外 !(tcp.port==xx) && ip.addr==xx.xx.xx.xx #and条件
試しにTCP/443の通信を確認してみます。
IPを調べると、Google検索を行った際の流れが確認できます。
「Info」部分の説明やフラグ部分を見るとTCPハンドシェイクのやり取りが見えます(ACKやFINなど)。
Linuxマシンのパケットキャプチャ
WiresharkのインストールされたPCがあれば、Linuxマシンで取得したパケットキャプチャファイルを閲覧することができます。
今回は、以前紹介したtcpdumpを使用します。
(yumやaptで事前にtcpdumpをインストールしておいてください)
この記事ではUbuntuを使用し、任意のファイルを作成しキャプチャデータを出力します。
「test.pcap」というファイルに書き出します(pcapはパケットキャプチャファイルの拡張子です)。
※ifconfig等でインターネット抜けしているインターフェイス名を確認し指定します。
> tcpdump -i ens33 -w test.pcap
キャンセルするまではキャプチャが継続されるので、取得している間に確認したい通信を発生させます(ブラウザアクセス等)。
「Ctl+C」でtcpdumpを終了させ、出力されたファイルをWindows/macOSマシンに移します。
引っこ抜いてきたpcapファイルをWiresharkで開けばキャプチャデータが可視化されます。
↑キレイなクリスマススキャンのパケットが可視化できました(良い子は真似しないでね)。
読み方さえわかれば誰でも簡単にパケットの流れがキャプチャできるのがWiresharkの強みですね。
使用しているPCの他にも、スイッチを噛ませてミラーポートを用意すればローカルネットワーク内を流れるパケットをすべてキャプチャできたりもするので、実際の現場でもよく活用されるソフトです。
TCP/IPの勉強にもなるのでぜひインストールしてみてください。