はじめに
この実験では、堅牢なネットワークプロトコルアナライザーである Wireshark のインストールと設定方法を学びます。Wireshark を使うと、ネットワークトラフィックをリアルタイムで調査できます。これは、ネットワークのトラブルシューティングやセキュリティ調査に欠かせない機能です。
この実験を終える頃には、自分のシステム上でネットワークパケットをキャプチャして分析できるようになり、この重要なツールを実際に使った経験を得られます。
Wireshark のインストール
このステップでは、Ubuntu システムに Wireshark をインストールします。Wireshark は、ネットワークトラフィックのキャプチャと分析を可能にする強力なネットワークプロトコルアナライザーです。ネットワークセキュリティやトラフィック分析に関心がある人にとって、非常に重要なツールです。Wireshark は Ubuntu のリポジトリで提供されているため、Ubuntu のパッケージ管理システムを使って簡単にインストールできます。
まず、パッケージリポジトリの情報を更新します。パッケージリポジトリは、Ubuntu システムで利用できるソフトウェアのカタログのようなものです。これを更新することで、最新のソフトウェアバージョンを利用できるようになります。更新するには、ターミナルを開きます。タスクバーのターミナルアイコンをクリックするか、Ctrl+Alt+T を押すとターミナルを開けます。ターミナルが開いたら、次のコマンドを入力します。
sudo apt update
sudo コマンドは、管理者権限でコマンドを実行するために使用します。apt は Ubuntu のパッケージ管理ツールで、update はパッケージリポジトリの情報を更新するコマンドです。このコマンドを実行すると、次のような出力が表示されます。
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [108 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [1,234 kB]
...
Reading package lists... Done
この出力は、リポジトリから利用可能なパッケージの最新情報を取得していることを示しています。
パッケージリポジトリの更新が完了したので、apt パッケージマネージャーを使って Wireshark をインストールできます。ターミナルで次のコマンドを実行します。
sudo apt install wireshark -y
install コマンドは、指定したパッケージを apt にインストールさせます。ここでは wireshark が対象パッケージです。-y オプションを指定すると、インストール中に表示される確認プロンプトへ自動的に「yes」と回答します。
インストール中に、一般ユーザーによるパケットキャプチャを許可するかどうかを尋ねる設定ダイアログが表示されます。一般ユーザーによるキャプチャを許可すると、毎回管理者権限で Wireshark を起動せずに利用できます。矢印キーで「Yes」を選択するか、y を押してから Enter キーを押し、選択を確定します。

注意: このプロンプトを見逃した場合や、後から設定を変更したい場合は、次のコマンドで Wireshark を再設定できます。
sudo dpkg-reconfigure wireshark-common
dpkg-reconfigureコマンドは、すでにインストールされているパッケージを再設定するために使用します。
インストールが完了すると、正常にインストールされたことを示す出力が表示されます。Wireshark が正しくインストールされたことを確認するには、バージョンを確認します。ターミナルで次のコマンドを実行します。
wireshark --version
このコマンドを実行すると、Wireshark のバージョン情報が表示されます。次のような出力が表示されます。
Wireshark 3.6.2 (Git v3.6.2 packaged as 3.6.2-2)
Copyright 1998-2022 Gerald Combs <gerald@wireshark.org> and contributors.
License GPLv2+: GNU GPL version 2 or later <https://www.gnu.org/licenses/>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiled (64-bit) with Qt 5.15.3, with libpcap, with GLib 2.72.0, with zlib 1.2.11,
with SMI 0.4.8, with c-ares 1.18.1, with Lua 5.2.4, with GnuTLS 3.7.3 and PKCS #11
support, with Gcrypt 1.9.4, with MIT Kerberos, with MaxMind DB resolver,
with nghttp2 1.43.0, with brotli, with LZ4, with Zstandard, with Snappy,
with libxml2 2.9.13, with libssh 0.9.6, with NGHTTP3 0.7.0, with NGTCP2 0.8.0.
これで Wireshark がシステムにインストールされました。
Wireshark のパケットキャプチャ権限の設定
このステップでは、Wireshark がネットワークパケットをキャプチャするために必要な権限を設定します。初めて操作する場合、なぜこの設定が必要なのか疑問に思うかもしれません。通常、パケットキャプチャには root 権限が必要です。ネットワークパケットには機密情報が含まれる可能性があるため、これはセキュリティ対策の一つです。
しかし、セキュリティ上の観点から、Wireshark を root として実行するのは望ましくありません。Wireshark に脆弱性が存在する場合、root として実行していると、攻撃者にシステム全体へのアクセスを許してしまう可能性があります。そこで、通常のユーザーアカウントでも安全にパケットをキャプチャできるよう、Wireshark を設定します。
まず、システムに wireshark グループが存在するか確認します。wireshark グループは、パケットキャプチャの権限を管理するために使用する専用グループです。このグループの存在を確認するには、getent コマンドを使います。getent は、今回のようなグループデータベースを含む、さまざまなシステムデータベースからエントリを取得するユーティリティです。ターミナルで次のコマンドを実行します。
getent group wireshark
何も出力されない場合は、グループがまだ存在していないため、作成する必要があります。groupadd コマンドを使って wireshark グループを作成します。groupadd は、システムに新しいグループを作成するコマンドです。次のコマンドを実行します。
sudo groupadd wireshark
sudo コマンドにより、groupadd コマンドを管理者権限で実行します。最近 sudo を使用していない場合は、パスワードの入力を求められます。
次に、パケットキャプチャ用バイナリ(dumpcap)に正しい権限を設定します。dumpcap は、Wireshark のために実際のパケットキャプチャを行うコンポーネントです。dumpcap バイナリのグループ所有権を wireshark グループへ変更します。これにより dumpcap が wireshark グループに関連付けられ、このグループを通じて権限を管理できるようになります。次のコマンドを実行します。
sudo chgrp wireshark /usr/bin/dumpcap
chgrp コマンドは、ファイルまたはディレクトリのグループ所有権を変更するために使用します。ここでは、/usr/bin/dumpcap バイナリのグループ所有権を wireshark グループに変更しています。
グループ所有権を変更したら、所有者と wireshark グループだけが実行できるように制限します。次のコマンドを実行します。
sudo chmod 750 /usr/bin/dumpcap
権限 750 により、root 所有者には完全なアクセス権、wireshark グループには読み取りと実行の権限が与えられ、その他のユーザーにはアクセス権が与えられません。また、setuid ビットが有効になっていないことも保証されます。
次に、パケットキャプチャに必要な Linux ケーパビリティだけを dumpcap に付与します。
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
これらのケーパビリティにより、プログラム全体を root として実行しなくても、dumpcap は raw パケットソケットを開き、キャプチャインターフェースを管理できます。ファイル権限と組み合わせることで、実行できるのは root と wireshark グループのメンバーだけになります。
最後に、現在のユーザーを wireshark グループへ追加します。ユーザーを wireshark グループに追加すると、dumpcap バイナリを使用するために必要な権限を取得できます。ユーザーの追加には gpasswd コマンドを使用します。gpasswd は、/etc/group と /etc/gshadow ファイルを管理するためのコマンドです。次のコマンドを実行します。
sudo gpasswd -a $USER wireshark
$USER 変数には、現在のユーザー名が格納されています。ユーザーがグループに追加されたことを示す、次のような出力が表示されます。
Adding user labex to group wireshark
変更を反映するには、ログアウトして再度ログインするか、システムを再起動する必要があります。ただし、この実験では、更新されたグループメンバーシップを持つ新しいシェルを起動する、より簡単な方法を使えます。newgrp コマンドで、wireshark グループを有効にした新しいシェルを起動します。newgrp は、現在のグループ ID を変更するコマンドです。次のコマンドを実行します。
newgrp wireshark
このコマンドを実行すると、完全にログアウトしなくても、wireshark グループが有効な新しいシェルが起動します。
ユーザーが wireshark グループに所属していることを確認します。ユーザーが所属するすべてのグループを一覧表示するには、groups コマンドを使います。次のコマンドを実行します。
groups
グループ一覧に wireshark が含まれていることを確認できます。
wireshark sudo ssl-cert labex public
最後に、制限された権限とキャプチャケーパビリティを確認します。
stat -c '%A %U %G' /usr/bin/dumpcap
-rwxr-x--- root wireshark
getcap /usr/bin/dumpcap
/usr/bin/dumpcap cap_net_admin,cap_net_raw=eip
これでユーザーが wireshark グループに所属し、dumpcap に必要最小限のケーパビリティだけが付与されました。Wireshark を root として実行したり、すべてのローカルユーザーにキャプチャ権限を与えたりせずに、パケットをキャプチャできるようになっています。
Wireshark の起動
このステップでは、Wireshark を起動して、最初に表示されるインターフェースを確認します。Wireshark はネットワークトラフィックを分析するための強力なツールで、グラフィカルユーザーインターフェース(GUI)を備えています。ソフトウェアの操作やネットワークトラフィックの分析には、この GUI を使用します。
まず、LabEx VM のデスクトップ環境にいることを確認します。正しい環境にいる場合は、画面の上部または下部に、アイコンとタスクバーのあるデスクトップが表示されます。ここから Wireshark を使った作業を始めます。
Wireshark を起動する方法は2つあります。都合のよい方法を選んでください。
画面左上にある「Applications」メニューをクリックします。通常は、メニュー内の「Internet」または「Network」カテゴリを開きます。該当するカテゴリで「Wireshark」を探して選択します。グラフィカルインターフェースからプログラムを起動する、簡単な方法です。

もう一つの方法は、ターミナルを使うことです。ターミナルウィンドウを開き、次のコマンドを入力します。
wireshark
このコマンドにより、システムが Wireshark アプリケーションを起動します。コマンドを実行すると Wireshark が起動し、メインウィンドウが画面に表示されます。最初に「Welcome to Wireshark」画面が表示されます。この画面には、ネットワークトラフィックのキャプチャに使用できるネットワークインターフェースの一覧が表示されます。以前に Wireshark を使用してキャプチャファイルを保存している場合は、最近開いたファイルも表示されます。

ウェルカム画面には、いくつかの重要な操作項目があります。
- 一覧からネットワークインターフェースを選択できます。インターフェースを選択すると、Wireshark はそのネットワークから直ちにパケットのキャプチャを開始します。これがネットワークトラフィックの収集を始める方法です。
- 以前保存したキャプチャファイルがある場合は、この画面から開けます。過去に収集したデータを分析するときに便利です。
- この画面から、さまざまなツールや設定にもアクセスできます。これらを使って Wireshark の動作をカスタマイズしたり、より高度な分析を行ったりできます。
少し時間をかけて、この初期画面を確認してみましょう。各ネットワークインターフェースには、検出されたパケットに関する統計情報が表示されています。これらの統計から、どのインターフェースでネットワークトラフィックが活発に流れているかをすぐに把握できます。
続いて、Wireshark の主なインターフェース要素を確認します。
- メニューバー: ウィンドウ上部にあり、Wireshark のすべての機能へアクセスできます。キャプチャファイルの保存、設定の変更、ヘルプの表示など、さまざまな操作を行えます。
- ツールバー: よく使う機能にすばやくアクセスできます。パケットキャプチャの開始・停止、フィルターの適用、ファイルの保存などを、ワンクリックで実行できます。
- インターフェース一覧: システムで利用可能なすべてのネットワークインターフェースが表示されます。パケットをキャプチャするインターフェースをここから選択します。
- 表示フィルターバー: メインウィンドウに表示するパケットを絞り込むためのバーです。IP アドレス、プロトコル、ポート番号などの条件を使って、関心のあるパケットだけを表示できます。このフィルターの使い方は次のステップで詳しく説明します。
今は Wireshark を起動したままにしておいてください。次のステップでは、Wireshark を使ってネットワークトラフィックをキャプチャし、分析します。
ネットワークトラフィックのキャプチャと分析
このステップでは、ネットワークトラフィックをキャプチャし、Wireshark のインターフェースを詳しく確認します。ネットワークパケットを分析する方法を理解することは、ネットワークセキュリティやトラブルシューティングに関心がある人にとって重要です。このセクションを終えると、キャプチャの開始、Wireshark インターフェースの理解、トラフィックの生成、パケットのフィルタリング、パケット詳細の確認、キャプチャの停止ができるようになります。
キャプチャの開始
Wireshark を開くと、ウェルカム画面が表示されます。この画面で、トラフィックをキャプチャするネットワークインターフェースを探します。多くの場合は eth0 インターフェースを使用します。eth0 が利用できない場合は、別のアクティブなインターフェース(例: eth1 や wlan0)を選択してください。
パケットのキャプチャを開始するには、eth0 インターフェースをダブルクリックします。これにより、そのインターフェースで直ちにパケットのキャプチャが開始され、Wireshark のメインキャプチャウィンドウへ移動します。
別の方法として、まずインターフェースを選択し、ツールバーにある青いサメのひれのアイコン「Start capturing packets」をクリックすることもできます。キャプチャを開始すると、選択したインターフェースを流れるデータを Wireshark が収集できるようになるため、ネットワークトラフィック分析の第一歩となります。
Wireshark インターフェースの確認
パケットキャプチャを開始すると、Wireshark のメインインターフェースが表示されます。この画面は、それぞれ異なる役割を持つ3つの主要なペインに分かれています。

パケット一覧ペイン(上部): Wireshark がキャプチャしたすべてのパケットが一覧表示されます。各項目には、次のような基本情報が含まれます。
- パケット番号: キャプチャ内で各パケットを識別する一意の番号。
- 時刻: パケットがキャプチャされた時刻。
- 送信元 IP アドレス: パケットを送信したデバイスの IP アドレス。
- 宛先 IP アドレス: パケットの送信先となるデバイスの IP アドレス。
- プロトコル: パケットで使用されているネットワークプロトコル。TCP、UDP、ICMP など。
- 長さ: パケットのサイズ(バイト単位)。
- 情報: パケットの目的を簡潔に説明する情報。パケットの動作をすばやく理解するのに役立ちます。
パケット詳細ペイン(中央): 上部のペインでパケットを選択すると、選択したパケットの詳細情報が階層形式で表示されます。各セクションの横にある矢印をクリックすると展開でき、パケットの構造や内容をさらに詳しく確認できます。
パケットバイトペイン(下部): パケットの生データが、16進数形式と ASCII 形式の両方で表示されます。パケット詳細ペインでフィールドを選択すると、対応するバイトがこのペインで強調表示されます。これにより、パケットで実際に送信されているデータを確認できます。
ネットワークトラフィックの生成
分析対象となるデータを用意するため、ネットワークトラフィックを生成します。Wireshark を起動したまま、新しいターミナルウィンドウを開きます。ターミナルで ping コマンドを使い、Google のサーバーへ ICMP エコー要求パケットを送信します。
次のコマンドを実行します。
ping -c 5 google.com
注: 無料ユーザーはインターネットに接続できません。Pro プランにアップグレードすると、すべての機能を利用できます。
-c 5 オプションは、ping コマンドに ICMP エコー要求パケットを5個送信するよう指示します。コマンドを実行すると、次のような出力が表示されます。
PING google.com (142.250.180.238) 56(84) bytes of data.
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=1 ttl=118 time=15.6 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=2 ttl=118 time=16.5 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=3 ttl=118 time=15.9 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=4 ttl=118 time=16.2 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=5 ttl=118 time=15.7 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 15.629/15.986/16.520/0.324 ms
次に Wireshark に戻ります。ping コマンドの実行中にキャプチャされた ICMP パケットが表示されているはずです。これらのパケットを使って、さらに分析を進めます。
キャプチャの停止
キャプチャしたパケットの分析が終わったら、キャプチャを停止します。ツールバーにある赤い四角形のアイコン「Stop capturing packets」をクリックしてください。別の方法として、「Capture」メニューを開き、「Stop」を選択することもできます。
これで、Wireshark を使って基本的なネットワークトラフィックのキャプチャと分析が完了しました。これはネットワーク分析とセキュリティの基礎となるスキルです。ここで得た知識を応用すれば、より複雑なネットワーク環境も分析できるようになります。
パケットのフィルタリング
Wireshark は選択したインターフェース上のすべてのトラフィックをキャプチャするため、データ量がすぐに膨大になり、管理が難しくなることがあります。フィルターは、特定の種類のトラフィックに集中するための強力な機能です。

先ほど生成した ICMP ping パケットだけを表示するには、Wireshark ウィンドウ上部のフィルターバーを使用します。フィルターバーに次のフィルター式を入力します。
icmp
フィルター式を入力したら、Enter キーを押すか、フィールドの右側にある Apply ボタン(右矢印アイコン)をクリックします。パケット一覧が更新され、ICMP パケットだけが表示されます。先ほど実行した ping コマンドに対応する「Echo (ping) request」と「Echo (ping) reply」の組み合わせが表示されるはずです。フィルタリングを使うと、関心のあるトラフィックだけを取り出せるため、分析作業を大幅に進めやすくなります。
パケット詳細の確認
ICMP パケットを絞り込めたので、ICMP 要求パケットの一つを詳しく確認してみましょう。パケット一覧から ICMP 要求パケットを一つクリックします。パケット詳細ペインでは、各セクションの横にある矢印をクリックして、さまざまなプロトコル層を展開できます。

- Frame: フレームまたはパケット全体に関する情報を表示します。フレーム長やフレームチェックシーケンスなどが含まれます。
- Ethernet: 送信元 MAC アドレスや宛先 MAC アドレスなど、レイヤー2(データリンク層)の情報が含まれます。
- Internet Protocol Version 4: レイヤー3(ネットワーク層)の情報です。このセクションを展開すると、次のような詳細を確認できます。
- 送信元 IP アドレス: パケットを送信したデバイスの IP アドレス。
- 宛先 IP アドレス: パケットの送信先となるデバイスの IP アドレス。
- Time to Live(TTL): ネットワーク内でパケットが存続できる期間を制限する値。
- プロトコル: IP パケット内で使用されるプロトコル。ここでは ICMP です。
- Internet Control Message Protocol: ICMP プロトコルの情報を表示します。展開すると、次のような ICMP メッセージ固有の詳細を確認できます。
- Type(要求は8、応答は0): パケットが要求か応答かを示します。
- Code: ICMP メッセージに関する追加情報を示します。
- Checksum: ICMP メッセージの整合性を検証するために使用します。
- Identifier: 要求と応答を対応付けるのに役立ちます。
- Sequence number: ICMP パケットの連続番号です。
まとめ
この実験では、強力なネットワーク分析ツールである Wireshark のインストールと設定方法を学びました。root 以外のユーザーが安全にパケットをキャプチャできるよう権限を設定し、アプリケーションを起動して実際のネットワークトラフィックをキャプチャしました。また、インターフェースを確認し、特定の種類のトラフィックにフィルターを適用し、さまざまなプロトコル層にわたるパケットの詳細を調査しました。
ここで身につけたスキルは、ネットワーク分析とトラブルシューティングの確かな基礎になります。Wireshark を使えば、ネットワーク通信の確認、接続問題の診断、プロトコルの動作分析、ネットワークトラフィックに潜むセキュリティ上の懸念の特定ができるようになります。


