Wireshark とは

Wireshark はネットワークインターフェースを流れるパケットをリアルタイムにキャプチャ・解析できる、世界で最も広く使われるパケットアナライザーです。

活用場面:

  • ネットワークのトラブルシューティング
  • プロトコルの動作を視覚的に理解する
  • セキュリティインシデントのフォレンジクス調査
  • 平文通信(HTTP・FTP・Telnet)における認証情報の可視化
  • CTFのネットワーク問題
インストールと権限設定

KaliにはWiresharkがプリインストールされています。キャプチャにはroot権限またはwiresharkグループへの追加が必要です。以下のコマンドでグループ追加後、再ログインしてください。

sudo usermod -aG wireshark $USER
newgrp wireshark

Wireshark の基本操作

インターフェースの選択

Wiresharkを起動すると、利用可能なネットワークインターフェースの一覧が表示されます。

eth0    - 有線LAN(演習環境のメイン通信インターフェース)
lo      - ループバック(ローカル通信のテスト用)
wlan0   - 無線LAN
any     - すべてのインターフェース(同時キャプチャ)

演習環境では eth0(Metasploitable 2 との通信が流れるインターフェース)を選択します。

パケットリストの3ペイン表示

┌─────────────────────────────────────────────────────────┐
│ No. │ Time  │ Source         │ Destination    │ Protocol│  ← パケットリスト
├─────────────────────────────────────────────────────────┤
│ Frame 1: ... bytes                                      │
│ ▼ Ethernet II, Src: ...                                 │  ← プロトコル詳細
│   ▼ Internet Protocol, Src: 192.168.56.102              │
│     ▼ Transmission Control Protocol                     │
│       ▼ Hypertext Transfer Protocol                     │
├─────────────────────────────────────────────────────────┤
│ 00 1a 2b 3c 4d 5e  6f 70 81 92 a3 b4  .... GET /       │  ← バイト表示(16進)
└─────────────────────────────────────────────────────────┘

キャプチャフィルター(Capture Filters)

キャプチャ開始前に設定するフィルターです(BPF構文)。条件に合うパケットのみを記録します。

特定のホストとの通信のみ

host 192.168.56.101

特定のポートのみ

port 80

HTTP/HTTPS通信のみ

tcp port 80 or tcp port 443

FTP通信のみ(制御チャネル)

tcp port 21

特定のIPレンジから

src net 192.168.56.0/24

ICMPのみ(pingのキャプチャ)

icmp

Metasploitable 2 との全通信(演習でよく使う)

host 192.168.56.101 and not arp

表示フィルター(Display Filters)

キャプチャ後にリアルタイムで絞り込むフィルターです。Wireshark独自の強力な構文が使えます。

HTTPトラフィックのみ

http

特定のIPアドレスとの通信

ip.addr == 192.168.56.101

送信元IPで絞り込み

ip.src == 192.168.56.101

特定ポートのTCP

tcp.port == 80

DNSクエリのみ

dns

HTTPのGETリクエスト

http.request.method == “GET”

HTTPのPOSTリクエスト(ログインフォームなど)

http.request.method == “POST”

HTTP 200以外のレスポンス(エラーの調査)

http.response.code != 200

TLSハンドシェイクのみ

tls.handshake

ARPパケット(ARPスプーフィング検出)

arp

TCPの再送パケット(ネットワーク問題の検出)

tcp.analysis.retransmission


演習1: HTTP Basic 認証の平文キャプチャ

HTTP Basic 認証がいかに危険かを実際に確認します。Metasploitable 2 には HTTP Basic 認証が設定されたページがあります。

キャプチャの準備

tshark でバックグラウンドキャプチャ開始

sudo tshark -i eth0 -f “host 192.168.56.101 and tcp port 80”
-w /tmp/http_basic_auth.pcap &

Kali のブラウザまたは curl で Metasploitable の認証ページにアクセス

Metasploitable 2 の WebDAV ページは Basic 認証が設定されている

curl -v http://192.168.56.101/dav/

認証情報を含めたリクエスト

curl -v -u msfadmin:msfadmin http://192.168.56.101/dav/

キャプチャ停止

sudo pkill tshark

キャプチャ結果の解析

HTTP Authorizationヘッダーを含むパケットを抽出

tshark -r /tmp/http_basic_auth.pcap -Y “http.authorization”
-T fields -e http.authorization

出力例:

Basic bXNmYWRtaW46bXNmYWRtaW4=

Base64デコードで平文を確認

