ネットワークの「会話」を覗いてみよう
ネットワークの世界は、目に見えないデータのやり取りで満ちています。ウェブサイトを見たり、メールを送ったり、オンラインゲームをしたりするとき、コンピュータやスマートフォンは常に他の機器と「会話」しています。この会話の内容を覗き見して、ネットワークで何が起こっているのかを理解するための強力なツールが Wireshark です。
Wiresharkは、ネットワーク上を流れるデータパケット(情報の小さなかたまり)を捕まえて、その中身を人間が読める形に翻訳してくれる「パケットアナライザ」または「ネットワークプロトコルアナライザ」と呼ばれるツールです。もともとはEtherealという名前でしたが、2006年に商標の問題でWiresharkに改名されました。オープンソースソフトウェアとして開発されており、誰でも無料で利用できます。Windows, macOS, Linuxなど様々なOSで動作します。
特に、セキュリティ診断やペネトレーションテスト(侵入テスト)に特化したLinuxディストリビューションである Kali Linux には、Wiresharkが標準で搭載されています。Kali Linuxは、セキュリティ専門家やネットワーク管理者が、ネットワークの脆弱性を発見したり、セキュリティインシデントの原因を調査したりする際に強力な武器となります。
このブログ記事では、Kali Linux上でWiresharkを使い始めるための基本的な手順、よく使う機能、そして知っておくべき注意点などを、初心者の方にも分かりやすく解説していきます。ネットワークの仕組みを学んだり、トラブルシューティングに役立てたり、セキュリティの知識を深めたりするために、Wiresharkの世界を探検してみましょう! 🔍
何ができるの?
- ネットワークのトラブルシューティング(例: 「なぜかWebサイトに繋がらない」「通信が遅い」など)
- ネットワークセキュリティの分析(例: 不審な通信の検出、マルウェア感染の調査)
- ネットワークプロトコルの学習(例: TCP/IP、HTTP、DNSなどがどのように動いているか)
- ソフトウェア開発時の通信デバッグ
Wiresharkの起動方法 in Kali Linux
Kali LinuxでWiresharkを起動する方法はいくつかあります。
1. Kaliメニューから起動
デスクトップ環境(Xfceなど)を使っている場合、アプリケーションメニューからWiresharkを探して起動するのが最も簡単です。通常は、「Sniffing & Spoofing」(スニッフィング&スプーフィング)や「Network Analysis」(ネットワーク分析)といったカテゴリの中にあります。
- デスクトップ左上のKaliアイコン(またはアプリケーションメニュー)をクリックします。
- カテゴリの中から「09 – Sniffing & Spoofing」または関連するカテゴリを探します。
- 「wireshark」をクリックします。
2. ターミナルから起動
CUI(コマンドラインインターフェース)に慣れている方は、ターミナルからコマンドで起動することもできます。
- ターミナルエミュレータ(例: QTerminal, Terminator)を開きます。
- 以下のコマンドを入力してEnterキーを押します:
wireshark
これでWiresharkのGUIウィンドウが起動します。
⚠️ 権限に関する注意点 (重要)
Wiresharkでネットワークインターフェースからパケットをキャプチャするには、通常、特別な権限(多くのシステムではroot権限)が必要です。これは、ネットワークインターフェースへの直接アクセスがセキュリティ上のリスクを伴うためです。
Kali Linuxの古いバージョンでは、デフォルトのユーザーがrootでしたが、最近のバージョン (Kali Linux 2020.1以降) では、セキュリティ向上のため、デフォルトで一般ユーザー (`kali`) でログインするようになりました。
そのまま一般ユーザーでWiresharkを起動すると、「You don’t have permission to capture traffic on that device」のようなエラーが表示され、ネットワークインターフェース一覧が表示されなかったり、キャプチャを開始できなかったりします。
解決策:
推奨される方法は、Wiresharkをroot権限で直接実行するのではなく、一般ユーザーがキャプチャ権限を持てるように設定することです。Wireshark自体をrootで実行すると、Wiresharkの脆弱性を突かれた場合にシステム全体が危険に晒される可能性があるため、避けるべきです。
Kali Linux (およびDebian/Ubuntuベースのシステム) では、インストール時または設定変更によって、一般ユーザーが `wireshark` グループに所属していればキャプチャを許可する設定が可能です。
-
設定の確認と変更: ターミナルで以下のコマンドを実行します。
設定画面が表示されるので、「非スーパーユーザにパケットキャプチャを許可しますか? (Should non-superusers be able to capture packets?)」という質問に対して、カーソルキーで <はい> (Yes) を選択し、Enterキーを押します。sudo dpkg-reconfigure wireshark-common
-
ユーザーを`wireshark`グループに追加: 以下のコマンドを実行して、現在のユーザー (例: `kali`) を `wireshark` グループに追加します。`$USER` は自動的に現在のユーザー名に置き換えられます。
sudo usermod -aG wireshark $USER
- 再ログインまたは再起動: グループへの追加をシステムに反映させるために、一度ログアウトして再ログインするか、システムを再起動します。
この設定を行うことで、一般ユーザー (`kali`など) のままWiresharkを起動しても、ネットワークインターフェースが表示され、パケットキャプチャを開始できるようになります。より安全にWiresharkを利用するために、この設定を行っておくことを強く推奨します。
Wiresharkの基本的な使い方 🖥️
Wiresharkを起動すると、いくつかのペイン(区画)に分かれたウィンドウが表示されます。ここでは主要な部分とその見方を解説します。
1. インターフェースの選択
Wiresharkを起動すると、まず最初にコンピュータが持っているネットワークインターフェース(有線LANアダプタ、無線LANアダプタ、仮想インターフェースなど)の一覧が表示されます。
- キャプチャしたいインターフェース名(例: `eth0` (有線LAN), `wlan0` (無線LAN))の左側にあるチェックボックスをオンにします。
- インターフェース名の右側には、そのインターフェースでリアルタイムに通信が行われているかを示すスパークライン(小さなグラフ)が表示されることがあります。
- キャプチャしたいインターフェース名をダブルクリックするか、選択して左上の青いサメのヒレアイコン (Start capturing packets) をクリックすると、パケットキャプチャが開始されます。
どのインターフェースを選べばよいかわからない場合は、インターネットに接続しているメインのインターフェース(通常は`eth0`か`wlan0`)を選択します。`ifconfig` や `ip addr` コマンドで現在アクティブなインターフェースを確認するのも良いでしょう。
通常、ネットワークインターフェースは自分宛のパケットとブロードキャスト/マルチキャストパケットのみを受け取ります。プロミスキャスモードを有効にすると、ネットワークセグメント上を流れるすべてのパケット(他のコンピュータ宛のパケットも含む)をキャプチャできるようになります。スイッチングハブ環境では効果が限定的ですが、無線LANやハブ環境では有用です。
Wiresharkのキャプチャオプション(Capture -> Options… または Ctrl+K)で、各インターフェースごとにプロミスキャスモードの有効/無効を設定できます。多くの場合、デフォルトで有効になっています。セキュリティ診断などで他のホストの通信を解析したい場合には、このモードが有効になっているか確認しましょう。
2. キャプチャの開始・停止・再開
- 開始: インターフェースを選択して青いサメのヒレアイコン 🦈 をクリックするか、インターフェース名をダブルクリックします。メニューからは [Capture] -> [Start] です。
- 停止: キャプチャ中に赤い四角いアイコン 🟥 (Stop capturing packets) をクリックします。メニューからは [Capture] -> [Stop] です。
- 再開/再起動: 停止後に緑色のサメのヒレアイコン (Restart current capture) をクリックすると、現在の設定で新しいキャプチャを開始します(古いデータは破棄されます)。メニューからは [Capture] -> [Restart] です。
3. メイン画面の構成
パケットキャプチャを開始すると、画面は主に3つのペインに分割されて表示されます。
3.1. パケット一覧ペイン (Packet List Pane)
ウィンドウの上部にある、キャプチャされたパケットが一行ずつリスト表示される領域です。各行が一つのパケットに対応します。デフォルトで表示される列とその意味は以下の通りです。
列名 | 説明 | 用途・見方 |
---|---|---|
No. | パケット番号 | キャプチャされた順番を示す一意の番号。フィルタリングしても番号は変わりません。 |
Time | 時間 | デフォルトでは、キャプチャ開始からの相対時間(秒)が表示されます。表示形式は [View] -> [Time Display Format] で変更可能です。 |
Source | 送信元アドレス | パケットを送った機器のIPアドレスやMACアドレスが表示されます。名前解決が有効ならホスト名が表示されることもあります。 |
Destination | 宛先アドレス | パケットの送り先の機器のIPアドレスやMACアドレスが表示されます。 |
Protocol | プロトコル | そのパケットで使われている最も上位のプロトコル名が表示されます (例: HTTP, DNS, TCP, UDP, ICMP, ARP)。 |
Length | 長さ | パケットの全長(バイト数)が表示されます。 |
Info | 情報 | パケットの内容に関する要約情報が表示されます。プロトコルによって表示内容は異なります(例: TCPならポート番号やフラグ、HTTPならリクエストメソッドやレスポンスコードなど)。 |
列のヘッダーをクリックすると、その列の内容でソート(並び替え)ができます。列の表示/非表示や順序は、ヘッダーを右クリックしてカスタマイズできます。
3.2. パケット詳細ペイン (Packet Details Pane)
ウィンドウの中央にある、パケット一覧ペインで選択したパケットのヘッダ情報が階層的に表示される領域です。OSI参照モデルやTCP/IPモデルの各層に対応する形で、プロトコルごとに詳細な情報が展開されます。
- Frame: パケット全体の物理的な情報(到着時刻、フレーム番号、サイズなど)。
- Ethernet II: データリンク層の情報(送信元/宛先MACアドレスなど)。
- Internet Protocol Version 4 (IPv4) / Version 6 (IPv6): ネットワーク層の情報(送信元/宛先IPアドレス、TTL、プロトコルタイプなど)。
- Transmission Control Protocol (TCP) / User Datagram Protocol (UDP): トランスポート層の情報(送信元/宛先ポート番号、シーケンス番号、ACK番号、フラグ、ウィンドウサイズなど)。
- Hypertext Transfer Protocol (HTTP), Domain Name System (DNS), etc.: アプリケーション層の情報(プロトコル固有のデータ)。
各行の左側にある `>` や `▼` をクリックすることで、詳細を展開したり折りたたんだりできます。特定のフィールドを選択すると、そのフィールドに対応するデータが下のパケットバイトペインでハイライト表示されます。
3.3. パケットバイトペイン (Packet Bytes Pane)
ウィンドウの下部にある、選択したパケットの生データが16進数とASCII文字で表示される領域です。左側に16進数ダンプ、右側にそれに対応するASCII文字が表示されます(表示可能な文字のみ)。
パケット詳細ペインで特定のフィールドを選択すると、このペインの対応する部分がハイライトされるため、ヘッダ情報と実際のデータの対応関係を確認するのに役立ちます。
フィルタ機能で目的のパケットを見つける 🔍
ネットワーク上には膨大な量のパケットが流れており、キャプチャを始めるとあっという間に画面がパケットで埋め尽くされてしまいます。目的の情報を効率的に見つけ出すためには、Wiresharkの強力なフィルタ機能を使いこなすことが不可欠です。
Wiresharkには主に2種類のフィルタがあります。
- キャプチャフィルタ (Capture Filter): パケットをキャプチャする前に設定し、指定した条件に合致するパケットだけをキャプチャします。
- 表示フィルタ (Display Filter): パケットをキャプチャした後に設定し、キャプチャされた全パケットの中から指定した条件に合致するパケットだけを表示します。
一般的に、ネットワークのトラブルシューティングや詳細な分析を行う場合は、まずキャプチャフィルタは使わずに全てのパケットをキャプチャし、後から表示フィルタを使って必要な情報に絞り込んでいく方法が推奨されます。なぜなら、最初にキャプチャフィルタで絞り込みすぎると、後で必要になるかもしれない情報まで捨ててしまう可能性があるからです。ただし、非常にトラフィック量の多いネットワークで特定の通信だけを長時間監視したい場合など、キャプチャファイルサイズを抑えたい場合にはキャプチャフィルタが有効です。
1. キャプチャフィルタ (Capture Filters)
キャプチャフィルタは、Wiresharkの起動画面(インターフェース選択画面)の下部にある入力欄「Enter a capture filter…」に入力するか、[Capture] -> [Capture Filters…] で管理・選択します。
キャプチャフィルタの構文は、BPF (Berkeley Packet Filter) 構文に基づいています。これは `tcpdump` コマンドなどで使われるものと同じです。
基本的な構文例:
フィルタ式 | 説明 |
---|---|
host 192.168.1.1 |
IPアドレスが 192.168.1.1 のホストが送受信するパケット |
src host 192.168.1.1 |
送信元IPアドレスが 192.168.1.1 のパケット |
dst host 192.168.1.1 |
宛先IPアドレスが 192.168.1.1 のパケット |
net 192.168.1.0/24 |
192.168.1.0/24 ネットワークに関連するパケット |
port 80 |
TCPまたはUDPのポート番号が80 (通常HTTP) のパケット |
tcp port 80 |
TCPポート番号が80のパケット |
udp port 53 |
UDPポート番号が53 (通常DNS) のパケット |
tcp |
TCPプロトコルのパケット |
udp |
UDPプロトコルのパケット |
icmp |
ICMPプロトコルのパケット (pingなど) |
arp |
ARPプロトコルのパケット |
組み合わせ (論理演算子):
- and または && : 論理積 (両方の条件を満たす)
- or または || : 論理和 (いずれかの条件を満たす)
- not または ! : 論理否定 (条件を満たさない)
例:
host 192.168.1.1 and port 80
: 192.168.1.1 との間でポート80を使用する通信tcp port 80 or tcp port 443
: TCPのポート80またはポート443の通信not arp
: ARP以外のすべてのパケット
2. 表示フィルタ (Display Filters)
表示フィルタは、パケットキャプチャ中またはキャプチャ後に、パケット一覧ペインの上にある入力欄(「Apply a display filter…」や緑色の背景のバー)に入力して適用します。Enterキーを押すか、右側の矢印ボタンをクリックするとフィルタが適用されます。
表示フィルタの構文は、キャプチャフィルタとは異なり、Wireshark独自のより強力で柔軟な構文を使用します。プロトコルのフィールド名を直接指定して、値と比較したり、存在を確認したりできます。
基本的な構文例:
フィルタ式 | 説明 |
---|---|
ip.addr == 192.168.1.1 |
送信元または宛先IPアドレスが 192.168.1.1 のパケット |
ip.src == 192.168.1.1 |
送信元IPアドレスが 192.168.1.1 のパケット |
ip.dst == 192.168.1.1 |
宛先IPアドレスが 192.168.1.1 のパケット |
ip.addr == 192.168.1.0/24 |
192.168.1.0/24 ネットワークに関連するパケット |
tcp.port == 80 |
送信元または宛先TCPポート番号が80のパケット |
udp.port == 53 |
送信元または宛先UDPポート番号が53のパケット |
tcp |
TCPプロトコルのパケット (TCPヘッダが存在する) |
udp |
UDPプロトコルのパケット |
http |
HTTPプロトコルのパケット |
dns |
DNSプロトコルのパケット |
icmp |
ICMPプロトコルのパケット |
arp |
ARPプロトコルのパケット |
tcp.flags.syn == 1 |
TCPヘッダのSYNフラグが立っているパケット (接続開始) |
tcp.flags.reset == 1 |
TCPヘッダのRSTフラグが立っているパケット (接続リセット) |
http.request.method == "GET" |
HTTP GETリクエストのパケット |
http.response.code == 404 |
HTTPステータスコードが404 (Not Found) のレスポンスパケット |
dns.qry.name == "www.google.com" |
www.google.com のDNSクエリパケット |
contains "error" |
パケットデータのどこかに “error” という文字列を含むパケット (注意: 負荷が高い) |
比較演算子:
記号 | 英語風 | 意味 |
---|---|---|
== |
eq |
等しい |
!= |
ne |
等しくない |
> |
gt |
より大きい |
< |
lt |
より小さい |
>= |
ge |
以上 |
<= |
le |
以下 |
contains |
– | 指定したシーケンスを含む |
matches |
~ |
正規表現にマッチする (PCREライブラリが必要) |
論理演算子:
- and または && : 論理積
- or または || : 論理和
- xor または ^^ : 排他的論理和
- not または ! : 論理否定
例:
ip.addr == 192.168.1.1 and tcp.port == 80
: 192.168.1.1 との間でTCPポート80を使用する通信http or dns
: HTTPまたはDNSのパケットtcp and not tcp.port == 80
: TCPパケットのうち、ポート80を使用しないもの!(ip.addr == 192.168.1.1)
: 送信元・宛先ともに 192.168.1.1 ではないIPパケット (注: 非IPパケットは表示される)not (ip.addr == 192.168.1.1)
: 上と同じ
- フィルタ入力欄に文字を入力し始めると、候補となるフィルタ式が自動で表示されます(オートコンプリート)。
- フィルタ式が正しい構文であれば入力欄の背景が緑色に、間違っていれば赤色になります。
- パケット詳細ペインで特定のフィールドを右クリックし、「Apply as Filter」や「Prepare a Filter」を選択すると、そのフィールドを使ったフィルタ式を簡単に入力できます。
- よく使うフィルタ式は、フィルタ入力欄の左にあるブックマークアイコンや「+」ボタンで保存しておくと便利です。
- 完全な表示フィルタのリファレンスは、Wireshark公式サイト (Display Filter Reference) や、Wireshark内の [Help] -> [Display Filter Reference] で確認できます。
よく使う便利な機能 ✨
Wiresharkには、基本的なパケット表示やフィルタリング以外にも、ネットワーク分析に役立つ多くの機能が搭載されています。ここでは特によく使われる便利な機能を紹介します。
1. 統計情報 (Statistics)
キャプチャしたデータ全体に関する様々な統計情報を表示する機能です。ネットワークの全体像を把握したり、特定の問題点を発見したりするのに役立ちます。[Statistics] メニューからアクセスできます。
-
[Statistics] -> [Endpoints]: 通信を行っているエンドポイント(IPアドレス、MACアドレス、TCP/UDPポート)とその通信量を一覧表示します。どのホストが最も多く通信しているかなどを確認できます。
-
[Statistics] -> [Protocol Hierarchy]: キャプチャされたパケットをプロトコル階層別に分類し、各プロトコルのパケット数や割合を表示します。ネットワーク上でどのようなプロトコルが多く使われているかを把握できます。
-
[Statistics] -> [Conversations]: 二つのエンドポイント間の通信(会話)を一覧表示します。IP、TCP、UDPなどのレイヤーごとに、通信相手、パケット数、バイト数などを確認できます。
- [Statistics] -> [Resolved Addresses]: Wiresharkが名前解決(IPアドレスからホスト名、MACアドレスからベンダー名など)した結果を一覧表示します。
-
[Statistics] -> [IO Graph]: 時間経過に伴う全体のトラフィック量(パケット数/秒、バイト数/秒など)や、特定のフィルタに合致するパケットの量をグラフで表示します。トラフィックの急増や特定の通信の発生タイミングなどを視覚的に確認できます。
2. TCPストリームの追跡 (Follow TCP Stream)
特定のTCPコネクションにおける一連のやり取り(クライアントとサーバー間で送受信されたアプリケーションデータ)を、再構成して一つのウィンドウに表示する機能です。HTTPリクエスト/レスポンスの内容全体を確認したり、メールの送受信内容を見たりする際に非常に便利です。
- パケット一覧ペインで、追跡したいTCPコネクションに属するパケット(例: HTTPパケット)を一つ選択します。
- 右クリックメニューから [Follow] -> [TCP Stream] を選択します (または [Analyze] -> [Follow] -> [TCP Stream])。
- 新しいウィンドウが開き、クライアントからのデータ(通常は赤色)とサーバーからのデータ(通常は青色)が時系列に沿って表示されます。
この機能を使うと、暗号化されていないHTTP通信の内容や、SMTP, POP3, IMAPなどのメールプロトコルのやり取りが丸見えになることがあります。(HTTPSなどの暗号化された通信は、通常、解読鍵がないと内容は表示できません。)
3. 名前解決 (Name Resolution)
Wiresharkは、キャプチャしたパケットに含まれるアドレス情報を、より人間が理解しやすい名前に変換する機能を持っています。
- MACアドレス解決: MACアドレスの最初の3バイト(OUI: Organizationally Unique Identifier)から、ネットワーク機器のベンダー名を推測して表示します。 ([View] -> [Name Resolution] -> [Resolve MAC Addresses] で有効/無効化)
- ネットワークアドレス解決 (IPアドレス): IPアドレスからホスト名を解決します(DNSクエリを使用)。システムのDNS設定や、WiresharkがキャプチャしたDNS応答を利用します。 ([View] -> [Name Resolution] -> [Resolve Network Addresses] で有効/無効化)
- トランスポート層ポート解決: TCP/UDPのポート番号から、よく知られたサービス名(例: 80 -> http, 443 -> https, 53 -> domain)を表示します。 ([View] -> [Name Resolution] -> [Resolve Transport Names] で有効/無効化)
名前解決を有効にすると、どのアドレスがどの機器やサービスに対応するかが分かりやすくなりますが、特にネットワークアドレス解決はDNSクエリを発生させるため、キャプチャ中に有効にすると余計なDNSパケットが増える可能性があります。また、名前解決に時間がかかり、表示が遅くなることもあります。通常はキャプチャ後に有効にするか、必要に応じて一時的に有効にすると良いでしょう。
4. ファイルの保存と読み込み
キャプチャしたパケットデータは、後で分析するためにファイルに保存することができます。
- 保存: [File] -> [Save As…] を選択し、ファイル名と保存形式(デフォルトは pcapng)を指定して保存します。フィルタが適用されている場合でも、すべてのキャプチャ済みパケットが保存されます。特定のパケットだけを保存したい場合は、[File] -> [Export Specified Packets…] を使用します。
- 読み込み: [File] -> [Open] を選択し、保存されたキャプチャファイル(.pcapng, .pcap など)を開きます。他のツール(tcpdumpなど)で作成されたキャプチャファイルも開くことができます。
長時間のキャプチャを行う場合は、[Capture] -> [Options…] の [Output] タブで、自動的にファイルを分割して保存する設定(ファイルサイズや時間ごと)を行うことも可能です。これにより、巨大な単一ファイルが生成されるのを防ぐことができます。
5. パケットの色付け (Coloring Rules)
Wiresharkは、特定の条件に合致するパケットを異なる背景色や文字色で表示する機能を持っています。これにより、重要なパケットや異常なパケットを一目で識別しやすくなります。
デフォルトでも多くの色付けルールが定義されています(例: TCPのSYN/FINは薄い灰色、RSTは黒背景に赤文字、不正なチェックサムは赤背景など)。これらのルールは [View] -> [Coloring Rules…] で確認・編集・追加できます。表示フィルタと同じ構文を使って、独自のルールを作成することも可能です。例えば、特定のIPアドレスからの通信を黄色で表示する、HTTPエラー応答をオレンジ色で表示するなど、分析の目的に合わせてカスタマイズすると便利です。

