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 での確認手順
/tmp/http_basic_auth.pcapをWiresharkで開く- 表示フィルターに
http.authorizationを入力 - 対象パケットをクリック → 「Hypertext Transfer Protocol」を展開
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 ...>
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 の 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 に接続し、whoami・id・uname -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ストリーム でリクエスト・レスポンスの全体を確認せよ。
実際のマルウェア感染時のパケットキャプチャサンプルを提供している 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で確認 - ホストオンリーネットワークのインターフェース名を確認(
eth1やvboxnet0の場合もある)
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)」の違いはどれですか?