echo “bXNmYWRtaW46bXNmYWRtaW4=” | base64 -d

出力例:

msfadmin:msfadmin

HTTP通信全体を確認

tshark -r /tmp/http_basic_auth.pcap -Y “http” -T fields
-e http.request.method
-e http.request.uri
-e http.authorization
-e http.response.code

Wireshark GUI での確認手順

  1. /tmp/http_basic_auth.pcap をWiresharkで開く
  2. 表示フィルターに http.authorization を入力
  3. 対象パケットをクリック → 「Hypertext Transfer Protocol」を展開
  4. Authorization: Basic bXNmYWRtaW46bXNmYWRtaW4= が平文で見える

「フォローTCPストリーム」でリクエスト全体を見る:

  • 対象パケットを右クリック → フォローTCPストリーム
  • 以下のようなHTTP通信が平文で表示される:
GET /dav/ HTTP/1.1
Host: 192.168.56.101
Authorization: Basic bXNmYWRtaW46bXNmYWRtaW4=
User-Agent: curl/7.88.1

HTTP/1.1 200 OK
Server: Apache/2.2.8 (Ubuntu) DAV/2
Content-Type: text/html; charset=UTF-8

<!DOCTYPE HTML ...>
HTTP Basic 認証の危険性

Base64 エンコードは「暗号化」ではありません。同一ネットワーク上の第三者なら誰でも上記の手順で認証情報を取得できます。平文HTTP で Basic 認証を使うことは、パスワードを平文で送信しているのと同義です。HTTPS(TLS)を使えば通信内容は暗号化され、このような盗聴は困難になります。


演習2: Telnet 通信の全盗聴

Telnetは認証情報を含むすべての通信が完全な平文です。

Telnet 通信をキャプチャしながら接続

sudo tshark -i eth0 -f “tcp port 23” -w /tmp/telnet_session.pcap &

別のターミナルで Telnet 接続(Metasploitable 2 へ)

telnet 192.168.56.101

ユーザー名: msfadmin

パスワード: msfadmin

(セッション内でコマンドを実行)

whoami

id

exit

sudo pkill tshark

TCPストリームでセッション全体を確認

tshark -r /tmp/telnet_session.pcap -z “follow,tcp,ascii,0”

出力例: ログイン〜コマンド実行〜ログアウトまでの全操作が平文で見える


演習3: DNS クエリの解析

DNSクエリをキャプチャ(UDPポート53)

sudo tshark -i eth0 -f “udp port 53” -w /tmp/dns_capture.pcap &

Kali Linux から名前解決を実行

nslookup metasploitable 192.168.56.101 dig @192.168.56.101 localhost host -t any localhost 192.168.56.101

sudo pkill tshark

DNS クエリ・応答の一覧表示

tshark -r /tmp/dns_capture.pcap -Y “dns” -T fields
-e dns.qry.name
-e dns.a
-e dns.flags.response

出力例:

localhost (クエリ)

localhost 127.0.0.1 1 (応答 - Aレコード)

特定ドメインへの全クエリを抽出

tshark -r /tmp/dns_capture.pcap -Y “dns.qry.name contains “local""

Wireshark での DNS 表示フィルター活用

DNSクエリと応答を表示

dns

特定ドメインへのDNSクエリ

dns.qry.name contains “metasploitable”

DNSレスポンスのみ(フラグ: response=1)

dns.flags.response == 1

複数のDNSクエリが短時間に集中(DNSトンネリングの可能性の調査)

dns and frame.time_delta < 0.01


演習4: FTP 通信の解析

FTPも平文プロトコルです。ログイン認証情報が丸見えになります。

FTP 通信をキャプチャ

sudo tshark -i eth0 -f “tcp port 21” -w /tmp/ftp_capture.pcap &

FTP 接続(Metasploitable 2 の vsftpd 2.3.4)

ftp 192.168.56.101

Name: msfadmin

Password: msfadmin

ftp> ls

ftp> quit

sudo pkill tshark

FTP コマンドと応答を確認

tshark -r /tmp/ftp_capture.pcap -Y “ftp” -T fields
-e ftp.request.command
-e ftp.request.arg
-e ftp.response.code
-e ftp.response.arg

出力例:

220 vsFTPd 2.3.4

USER msfadmin 331 Please specify the password.

PASS msfadmin 230 Login successful.

LIST 150 Here comes the directory listing.

226 Directory send OK.

QUIT 221 Goodbye.

FTP のパスワードが丸見え