Kali Linuxでの注意点とベストプラクティス ⚠️
Kali LinuxでWiresharkを使用する際には、いくつかの特有の注意点と、安全かつ効果的に利用するためのベストプラクティスがあります。
1. root権限での実行リスク
前述の通り、パケットキャプチャには通常root権限が必要です。しかし、Wiresharkのような複雑なGUIアプリケーション全体をroot権限で実行することは、深刻なセキュリティリスクを伴います。Wiresharkには数多くのプロトコル解析機能(ディセクタ)が含まれており、もしこれらの機能に脆弱性が存在した場合、悪意を持って細工されたパケットを受信するだけで、攻撃者にroot権限を奪取され、システム全体が乗っ取られる可能性があります。
ベストプラクティス:
- 原則として、WiresharkのGUI自体をrootで起動しない (`sudo wireshark` や `gksu wireshark` は避ける)。
- 「起動方法」のセクションで説明したように、`dpkg-reconfigure wireshark-common` と `usermod -aG wireshark $USER` を使って、一般ユーザーがキャプチャできるように設定する。これにより、キャプチャ処理を行うバックグラウンドプロセス(`dumpcap`)のみが必要な権限で動作し、GUIは一般ユーザー権限で動作するため、リスクを大幅に低減できます。
# (非推奨な場合がある代替手段)
sudo groupadd wireshark
sudo usermod -aG wireshark $USER
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
(上記コマンドを実行後、再ログインが必要です。)
2. 無線LAN (Wi-Fi) のキャプチャ
無線LANのパケットをキャプチャする場合、追加の設定や考慮事項があります。
- モニターモード (Monitor Mode): 他のデバイスの無線通信(自分宛でないもの)をキャプチャするには、無線LANアダプタを「モニターモード」に設定する必要があります。すべての無線LANアダプタがモニターモードに対応しているわけではありません。Kali Linuxはモニターモードに対応したアダプタのドライバを多く含んでいますが、別途対応アダプタ(USB接続など)が必要になる場合があります。`airmon-ng` などのツールを使ってモニターモードへの切り替えを行います。
# モニターモードに対応しているか確認し、不要なプロセスを停止 sudo airmon-ng check kill # モニターモードを開始 (wlan0 は実際のインターフェース名に置き換える) sudo airmon-ng start wlan0 # (モニターモードのインターフェース名が wlan0mon のようになることが多い) # Wiresharkを起動し、wlan0mon などのモニターモード用インターフェースを選択
- 暗号化 (WPA/WPA2): WPA/WPA2で暗号化された無線LANのデータ部分を復号して内容を見るには、Wi-Fiのパスワード(PSK)と、接続時のハンドシェイク(EAPOLキー交換)のパケットが必要です。Wiresharkの設定 ([Edit] -> [Preferences] -> [Protocols] -> [IEEE 802.11]) で、使用しているWi-FiのSSIDとパスワード(またはPSK)を登録しておくことで、ハンドシェイクを含むキャプチャデータがあれば復号できる場合があります。パスワードを知らないネットワークの通信を復号することはできません。
- チャンネル: 無線LANは複数のチャンネルを使用しています。モニターモードでキャプチャする際には、特定のチャンネルに固定するか、チャンネルをホッピング(切り替えながらスキャン)する必要があります。`airodump-ng` などのツールで目的のアクセスポイントが使用しているチャンネルを確認し、Wiresharkのキャプチャオプションや無線ツールバーでチャンネルを指定することが有効です。
3. システムリソースへの影響
大量のパケットをキャプチャし続けると、CPU使用率、メモリ使用量、ディスクI/Oが増加し、システムのパフォーマンスに影響を与える可能性があります。
ベストプラクティス:
- キャプチャが必要な期間だけ実行し、不要になったらすぐに停止する。
- 可能であれば、キャプチャフィルタを使って不要なトラフィックを最初から除外する(ただし、必要な情報まで除外しないように注意)。
- 表示フィルタを複雑にしすぎると、表示更新時のCPU負荷が高くなることがある。
- 長時間のキャプチャでは、ファイルを自動分割する機能を利用して、メモリ負荷や単一ファイルの肥大化を防ぐ。
- 仮想環境 (VirtualBox, VMwareなど) でKali Linuxを実行している場合、仮想マシンに十分なメモリとCPUコアを割り当てる。
Wireshark活用事例 💡
Wiresharkは非常に多機能であり、様々な場面で活用できます。ここではいくつかの具体的なユースケースを紹介します。
1. ネットワークトラブルシューティング
- 「Webサイトに繋がらない!」: DNSクエリ(
dns
)が正しく名前解決できているか? TCPの3ウェイハンドシェイク(tcp.flags.syn == 1 and tcp.flags.ack == 1
)が完了しているか? HTTPリクエストは送信されているか(http.request
)? サーバーから応答はあるか? RSTパケット(tcp.flags.reset == 1
)が返ってきていないか?などを確認します。 - 「通信が遅い!」: TCPの再送(
tcp.analysis.retransmission
)が多発していないか? TCPウィンドウサイズが0 (tcp.window_size == 0
) になっていないか? 遅延 (パケットのTime列の間隔) が大きい箇所はないか? IO Graphでトラフィックのスパイクやボトルネックがないか確認します。 - 「特定のアプリケーションが通信できない!」: そのアプリケーションが使用するはずのプロトコルやポート番号でフィルタリングし、通信が意図した宛先に到達しているか、途中でブロックされていないか(Firewallなど)、エラー応答はないかを確認します。
2. セキュリティ分析
- 不審な通信の検出: 未知のIPアドレスやポートへの通信、通常とは異なるプロトコルの使用、大量のエラーパケットなどをフィルタや統計情報で洗い出します。例えば、外部の特定のIPアドレスとの通信が多い場合 (Endpoints統計)、そのIPが悪意のあるサーバーである可能性を調査します。
- マルウェア感染調査: マルウェアに感染した疑いのある端末の通信をキャプチャし、外部のC&C (Command & Control) サーバーとの通信、不審なファイルのダウンロード、他の内部端末への感染活動(スキャンなど)の痕跡を探します。マルウェア固有の通信パターン(特定のUser-Agent文字列、暗号化されたビーコン通信など)をフィルタで検出できる場合があります。
- ネットワークスキャンの検出: 同一送信元から短時間に多数の異なる宛先IPやポートへSYNパケット (
tcp.flags.syn == 1 and tcp.flags.ack == 0
) が送信されていないかなどを確認します。 - 情報漏洩の調査: 暗号化されていないプロトコル (HTTP, FTP, POP3, IMAP, Telnetなど) で機密情報(パスワードなど)が平文で送信されていないか、Follow Stream機能で確認します。(例:
http contains "password"
などでフィルタリング)
3. プロトコル学習
- TCP/IPの動作理解: 実際にWebアクセスやファイル転送を行いながらパケットをキャプチャし、TCPの3ウェイハンドシェイク、データ転送、コネクション切断(FIN/ACK)のシーケンスを追跡します。IPヘッダのTTLがルータを経由するごとに減少する様子なども観察できます。
- HTTPの仕組み: Webブラウザで特定のサイトにアクセスし、HTTPリクエスト(GET/POSTメソッド、ヘッダ情報、User-Agentなど)とHTTPレスポンス(ステータスコード、Content-Type、Cookieなど)の内容をFollow Streamで確認します。
- DNSの名前解決プロセス: `nslookup` や `dig` コマンドを実行しながら、あるいはWebアクセス時の通信をキャプチャし、クライアントからのDNSクエリとDNSサーバーからの応答(Aレコード、CNAMEレコードなど)のやり取りを確認します。
実際に自分で通信を発生させ、その結果をWiresharkで観察することで、教科書だけでは理解しにくいプロトコルの動作を具体的に学ぶことができます。
まとめ
Wiresharkは、ネットワーク上を行き交うパケットを捕獲し、その内容を詳細に分析するための非常に強力なツールです。Kali Linuxには標準で搭載されており、特にネットワークのトラブルシューティング、セキュリティ分析、プロトコルの学習において絶大な威力を発揮します。
この記事では、Kali Linux環境でのWiresharkの起動方法、基本的な画面構成、パケットキャプチャの開始・停止、そして最も重要な機能の一つであるキャプチャフィルタと表示フィルタの使い方について解説しました。さらに、TCPストリームの追跡や統計情報などの便利な機能、そしてKali Linuxで利用する上での注意点(特にroot権限のリスクと無線LANキャプチャ)についても触れました。
Wiresharkを使いこなすには、TCP/IPをはじめとするネットワークプロトコルの基本的な知識が必要となりますが、実際にパケットを観察することで、その理解をより深めることができます。最初は難しく感じるかもしれませんが、まずは簡単なフィルタを使ってみたり、普段使っているアプリケーションの通信を覗いてみたりすることから始めてみてください。
ネットワークの世界は奥深く、常に変化しています。Wiresharkはその深淵を探求するための羅針盤のような存在です。ぜひ積極的に活用して、ネットワークのスキルアップに役立ててください! 💪🌐
参考情報
より詳しい情報や公式ドキュメントは以下のリンクから参照できます。
- Wireshark 公式サイト: https://www.wireshark.org/
- ユーザーガイド、各種リファレンス、ダウンロードなどが提供されています。
- 表示フィルタ構文リファレンス: https://www.wireshark.org/docs/dfref/
- Kali Linux 公式ドキュメント – Wireshark: https://www.kali.org/tools/wireshark/
- Kali LinuxにおけるWiresharkツールの概要説明があります。
- Wireshark Wiki – CapturePrivileges: https://wiki.wireshark.org/CaptureSetup/CapturePrivileges
- 非rootユーザーでのキャプチャ設定に関する詳細情報(Linux/Debian/Ubuntu/Fedora/macOS/BSDなど)。
コメント