FTP の PASS コマンドに続くパスワードが完全な平文で見えます。同一ネットワーク上で ARP スプーフィングなどの中間者攻撃を行えば、別セグメントの通信も傍受可能です。FTP の代わりに SFTP(SSH経由)または FTPS を使用してください。


tshark コマンドライン活用集

Wireshark のコマンドライン版 tshark はスクリプト化・自動化に非常に便利です。

リアルタイムで HTTP リクエストを監視

sudo tshark -i eth0 -Y “http.request” -T fields
-e ip.src
-e http.request.method
-e http.request.full_uri

pcap から HTTP POST のボディを抽出

tshark -r capture.pcap -Y “http.request.method == POST”
-T fields -e http.file_data

IP 別の通信量ランキング

tshark -r capture.pcap -qz “conv,ip” | sort -k5 -rn | head -10

TCP 接続の統計(接続数・バイト数)

tshark -r capture.pcap -qz “conv,tcp”

プロトコル別の統計

tshark -r capture.pcap -qz “io,phs”

特定の TCPストリームのみ抽出(stream番号を指定)

tshark -r capture.pcap -Y “tcp.stream == 0” -w stream_0.pcap

HTTP ホスト名の一覧抽出(どのサイトに通信したか)

tshark -r capture.pcap -Y “http.host” -T fields -e http.host | sort -u

証明書のCN(HTTPS接続先)を抽出

tshark -r capture.pcap -Y “tls.handshake.type == 1” -T fields
-e tls.handshake.extensions_server_name


演習チャレンジ: 通信から情報を読み取れ

ミッション1: Basic認証の解読

curl -u msfadmin:msfadmin http://192.168.56.101/dav/ を実行しながら tshark でキャプチャし、Base64 エンコードされた認証文字列をデコードせよ。

ミッション2: Telnet 全操作の記録

Telnet で Metasploitable 2 に接続し、whoamiiduname -a を実行。その全操作を tshark でキャプチャし、-z "follow,tcp,ascii,0" で完全な操作ログを再現せよ。

ミッション3: DNS 逆引きの確認

dig -x 127.0.0.1 @192.168.56.101 を実行してDNS逆引きクエリをキャプチャし、クエリタイプ(PTR)と応答内容を Wireshark で確認せよ。

ミッション4: FTP パッシブモード解析

ftp 192.168.56.101 で接続し ls コマンドを実行してキャプチャ。FTP のアクティブモードとパッシブモードで制御チャネル(21番)とデータチャネル(20番または動的ポート)がどのように分かれているか観察せよ。

ミッション5: HTTP ストリーム全体の追跡

Wireshark で http フィルターを適用し、POSTリクエストを右クリック → フォローHTTPストリーム でリクエスト・レスポンスの全体を確認せよ。

pcap サンプルファイルの活用

実際のマルウェア感染時のパケットキャプチャサンプルを提供している malware-traffic-analysis.net では、実際の悪意ある通信パターンを安全に学習できます。tshark で統計を取り、どのような通信が「異常」に見えるかを体験してください。


トラブルシューティング

Wireshark でインターフェースが表示されない・権限エラー

wireshark グループに追加

sudo usermod -aG wireshark $USER

再ログインまたは以下でグループ切替

newgrp wireshark

dumpcap の実行権限確認

ls -la /usr/bin/dumpcap

-rwxr-x--- 1 root wireshark … となっているか確認

それでも失敗する場合 root で実行

sudo wireshark

tshark でキャプチャが取れない

利用可能なインターフェースを確認

sudo tshark -D

出力例:

1. eth0

2. lo (Loopback)

3. any

インターフェース番号またはデバイス名で指定

sudo tshark -i 1 sudo tshark -i eth0

パケットが表示されない(通信が流れているはずなのに)

  • フィルターが厳しすぎないか確認(一時的にフィルターを外す)
  • Metasploitable 2 のIPアドレスが正しいか arp -n で確認
  • ホストオンリーネットワークのインターフェース名を確認(eth1vboxnet0 の場合もある)

pcap ファイルが大きくなりすぎる

ファイルを100MBごとにローテーション

sudo tshark -i eth0 -b filesize:102400 -w /tmp/capture_%Y%m%d_%H%M%S.pcap

最大5000パケットのみ取得

sudo tshark -i eth0 -c 5000 -w /tmp/capture_limited.pcap


理解度チェック

Wiresharkの「表示フィルター(Display Filter)」と「キャプチャフィルター(Capture Filter)」の違いはどれですか?